Modèles de contenu non déterministes

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Les modèles de contenu non déterministes sont acceptés dans SQL Server si les contraintes d’occurrence sont 0, 1 ou non liées.

Avant SQL Server 2005 (9.x) Service Pack 1 (SP1), SQL Server a rejeté les schémas XML qui avaient des modèles de contenu non déterministes.

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 clair si l’élément <root> doit avoir une séquence de deux <a> éléments ou si l’élément <root> doit avoir deux séquences, chacune avec un <a> élément.

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 est rejeté dans les versions de SQL Server avant SQL Server 2005 (9.x) 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

Voir aussi