Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Validation depends on whether the schema is deterministic or non-deterministic.
A deterministic schema is a schema that is not ambiguous. This means that when MSXML parses and loads the schema into the Schema Object Model (SOM), it can determine the sequence in which elements should occur for an XML document to be validated against the schema.
It is possible for an XML Schema to be ambiguous, or non-deterministic. A schema is non-deterministic if the parser is unable to clearly determine the structure to validate with the schema. When validation is attempted on a non-deterministic schema, the parser generates an error.
Deterministic Schema
The following deterministic XML Schema specifies that a valid document must contain an element named root that has the following content:
An element,
apple, followed by an element,berryor
An element,
coffee, followed by an element,dairy
<?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>
Using the preceding schema, the parser is able to follow the schema logic when it processes an instance document. If the element root is followed in the document by the element apple, the parser determines that it has encountered the first part of the sequence of apple and berry. Likewise, if the parser encounters the element coffee after encountering the root element, the parser determines that it has encountered the first part of the sequence of coffee and dairy. Any other ordering of elements in the instance document is invalid according to this schema.
Non-Deterministic Schema
With a non-deterministic schema, the parser cannot determine a sequence for the elements in the document being processed. The following is an example of a non-deterministic schema:
<?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>
Using the preceding schema, when the parser encounters the element root followed by an element apple, it is unable to determine, without looking ahead to the next element, whether the apple element is the first part of the sequence apple and berry or the first part of the sequence of apple and coffee. Because the parser used by the SOM does not perform forward checking, the parser generates the following error message when validation is attempted using a non-deterministic schema:
Content model must be deterministic