Share via


Modèles de contenu non déterministes

Avant SQL Server 2005 Service Pack 1, SQL Server rejetait les schémas XML qui avaient des modèles de contenu non déterministes.

À compter de SQL Server 2005 SP1, toutefois, les modèles de contenu non déterministes sont acceptés si les contraintes d'occurrence sont 0,1, ou non liées.

Exemple: modèle de contenu non déterministe rejeté

L'exemple suivant tente de créer un schéma XML dont le modèle de contenu est non déterministe. Le code échoue car il n'est pas certain si l'élément <root> doit avoir une séquence de deux éléments <a> ou si l'élément <root> doit avoir deux séquences, chacune possédant un élément <a>.

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="1" maxOccurs="2">
                <element name="a" type="string" minOccurs="1" maxOccurs="2"/>
            </sequence>
        </complexType>
    </element>
</schema>
'
GO

Il est possible de corriger le schéma en déplaçant la contrainte d'occurrence vers un emplacement unique. Par exemple, vous pouvez déplacer la contrainte vers la particule Sequence conteneur :

<sequence minOccurs="1" maxOccurs="4">
    <element name="a" type="string" minOccurs="1" maxOccurs="1"/>
</sequence>

Ou vous pouvez la déplacer vers l'élément contenu :

<sequence minOccurs="1" maxOccurs="1">
     <element name="a" type="string" minOccurs="1" maxOccurs="4"/>
</sequence>

Exemple: modèle de contenu non déterministe accepté

Le schéma suivant serait rejeté dans les versions de SQL Server antérieures à SQL Server 2005 SP1.

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="0" maxOccurs="unbounded">
                <element name="a" type="string" minOccurs="0" maxOccurs="1"/>
                <element name="b" type="string" minOccurs="1" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
</schema>
'
GO