clarify array expressions

Some folks are trying to create a DFDL model for IMF (internet message format ... basically email) There is this header structure which really wants unordered sequences. Since we don't have those yet I told them to use an array of choice like this: <xs:element name="hdrArray" minOccurs="1" maxOccurs="25"> <xs:complexType> <xs:choice> <xs:element ref="TO_HDR"/> <xs:element ref="FROM_HDR" /> </xs:choice> ... But then there are these contraints, like there should be only one FROM address, but there can be several TO addresses. So, one might want to write a DFDL expression using an XPath-like query path in it. E.g., <xs:assert>{ dfdl:occursCount( hdrArray/FROM_HDR ) eq 1 }</xs:assert> Here's the question: Is the DFDL expression in this assert legal? I advised them that no, it is not, because hdrArray is an array and isn't being indexed, while FROM_HDR is not an array, but is being used as the argument to dfdl:occursCount. I think DFDL's expression language is simply not powerful enough to express these constraints. I'm just looking for affirmation or discussion if there is more to say here.

You are correct on the first point - array steps must be indexed. I am happy to allow dfdl:occursCount() to work with non-array elements, so it could return 0 or 1 for an optional element. That's more elegant than casting the result of fn:exists() if you want an integer result. It is also consistent in that you can use dfdl:occursCount() wherever you have used dfdl:occursCountKind property. Regards Steve Hanson Architect, Data Format Description Language (DFDL) Co-Chair, OGF DFDL Working Group IBM SWG, Hursley, UK smh@uk.ibm.com tel:+44-1962-815848 From: Mike Beckerle <mbeckerle.dfdl@gmail.com> To: dfdl-wg@ogf.org, Date: 14/02/2013 21:42 Subject: [DFDL-WG] clarify array expressions Sent by: dfdl-wg-bounces@ogf.org Some folks are trying to create a DFDL model for IMF (internet message format ... basically email) There is this header structure which really wants unordered sequences. Since we don't have those yet I told them to use an array of choice like this: <xs:element name="hdrArray" minOccurs="1" maxOccurs="25"> <xs:complexType> <xs:choice> <xs:element ref="TO_HDR"/> <xs:element ref="FROM_HDR" /> </xs:choice> ... But then there are these contraints, like there should be only one FROM address, but there can be several TO addresses. So, one might want to write a DFDL expression using an XPath-like query path in it. E.g., <xs:assert>{ dfdl:occursCount( hdrArray/FROM_HDR ) eq 1 }</xs:assert> Here's the question: Is the DFDL expression in this assert legal? I advised them that no, it is not, because hdrArray is an array and isn't being indexed, while FROM_HDR is not an array, but is being used as the argument to dfdl:occursCount. I think DFDL's expression language is simply not powerful enough to express these constraints. I'm just looking for affirmation or discussion if there is more to say here. -- dfdl-wg mailing list dfdl-wg@ogf.org https://www.ogf.org/mailman/listinfo/dfdl-wg Unless stated otherwise above: IBM United Kingdom Limited - Registered in England and Wales with number 741598. Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
participants (2)
-
Mike Beckerle
-
Steve Hanson