Thoin: XSD: Uneindeutigkeit bei (a OR b OR (a AND b))?

Beitrag lesen

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