Raccolte di XML Schema (SQL Server)
Si applica a:SQL ServerDatabase SQL diAzure Istanza gestita di SQL di Azure
Come descritto nell'articolo xml (Transact-SQL), SQL Server fornisce l'archiviazione nativa dei dati XML tramite il tipo di dati xml. È facoltativamente possibile associare schemi XSD a una variabile o colonna di tipo xml tramite una raccolta di XML Schema. Una raccolta di XML Schema archivia gli elementi XML Schema importati e può essere quindi utilizzata per eseguire le operazioni seguenti:
Convalidare istanze XML.
Tipizzare i dati XML a mano a mano che vengono archiviati nel database.
La raccolta di XML Schema è un'entità di metadati come una tabella nel database. Le raccolte di schemi XML possono essere create, modificate ed eliminate. Gli schemi specificati in un'istruzione CREATE XML SCHEMA COLLECTION (Transact-SQL) vengono automaticamente importati nell'oggetto raccolta di XML Schema appena creato. È possibile importare altri schemi o componenti di schema in un oggetto raccolta esistente nel database, usando l'istruzione ALTER XML SCHEMA COLLECTION (Transact-SQL) .
Come descritto nell'articolo, Typed vs. Untyped XML, il codice XML archiviato in una colonna o variabile a cui è associato uno schema è definito XML tipizzato , perché lo schema fornisce le informazioni sul tipo di dati necessarie per i dati dell'istanza. SQL Server utilizza tali informazioni sul tipo per ottimizzare l'archiviazione dei dati.
Lo schema viene inoltre utilizzato dal motore di elaborazione delle query per la verifica dei tipi, per l'ottimizzazione delle query e per la modifica dei dati.
INOLTRE, SQL Server usa la raccolta di XML Schema associata, con xml tipizzato, per convalidare l'istanza XML. Se l'istanza XML è conforme allo schema, il database consente di archiviarla nel sistema insieme alle relative informazioni sul tipo, in caso contrario la rifiuta.
Per recuperare la raccolta di schemi archiviata nel database è possibile utilizzare la funzione intrinseca XML_SCHEMA_NAMESPACE. Per altre informazioni, vedere Visualizzare una raccolta di XML Schema archiviata.
La raccolta di XML Schema può essere utilizzata anche per tipizzare 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 tipo xml . 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 XML Schema e i relativi schemi, è necessario innanzitutto creare la raccolta e gli schemi utilizzando l'istruzione CREATE XML SCHEMA COLLECTION. Dopo aver creato la raccolta di schemi è possibile creare le variabili e le colonne di tipo xml e associare a esse la raccolta di schemi. Dopo aver creato una raccolta di schemi, i vari componenti dello schema vengono archiviati nei metadati. È inoltre possibile utilizzare l'istruzione ALTER XML SCHEMA COLLECTION per aggiungere altri componenti agli schemi o nuovi schemi alla raccolta.
Per eliminare la raccolta di schemi, utilizzare l'istruzione DROP XML SCHEMA COLLECTION, che consente di eliminare tutti gli schemi contenuti nella raccolta e di rimuovere l'oggetto raccolta. 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 utilizza l'istruzione CREATE XML SCHEMA COLLECTION, vengono importati nel database diversi componenti dello schema, ad esempio elementi, attributi e definizioni di tipi dello schema. Se si utilizza l'istruzione DROP XML SCHEMA COLLECTION, verrà rimossa l'intera raccolta.
L'istruzione CREATE XML SCHEMA COLLECTION salva i componenti dello schema in diverse 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>
Questo schema mostra i diversi tipi di componenti che possono essere archiviati nel database, tra cui SomeAttribute
, SomeType
, OrderType
, CustomerType
, Customer
, Order
, CustomerID
, OrderID
, OrderDate
, RequiredDate
e ShippedDate
.
Categorie di componenti
I componenti dello schema archiviati nel database rientrano nelle categorie seguenti:
ELEMENT
ATTRIBUTE
TYPE (per tipi semplici o complessi)
ATTRIBUTEGROUP
MODELGROUP
Ad esempio:
SomeAttribute
è un componente ATTRIBUTE.SomeType
,OrderType
eCustomerType
sono componenti TYPE.Customer
è 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. Non vengono mantenuti tutti gli elementi dello schema. 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.
Attribute name | Comportamento |
---|---|
attributeFormDefault | Attributo form applicato a tutte le dichiarazioni di attributo nello schema nelle quali non è già presente e dove il valore viene impostato sul valore dell'attributo attributeFormDefault . |
elementFormDefault | Attributo form applicato a tutte le dichiarazioni di elemento nello schema nelle quali non è già presente e dove il valore viene impostato sul valore dell'attributo elementFormDefault . |
blockDefault | Attributo block applicato a tutte le dichiarazioni di elemento e definizioni di tipo nelle quali non è già presente e dove il valore viene impostato sul valore dell'attributo blockDefault . |
finalDefault | Attributo final applicato a tutte le dichiarazioni di elemento e definizioni di tipo nelle quali non è già presente e dove 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
È necessario disporre delle autorizzazioni necessarie per eseguire le operazioni seguenti:
Creare o caricare la raccolta XML Schema.
Modificare la raccolta XML Schema.
Eliminare la raccolta XML Schema.
Usare la raccolta XML Schema per colonne, variabili e parametri di tipo xml oppure nei vincoli di tabella o di colonna
Il modello di sicurezza di SQL Server consente l'autorizzazione CONTROL per tutti gli oggetti. L'utente che dispone di questa autorizzazione ottiene tutte le altre autorizzazioni per l'oggetto. Il proprietario dell'oggetto dispone anch'esso di tutte le autorizzazioni per l'oggetto.
Il proprietario e l'utente che dispongono dell'autorizzazione CONTROL per un oggetto possono concedere qualsiasi autorizzazione per l'oggetto specifico. 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. Ad esempio, si supponga che Utente A disponga tramite WITH GRANT OPTION dell'autorizzazione REFERENCES per la raccolta XML Schema denominata S, ma di nessun'altra autorizzazione per la raccolta. Utente A può concedere a Utente B l'autorizzazione REFERENCES per la raccolta di schemi S.
Il modello di sicurezza consente inoltre le autorizzazioni per la creazione e l'utilizzo di raccolte XML Schema o per il trasferimento della proprietà da un utente a un altro. Negli articoli seguenti vengono descritte le autorizzazioni per la raccolta di XML Schema.
Concedere autorizzazioni per una raccolta di XML Schema
Questo articolo illustra 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
Questo articolo illustra 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
Questo articolo illustra 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 XML Schema e raccolte di schemi
Le raccolte di XML Schema sono enumerate nella vista del catalogo sys.xml_schema_collections. La raccolta sys
di XML Schema è definita dal sistema. e contiene gli spazi dei nomi predefiniti che è possibile utilizzare in tutte le raccolte di XML Schema definite dall'utente senza doverli caricare in modo esplicito. Questo elenco contiene gli spazi dei nomi per 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 raccolta di XML Schema e sys.xml_components
, che enumera tutti i componenti di XML Schema all'interno di ogni XML Schema.
La funzione XML_SCHEMA_NAMESPACE
predefinita , schemaName, XmlSchemacollectionName, namespace-uri
, restituisce un'istanza del tipo di dati xml . Tale istanza contiene frammenti di XML Schema per gli schemi inclusi in una raccolta di XML Schema, ad eccezione degli elementi XML Schema predefiniti.
Per enumerare il contenuto di una raccolta di XML Schema è possibile:
Scrivere query Transact-SQL sulle viste del catalogo appropriate per le raccolte di XML Schema.
Usare la funzione
XML_SCHEMA_NAMESPACE()
predefinita . È possibile applicare i metodi per il tipo di dati xml all'output di questa funzione, Non è tuttavia possibile modificare gli XML Schema sottostanti.
Queste tecniche di enumerazione sono illustrate negli esempi seguenti.
Esempi
Enumerare gli spazi dei nomi XML in una raccolta di XML Schema
Usare la query seguente per la raccolta myCollection
di XML Schema :
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';
Enumerare il contenuto di una raccolta di XML Schema
L'istruzione seguente enumera il contenuto della raccolta myCollection
di XML Schema all'interno dello schema relazionale, dbo
.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection');
I singoli elementi XML Schema inclusi nella raccolta possono essere ottenuti come istanze del tipo di dati xml , specificando lo spazio dei nomi di destinazione come terzo argomento della funzione XML_SCHEMA_NAMESPACE(), come illustrato nell'esempio seguente.
Restituire uno schema specificato da una raccolta di XML Schema
L'istruzione seguente restituisce l'XML Schema con lo spazio dei nomi https://www.microsoft.com/was-books
di destinazione finto dalla raccolta myCollection
di XML Schema all'interno dello schema relazionale, dbo
.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')
Eseguire query su XML Schema
Per eseguire query sugli elementi XML Schema caricati in raccolte di XML Schema è possibile:
Scrivere query Transact-SQL sulle viste del catalogo per gli spazi dei nomi degli elementi XML Schema.
Creare una tabella contenente una colonna con tipo di dati xml per archiviare gli elementi XML Schema e quindi caricarli nel sistema di tipi XML. Per eseguire query sulla colonna XML, è possibile usare i metodi per il tipo di dati xml . È inoltre possibile compilare un indice XML su questa colonna. Questo approccio richiede tuttavia che l'applicazione mantenga la consistenza tra gli elementi XML Schema archiviati nella colonna XML e il sistema di tipi XML. Se ad esempio si elimina lo spazio dei nomi di un elemento XML Schema dal sistema di tipi XML, per mantenere la consistenza sarà necessario eliminarlo anche dalla tabella.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Invia e visualizza il feedback per