- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Wed, 15 Oct 2003 10:05:24 +0100
- To: "Svend Bent Nielsen" <jawsoap@hotmail.com>
- Cc: xmlschema-dev@w3.org
Hi Svend,
> I have an element "Section" which can contain other "Section" as well as
> "Comment".
> Section
> | \
> Comment Section
> | \
> Section Comment
>
> That is, Comment is a leaf node and can not ever contain other than
> text (simpletype).
>
> How would I make a substitutionGroup that explains this?
> Or is the below method the right way of doing this?
>
> <xs:element name="Section">
> <xs:complextype>
> <xs:choice>
> <xs:element ref="Section" minOccurs="0" maxOccurs="unbounded"/>
> <xs:element name="Comment" type="xs:string" minOccurs="0"
> maxOccurs="unbounded"/>
> </xs:choice>
> </xs:complextype>
> </xs:element>
This is probably roughly the right method to do this: substitution
groups are for when you want a set of elements with similar content to
be interchangeable. Note that you want the minOccurs/maxOccurs
attributes to appear on the <xs:choice> rather than on the element
declarations (to say that there can be any number of <Section> and
<Comment> children, in any order):
<xs:element name="Section">
<xs:complextype>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="Section"/>
<xs:element name="Comment" type="xs:string"/>
</xs:choice>
</xs:complextype>
</xs:element>
> What if "Section" can also contain "_SmallGroup" (from earlier)? How
> can I write that?
Something like:
<xs:element name="Section">
<xs:complextype>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="Section"/>
<xs:element ref="_SmallGroup"/>
<xs:element name="Comment" type="xs:string"/>
</xs:choice>
</xs:complextype>
</xs:element>
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
Received on Wednesday, 15 October 2003 05:05:38 UTC