Contrainte d’attribution de particule unique

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

Dans XSD, les modèles de contenu complexe sont soumis à la règle de la contrainte d'attribution de particule unique. Cette règle exige que chaque élément d’un document d’instance correspond sans ambiguïté à exactement un <xsd:element> ou <xsd:any> une particule dans le modèle de contenu de son parent. Tout schéma qui contient un type avec un modèle de contenu potentiellement ambigu est rejeté.

Les causes les plus courantes de l’ambiguïté sont <xsd:any> des caractères génériques et des particules qui ont des plages d’occurrences variables, telles que minOccurs < maxOccurs. Par exemple, le modèle de contenu suivant est ambigu, car un <e1> élément peut correspondre à l’élément <xsd:element> ou à l’élément <xsd:any> .

<xsd:element name="root">
    <xsd:complexType>
        <xsd:choice>
            <xsd:element name="e1"/>
            <xsd:any namespace="##any"/>
        </xsd:choice>
    </xsd:complexType>
</xsd:element>

Le modèle de contenu suivant est également ambigu :

<xsd:element name="root">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="e1" maxOccurs="2"/>
            <xsd:element name="e2" minOccurs="0"/>
            <xsd:element name="e1"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

Bien qu’un document tel que <root><e1/><e2/><e1/></root> celui-ci puisse être validé sans ambiguïté, un document tel qu’il <root><e1/><e1/></root> ne peut pas, car il n’est pas clair auquel <xsd:element> la seconde <e1/> fait référence. Même si certains documents peuvent être validés sans ambiguïté, le schéma est rejeté en raison d'une ambiguïté potentielle.

Pour qu’un modèle de contenu soit valide, il doit être possible de valider une instance sans ambiguïté sans attendre. Imaginons par exemple le modèle de contenu suivant :

<xsd:element name="root">
    <xsd:complexType>
        <xsd:choice>
           <xsd:sequence>
               <xsd:element name="e1"/>
               <xsd:element name="e2"/>
           </xsd:sequence>
           <xsd:sequence>
               <xsd:element name="e1"/>
               <xsd:element name="e3"/>
           </xsd:sequence>
       </xsd:choice>
    </xsd:complexType>
</xsd:element>

Pour un document tel que <root><e1/><e3/></root>, la séquence <e1/><e3/> correspond sans ambiguïté à la deuxième séquence <xsd:sequence>. Toutefois, étant donné que les <xsd:element><e1/> correspondances ne peuvent pas être déterminées sans revenir à <e3/>l’avance, le modèle de contenu enfreint la règle de contrainte UPA.

Étapes suivantes

Le document suivant est publié par le World Wide Web Consortium (W3C) et contient la description technique de la contrainte d'attribution de particule unique :

« XML Schema Part 1 : Structures Second Edition, W3C Proposed Edited Recommendation » :

  • Section 3.8.6 : Constraints on Model Group Schema Components

  • Appendix H : Analysis of the Unique Particle Attribution Constraint (non-normative)

Pour lire le document, consultez http://www.w3.org/TR/xmlschema-1.

Voir aussi