Compartilhar via


Restrição de atribuição de partícula exclusiva

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Em XSD, modelos de conteúdo complexos são restritos pela regra de restrição UPA (atribuição de partícula exclusiva). Esta regra requer que cada elemento em um documento de instância corresponda inequivocamente a exatamente uma partícula <xsd:element> ou <xsd:any> no modelo de conteúdo de seu pai. Qualquer esquema que contenha um tipo com um modelo de conteúdo potencialmente ambíguo é rejeitado.

As causas mais comuns de ambiguidade são caracteres curinga <xsd:any> e partículas que têm intervalos de ocorrência variáveis, como minOccurs < maxOccurs. Por exemplo, o modelo de conteúdo apresentado a seguir é ambíguo, porque um elemento <e1> pode corresponder ao elemento <xsd:element> ou ao 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>

O modelo de conteúdo seguinte também é ambíguo:

<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>

Embora seja possível validar um documento como <root><e1/><e2/><e1/></root> inequivocamente, um documento como <root><e1/><e1/></root> não pode ser validado, pois não está claro a qual <xsd:element> o segundo <e1/> está se referindo. Embora alguns documentos possam ser validados de maneira não ambígua, o esquema será rejeitado por causa do potencial de ambiguidade.

Para que um modelo de conteúdo seja válido, deve ser possível validar qualquer instância de forma inequívoca, sem a necessidade de uma análise prospectiva. Por exemplo, considere o seguinte modelo de conteúdo:

<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 um documento como <root><e1/><e3/></root>, a sequência <e1/><e3/> corresponde de maneira não ambígua à segunda <xsd:sequence>. No entanto, como o <xsd:element> ao qual <e1/> corresponde não pode ser determinado sem uma análise prospectiva de <e3/>, o modelo de conteúdo viola a regra de restrição de UPA.

Próximas etapas

O documento a seguir é publicado pelo World Wide Web Consortium (W3C) e contém a descrição técnica da restrição de atribuição de partícula ambígua.

"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)

Para consultar o documento, visite http://www.w3.org/TR/xmlschema-1.

Confira também