Re: xs:all - why is minOccurs, maxOccurs restricted to "0" or "1" for child xs:element ?

Hi Daniel,

> The problem is that minOccurs and maxOccurs for <xs:element> under
> <xs:all> have to be "0" or "1". It seems that the Schema's
> definition of <xs:group name="allModel"> ... is the part that's
> placing this restriction. Is there some fundamental reason why
> <xs:all> places such restrictions on the child element's minOccurs
> and maxOccurs? Or is there another way to define the schema to have
> the same effect that I'm after?

There's no way of expressing the constraints that you're after on a
content model using XML Schema alone. I'm not sure about the rationale
for this restriction, but I think it's something to do with the
semantics of an xs:all that contains particles with a maxOccurs
greater than one being ambiguous (does it mean that the elements of
the same type have to be next to each other or not? - in your case
not, in other cases it does).

There are two approaches that you could consider:

  - defining the schema to give a canonical ordering, and then having
    a script or stylesheet that reorders the instance documents into
    that canonical ordering prior to validation

  - defining the schema to give a loose definition of the content
    model (e.g. any number in any order) and then add rules using
    Schematron or another schema language to express the limitations
    on their occurrence

If you need help or further explanation on either of those, let us
know.

Cheers,

Jeni

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

Received on Thursday, 28 March 2002 04:07:25 UTC