Condividi tramite


Raccolte di XML Schema (SQL Server)

Si applica a:SQL Serverdatabase SQL di AzureIstanza gestita di SQL di AzureDatabase SQL in Microsoft Fabric

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.

  • Digitare i dati XML esattamente come vengono archiviati nel database.

Una raccolta di schemi XML è un'entità di metadati analoga a una tabella in un database. Possono essere create, modificate ed eliminate. Gli schemi specificati in un'istruzione CREATE XML SCHEMA COLLECTION (Transact-SQL) vengono importati automaticamente nell'oggetto raccolta 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'articolo Confronto dati XML tipizzati con dati XML non tipizzati, i dati XML archiviati in una colonna o in una variabile a cui è associato uno schema sono detti dati XML tipizzati 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.

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 utilizza la raccolta di schema XML associata, con xml tipizzati, 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, rifiuta l'istanza.

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.

Istruzioni DDL per la gestione di raccolte di schemi XML

È 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:

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 la raccolta, nei metadati verranno archiviati diversi componenti degli schemi. È 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, Questo elimina tutti gli schemi contenuti nella collezione e rimuove l'oggetto della collezione. 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, I componenti dello schema includono elementi, attributi e definizioni di tipi. 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 , , , , , , , , , e .

Categorie di componenti

I componenti dello schema archiviati nel database rientrano nelle categorie seguenti:

  • Elemento

  • ATTRIBUTO

  • TYPE (per tipi semplici o complessi)

  • GRUPPO DI ATTRIBUTI

  • MODELGROUP

Ad esempio:

  • è un componente ATTRIBUTE.

  • , , e sono componenti di tipo TYPE.

  • è un componente ELEMENT.

Quando si importa uno schema nel database, SQL Server non archivia lo schema stesso. Al contrario, SQL Server archivia i vari componenti singoli. Ciò significa che il tag Schema non viene archiviato, ma vengono mantenuti 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, tali attributi vengono spostati nei componenti dello schema 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 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 L'attributo final si applica a tutte le dichiarazioni di elementi e definizioni di tipi in cui non è già presente e il suo valore è impostato su quello dell'attributo "finalDefault".
targetNamespace Le informazioni sui componenti appartenenti allo spazio dei nomi di destinazione vengono archiviate nei metadati.

Autorizzazioni per una raccolta di schemi XML

È necessario disporre delle autorizzazioni necessarie per eseguire le operazioni seguenti:

  • Creare o caricare la collezione di schemi XML.

  • Modificare la raccolta di schemi XML.

  • Eliminare la raccolta dello schema XML.

  • Utilizzare la raccolta XML Schema per definire il tipo di colonne, variabili e parametri XML, oppure usala nei vincoli di tabella o di colonna.

Il modello di sicurezza SQL Server consente l'autorizzazione CONTROL per ogni oggetto. 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 che non dispone dell'autorizzazione CONTROL può comunque concedere l'autorizzazione per un oggetto se è specificata WITH GRANT OPTION. Ad esempio, si immagini che Utente A disponga tramite WITH GRANT OPTION dei permessi REFERENCES per la raccolta XML Schema di S, ma non di altre autorizzazioni sulla raccolta. Utente A può concedere a Utente B i permessi 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 illustrate le autorizzazioni per le raccolte di schemi XML.

  • Concedere autorizzazioni su una collezione di XML Schema

    Questo articolo presenta informazioni sulla concessione delle autorizzazioni per creare una raccolta di schemi XML e delle autorizzazioni per un oggetto raccolta di schemi XML.

  • Revocare le autorizzazioni per una raccolta di XML Schema

    Questo articolo presenta informazioni sulla revoca delle autorizzazioni per impedire la creazione di una raccolta di schemi XML e illustra la revoca delle autorizzazioni per un oggetto raccolta di schemi XML.

  • Negare le autorizzazioni per una raccolta di XML Schema

    Questo articolo discute come negare le autorizzazioni per creare una raccolta di schemi XML e negare le autorizzazioni su un oggetto raccolta di schemi XML.

Acquisizione di Informazioni su schemi XML e raccolte di schemi

Le raccolte di XML Schema sono enumerate nella vista del catalogo sys.xml_schema_collections. La raccolta di schemi XML è definita dal sistema Contiene gli spazi dei nomi predefiniti che è possibile utilizzare in tutte le raccolte di XML Schema definite dall'utente senza caricarli in modo esplicito. Questo elenco contiene i namespace per , , , e . Sono disponibili altre due viste del catalogo: una che enumera tutti i namespace in ogni raccolta di schemi XML, e un'altra che enumera tutti i componenti degli schemi XML all'interno di ciascuno schema.

La funzione predefinita , , 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 schemi XML.

  • Usare la funzione predefinita . È possibile applicare i metodi per il tipo di dati xml all'output di questa funzione, ma non è possibile modificare gli elementi di schemi XML sottostanti.

Queste tecniche di enumerazione sono illustrate negli esempi seguenti.

Esempi

Enumerazione dei namespace XML in una collezione di schemi XML

Per la raccolta di schemi XML utilizzare la query seguente:

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';

Enumerazione del contenuto di una raccolta di schemi XML

L'istruzione seguente enumera il contenuto della raccolta di schemi XML nell'ambito dello schema relazionale .

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.

Esegui uno schema specifico da una raccolta di schemi XML

L'istruzione seguente restituisce lo schema XML con il namespace di destinazione simulato dalla raccolta di schemi XML, nel contesto dello schema relazionale.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')

Esecuzione di query su elementi di schemi XML

È possibile eseguire query sugli schemi XML che sono stati caricati 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 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. Ad esempio, se si elimina lo spazio dei nomi dello schema XML dal sistema di tipi XML, sarà necessario eliminarlo dalla tabella per mantenere la consistenza.

  • Visualizzare una raccolta di XML Schema archiviata
  • Eseguire la pre-elaborazione di uno schema per unire schemi inclusi
  • Requisiti e limitazioni per le raccolte di XML Schema nel server
  • Raccolte di XML Schema nei progetti SQL