Re: mixing orderer and unordered elements

Torsten Curdt <tcurdt@dff.st> wrote:
--------------------------------------------------------------------------
 I am trying to have a mixture of ordered and unordered elements:

<root>
  <seq1/>
  <seq2/>
  <unordered2/>
  <unordered1/>
</root>
-------------------------------------------------------------------------

For these kind of complex requirements, it may be easier to layer
rather than attempt baroque content models:

  <xs:element name="root">
    <xs:complexType>
        <xs:all>
          <!-- All in the family -->
          <xs:element name="seq1"/>
          <xs:element name="seq2"/>
          <xs:element name="unordered1"/>
          <xs:element name="unordered2"/>
        </xs:all>
    </xs:complexType>
    <xs:annotation>
        <xs:appinfo>
            <pattern xmlns="http://www.ascc.net/xml/schematron">
                   <rule context="root">
                       <!-- Who's on first -->
                        <assert test="*[1][self::seq1]" />
                        <assert test="*[2][self::seq2]" />
                    </rule>
            </pattern>
        </xs:appinfo>
    </xs:annotation>
  </xs:element>
</xs:schema>

with the proviso that ifever  "root" is used as a local element name
with a different content model you will need to factor that in
(such as   <rule context="root[not(parent::fred)]">  
which breaks encapsulation.


Cheers
Rick Jelliffe

Received on Wednesday, 12 June 2002 14:31:16 UTC