Re: Ignore Order while validating XSD

You can try something like this. i.e. use xs:choice to select one
among all the permutations.

<xs:element name="x">
  <xs:complexType>
     <xs:choice>
       <xs:sequence>
           <xs:element name="a" type="xs:string"/>
           <xs:element name="b" type="xs:string" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:sequence>
           <xs:element name="b" type="xs:string" maxOccurs="unbounded"/>
           <xs:element name="a" type="xs:string"/>
       </xs:sequence>
     </xs:choice>
</xs:complexType>

This works for this simple case. But once I make it slightly more
complex as shown below (by introducing another element c), the XSD
validator(XMLSpy 2006) reports that schema is not valid. It says
"content model is non-deterministic. Possible causes: name equality,
overlapping occurence or substitution groups".

<xs:element name="x">
   <xs:complexType>
      <xs:choice>
         <xs:sequence>
             <xs:element name="a" type="xs:string"/>
             <xs:element name="b" type="xs:string" maxOccurs="unbounded"/>
             <xs:element name="c" type="xs:string"/>
         </xs:sequence>
         <xs:sequence>
            <xs:element name="b" type="xs:string" maxOccurs="unbounded"/>
            <xs:element name="a" type="xs:string"/>
            <xs:element name="c" type="xs:string"/>
         </xs:sequence>
         <xs:sequence>
            <xs:element name="a" type="xs:string"/>
            <xs:element name="c" type="xs:string"/>
            <xs:element name="b" type="xs:string" maxOccurs="unbounded"/>
         </xs:sequence>
         <xs:sequence>
            <xs:element name="c" type="xs:string"/>
            <xs:element name="a" type="xs:string"/>
            <xs:element name="b" type="xs:string" maxOccurs="unbounded"/>
         </xs:sequence>
         <xs:sequence>
            <xs:element name="b" type="xs:string" maxOccurs="unbounded"/>
            <xs:element name="c" type="xs:string"/>
            <xs:element name="a" type="xs:string"/>
         </xs:sequence>
         <xs:sequence>
            <xs:element name="c" type="xs:string"/>
            <xs:element name="b" type="xs:string" maxOccurs="unbounded"/>
            <xs:element name="a" type="xs:string"/>
          </xs:sequence>
       </xs:choice>
  </xs:complexType>
</xs:element>

I am curious, is the validation happening correctly(for the case a, b,
c), or is this bug in the validator?

Regards,
Mukul


On 2/18/06, Ramkumar Menon <ramkumar.menon@gmail.com> wrote:
> Hi,
>
> is it possible to ignore the document order while using schema validator to
> validate an XSD ?
> If not, is there an alternative to the following issue ?
> I have an element that has a set of elements witihn it, one of them being
> maxOccurs="unbounded". Since I wanted to use the "xsd:all" group so that I
> can assume unordered child nodes, the node with maxOccurs="unbounded"
> prevents me from making such a definition.
>
> Any help will be appreciated.
> pls reply direcly to my email id, since I am not on this mailing list.
>
> rgds,
> Ram
>
> --
> Shift to the left, shift to the right!
> Pop up, push down, byte, byte, byte!
>
> -Ramkumar Menon
> A typical Macroprocessor

Received on Sunday, 19 February 2006 10:06:19 UTC