Compartir a través de


Restricción de atribución de partículas única

En XSD, los modelos de contenido complejo están restringidos por la regla de restricción de atribución de partículas única (UPA). Esta regla requiere que cada elemento de un documento de instancia se corresponda de forma inequívoca con exactamente una <xsd:element> o <xsd:any> partícula en el modelo de contenido de su elemento primario. Se rechaza cualquier esquema que contenga un tipo con un modelo de contenido potencialmente ambiguo.

Las causas más comunes de ambigüedad son <xsd:any> caracteres comodín y partículas que tienen intervalos de repetición variables, como minOccurs < maxOccurs. Por ejemplo, el siguiente modelo de contenido es ambiguo, ya que un <e1> elemento podría coincidir con el <xsd:element> elemento o .<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 de forma inequívoca, un documento como <root><e1/><e1/></root> no puede, porque no está claro a cuál <xsd:element> corresponde el segundo <e1/>. Aunque algunos documentos se pueden validar de forma inequívoca, se rechazará el esquema, debido a la posibilidad de ambigüedad.

Tenga en cuenta que para que un modelo de contenido sea válido, debe ser posible validar cualquier instancia de forma inequívoca sin mirar hacia delante. Por ejemplo, considere 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/> coincide inequívocamente con el segundo <xsd:sequence>. Sin embargo, dado que no se puede determinar el objeto al que <e1/> corresponde sin mirar a <e3/>, el modelo de contenido infringe la regla de la restricción UPA.

Buscar más información

El siguiente documento lo publica world Wide Web Consortium (W3C) y contiene la descripción técnica de la restricción de atribución de partículas única:

"Esquema XML Parte 1: Estructuras segunda edición, recomendación editada propuesta de W3C":

  • Sección 3.8.6: Restricciones en componentes de esquema de grupo de modelos

  • Apéndice H: Análisis de la restricción de atribución de partículas únicas (no normativa)

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

Véase también

Colecciones de esquemas XML (SQL Server)