Altova Mailing List Archives>Archive Index >xmlschema-dev Archive Home >Recent entries >Thread Prev - RE: Help on XSD for a xml [Thread Next] Re: Help on XSD for a xmlTo: Michael Kay <mike@--------.---> Date: 8/21/2009 12:21:00 PM Michael Kay wrote:
>> The following is my xml for which I require to write the xsd schema
>>
>> <type>
>> <foo/>
>> <bar/>
>> </type>
>>
>> In the above xml for type element the following conditions
>> should be satisfied 1] Atleast one element either foo or bar
>> must be present 2] foo or bar can have a maximum occurance of
>> one 3] Both foo and bar can be present
>>
>>
>
> You don't say whether you want to allow <bar/><foo/>.
>
> In XSD 1.0, you have to spell it out:
>
> <xs:choice>
> <xs:sequence>
> <xs:element name="foo"/>
> <xs:element name="bar" minOccurs="0"/>
> </xs:sequence>
> <xs:sequence>
> <xs:element name="bar" minOccurs="0"/>
> </xs:sequence>
> </xs:choice>
>
> In XSD 1.1 it's simpler to write
>
> <xs:sequence>
> <xs:element name="foo" minOccurs="0"/>
> <xs:element name="bar" minOccurs="0"/>
> </xs:sequence>
> <xs:assert test="exists(*)"/>
>
> Regards,
>
> Michael Kay
> http://www.saxonica.com/
> http://twitter.com/michaelhkay
>
>
The xsd 1.0 works for conditions 2 and 3 but fails for for 1 <type></type>
So I modified the xsd 1.0 as follows
<xs:choice>
<xs:sequence>
<xs:element name="foo"/>
<xs:element name="bar" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="bar" *minOccurs="1"*/>
</xs:sequence>
</xs:choice>
and it is working for all the three conditions.
Thanks.
Regards,
Vijay.
| ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
