XSD: Order irrelevant but choice required


Stephan Mann


I'm relatively new to XSD but I did not think that my requirement would
prove to be such a problem. But after two hours of trying and searching
I'm now thoroughly confused. Maybe someone could point me into the right

Requirement: There are three elements. One is optional, while the other
two are exclusively to each other. One of the latter might appear
multiple times.

Therefore, I wrote the following XSD, which is working perfectly:

<xs:element name="Root">
<xs:element name="One" type="xs:string" maxOccurs="unbounded" />
<xs:element name="Two" type="xs:string" />
<xs:element name="Description" type="xs:string" minOccurs="0" />

It allows <One> multiple times OR <Two> once and <Description> is
optional. The problem I can't get my head around is how to achieve that
the order of the choice group and the description tag is irrelevant.
<Description> should be allowed to occur first.

All my attempts to do that have failed. I'm not allowed to use <all>
instead of <sequence>, because <all> is only allowed to contain
elements. And if I replace the <sequence> with an

<xs:choice maxOccurs="unbounded">

the order is no longer relevant, but also an *empty* XML document is now
valid (which had me surprised for a moment, but I think I understand it

I'm completely in the dark on how to achieve my additional requirement.
Specifying all possible permutations in a choice of sequences is
obviously no solution, since I need a lot more elements in the final
XSD. It seems simple to me but I can't get it to work, so any help would
be greatly appreciated.

tia, stephan



Joe Kesselman

Is it really a requirement that your schema allow what amounts to a
covert channel for the export of undocumented information?

Well phrased, Michael. Mind if I archive that answer for possible
re-quoting in the future?

Sandard reminder: Schema isn't intended to do everything possible to
check your document. Sometimes the simplest answer really is to leave
the schema a bit looser than would be ideal and have application code
impose the additional constraints.

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question