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