Modelli di contenuto non deterministici

Si applica a:SQL ServerDatabase SQL diAzure Istanza gestita di SQL di Azure

I modelli di contenuto non deterministici vengono accettati in SQL Server se i vincoli di occorrenza sono 0, 1 o non associati.

Prima di SQL Server 2005 (9.x) Service Pack 1 (SP1), SQL Server rifiutò gli XML Schema che avevano modelli di contenuto non deterministici.

Esempio: modello di contenuto non deterministico rifiutato

Nello schema dell'esempio viene illustrato il tentativo di creare un elemento XML Schema con un modello di contenuto non deterministico. Il codice ha esito negativo perché non è chiaro se l'elemento <root> deve avere una sequenza di due <a> elementi o se l'elemento <root> deve avere due sequenze, ognuna con un <a> elemento.

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="1" maxOccurs="2">
                <element name="a" type="string" minOccurs="1" maxOccurs="2"/>
            </sequence>
        </complexType>
    </element>
</schema>
';
GO

È possibile correggere lo schema spostando il vincolo di occorrenza in una posizione univoca, ad esempio, il vincolo può essere spostato nella particella contenente la sequenza:

<sequence minOccurs="1" maxOccurs="4">
    <element name="a" type="string" minOccurs="1" maxOccurs="1"/>
</sequence>

In alternativa, il vincolo può essere spostato sull'elemento contenuto:

<sequence minOccurs="1" maxOccurs="1">
     <element name="a" type="string" minOccurs="1" maxOccurs="4"/>
</sequence>

Esempio: modello di contenuto non deterministico rifiutato

Lo schema seguente verrebbe rifiutato nelle versioni di SQL Server precedenti a SQL Server 2005 (9.x) SP1.

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="0" maxOccurs="unbounded">
                <element name="a" type="string" minOccurs="0" maxOccurs="1"/>
                <element name="b" type="string" minOccurs="1" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
</schema>
';
GO

Vedi anche