Der Umgang mit Default- und Fixed-Werten in XML Schema-Defintionen führte in verschiedenen Kontexten zu Fragen und Unklarheiten, die mit den folgenden Übersichten und Beispielen beseitigt werden sollen. Die folgenden Aussagen basieren auf den entsprechenden W3C-Regeln.
Regeln für XML-Elemente
Multiplizität | fixed-Wert | default-Wert | Auswirkung |
---|---|---|---|
1..1 | - | - | Das Element muss einmal auftreten. Es darf ein beliebiger Wert angegeben sein. |
1..1 | 37 | - | Das Element muss einmal auftreten. Es muss der Wert 37 angegeben sein. |
2..n | 37 | - | Das Element muss mindestens zweimal auftreten. Es muss in jedem Fall der Wert 37 angegeben sein. |
0..1 | - | - | Das Element muss einmal oder keinmal auftreten. Es darf ein beliebiger Wert angegeben sein. |
0..1 | 37 | - | Das Element muss einmal oder keinmal auftreten. Wenn es nicht auftritt, ist kein Wert für das Element gegeben. Wenn es ohne Angabe eines Wertes auftritt, hat es den Wert 37. Wenn ein Wert angegeben ist muss es der Wert 37 sein. Siehe hierzu Beispiel A. |
0..1 | - | 37 | Das Element muss einmal oder keinmal auftreten. Wenn es nicht auftritt, ist kein Wert für das Element gegeben. Wenn es ohne Angabe eines Wertes auftritt, hat es den Wert 37. Wenn ein Wert angegeben ist hat es eben diesen Wert. Siehe hierzu Beispiel B. |
0..2 | - | 37 | Das Element muss zweimal, einmal oder keinmal auftreten. Wenn es nicht auftritt, ist kein Wert für das Element gegeben. Wenn es ohne Angabe eines Wertes auftritt, hat es den Wert 37. Wenn ein Wert angegeben ist hat es eben diesen Wert. Siehe hierzu Beispiel C. |
0..0 | - | - | Das Element darf nicht auftreten. |
Regeln für XML-Attribute
Multiplizität | fixed-Wert | default-Wert | Auswirkung |
---|---|---|---|
required | - | - | Das Attribut muss einmal auftreten. Es darf ein beliebiger Wert angegeben sein. |
required | 37 | - | Das Attribut muss einmal auftreten. Es muss der Wert 37 angegeben sein. |
optional | - | - | Das Attribut muss einmal oder keinmal auftreten. Es darf ein beliebiger Wert angegeben sein. |
optional | 37 | - | Das Attribut muss einmal oder keinmal auftreten. Wenn es nicht auftritt, hat es den Wert 37. (Achtung: Unterschied zu einem Element!) Es darf nicht ohne Angabe eines Wertes auftreten. (Achtung: Unterschied zu einem Element!) Wenn ein Wert angegeben ist muss es der Wert 37 sein. Siehe hierzu Beispiel D. |
optional | - | 37 | Das Element muss einmal oder keinmal auftreten. Wenn es nicht auftritt, hat es den Wert 37. (Achtung: Unterschied zu einem Element!) Wenn ein Wert angegeben ist hat es eben diesen Wert. |
Beispiele
Beispiel A
Ausgangssituation
Element x hat die Multiplizität 0..1 und den fixed-Wert 37:
<xs:element name="globalesElement">
<xs:complexType>
<xs:sequence>
<xs:element name="x" minOccurs="0" maxOccurs="1" fixed="37"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Schema-Instanzen
Fall A: Das Element tritt nicht auf
<globalesElement/>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass für Element x kein Wert vorliegt.
Fall B: Das Element tritt ohne Angabe eines Wertes auf
<globalesElement>
<x/>
</globalesElement>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass für Element x der Wert 37 vorliegt.
Fall C: Das Element tritt mit Angabe Wertes 37 auf
<globalesElement>
<x>37</x>
</globalesElement>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass für Element x der Wert 37 vorliegt.
Fall D: Das Element tritt mit Angabe eines Wertes ungleich 37 auf
<globalesElement>
<x>10</x>
</globalesElement>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass diese nicht valide ist.
Beispiel B
Ausgangssituation
Element x hat die Multiplizität 0..1 und den default-Wert 37:
<xs:element name="globalesElement">
<xs:complexType>
<xs:sequence>
<xs:element name="x" minOccurs="0" maxOccurs="1" default="37"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Schema-Instanzen
Fall A: Das Element tritt nicht auf
<globalesElement/>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass für Element x kein Wert vorliegt.
Fall B: Das Element tritt ohne Angabe eines Wertes auf
<globalesElement>
<x/>
</globalesElement>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass für Element x der Wert 37 vorliegt.
Fall C: Das Element tritt mit Angabe Wertes 37 auf
<globalesElement>
<x>37</x>
</globalesElement>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass für Element x der Wert 37 vorliegt.
Fall D: Das Element tritt mit Angabe eines Wertes ungleich 37 auf
<globalesElement>
<x>10</x>
</globalesElement>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass der Wert 10 vorliegt.
Beispiel C
Ausgangssituation
Element x hat die Multiplizität 0..2 und den default-Wert 37:
<xs:element name="globalesElement">
<xs:complexType>
<xs:sequence>
<xs:element name="x" minOccurs="0" maxOccurs="2" default="37"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Schema-Instanzen
<globalesElement>
<x/>
<x>10</x>
</globalesElement>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass für Element x die Werte 37 und 10 vorliegen.
Beispiel D
Ausgangssituation
Attribut x ist optional und hat den fixed-Wert 37:
<xs:element name="globalesElement">
<xs:complexType>
<xs:attribute name="x" use="optional" fixed="37"/>
</xs:complexType>
</xs:element>
Schema-Instanzen
Fall A: Das Attribut tritt nicht auf
<globalesElement/>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass für Attribut x kein Wert vorliegt.
Fall B: Das Attribut tritt ohne Angabe eines Wertes auf
<globalesElement x=""/>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass sie nicht valide ist.
Fall C: Das Attribut tritt mit Angabe Wertes 37 auf
<globalesElement x="37"/>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass für Element x der Wert 37 vorliegt.
Fall D: Das Attribut tritt mit Angabe eines Wertes ungleich 37 auf
<globalesElement x="10"/>
Bedeutung: Bei der Auswertung der Instanz wird festgestellt, dass diese nicht valide ist.
Weitere Hinweise
Die seitens des W3C veröffentlichte deutsche Übersetzung der Regeln zu Default- und Fixed-Werten war - zumindest in früheren Fassungen - fehlerbehaftet.
Bei der Nutzung von XML-Parsern ist darauf zu achten, dass Default-Werte nur unter bestimmten Bedingungen instanziiert werden und damit zur weiteren Verwendung zur Verfügung stehen.