Understanding xsd: Auswahl und minOccurs
Ich habe Schwierigkeiten zu verstehen, das Verhalten der folgenden XML-schema:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="rootnode">
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="1" maxOccurs="2">
<xsd:element name="e1" minOccurs="1" maxOccurs="2"/>
<xsd:element name="e2" minOccurs="0" maxOccurs="1"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Erwartete ich mindestens eine Instanz von element <e1>
oder <e2>
erforderlich sein, wie ein Kind <rootnode>
. Obwohl meine Erwartungen, eine leere <rootnode>
wird validiert gegen das schema:
> xmllint --schema test.xsd empty.xml
<?xml version="1.0" encoding="UTF-8"?>
<rootnode>
</rootnode>
empty.xml validates
Wenn ich die minOccurs
- Attribut des Elements e2
auf etwas anderes als "0"
, bekomme ich das Verhalten, das ich ursprünglich erwartet hatte.
- Scheint es, als ob die bloße Abwesenheit von element
<e2>
zählt als ein vorkommen derxsd:choice
in meinem Beispiel. - Wenn dies der Fall ist, dann kommen wie diese unendliche Anzahl von vorkommen nicht gegen die
maxOccurs
Grenze in meinemxsd:choice
?
InformationsquelleAutor der Frage mizo | 2011-03-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Ihnen sagen, Sie können in die Läden zu gehen mindestens einmal und höchstens zweimal, und jedes mal, wenn Sie die Wahl haben, was zu kaufen: kann man äpfel kaufen (entweder ein Apfel oder zwei äpfel), oder Sie können kaufen Orangen (keine Orangen oder orange).
Es ist durchaus möglich, dass Sie wählen, um in die Läden zu gehen, zweimal und jedes mal zu kaufen, keine Orangen. So kommen Sie zurück mit nichts.
InformationsquelleAutor der Antwort Michael Kay
Hier sind die zulässigen Kombinationen
Beachten Sie, dass die Wahl[min=2 max=2] würde produziert haben den gleichen Satz von gültigen Kombinationen.
InformationsquelleAutor der Antwort David W