Contrainte d’attribution de particule unique
S’applique à :SQL Server
Azure SQL Database
Azure 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
Commentaires
https://aka.ms/ContentUserFeedback.
Prochainement : Tout au long de l'année 2024, nous supprimerons progressivement les GitHub Issues en tant que mécanisme de retour d'information pour le contenu et nous les remplacerons par un nouveau système de retour d'information. Pour plus d’informations, voir:Soumettre et afficher des commentaires pour