W3C home > Mailing lists > Public > xmlschema-dev@w3.org > February 2006

Re: Ignore Order while validating XSD

From: Mukul Gandhi <gandhi.mukul@gmail.com>
Date: Sun, 19 Feb 2006 13:08:40 +0530
Message-ID: <7870f82e0602182338y31c9e523r9682a5473be1e9b5@mail.gmail.com>
To: "Ramkumar Menon" <ramkumar.menon@gmail.com>
Cc: xmlschema-dev@w3.org

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 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:14:53 GMT