Freigeben über


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.

Siehe auch

XML-Schemaobjektmodell (SOM) | XML-Schemareferenz (XSD)