Restricción de atribución de partículas exclusivas
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
En XSD, los modelos de contenido complejos están restringidos por la regla de restricción de atribución de partículas exclusivas (UPA). Esta regla requiere que cada elemento de un documento de una instancia se corresponda sin ambigüedades exactamente con una partícula <xsd:element>
o <xsd:any>
en el modelo de contenido de su elemento primario. Cualquier esquema que contenga un tipo con un modelo de contenido potencialmente ambiguo se rechaza.
Las causas más comunes de ambigüedad son los caracteres comodín <xsd:any>
y las partículas con intervalos de repetición variables, como minOccurs < maxOccurs. Por ejemplo, el siguiente modelo de contenido es ambiguo, porque un elemento <e1>
puede corresponderse con el elemento <xsd:element>
o el elemento <xsd:any>
.
<xsd:element name="root">
<xsd:complexType>
<xsd:choice>
<xsd:element name="e1"/>
<xsd:any namespace="##any"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
El siguiente modelo de contenido también es ambiguo:
<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>
Aunque un documento como <root><e1/><e2/><e1/></root>
se puede validar sin ambigüedades, este no es el caso de un documento como <root><e1/><e1/></root>
, ya que no está claro a qué <xsd:element>
corresponde el segundo <e1/>
. Aunque algunos documentos se pueden validar sin ambigüedades, el esquema se rechazará debido a la posible ambigüedad.
Para que un modelo de contenido sea válido, debe ser posible validar cualquier instancia sin ambigüedades sin mirar hacia delante. Considere, por ejemplo, el siguiente modelo de contenido:
<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>
Para un documento como <root><e1/><e3/></root>
, la secuencia <e1/><e3/>
se corresponde sin ambigüedades con el segundo <xsd:sequence>
. Sin embargo, dado que el <xsd:element>
al que corresponde <e1/>
no se puede determinar sin mirar hacia delante a <e3/>
, el modelo de contenido infringe la regla de restricción UPA.
Pasos siguientes
El World Wide Web Consortium (W3C) publica el siguiente documento, que contiene la descripción técnica de la restricción de atribución de partículas exclusivas:
Structures Second Edition, W3C Proposed Edited Recommendation":
Constraints on Model Group Schema Components
Analysis of the Unique Particle Attribution Constraint (non-normative)
Para ver el documento, visite http://www.w3.org/TR/xmlschema-1.