Restrição de atribuição de partícula exclusiva
Em XSD, modelos de conteúdo complexos são restritos pela regra de restrição UPA (atribuição de partícula exclusiva). Essa regra requer que cada elemento em um documento da instância corresponda sem-ambiguidade 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 <xsd:any>
caracteres curinga e partículas que têm intervalos de ocorrência variáveis, como minOccurs < maxOccurs. Por exemplo, o modelo de conteúdo a seguir é ambíguo, pois um <e1
> elemento pode corresponder ao <xsd:element>
elemento ou .<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>
de maneira não ambígua, um documento como <root><e1/><e1/></root>
não pode ser validado, porque não está claro para qual <xsd:element>
o segundo <e1/>
corresponde. Embora alguns documentos possam ser validados de maneira não ambígua, o esquema será rejeitado por causa do potencial de ambiguidade.
Observe que para que um modelo de conteúdo seja válido, deve ser possível validar todas as suas instâncias de maneira não ambígua sem olhar adiante. 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 olhar adiante para <e3/>
, o modelo de conteúdo viola a regra de restrição de UPA.
Descobrindo mais informações
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.
"Parte 1 do esquema XML: segunda edição das estruturas, recomendação proposta editada do W3C":
Seção 3.8.6: restrições em componentes de esquema do grupo de modelos
Apêndice H: análise da restrição de atribuição de partícula exclusiva (não normativa)
Para consultar o documento, visite http://www.w3.org/TR/xmlschema-1.