Partager via


Modèles de contenu non déterministes

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

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

Avant le Service Pack 1 (SP1) de SQL Server 2005 (9.x), SQL Server rejetait les schémas XML dont les modèles de contenu n'étaient pas 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 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 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