Moin,
ich möchte aussagenlogisch darstellen
(a) OR (b) OR (a AND b),
also der entsprechende Datenzweig darf nicht leer sein im XML: es muss entweder ein a oder ein b enthalten, aber es kann auch beide (a und b) enthalten. Dabei ist es egal, ob es <a/> <b/> oder <b/> <a/> ist. Notfalls kann ich hier auch mit einer geforderten Reigenfolge leben.
Im ersten Fall: entweder a evtl. gefolgt von b oder b
Im zweiten Fall: entweder a evtl. gefolgt von b oder b evtl. gefolgt von a
Entweder-oder: choice
evtl.: min-occurs 0, max-occurs 1
gefolgt von: sequence.also: choice( sequence(a, b[min:0, max:1]), b)
bzw. choice( sequence(a, b[min:0, max:1]), sequence(b, a[min:0, max:1]))
In beiden Fällen kann das Konstrukt nicht validiert werden, wenn im choice ein Element zweimal auftritt.
Ich hatte eine Lösung, die so aussah:
<xs:choice>
<xs:element ref="a"/>
<xs:element ref="b"/>
<xs:sequence>
<xs:element ref="a"/>
<xs:element ref="b"/>
</xs:sequence>
</xs:choice>
Leider lässt sich die auch nicht validieren, mit dem gleichen Problem wie bei Deiner Lösung: wg. des mehrfachen Auftretens von a und b gibt es offensichtlich Mehrdeutigkeiten - was mir nicht klar ist, weil das choice doch nur EIN Element zulässt. (Abgesehen davon ist mir auch nicht klar, warum es nicht mehrere Instanzen von z.B. a geben sollte - aber ich vermute, ich habe da ein Konzept in XML / XSD noch nicht richtig begriffen ...
thoin