Istruzioni DDL per la gestione di raccolte di schemi XML nel database
Come illustrato nell'argomento Gestione di raccolte di schemi XML sul server, è possibile creare raccolte di schemi XML nel database e associarle a variabili e colonne di tipo xml. Per gestire le raccolte di schemi nel database, in SQL Server sono disponibili le istruzioni DDL seguenti:
CREATE XML SCHEMA COLLECTION (Transact-SQL) Consente di importare i componenti di schema in un database.
ALTER XML SCHEMA COLLECTION (Transact-SQL) Consente di aggiungere nuovi componenti di schema ad una raccolta di schemi XML esistente.
DROP XML SCHEMA COLLECTION (Transact-SQL) Consente di eliminare l'intera raccolta di schemi XML e tutti i relativi componenti.
Per utilizzare una raccolta di schemi XML 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, è quindi possibile creare le variabili e le colonne di tipo xml e associare a esse la raccolta di schemi. Si noti che 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, 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 i quali sono compresi 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
Esempio:
SomeAttribute è un componente di tipo ATTRIBUTE.
SomeType, OrderType e CustomerType sono componenti di tipo TYPE.
Customer è un componente ELEMENT.
Quando si importa uno schema nel database, SQL Server non archivia direttamente lo schema, ma i vari singoli componenti. 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 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. |