Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Come descritto nell'argomento xml (Transact-SQL), SQL Server fornisce l'archiviazione nativa dei dati XML tramite il xml tipo di dati. Facoltativamente, è possibile associare schemi XSD a una variabile o a una colonna di xml tipo tramite una raccolta di XML Schema. La raccolta di XML Schema archivia gli XML Schema importati e viene quindi usata per eseguire le operazioni seguenti:
Convalidare le istanze XML
Digitare i dati XML archiviati nel database
Si noti che la raccolta di XML Schema è un'entità di metadati come una tabella nel database. È possibile creare, modificare ed eliminarli. Gli schemi specificati in un'istruzione CREATE XML SCHEMA COLLECTION (Transact-SQL) vengono importati automaticamente nell'oggetto raccolta di XML Schema appena creato. È possibile importare altri schemi o componenti dello schema in un oggetto raccolta esistente nel database usando l'istruzione ALTER XML SCHEMA COLLECTION (Transact-SQL).
Come descritto nell'argomento Typed vs. Untyped XML, il codice XML archiviato in una colonna o una variabile a cui è associato uno schema viene definito XML tipizzato , perché lo schema fornisce le informazioni sul tipo di dati necessarie per i dati dell'istanza. SQL Server usa queste informazioni sul tipo per ottimizzare l'archiviazione dei dati.
Il motore di elaborazione query usa anche lo schema per il controllo dei tipi e per ottimizzare le query e la modifica dei dati.
Inoltre, SQL Server utilizza la raccolta di XML Schema associata, nel caso di xml tipizzato, per convalidare l'istanza XML. Se l'istanza XML è conforme allo schema, il database consente di archiviare l'istanza nel sistema con le relative informazioni sul tipo. In caso contrario, rifiuta l'istanza.
È possibile utilizzare la funzione intrinseca XML_SCHEMA_NAMESPACE per recuperare la raccolta di schemi archiviata nel database. Per ulteriori informazioni, vedere Visualizza una raccolta di XML Schema archiviata.
È anche possibile utilizzare la raccolta di XML Schema per digitare variabili, parametri e colonne XML.
DDL per la gestione delle raccolte di schemi
È possibile creare raccolte di XML Schema nel database e associarle a variabili e colonne di xml tipo . Per gestire le raccolte di schemi nel database, SQL Server fornisce le istruzioni DDL seguenti:
CREATE XML SCHEMA COLLECTION (Transact-SQL) Importa i componenti dello schema in un database.
ALTER XML SCHEMA COLLECTION (Transact-SQL) Modifica i componenti dello schema in una raccolta di XML Schema esistente.
DROP XML SCHEMA COLLECTION (Transact-SQL) Elimina una raccolta di XML Schema completa e tutti i relativi componenti.
Per utilizzare una raccolta di XML Schema e gli schemi in esso contenuti, è prima necessario creare la raccolta e gli schemi usando l'istruzione CREATE XML SCHEMA COLLECTION. Dopo aver creato la raccolta di schemi, è possibile creare variabili e colonne di xml tipo e associarvi la raccolta di schemi. Si noti che dopo la creazione di una raccolta di schemi, i vari componenti dello schema vengono archiviati nei metadati. È anche possibile utilizzare ALTER XML SCHEMA COLLECTION per aggiungere altri componenti agli schemi esistenti o aggiungere nuovi schemi a una raccolta esistente.
Per eliminare la raccolta di schemi, utilizzare l'istruzione DROP XML SCHEMA COLLECTION. In questo modo vengono eliminati tutti gli schemi contenuti nell'insieme e viene rimosso l'oggetto della raccolta. Si noti che prima di eliminare una raccolta di schemi, è necessario soddisfare le condizioni descritte in DROP XML SCHEMA COLLECTION (Transact-SQL).
Informazioni sui componenti dello schema
Quando si usa l'istruzione CREATE XML SCHEMA COLLECTION, i vari componenti dello schema vengono importati nel database. I componenti dello schema includono elementi dello schema, attributi e definizioni dei tipi. Quando si utilizza l'istruzione DROP XML SCHEMA COLLECTION, si rimuove la raccolta completa.
CREATE XML SCHEMA COLLECTION salva i componenti dello schema in varie tabelle di sistema.
Si consideri ad esempio lo schema seguente:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="uri:Cust_Orders2"
xmlns="uri:Cust_Orders2" >
<xsd:attribute name="SomeAttribute" type="xsd:int" />
<xsd:complexType name="SomeType" />
<xsd:complexType name="OrderType" >
<xsd:sequence>
<xsd:element name="OrderDate" type="xsd:date" />
<xsd:element name="RequiredDate" type="xsd:date" />
<xsd:element name="ShippedDate" type="xsd:date" />
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:ID" />
<xsd:attribute name="CustomerID" />
<xsd:attribute name="EmployeeID" />
</xsd:complexType>
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order" type="OrderType"
maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderIDList" type="xsd:IDREFS" />
</xsd:complexType>
<xsd:element name="Customer" type="CustomerType" />
</xsd:schema>
Lo schema precedente mostra i diversi tipi di componenti che possono essere archiviati nel database. Sono inclusi SomeAttribute, SomeType, OrderTypeCustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate, e ShippedDate.
Categorie di componenti
I componenti dello schema archiviati nel database rientrano nelle categorie seguenti:
ELEMENTO
ATTRIBUTO
TYPE (per tipi semplici o complessi)
ATTRIBUTEGROUP
MODELGROUP
Per esempio:
SomeAttribute è un componente ATTRIBUTE.
SomeType, OrderType e CustomerType sono componenti TYPE.
Il cliente è un componente ELEMENT.
Quando si importa uno schema nel database, SQL Server non archivia lo schema stesso. SQL Server archivia invece i vari componenti singoli. Ovvero, il <tag Schema> non viene archiviato, vengono mantenuti solo i componenti definiti al suo interno. Tutti gli elementi dello schema non vengono mantenuti. Se il <tag Schema> contiene attributi che specificano il comportamento predefinito dei relativi componenti, questi attributi vengono spostati nei componenti dello schema all'interno di esso durante il processo di importazione, come illustrato nella tabella seguente.
| Nome dell'attributo | Comportamento |
|---|---|
| attributeFormDefault | Attributo form applicato a tutte le dichiarazioni di attributo nello schema in cui non è già presente e il valore viene impostato sul valore dell'attributo attributeFormDefault . |
| elementFormDefault | Attributo form applicato a tutte le dichiarazioni di elemento nello schema in cui non è già presente e il valore viene impostato sul valore dell'attributo elementFormDefault . |
| blockDefault | Attributo block applicato a tutte le dichiarazioni di elemento e alle definizioni dei tipi in cui non è già presente e il valore viene impostato sul valore dell'attributo blockDefault . |
| finalDefault | L'attributo finale applicato a tutte le dichiarazioni di elemento e alle definizioni di tipo in cui non è già presente e il valore viene impostato sul valore dell'attributo finalDefault . |
| targetNamespace | Le informazioni sui componenti appartenenti allo spazio dei nomi di destinazione vengono archiviate nei metadati. |
Autorizzazioni per una raccolta di XML Schema
Per eseguire le operazioni seguenti, è necessario disporre delle autorizzazioni necessarie:
Creare/caricare la raccolta degli schemi XML
Modificare la raccolta di schema XML
Eliminare la raccolta di XML Schema
Utilizzare la raccolta di XML Schema per digitare
xmlcolonne, variabili e parametri oppure usarla nei vincoli di tabella o colonna
Il modello di sicurezza di SQL Server consente l'autorizzazione CONTROL per ogni oggetto. L'utente autorizzato di questa autorizzazione ottiene tutte le altre autorizzazioni per l'oggetto . Il proprietario dell'oggetto dispone anche di tutte le autorizzazioni per l'oggetto .
Il proprietario e il cessionario del permesso di CONTROLLO su un oggetto possono concedere qualsiasi autorizzazione per l'oggetto. Un utente che non è il proprietario e non dispone dell'autorizzazione CONTROL può comunque concedere l'autorizzazione per un oggetto quando viene specificato WITH GRANT OPTION. Si supponga, ad esempio, che l'utente A disponga dell'autorizzazione REFERENCES sulla raccolta di XML schema S, tramite WITH GRANT OPTION, ma non disponga di altre autorizzazioni su S. L'utente A potrebbe concedere all'utente B l'autorizzazione REFERENCES sulla raccolta di schemi S.
Il modello di sicurezza consente inoltre di creare e usare raccolte di XML Schema o trasferire la proprietà da un utente a un altro. Negli argomenti seguenti vengono descritte le autorizzazioni per la raccolta di XML Schema.
Concedere autorizzazioni per una raccolta di XML Schema
In questo argomento viene illustrato come concedere le autorizzazioni per creare una raccolta di XML Schema e come concedere autorizzazioni per un oggetto raccolta di XML Schema.
Revocare le autorizzazioni per una raccolta di XML Schema
In questo argomento viene illustrato come usare la revoca delle autorizzazioni per impedire la creazione di una raccolta di XML Schema e come revocare le autorizzazioni per un oggetto raccolta di XML Schema.
Negare le autorizzazioni per una raccolta di XML Schema
In questo argomento viene illustrato come negare le autorizzazioni per creare una raccolta di XML Schema e negare l'autorizzazione per un oggetto raccolta di XML Schema.
Ottenere informazioni su schemi XML e raccolte di schemi
Le raccolte di XML Schema vengono enumerate nella vista del catalogo sys.xml_schema_collections. La raccolta di XML Schema "sys" è definita dal sistema. Contiene gli spazi dei nomi predefiniti che possono essere usati in tutte le raccolte di XML Schema definite dall'utente senza doverli caricare in modo esplicito. Questo elenco contiene i namespace di xml, xs, xsi, fn e xdt. Altre due viste del catalogo sono sys.xml_schema_namespaces, che enumera tutti gli spazi dei nomi all'interno di ogni collezione di schemi XML, e sys.xml_components, che enumera tutti i componenti dello schema XML in ogni collezione di schemi XML.
La funzione predefinita XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, restituisce un'istanza xml del tipo di dati. Questa istanza contiene frammenti di XML Schema per gli schemi contenuti in una raccolta di XML Schema, ad eccezione degli XML Schema predefiniti.
È possibile enumerare il contenuto di una raccolta di XML Schema nei modi seguenti:
Scrivere Transact-SQL query sulle viste del catalogo appropriate per le raccolte di XML Schema.
Usare la funzione predefinita XML_SCHEMA_NAMESPACE().Use the built-in function XML_SCHEMA_NAMESPACE(). È possibile applicare
xmlmetodi di tipo di dati all'output di questa funzione. Non è tuttavia possibile modificare gli XML Schema sottostanti.
Questi esempi sono illustrati negli esempi seguenti.
Esempio: enumerare gli spazi dei nomi XML in una raccolta di XML Schema
Usare la query seguente per la raccolta dello schema XML "myCollection":
SELECT XSN.name
FROM sys.xml_schema_collections XSC JOIN sys.xml_schema_namespaces XSN
ON (XSC.xml_collection_id = XSN.xml_collection_id)
WHERE XSC.name = 'myCollection'
Esempio: enumerare il contenuto di una raccolta di XML Schema
L'istruzione seguente enumera il contenuto della raccolta di XML Schema "myCollection" all'interno dello schema relazionale dbo.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection')
I singoli XML Schema all'interno della raccolta possono essere ottenuti come xml istanze del tipo dati specificando lo spazio dei nomi di destinazione come terzo argomento a XML_SCHEMA_NAMESPACE(). Questo è illustrato nell'esempio seguente.
Esempio: restituire uno schema specificato da una raccolta di XML Schema
L'istruzione seguente restituisce lo schema XML con il namespace target "https://www.microsoft.com/books" dalla raccolta di schemi XML "myCollection" all'interno dello schema relazionale dbo.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/books')
Esecuzione di query su XML Schema
È possibile eseguire query sugli schemi XML che hai caricato nelle raccolte di schemi XML nei modi seguenti:
Scrivi query Transact-SQL sulle viste del catalogo per gli spazi dei nomi dello schema XML.
Creare una tabella contenente una
xmlcolonna del tipo di dati per archiviare gli XML Schema e caricarli anche nel sistema di tipi XML. È possibile eseguire query sulla colonna XML usando i metodi delxmltipo di dati. È anche possibile compilare un indice XML in questa colonna. Tuttavia, con questo approccio, l'applicazione deve mantenere la coerenza tra gli XML Schema archiviati nella colonna XML e il sistema di tipi XML. Ad esempio, se si rilascia lo spazio dei nomi XML Schema dal sistema di tipi XML, è necessario eliminarlo dalla tabella per mantenere la coerenza.
Vedere anche
Visualizzare una raccolta di XML Schema archiviata
Pre-elaborare uno schema per unire schemi inclusi
Requisiti e limitazioni per le raccolte di XML Schema nel server