Share via


Modelli di contenuto non deterministici

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

A partire da SQL Server 2005 SP1, i modelli di contenuto non deterministici vengono accettati se i vincoli di occorrenza sono 0,1 o "unbounded".

Esempio: modello di contenuto non deterministico rifiutato

Nello schema dell'esempio viene illustrato il tentativo di creare uno schema XML 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 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