- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Fri, 23 Jul 2004 16:42:36 +0100
- To: "Simon Kampa" <simon.kampa@stasys.co.uk>
- Cc: xmlschema-dev@w3.org
Hi Simon,
> Xerces 2.5.2 complains at my schema when a sequence (directly under
> a group declaration) has cardinality values (see Listing 1). To me
> this appears to be a bug within the schema parser. What do you lot
> think?
Xerces is correct. The particles directly within a <xs:group>
definition must not have occurrence constraints on them: those should
instead be specified on the *reference* to the group.
(Don't ask me why this is so, it just is.)
> As a work-around, I simply added a choice around the sequence
> (Listing 2) and it works.
Yeah, crazy innit. The correct "workaround" is to have:
<xs:group name="MenuGroup">
<xs:sequence>
<xs:element ref="Menu" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Separator" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Action" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
and then, whenever you use the group to have:
<xs:group ref="MenuGroup" minOccurs="0" maxOccurs="unbounded" />
BTW, the usual pattern for a content model in which any of the
elements can appear, in any order, any number of times, would be to
use a <xs:choice> rather than a <xs:sequence> and remove the
occurrence constraints from the individual element particles, as in:
<xs:group name="MenuGroup">
<xs:choice>
<xs:element ref="Menu" />
<xs:element ref="Separator" />
<xs:element ref="Action" />
</xs:choice>
</xs:group>
In other words, rather than having:
(Menu*, Separator*, Action*)*
you'd have:
(Menu | Separator | Action)*
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
Received on Friday, 23 July 2004 11:42:44 UTC