Re: XSD for 'at least one of'

At 2011-01-06 11:24 -0500, George Francis wrote:
>Apologies if this is a PAQ, I can't find the answer.
>How do I specify in my XSD that an element must contain at least one 
>of it's child elements?

By mandating a choice of mandatory children, not optional children.

>  I've tried the following:
>
><xs:complexType name="options">
>
><xs:choice minOccurs="1" maxOccurs="unbounded">
>
><xs:element name='month' type="month" minOccurs="0" />
>
><xs:element name='year' type="year" minOccurs="0" />
>
><xs:element name='day' type="day" minOccurs="0" />
>
></xs:choice>
>
></xs:complexType>
>
>but it still doesn't seem to care if 'options' is empty.

Right, because you've allowed any of the choices to be empty.  If you 
make all of the choices mandatory, then the choice cannot be an empty 
choice and the element will not be empty of children.

<xs:complexType name="options">
  <xs:choice minOccurs="1" maxOccurs="unbounded">
   <xs:element name='month' type="month" />
   <xs:element name='year' type="year" />
   <xs:element name='day' type="day" />
  </xs:choice>
</xs:complexType>

I hope this helps.

. . . . . . . . . Ken



--
Contact us for world-wide XML consulting & instructor-led training
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/x/
G. Ken Holman                 mailto:gkholman@CraneSoftwrights.com
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal

Received on Thursday, 6 January 2011 18:13:48 UTC