Partilhar via


Restrição única de atribuição de partículas

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

No XSD, os modelos de conteúdo complexo são limitados pela regra de atribuição única de partículas (UPA). Esta regra exige que cada elemento num documento de instância corresponda inequivocamente a exatamente uma <xsd:element> ou <xsd:any> uma partícula no modelo de conteúdo do 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 <xsd:any> caracteres e partículas curinga que têm intervalos de ocorrência variáveis, como minOccurs < maxOccurs. Por exemplo, o modelo de conteúdo seguinte é ambíguo, porque um <e1> elemento pode corresponder a <xsd:element> ou ao <xsd:any> elemento.

<xsd:element name="root">
    <xsd:complexType>
        <xsd:choice>
            <xsd:element name="e1"/>
            <xsd:any namespace="##any"/>
        </xsd:choice>
    </xsd:complexType>
</xsd:element>

O seguinte modelo de conteúdo 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 um documento como <root><e1/><e2/><e1/></root> possa ser validado de forma inequívoca, um documento como <root><e1/><e1/></root> não pode, porque não está claro a que <xsd:element> se refere o segundo <e1/> . Embora alguns documentos possam ser validados de forma inequívoca, o esquema será rejeitado, devido ao 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 olhar para o futuro. 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 inequívocamente à segunda <xsd:sequence>. No entanto, como o <xsd:element> ao qual <e1/> corresponde não pode ser determinado sem olhar para <e3/> no futuro, o modelo de conteúdo viola a regra de restrição de UPA.

Próximos passos

O seguinte documento é publicado pelo World Wide Web Consortium (W3C) e contém a descrição técnica da restrição única de atribuição de partículas:

"XML Schema Parte 1: Estruturas Segunda Edição, Recomendação Editada proposta do W3C"

  • Secção 3.8.6: Restrições aos Componentes do Esquema dos Grupos de Modelos

  • Apêndice H: Análise da Restrição de Atribuição de Partícula Única (não normativa)

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

Consulte também