Re: Ignore Order while validating XSD

On 24 Jan 2009, at 12:51 , Eduardo Oliveira wrote:

> Thereīs much time since the last message, but I have a problem with  
> the given solution.
> Since I use the model below, I canīt force the element to be  
> declared, or in other words, the minOccurs does not run.
>
> The piece of code given from "George Cristian Bina":
>
>   <xs:complexType>
>     <xs:choice maxOccurs="unbounded">
>       <xs:element name="a"/>
>       <xs:element name="b"/>
>       <xs:element name="c"/>
>       <xs:element name="x"/>
>     </xs:choice>
>   </xs:complexType>
>
> Suppose I wish the  <xs:element name="a"/> to always be received,  
> so I change the code to the code below, but the minOccurs does not  
> run.
>
>   <xs:complexType>
>     <xs:choice maxOccurs="unbounded">
>       <xs:element name="a" minOccurs="1"/>
>       <xs:element name="b"/>
>       <xs:element name="c"/>
>       <xs:element name="x"/>
>     </xs:choice>
>   </xs:complexType>
>
> Does anyone has an idea how can I solve this?

You want a sequence of one or more elements, which must contain at least
one 'a', and may contain any number of b, c, or x elements?

In a conventional regular expression, you might write

   (b|c|x)*, a, (a|b|c|x)*

and you can do the same in XSD 1.0:

  <xsd:complexType name="oliveira">
   <xsd:sequence>
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
     <xsd:element ref="my:b" />
     <xsd:element ref="my:c" />
     <xsd:element ref="my:x" />
    </xsd:choice>
    <xsd:element ref="my:a" />
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
     <xsd:element ref="my:a" />
     <xsd:element ref="my:b" />
     <xsd:element ref="my:c" />
     <xsd:element ref="my:x" />
    </xsd:choice>
   </xsd:sequence>
  </xsd:complexType>

I hope this helps.

--  
C. M. Sperberg-McQueen
http://cmsmcq.com/mib

Received on Monday, 26 January 2009 00:38:07 UTC