Linee guida e limitazioni per l'utilizzo di insiemi di schemi XML nel server
Data aggiornamento: 14 aprile 2006
Esistono alcune limitazioni relative alla convalida del linguaggio di definizione dello schema XML (XSD) per le colonne SQL che utilizzano il tipo di dati SQL Server 2005 xml. In questo argomento sono disponibili informazioni dettagliate su tali limitazioni, nonché alcune linee guida per modificare lo schema XSD in modo che sia supportato da SQL Server. Nella tabella seguente sono elencate le limitazioni. Nelle sezioni successive alla tabella ogni limitazione viene descritta in dettaglio e vengono fornite indicazioni per il relativo utilizzo.
Elemento | Limitazione |
---|---|
anyType |
Le specifiche XQuery consigliano la convalida di tipo lax per gli elementi di tipo anyType. Poiché SQL Server non supporta la convalida di tipo lax, per gli elementi di tipo anyType viene applicata la convalida di tipo strict. |
minOccurs e maxOccurs |
SQL Server limita le dimensioni dei valori per questi attributi. |
sqltypes:datetime e sqltypes:smalldatetime |
SQL Server non accetta valori sqltypes:datetime o sql:smalldatetime. |
<xsd:include>, <xsd:key>, <xsd:keyref>, <xsd:redefine> e <xsd:unique> |
SQL Server non supporti tali valori. |
<xsd:choice> |
SQL Server rifiuta gli schemi che includono una particella <xsd:choice> senza elementi figlio, a meno che la particella non sia definita con un attributo minOccurs di valore pari a zero. |
Valori <xsd:simpleType> |
SQL Server supporta solo la precisione in millisecondi per i tipi semplici con componenti espressi in secondi e impone limitazioni a tutte le enumerazioni di tipi semplici XSD riconosciuti. SQL Server non supporta l'utilizzo del valore "NaN" nelle dichiarazioni <xsd:simpleType>. |
xsi:schemaLocation e xsi:noNamespaceSchemaLocation |
SQL Server ignora questi attributi se sono presenti nei dati dell'istanza XML inseriti in una colonna o una variabile con tipo di dati xml. |
xs:QName |
SQL Server non supporta tipi derivati da xs:QName che utilizzano un elemento di restrizione dello schema XML. SQL Server non supporta tipi unione con xs:QName come elemento membro. |
Aggiunta di membri a un gruppo di sostituzione esistente |
SQL Server non supporta l'aggiunta di membri a un gruppo di sostituzione esistente in un insieme di schemi XML. |
Forme canoniche |
La rappresentazione canonica di un valore non deve violare la restrizione del pattern per il tipo corrispondente. |
Facet di enumerazione |
SQL Server non supporta gli schemi XML con tipi che dispongono di facet basati su pattern o di enumerazioni che violano tali facet. |
Facet per la lunghezza |
SQL Server limita l'intervallo di valori accettabili per la lunghezza dei facet. |
Attributo ID |
I componenti dello schema XML possono includere un attributo ID, ma SQL Server non archivia tali valori. |
Tipo ID |
SQL Server non supporta gli elementi di tipo xs:ID o xs:IDREF. |
Convalida di tipo lax |
SQL Server non supporta la convalida di tipo lax per schemi caricati in SQL Server. |
Tipi elenco e tipi unione |
SQL Server non supporta tipi elenco che utilizzano tipi unione come elementi list. |
Spazio dei nomi locale |
SQL Server rifiuta gli schemi che utilizzano una stringa vuota ("") come valore per l'attributo Namespace. |
Tipo misto e contenuto semplice |
SQL Server non supporta la restrizione di un tipo misto in un contenuto semplice. |
Tipo NOTATION |
SQL Server non supporta il tipo NOTATION. |
Condizioni di memoria insufficiente |
Durante l'utilizzo di insiemi di schemi XML di grandi dimensioni, può verificarsi una condizione di memoria insufficiente. Sono disponibili soluzioni specifiche. |
Valori ripetuti |
SQL Server rifiuta gli schemi in cui l'attributo block o final include valori ripetuti. |
Identificatori dei componenti di schema |
SQL Server limita gli identificatori dei componenti di schema a una lunghezza massima di 1000 caratteri Unicode. Non vengono inoltre supportate le coppie di caratteri surrogati all'interno degli identificatori. |
Informazioni sul fuso orario |
Le informazioni sul fuso orario vengono sempre normalizzate in base all'ora UTC (Coordinated Universal Time) o ora di Greenwich. |
Tipi unione |
SQL Server non supporta restrizioni da tipi unione. |
Decimali di precisione delle variabili |
SQL Server non supporta decimali di precisione delle variabili. |
xsi:schemaLocation e xsi:noNamespaceSchemaLocation
Gli attributi seguenti vengono ignorati da SQL Server se sono presenti nei dati dell'istanza XML inseriti in una colonna o in una variabile con tipo di dati xml:
- xsi:schemaLocation
- xsi:noNamespaceSchemaLocation
<xsd:include>
L'elemento include dello schema XSD W3C (World-Wide Web Consortium) rende disponibile il supporto per la modularità dello schema in base a cui è possibile partizionare uno schema XML in più file fisici. Attualmente, SQL Server non supporta questo elemento. Gli schemi XML che includono tale elemento vengono rifiutati dal server.
Per risolvere questo problema, è possibile eseguire la pre-elaborazione degli schemi XML che includono la direttiva <xsd:include> per copiare e unire il contenuto di tutti gli schemi inclusi in un singolo schema da caricare nel server. Per ulteriori informazioni, vedere Strumento di pre-elaborazione per schemi XML.
<xsd:unique>, <xsd:key> e <xsd:keyref>
Attualmente, SQL Server non supporta i seguenti vincoli basati su XSD per imporre l'univocità o stabilire chiavi e relativi riferimenti:
- <xsd:unique>
- <xsd:key>
- <xsd:keyref>
Non è possibile registrare gli schemi XML che contengono questi elementi.
Forme canoniche e restrizioni di pattern
Il facet basato su pattern XSD consente la restrizione dello spazio lessicale di tipi semplici. Quando viene applicata una restrizione di pattern a un tipo per il quale esistono più rappresentazioni lessicali possibili, alcuni valori potrebbero causare un comportamento imprevisto al momento della convalida. Tale comportamento si verifica in quanto le rappresentazioni lessicali di questi valori non vengono archiviate nel database. Pertanto, i valori vengono convertiti nelle rappresentazioni canoniche corrispondenti quando vengono serializzati come output. Se un documento contiene un valore la cui forma canonica non è conforme alla restrizione di pattern per il tipo corrispondente, il documento verrà rifiutato nel caso in cui un utente tenti di reinserirlo.
Per evitare tale problema, SQL Server 2005 rifiuta qualsiasi documento XML contenente valori che non è possibile reinserire, a causa della violazione delle restrizioni di pattern da parte delle forme canoniche corrispondenti. Ad esempio, il valore "33.000" non verrà convalidato in base a un tipo derivato da xs:decimal con una restrizione di pattern "33\.0+". Sebbene il valore "33.000" sia conforme a tale pattern, la forma canonica "33" non lo è.
Di conseguenza, è necessario prestare attenzione quando si applicano facet basati su pattern a tipi derivati dai tipi primitivi seguenti: boolean, decimal, float, double, dateTime, time, date, hexBinary e base64Binary. In SQL Server viene generato un avviso quando tali componenti vengono aggiunti a un insieme di schemi.
Per la serializzazione imprecisa di valori a virgola mobile esiste un problema analogo. A causa dell'algoritmo di serializzazione per i valori a virgola mobile utilizzato da SQL Server 2005, è possibile che valori simili condividano la stessa forma canonica. Quando un valore a virgola mobile viene serializzato e quindi reinserito, potrebbe subire una leggera variazione. In rari casi, il risultato può essere un valore che viola uno dei facet seguenti per il tipo corrispondente al momento del reinserimento: enumeration, minInclusive, minExclusive, maxInclusive o maxExclusive. Per evitare tale problema, SQL Server 2005 rifiuta i valori di tipi derivati da xs:float
o xs:double
che non è possibile serializzare e reinserire.
Caratteri jolly e convalida del contenuto
I caratteri jolly vengono utilizzati per consentire una maggiore flessibilità riguardo agli elementi che è possibile includere in un modello di contenuto. Tali caratteri vengono supportati nel linguaggio XSD nei modi seguenti:
- Caratteri jolly di elemento. Sono rappresentati dall'elemento <xsd:any>.
- Caratteri jolly di attributo. Sono rappresentati dall'elemento <xsd:anyAttribute>.
Entrambi gli elementi dei caratteri jolly, <xsd:any> e <xsd:anyAttribute>, supportano l'utilizzo di un attributo processContents. Questo attributo consente di specificare un valore che indica il modo in cui le applicazioni XML gestiscono la convalida del contenuto di documenti associato a tali elementi dei caratteri jolly. Valori diversi e relativo effetto:
- Il valore strict specifica che viene eseguita la convalida completa del contenuto.
- Il valore skip specifica che non viene eseguita la convalida del contenuto.
- Il valore lax specifica che viene eseguita solo la convalida di elementi e attributi per i quali sono disponibili definizioni di schema.
Convalida di tipo lax
Per gli schemi caricati in SQL Server, la convalida di tipo lax non è supportata. Se pertanto gli elementi dei caratteri jolly specificano l'attributo processContents, è necessario impostarlo su skip o su strict. Se viene specificato processContents="lax", il server rifiuterà lo schema.
A causa di tale comportamento, qualsiasi elemento tipizzato come xsd:anyType viene convalidato con l'elaborazione di tipo strict. Di conseguenza, è necessario definire i relativi elementi e attributi figlio nell'insieme di schemi in base al quale deve essere convalidato il documento dell'istanza.
Elementi anyType
Le specifiche XQuery consigliano la convalida di tipo lax per gli elementi di tipo anyType. Poiché SQL Server non supporta la convalida di tipo lax, per gli elementi di tipo anyType viene applicata la convalida di tipo strict.
Nell'esempio seguente viene illustrata la convalida di tipo strict e viene creato un insieme di schemi XML. Uno degli elementi dello schema è di tipo anyType
. Successivamente, vengono create variabili tipizzate xml e viene illustrata la convalida di tipo strict dell'elemento di tipo anyType.
CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://ns">
<element name="e" type="anyType"/>
<element name="a" type="byte"/>
<element name="b" type="string"/>
</schema>'
GO
L'esempio seguente è corretto in quanto la convalida di tipo strict di <e>
ha esito positivo:
DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><b>data</b></e>'
GO
L'esempio seguente non è corretto. L'istanza viene rifiutata poiché la convalida di tipo strict dell'elemento <e>
non trova l'elemento <c>
definito nello schema:
DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c>Wrong</c><b>data</b></e>'
GO
Analogamente, l'istanza XML dell'esempio seguente viene rifiutata poiché non esiste alcuna dichiarazione per l'elemento <c>
nello spazio dei nomi http://whatever
. In altre parole, lo spazio dei nomi non esiste.
DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c xmlns="http://whatever">Wrong</c><b>data</b></e>'
SELECT @var
GO
<xsd:redefine>
L'elemento redefine dello schema XSD W3C rende disponibile il supporto per la ridefinizione dei componenti di schema. Il supporto per tale direttiva, tuttavia, può influire negativamente sulle prestazioni e richiede che SQL Server esegua nuovamente la convalida di tutte le istanze del tipo di dati xml associate allo schema ridefinito. Di conseguenza, SQL Server non supporta questo elemento. Gli schemi XML che includono l'elemento <xsd:redefine> verranno rifiutati dal server.
In alternativa, per aggiornare uno schema o i relativi componenti, è possibile eseguire le operazioni seguenti.
- Annullare la tipizzazione di qualsiasi colonna con tipo di dati xml (XML DT) utilizzando l'insieme di schemi.
- Eliminare l'insieme di schemi XML esistente per lo spazio dei nomi interessato.
- Creare un nuovo insieme di schemi XML per tale spazio dei nomi con i componenti di schema modificati.
- Tipizzare nuovamente tutte le colonne XML DT di cui è stata annullata la tipizzazione durante il passaggio 1 utilizzando il nuovo insieme.
xs:QName
SQL Server non supporta tipi derivati da xs:QName a causa dell'utilizzo di un elemento di restrizione dello schema XML.
Attualmente, SQL Server non supporta tipi unione con QName come tipo di membro. Le istruzioni CREATE XML SCHEMA COLLECTION
seguenti non possono caricare lo schema XML, in quanto specificano il tipo xs:QName
come tipo di membro dell'unione:
CREATE XML SCHEMA COLLECTION QNameLimitation1 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="myUnion">
<xs:union memberTypes="xs:int xs:QName"/>
</xs:simpleType>
</xs:schema>'
GO
CREATE XML SCHEMA COLLECTION QNameLimitation2 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="myUnion">
<xs:union memberTypes="xs:integer">
<xs:simpleType>
<xs:list itemType="xs:QName"/>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:schema>'
GO
Entrambe le istruzioni non riescono e generare uno errore.
Tipi unione utilizzati come elementi list
Attualmente, SQL Server non supporta schemi contenenti tipi elenco con elementi di tipo unione. Nello schema dell'esempio viene illustrato il tentativo di supportare l'utilizzo di un tipo unione all'interno di un tipo elemento list:
CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
<simpleType name="unionType">
<union memberTypes="string byte"/>
</simpleType>
<simpleType name="listType">
<list itemType="ns:unionType"/>
</simpleType>
</schema>'
GO
Lo schema verrà rifiutato dal server con il messaggio di errore seguente:
"Tipo di elemento non valido per il tipo elenco 'http://ns:listType'. Il tipo di elemento di un elenco può non essere a sua volta un elenco e i tipi di elemento unione non sono supportati in questa versione".
Valori per <xsd:simpleType>
SQL Server supporta solo la precisione in millisecondi per i tipi semplici con componenti espressi in secondi. Verranno inoltre rifiutate dal server anche le istanze XML con valori dateTime che non contengono fusi orari. Nella tabella seguente vengono descritte le restrizioni applicate, basate su tutte le enumerazioni di tipi semplici XSD riconosciute.
SQL Server non supporta inoltre l'utilizzo del valore "NaN" nelle dichiarazioni <xsd:simpleType>. Gli schemi che includono valori "NaN" verranno rifiutati dal server.
Tipo semplice | Limitazione |
---|---|
duration |
La parte dell'anno deve essere compresa nell'intervallo da -2^31 a 2^31-1. Il mese, il giorno, l'ora, i minuti e i secondi devono essere tutti compresi nell'intervallo da 0 a 9999. La parte dei secondi include tre cifre aggiuntive di precisione a destra del separatore decimale. |
dateTime |
La parte dell'ora nel campo secondario del fuso orario deve essere compresa nell'intervallo da -14 a +14. La parte dell'anno deve essere compresa nell'intervallo da -9999 a 9999. La parte del mese deve essere compresa nell'intervallo da 1 a 12. La parte del giorno deve essere compresa nell'intervallo da 1 e 31 e deve corrispondere a una data di calendario valida. Ad esempio, SQL Server rileverà e restituirà un errore per una data non valida, ad esempio 31-02-1974, in quanto il mese di febbraio non include 31 giorni. |
date |
La parte dell'anno deve essere compresa nell'intervallo da -9999 a 9999. La parte del mese deve essere compresa nell'intervallo da 1 a 12. La parte del giorno deve essere compresa nell'intervallo da 1 a 31 e deve corrispondere a una data di calendario valida. Ad esempio, SQL Server rileverà e restituirà un errore per una data non valida, ad esempio 31-02-1974, in quanto il mese di febbraio non include 31 giorni. |
gYearMonth |
La parte dell'anno deve essere compresa nell'intervallo da -9999 a 9999. |
gYear |
La parte dell'anno deve essere compresa nell'intervallo da -9999 a 9999. |
gMonthDay |
La parte del mese deve essere compresa nell'intervallo da 1 a 12. La parte del giorno deve essere compresa nell'intervallo da 1 a 31. |
gDay |
La parte del giorno deve essere compresa nell'intervallo da 1 a 31 |
gMonth |
La parte del mese deve essere compresa nell'intervallo da 1 a 12. |
decimal |
I valori di questo tipo devono essere conformi al formato di tipo numeric SQL. Tale formato rappresenta internamente il supporto per i numeri costituiti da un massimo di 38 cifre complessive, di cui 10 posizioni sono riservate alla precisione frazionaria. |
float |
I valori di questo tipo devono essere conformi al formato del tipo real SQL. |
double |
I valori di questo tipo devono essere conformi al formato del tipo float SQL. |
string |
I valori di questo tipo devono essere conformi al formato del tipo nvarchar(max) SQL. |
anyURI |
La lunghezza dei valori di questo tipo non deve superare i 4000 caratteri Unicode. |
Decimali di precisione delle variabili
Il tipo xs:decimal rappresenta numeri decimali di precisione arbitraria. I processori XML con conformità minima devono supportare numeri decimali con un minimo di totalDigits=18
. SQL Server supporta totalDigits=38,
, ma limita le cifre frazionarie a 10. SQL Server non supporta decimali di precisione delle variabili. Tutti i valori xs:decimal per i quali viene creata un'istanza vengono rappresentati internamente dal server tramite il tipo numeric SQL (38, 10).
Informazioni sul fuso orario
Per i tipi semplici date, time e dateTime, le informazioni sul fuso orario vengono sempre normalizzate in base all'ora UTC (Coordinated Universal Time), nota anche come ora di Greenwich (GMT).
Ad esempio, lo schema seguente dichiara un elemento di tipo dateTime denominato <e>
:
CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
<element name="e" type="dateTime"/>
</schema>'
GO
Per gli elementi di tipo dateTime, il server convertirà l'ora fornita in GMT utilizzando il valore di offset ("-05:00") e restituendo l'ora GMT corrispondente.
DECLARE @var XML(MySampleCollection)
SET @var = '<e xmlns="http://ns">1999-05-31T13:20:00-05:00</e>'
SELECT @var
-- time zone is specified. Value is converted to Zulu before being stored
-- will come back as <e xmlns="http://ns">1999-05-31T18:20:00Z</e>
GO
Facet per la lunghezza
I facet length, minLength e maxLength vengono archiviati come tipo long, un tipo a 32 bit. Pertanto, l'intervallo di valori accettabili per tali valori è 2^31.
minOccurs e maxOccurs
I valori degli attributi minOccurs e maxOccurs devono essere contenibili in valori integer a 4 byte. Gli schemi che non sono conformi vengono rifiutati dal server.
Identificatori dei componenti di schema
SQL Server limita gli identificatori dei componenti di schema a una lunghezza massima di 1000 caratteri Unicode e rifiuta gli schemi con identificatori che superano tale lunghezza. Non vengono inoltre supportate le coppie di caratteri surrogati all'interno degli identificatori.
Facet di enumerazione
SQL Server rifiuta gli schemi XML con tipi che dispongono di facet basati su pattern o di enumerazioni che violano tali facet. Ad esempio, lo schema seguente viene rifiutato in quanto il valore di enumerazione fornito include un valore con lettere sia maiuscole che minuscole e inoltre viola il valore di pattern che limita i valori esclusivamente alle lettere minuscole.
CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
<simpleType name="MyST">
<restriction base="string">
<pattern value="[a-z]*"/>
</restriction>
</simpleType>
<simpleType name="MyST2">
<restriction base="ns:MyST">
<enumeration value="mYstring"/>
</restriction>
</simpleType>
</schema>'
GO
<xsd:choice>
SQL Server rifiuta gli schemi che includono una particella <xsd:choice> senza elementi figlio, a meno che la particella non sia definita con un attributo minOccurs di valore pari a zero.
Valori ripetuti in un attributo final o block
L'attributo block consente di bloccare le sostituzioni di tipi e di elementi dall'istanza. L'attributo final impedisce la derivazione di altri tipi complessi da un tipo.
SQL Server rifiuta gli schemi in cui l'attributo block o final include valori ripetuti quali "restriction restriction" ed "extension extension".
Spazio dei nomi locale
Lo spazio dei nomi locale deve essere specificato in modo esplicito per l'elemento <xsd:any>. SQL Server rifiuta gli schemi che utilizzano una stringa vuota ("") come valore per l'attributo Namespace. SQL Server richiede invece l'utilizzo esplicito di "##local" per indicare un elemento o un attributo non qualificato come istanza del carattere jolly.
Attributo ID
Ogni componente dello schema XML può includere un attributo ID. SQL Server applica l'univocità per le dichiarazioni <xsd:attribute> di tipo ID, ma non archivia tali valori. L'ambito di applicazione dell'univocità è l'istruzione {CREATE | ALTER} XML SCHEMA COLLECTION.
Tipo ID
SQL Server non supporta gli elementi di tipo xs:ID, xs:IDREF o xs:IDREFS. Uno schema potrebbe non dichiarare elementi di questo tipo, o elementi derivati dalla restrizione o dall'estensione da questo tipo.
Tipo NOTATION
Attualmente, SQL Server non supporta il tipo NOTATION. Gli schemi che includono definizioni per notazioni verranno rifiutati dal server.
Tipo misto e contenuto semplice
Nell'insieme di schemi XML seguente, myComplexTypeA
è un tipo complesso che è possibile svuotare. Pertanto, minOccurs
è impostato su 0 per entrambi gli elementi corrispondenti. Il tentativo di limitarlo al contenuto semplice in un modo simile a quello della dichiarazione myComplexTypeB
non è supportato. La creazione dell'insieme di schemi XML seguente avrà esito negativo:
CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns"
xmlns:ns1="http://ns1">
<complexType name="myComplexTypeA" mixed="true">
<sequence>
<element name="a" type="string" minOccurs="0"/>
<element name="b" type="string" minOccurs="0" maxOccurs="23"/>
</sequence>
</complexType>
<complexType name="myComplexTypeB">
<simpleContent>
<restriction base="ns:myComplexTypeA">
<simpleType>
<restriction base="int">
<minExclusive value="25"/>
</restriction>
</simpleType>
</restriction>
</simpleContent>
</complexType>
</schema>
'
GO
sqltypes:datetime e sqltypes:smalldatetime
In SQL Server 2005, tutti i tipi derivati da xs:date, xs:time e xs:dateTime devono includere fusi orari. Sqltypes:datetime e sqltypes:smalldatetime sono due di questi tipi. Tuttavia, i tipi datetime e smalldatetime SQL non includono fusi orari, in quanto i facet basati su pattern relativi a sqltypes:datetime e sqltypes:smalldatetime non lo consentono. Di conseguenza, SQL Server non accetta valori sqltypes:datetime o sql:smalldatetime.
Sebbene negli schemi definiti dall'utente sia possibile fare riferimento a sqltypes:datetime e sqltypes:smalldatetime, non è possibile convalidare documenti XML che contengono valori di questi tipi. Pertanto, tali documenti sono inutilizzabili. Nell'esempio seguente, l'insieme di schemi XML definisce un elemento <c>
di tipo sqltypes.datetime
:
CREATE XML SCHEMA COLLECTION SC_datetime AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="myNS"
xmlns:ns="myNS"
xmlns:s="https://schemas.microsoft.com/sqlserver/2004/sqltypes"
>
<import namespace="http://www.w3.org/XML/1998/namespace"/>
<import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes"/>
<element name="root">
<complexType>
<sequence>
<element name="c" type="s:datetime"/>
</sequence>
</complexType>
</element>
</schema>'
GO
L'assegnazione seguente avrà esito negativo:
DECLARE @var xml(SC_datetime)
SET @var = '<x:root xmlns:x="myNS"><c>1953-01-01T00:00:00.000</c></x:root>'
GO
Aggiunta di membri a un gruppo di sostituzione esistente
Non è possibile aggiungere membri a un gruppo di sostituzione esistente in un insieme di schemi XML. La restrizione relativa a un gruppo di sostituzione in uno schema XML impone che l'elemento Head e tutti gli elementi membri corrispondenti vengano definiti nella stessa istruzione {CREATE | ALTER} XML SCHEMA COLLECTION. Ad esempio, è possibile eseguire l'operazione seguente:
CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="e1"/>
<xs:element name="e2" substitutionGroup="e1"/>
</xs:schema>'
Non è tuttavia possibile eseguire l'operazione seguente, in cui l'elemento Head e1
viene definito in un'istruzione CREATE XML SCHEMA COLLECTION
e il membro di sostituzione e2
viene definito in un'altra istruzione ALTER XML SCHEMA COLLECTION
:
CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="e1"/>
</xs:schema>'
GO
ALTER XML SCHEMA COLLECTION col add N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="e2" substitutionGroup="e1"/>
</xs:schema>'
GO
Tipi unione
Non sono supportate restrizioni su tipi unione. Ad esempio, l'istruzione CREATE XML SCHEMA COLLECTION
seguente avrà esito negativo:
CREATE XML SCHEMA COLLECTION particlesIk026valid AS N'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xsdtesting" xmlns:x="http://xsdtesting" elementFormDefault="qualified">
<xsd:simpleType name="U1">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="xsd:integer" />
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="xsd:string" />
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="U2">
<xsd:restriction base="x:U1" />
</xsd:simpleType>
<xsd:complexType name="B">
<xsd:choice>
<xsd:element name="c1" type="x:U1" />
<xsd:element name="c2" />
</xsd:choice>
</xsd:complexType>
<xsd:complexType name="R">
<xsd:complexContent>
<xsd:restriction base="x:B">
<xsd:choice>
<xsd:element name="c1" type="x:U2" />
<xsd:element name="c2" />
</xsd:choice>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="doc">
<xsd:complexType>
<xsd:choice>
<xsd:element name="elem" type="x:R" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>'
Insiemi di schemi XML di grandi dimensioni e condizioni di memoria insufficiente
Durante una chiamata alla funzione predefinita XML_SCHEMA_NAMESPACE() in un insieme di schemi XML di grandi dimensioni o durante il tentativo di eliminare insiemi di schemi XML di grandi dimensioni, potrebbe verificarsi una condizione di memoria insufficiente. Per risolvere questo problema, è possibile utilizzare le soluzioni seguenti:
- Quando il carico di lavoro del sistema è ridotto, è consigliabile utilizzare il comando DROP_XML_SCHEMA_COLLECTION. Se il tentativo ha esito negativo, configurare il database in modalità utente singolo mediante l'istruzione ALTER DATABASE e provare a eseguire di nuovo il comando DROP XML SCHEMA COLLECTION. Se l'insieme di schemi XML è contenuto nel database master, model o tempdb, per attivare la modalità utente singolo è necessario riavviare il server.
- Quando si chiama la funzione XML_SCHEMA_NAMESPACE, è possibile provare a recuperare un singolo spazio dei nomi dello schema XML, provare a eseguire la chiamata quando il carico di lavoro del sistema diminuisce oppure provare a eseguirla in modalità utente singolo.
Modelli di contenuto non deterministici
SQL Server rifiuta gli schemi XML che utilizzano un modello di contenuto non deterministico.
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>
deve avere una sequenza di due elementi <a>
oppure se l'elemento <root>
deve avere due sequenze, 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, nella particella della sequenza in cui è incluso l'elemento:
<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>
Comportamento di SQL Server 2005 Service Pack 1
I modelli di contenuto non deterministici vengono accettati se i vincoli di occorrenza sono 0,1 o "unbounded".
L'esempio seguente verrà rifiutato in SQL Server 2005, ma verrà accettato da un server in cui è in esecuzione SQL Server 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
Riferimento
Linee guida e limitazioni per l'utilizzo di insiemi di schemi XML nel server
Autorizzazioni per un insieme di schemi XML
Gestione di insiemi di schemi XML sul server
Concetti
Tipo di dati XML
Codice XML tipizzato e non tipizzato
Informazioni sul vincolo di attribuzione di particelle univoche
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
14 aprile 2006 |
|