Modelli di contenuto non deterministici

Si applica a:SQL ServerDatabase SQL di AzureIstanza 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 senza vincoli.

Prima di SQL Server 2005 (9.x) Service Pack 1 (SP1), gli elementi schemi XML che contenevano modelli di contenuto non deterministici venivano rifiutati in SQL Server.

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 poiché non è possibile determinare se l'elemento <root> debba avere una sequenza di due elementi <a> oppure se l'elemento <root> debba averne due, ognuna con un elemento <a>.

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