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