[DFDL-WG] How to express semantics of unordered groups

Mike Beckerle beckerle at us.ibm.com
Wed Nov 1 10:49:33 CST 2006


I'd like to consider this concept as a way to express the semantics in 
DFDL of unordered groups. The approach is to use source language 
transformation.

Here's an example of an unordered sequence of 2 elements:

  <xs:element name="n1">
      <xs:complexType>
          <xs:sequence dfdl:unordered='true' separator=",">
              <xs:element name="s1" type="string" dfdl:initiator="s1:" />
              <xs:element name="s2" type="int" dfdl:initiator="s2:"/>
          </xs:sequence>
      </xs:complexType>
  </xs:element>

We explain what this means by indicating that it behaves like this 
rewrite:

  <xs:element name="n1">
        <xs:annotation><xs:appinfo source=....>
             <dfdl:format validation="cardinality(./s1) <= 1 & 
cardinality(./s2) <= 1"/>
       </xs:appinfo></xs:annotation>
        <xs:complexType>
            <xs:sequence' separator=",">
                 <xs:choice>
                   <xs:sequence>
                       <xs:element name="s1Initiator" type="xs:string" 
fixed="s1:"/>
                       <xs:element name="s1" type="xs:string" />
                   </xs:sequence>
                   <xs:sequence>
                         <xs:element name="s2Initiator" type="xs:string" 
fixed="s2:"/>
                         <xs:element name="s2" type="xs:int" />
                     </xs:sequence>
             <xs:sequence /> <!-- empty -->
                 </xs:choice>
                 <xs:choice>
                   <xs:sequence>
                       <xs:element name="s1Initiator" type="xs:string" 
fixed="s1:"/>
                       <xs:element name="s1" type="xs:string" />
                   </xs:sequence>
                   <xs:sequence>
                         <xs:element name="s2Initiator" type="xs:string" 
fixed="s2:"/>
                         <xs:element name="s2" type="xs:int" />
                     </xs:sequence>
             <xs:sequence /> <!-- empty -->
                 </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

The above is probably missing a DFDL annotation indicating that the 
discrimination of the choice is done using the s1Initiator and s2Initiator 
fields based on their parsing correctly w.r.t. their fixed value facet.

In XSD, unordered sequences (aka "all" groups) also have the semantics 
that each element can occur only zero or 1 time. This is modeled by the 
additional validation constraint you find at the top of the rewritten 
form. This isn't the only choice for semantics of unordered groups of 
course, but it is one coherent position on it. 

I think it is very attractive to reduce the issue of initiator-based 
unordered sequences to choice and discrimination, since we need those 
constructs no matter what.

Comments?

...mikeb


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.ogf.org/pipermail/dfdl-wg/attachments/20061101/d8a26f66/attachment.htm 


More information about the dfdl-wg mailing list