Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Database SQL in Microsoft Fabric
In XSD i modelli di contenuto complessi sono soggetti alla regola del vincolo di attribuzione di particelle univoche (UPA, Unique Particle Attribution). 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. Ogni schema che contiene un tipo con un modello di contenuto potenzialmente ambiguo viene rifiutato.
Le cause più comuni di ambiguità sono i caratteri jolly <xsd:any> e le particelle con intervalli di occorrenza variabili, ad esempio 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>.
<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:
<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> faccia riferimento il secondo <e1/>. Anche se alcuni documenti possono essere convalidati senza ambiguità, lo schema verrà rifiutato a causa delle ambiguità potenziali.
Affinché un modello di contenuto sia valido, deve essere possibile convalidare in modo univoco qualsiasi istanza senza guardare avanti. Si consideri, ad esempio, il modello di contenuto seguente.
<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>. Tuttavia, poiché l'elemento <xsd:element> a cui corrisponde <e1/> non può essere determinato senza guardare avanti fino a <e3/>, il modello di contenuto viola la regola di vincolo UPA.
Reference
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):
XML Schema Parte 1: Strutture, Seconda edizione, W3C Proposta di Raccomandazione rivista:
- Sezione 3.8.6: Vincoli sui componenti dello schema del gruppo di modelli
- Appendice H: Analisi del vincolo di attribuzione unica delle particelle (non normativo)