Re: Best way to ensure one element out of a set

Use minOccurs="1", if there is supposed to be at least 1 of the 
primitive_condition_* elements.

Also, note that having maxOccurs="unbounded" will allow the 
primitive_condition_* elements to occur more than once (e.g. you might 
have 10 primitive_condition_0 elements).  I'm not sure if that is what 
you intended.

Kevin Braun

On 2/13/2009 12:20 PM, Michael Kay wrote:
> You don't need the named group, you could do the following which is 
> equivalent:
>  
>     <xs:complexType name="conditions" >
>         <xs:sequence>  
>             <xs:choice minOccurs="0" maxOccurs="unbounded">
>                <xs:element name="primitive_condition_0" />
>                <xs:element name="primitive_condition_1" />
>                <xs:element name="primitive_condition_2" />
>             </xs:choice> 
>
>             <xs:element name="complex_condition" 
> type="complex_condition" minOccurs="0" maxOccurs="unbounded" />
>         </xs:sequence>
>     </xs:complexType> 
>    
> Michael Kay
> http://www.saxonica.com/
>
>     ------------------------------------------------------------------------
>     *From:* xmlschema-dev-request@w3.org
>     [mailto:xmlschema-dev-request@w3.org] *On Behalf Of *Klöck, Erwin
>     *Sent:* 13 February 2009 15:41
>     *To:* xmlschema-dev@w3.org
>     *Subject:* Best way to ensure one element out of a set
>
>
>     Hi,
>
>     is this the best way to ensure that one element out of a set is used?
>     I have the following xml:
>
>     --- test.xml begin ---
>     <?xml version="1.0" encoding="ISO-8859-1"?>
>     <top xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>          xsi:noNamespaceSchemaLocation="test.xsd">
>         
>          <conditions>
>
>              <primitive_condition_0 />
>              <primitive_condition_1 />
>              <primitive_condition_2 />   
>
>              <complex_condition />
>          </conditions>
>     </top>
>     --- test.xml end ---
>
>     I want to make sure that at least one of the primitive_condition
>     elements ist used, but I don't care which one.
>     I have come up with the following solution (which works) but are
>     now wondering if this is the best way to do this.
>     My qestion is: Is there a more straight forward way to do this
>     than to have a group of choices?
>
>     --- test.xsd begin ---
>     <?xml version="1.0" encoding="UTF-8"?>
>     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
>         <xs:element name="top" >
>             <xs:complexType>
>                 <xs:sequence>
>                     <xs:element name="conditions" type="conditions" />
>                 </xs:sequence>
>             </xs:complexType>
>         </xs:element>
>        
>         <xs:complexType name="conditions" >
>             <xs:sequence>
>                 <xs:group ref="primitive_conditon" minOccurs="0"
>     maxOccurs="unbounded" />
>                 <xs:element name="complex_condition"
>     type="complex_condition" minOccurs="0" maxOccurs="unbounded" />
>             </xs:sequence>
>         </xs:complexType>
>        
>         <xs:group name="primitive_conditon" >
>             <xs:choice>
>                 <xs:element name="primitive_condition_0" />
>                 <xs:element name="primitive_condition_1" />
>                 <xs:element name="primitive_condition_2" />
>             </xs:choice>
>         </xs:group>
>        
>         <xs:complexType name="complex_condition" />
>     </xs:schema>
>     --- test.xsd end ---
>
>     Thanks for taking an interest.
>
>     Erwin
>

Received on Saturday, 14 February 2009 14:32:44 UTC