Vincolo di attribuzione di particelle univocheUnique Particle Attribution Constraint

In XSD i modelli di contenuto complessi sono soggetti alla regola del vincolo di attribuzione di particelle univoche (UPA, Unique Particle Attribution).In XSD, complex content models are constrained by the unique particle attribution (UPA) constraint rule. Tale regola prevede che ogni elemento in un documento dell'istanza corrisponda in modo non ambiguo a una particella <xsd:element> o <xsd:any> nel relativo modello di contenuto padre.This rule requires that each element in an instance document correspond unambiguously to exactly one <xsd:element> or <xsd:any> particle in its parent's content model. Ogni schema che contiene un tipo con un modello di contenuto potenzialmente ambiguo viene rifiutato.Any schema that contains a type with a potentially ambiguous content model is rejected.

Le cause di ambiguità più comuni sono la presenza di caratteri jolly <xsd:any> e le particelle con intervalli di occorrenze variabili, ad esempio minOccurs < maxOccurs.The most common causes of ambiguity are <xsd:any> wildcard characters and particles that have variable occurrence ranges, such as minOccurs < maxOccurs. Il modello di contenuto seguente, ad esempio, è ambiguo perché un elemento <e1> può corrispondere sia all'elemento <xsd:element> che all'elemento <xsd:any>.For example, the following content model is ambiguous, because an <e1> element could match either the <xsd:element> or the <xsd:any> element.

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

Anche il modello di contenuto seguente è ambiguo:The following content model is also ambiguous:

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

Mentre un documento come <root><e1/><e2/><e1/></root> può essere convalidato senza ambiguità, questo non è possibile per un documento quale <root><e1/><e1/></root> , perché non è chiaro a quale <xsd:element> corrisponda il secondo <e1/> .Although a document such as <root><e1/><e2/><e1/></root> can be validated unambiguously, a document such as <root><e1/><e1/></root> cannot, because it is not clear to which <xsd:element> the second <e1/> corresponds. Anche se alcuni documenti possono essere convalidati senza ambiguità, lo schema verrà rifiutato a causa delle ambiguità potenziali.Even though some documents can be validated unambiguously, the schema will be rejected, because of the potential for ambiguity.

Si noti che, affinché un modello di contenuto sia valido, deve essere possibile convalidare in modo non ambiguo tutte le istanze, senza eseguire ricerche look-ahead.Note that for a content model to be valid, it must be possible to validate any instance unambiguously without looking ahead. Si consideri, ad esempio, il modello di contenuto seguente.For example, consider the following content model:

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

Per un documento quale <root><e1/><e3/></root>, la sequenza <e1/><e3/> corrisponde esattamente al secondo elemento <xsd:sequence>.For a document such as <root><e1/><e3/></root>, the sequence <e1/><e3/> unambiguously matches the second <xsd:sequence>. Poiché tuttavia l'elemento <xsd:element> a cui corrisponde <e1/> non può essere determinato senza eseguire ricerche look-ahead a <e3/>, il modello di contenuto viola la regola del vincolo UPA.However, because the <xsd:element> to which <e1/> corresponds cannot be determined without looking ahead to <e3/>, the content model violates the UPA constraint rule.

Per ulteriori informazioniFinding More Information

Il documento seguente è pubblicato dal World Wide Web Consortium (W3C) e contiene la descrizione tecnica del vincolo di attribuzione di particelle univoche (informazioni in lingua inglese):The following document is published by the World Wide Web Consortium (W3C) and contains the technical description of the unique particle attribution constraint:

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

  • Section 3.8.6: Constraints on Model Group Schema ComponentsSection 3.8.6: Constraints on Model Group Schema Components

  • Appendix H: Analysis of the Unique Particle Attribution Constraint (non-normative)Appendix H: Analysis of the Unique Particle Attribution Constraint (non-normative)

    Il documento è disponibile all'indirizzo http://www.w3.org/TR/xmlschema-1.To see the document, visit http://www.w3.org/TR/xmlschema-1.

Vedere ancheSee Also

Raccolte di XML Schema (SQL Server)XML Schema Collections (SQL Server)