- From: Mason Lee <mgl@netspace.org>
- Date: Mon, 3 Dec 2001 18:23:17 -0500 (EST)
- To: "Jeni Tennison" <jeni@jenitennison.com>, <xmlschema-dev@w3.org>
Hi Jeni,
Thanks for your reply to my message "Re: Order of elements in a
complex-type", below; it was helpful for me to see that example. You
answered the question I asked, for sure, but I think my question was badly
formed in that it allowed for what looks like a special case answer,
including only one element of cardinality=1.
Is there a more general way to express varying cardinalities of unordered
elements in a complex-type? I guess I'm looking for a simple construct like
"all" that allows for >1 occurences.
Not being used to functional programming and finding XML Schema somewhat
elusive, I just have to ask again then, a slightly different question:
How might I use XML Schema to define a complex-type of 1 Element_A, 1
Element_B, 0 or 1 Element_C, and any number of Element_D, all appearing in
any order?
Thanks in advance. I'm not sure why this seemingly simple situation
doesn't appear in any of my books.
Regards,
Mason
-----Original Message-----
From: Jeni Tennison [mailto:jeni@jenitennison.com]
Sent: Saturday, December 01, 2001 5:39 AM
Subject: Re: Order of elements in a complex-type
Hi Mason,
> Hi all! I saw Erik Beijnoff's good answer to the above question in a
> recent thread. I wonder further, however, how could this complex
> type be defined such that the elements "TextBox" and "TextArea" may
> appear any number of times, but the element "Header" must appear
> only once, and while retaining the interesting characteristic that
> any of these three clild elements may appear in any order. Any
> ideas?
Assuming that you don't care if the TextBox and TextArea elements are
intermingled, and there's no minimum number of occurrences of TextBox
and TextArea, you could use the following:
<xs:complexType name="FormType">
<xs:sequence>
<xs:group ref="TextBoxOrTextArea" minOccurs="0"
maxOccurs="unbounded" />
<xs:element name="Header" type="HeaderType" />
<xs:group ref="TextBoxOrTextArea" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:group name="TextBoxOrTextArea">
<xs:choice>
<xs:element name="TextBox" type="TextBoxType" />
<xs:element name="TextArea" type="TextAreaType" />
</xs:choice>
</xs:group>
(Using a group so that you only have to declare TextBox and TextArea
once.)
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
Received on Monday, 3 December 2001 18:39:15 UTC