RE: allowing zero to unbounded elements in any order?

Jeni,

I had a case where I needed to do this as well.  Your solution is
intriguing, but I'm confused.  What if I wanted a list similar to : 

	<A>
		<B/>
		<C/>
		<D/>
		<E/>
		<C/>
	</A>

Where I could have multiple copies of <C/>, but I wanted to allow B, C, D,
and E to be any order.  After a few days of trying to accomplish that, I
gave up, and used <xs:sequence> instead, and force my users to live with
order.

Michael Scott
KLA-Tencor, Defect Yield Solutions Division

 -----Original Message-----
From: 	Jeni Tennison [mailto:jeni@jenitennison.com] 
Sent:	Friday, March 14, 2003 4:30 AM
To:	Sam Carleton
Cc:	xmlschema-dev
Subject:	Re: allowing zero to unbounded elements in any order?


Hi Sam,

> I am trying to define a element that contains text and can
> optionally contain one or more <b> elements and/or <i> elements in
> any order. How do I define that? This is what I have so far:
>
>   <xs:complexType name="stringType" mixed="true">
>     <xs:all minOccurs="0">
>       <xs:element ref="b"/>
>       <xs:element ref="i"/>
>     </xs:all>
>   </xs:complexType>
>   <xs:element name="i" type="xs:string"/>
>   <xs:element name="b" type="xs:string"/>

You can't use <xs:all> for repeatable elements, but a repeating
<xs:choice> works nicely. Try:

  <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element ref="b" />
    <xs:element ref="i" />
  </xs:choice>

for zero to unbounded (as per the subject line of your email) or:

  <xs:choice maxOccurs="unbounded">
    <xs:element ref="b" />
    <xs:element ref="i" />
  </xs:choice>

for one to unbounded (as per the text of your email).

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

Received on Friday, 14 March 2003 13:06:06 UTC