Definition von Nil (Null)-Werten

(Auszug aus "XML Schema" von Eric van der Vlist)

Diese Möglichkeit wurde in W3C XML Schema eingeführt, um den Begriff des »null«-Werts abzubilden, der eine der zentralen Erfordernisse des relationalen Modells in der Definition von Codd ist. Das W3C trifft eine feine Unterscheidung zwischen einem leeren Element und einem Element, das den Wert »null« hat. (Das W3C verwendet nicht den bei Datenbanken üblichen, aber – besonders im Deutschen – verwirrenden Namen »null«, der nichts mit der Zahl 0 zu tun hat, sondern das Wort »nil« für das xsi-Attribut, das diese Information vermittelt.) Die beiden Begriffe werden als unterschiedlich, aber verwandt betrachtet (ein leeres Element ist nicht immer nil, aber ein nil-Element muß leer sein).

Die Tatsache, daß ein Element nil sein kann, wird in der Elementdefinition festgelegt. Sie schließt alle weiteren Inhaltstypdefinitionen kurz. Die Festlegung kann bei einfachen Typen wie auch bei komplexen Typen einfachen oder komplexen Inhalts verwendet werden; sie kann sogar verwendet werden, wenn das Inhaltsmodell leere Inhalte ausschließt. In diesem Fall hat der »nil-bare« Charakter des Elements Vorrang vor dem Inhaltsmodell, und leere Inhalte werden in diesem Fall akzeptiert, wenn sie als nil markiert sind. Auch dieser Mechanismus gilt nicht für Attribute, die somit nicht den Wert nil annehmen können, denn die Tatsache, daß ein Wert nil ist, wird seinerseits durch ein Attribut ausgedrückt.

Ein letzter Punkt, bevor wir uns einige Beispiele ansehen, ist, daß Attribute nicht davon betroffen sind, ob ein Element nil ist. Sie sind vielmehr auch in diesem Fall unverändert erlaubt oder sogar vorgeschrieben, wenn sie für das Element entsprechend definiert sind.

Die Konstruktion ist ziemlich einfach zu verwenden. Wenn wir beispielsweise nil-Werte für den Autor eines Buchs zulassen wollen, setzen wir einfach das Attribut nillable in der Elementdefinition (nillable-Attribute können in einer Element-Referenz nicht gesetzt werden):

<xs:element name="author" nillable="true">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="name"/>
         <xs:element ref="born"/>
         <xs:element ref="dead" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute ref="id"/>
   </xs:complexType>
</xs:element>

Diese Deklaration erlaubt es uns, nil-Werte in Instanzdokumenten zu deklarieren:

<author xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

Dies ist möglich, obwohl das Element author laut Deklaration keinen leeren Inhalt zuläßt.

Der Unterschied zwischen leeren und nil-Werten ist haardünn. Unter der Annahme, daß das Autorenelement als nillable definiert ist und daß sein Inhaltsmodell leere Inhalte zuläßt, besteht der Unterschied zwischen

<author xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

und

<author/>

nur in einem xsi:nil-Flag im PSVI.

   

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML Schema bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2003 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML Schema" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de