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 der xsd:choice in meinem Beispiel.
  • Wenn dies der Fall ist, dann kommen wie diese unendliche Anzahl von vorkommen nicht gegen die maxOccurs Grenze in meinem xsd:choice?

InformationsquelleAutor der Frage mizo | 2011-03-07

Schreibe einen Kommentar