Descripción de la restricción de atribución de partículas exclusivas

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 principal. 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, éste no es el caso de otro 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.

Tenga en cuenta que, 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.

Buscar más información

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:

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

  • Sección 3.8.6: Constraints on Model Group Schema Components
  • Apéndice H: Analysis of the Unique Particle Attribution Constraint (non-normative)

Para ver el documento, visite http://www.w3.org/TR/xmlschema-1.

Vea también

Referencia

Administrar colecciones de esquemas XML en el servidor

Ayuda e información

Obtener ayuda sobre SQL Server 2005