Deterministische und nicht deterministische Schemas
Ein deterministisches Schema ist eines, das nicht mehrdeutig ist. Dadurch kann der vom Schemaobjektmodell (SOM) verwendete Parser die Reihenfolge bestimmen, in der Elemente auftreten sollen, um für ein XML-Dokument gültig zu sein. Ein XML-Schema kann auch mehrdeutig, d. h. nicht deterministisch sein. Ein Schema wird als nicht deterministisch betrachtet, wenn es dem Parser nicht möglich ist, die Struktur klar zu bestimmen, die mit dem Schema überprüft werden soll. Beim Versuch, ein nicht deterministisches Schema zu überprüfen, generiert der vom SOM verwendete Parser einen Fehler.
Deterministisches Schema
Bei einem deterministischen Schema kann der Parser eine gültige Reihenfolge der Elemente festlegen, die in einem auf den Informationen des Schemas basierenden Instanzdokument auftreten sollen.
Im folgenden Beispiel wird ein deterministisches XML-Schema gezeigt. Es legt fest, dass ein gültiges Dokument ein Element root
beihalten soll, dessen Inhalt entweder ein Element apple
, gefolgt von einem weiteren Element berry
oder ein Element coffee
, gefolgt von einem weiteren Element dairy
ist.
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root" type="rootTypes" />
<xs:complexType name="myKitchen">
<xs:choice>
<xs:sequence>
<xs:element name="apple"/>
<xs:element name="berry"/>
</xs:sequence>
<xs:sequence>
<xs:element name="coffee"/>
<xs:element name="dairy"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:schema>
Durch das oben angegebene Schema ist der Parser in der Lage, während der Verarbeitung eines Instanzdokuments der Schemalogik zu folgen. Diese legt fest, dass der Parser den ersten Teil der Reihenfolge von apple
und berry
angetroffen hat, wenn dem Element root
im Dokument das Element apple
folgt. Ebenso verhält es sich, wenn der Parser das Element coffee
entdeckt, nachdem das Element root
angetroffen wurde. Der Parser legt fest, dass dies den ersten Teil der Reihenfolge von coffee
und dairy
darstellt. Jede andere Anordnung von Elementen in diesem Instanzdokument ist nach diesem bestimmten Schema ungültig.
Nicht deterministisches Schema
Bei einem nicht deterministischen Schema kann der Parser keine Reihenfolge für die Elemente im Dokument bestimmen. Im folgenden Beispiel wird ein nicht deterministisches XML-Schema dargestellt.
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root" type="rootTypes" />
<xs:complexType name="myKitchen">
<xs:choice>
<xs:sequence>
<xs:element name="apple"/>
<xs:element name="berry"/>
</xs:sequence>
<xs:sequence>
<xs:element name="apple"/>
<xs:element name="coffee"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:schema>
Trifft der Parser während der Verarbeitung eines Instanzdokuments gemäß dem oben dargestellten, nicht deterministischen Schema das Element root
an, gefolgt vom Element apple
, kann ohne vorheriger Kenntnis des nächsten Elements nicht bestimmt werden, ob das Element apple
der erste Teil der Reihenfolge von apple
und berry
oder der erste Teil der Reihenfolge von apple
und coffee
ist. Da der im SOM verwendete Parser nicht vorausschauend überprüfen kann, wird beim Überprüfungsversuch mit einem nicht deterministischen Schema die Fehlermeldung Content model must be deterministic
generiert.