Re: XSD for 'at least one of'

"G. Ken Holman" <[email protected]>
Newsgroups gmane.text.xml.schema.devel
Message-ID <[email protected]>
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:[email protected]
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.