Raccolte di XML Schema (SQL Server)XML Schema Collections (SQL Server)

Come descritto nell'argomento xml (Transact-SQL), SQL Server offre funzionalità per l'archiviazione nativa dei dati XML tramite il tipo di dati xml.As described in the topic, xml (Transact-SQL), SQL Server provides native storage of XML data through the xml data type. È facoltativamente possibile associare schemi XSD a una variabile o colonna di tipo xml tramite una raccolta di XML Schema.You can optionally associate XSD schemas with a variable or a column of xml type through an XML schema collection. Una raccolta di XML Schema archivia gli elementi XML Schema importati e può essere quindi utilizzata per eseguire le operazioni seguenti:The XML schema collection stores the imported XML schemas and is then used to do the following:

  • Convalidare istanze XML.Validate XML instances

  • Tipizzare i dati XML a mano a mano che vengono archiviati nel database.Type the XML data as it is stored in the database

    Si noti che una raccolta di XML Schema è un'entità di metadati analoga a una tabella in un database.Note that the XML schema collection is a metadata entity like a table in the database. Le raccolte di schemi XML possono essere create, modificate ed eliminate.You can create, modify, and drop them. Gli schemi specificati in un'istruzione CREATE XML SCHEMA COLLECTION (Transact-SQL) vengono automaticamente importati nell'oggetto raccolta di XML Schema appena creato.Schemas specified in a CREATE XML SCHEMA COLLECTION (Transact-SQL) statement are automatically imported into the newly created XML schema collection object. È possibile importare altri schemi o componenti di schema in un oggetto raccolta esistente nel database, usando l'istruzione ALTER XML SCHEMA COLLECTION (Transact-SQL).You can import additional schemas or schema components into an existing collection object in the database by using the ALTER XML SCHEMA COLLECTION (Transact-SQL) statement.

    Come descritto nell'argomento 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.As described in the topic, Typed vs. Untyped XML, the XML stored in a column or variable that a schema is associated with is referred to as typed XML, because the schema provides the necessary data type information for the instance data. SQL Server utilizza tali informazioni sul tipo per ottimizzare l'archiviazione dei dati.SQL Server uses this type information to optimize data storage.

    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.The query-processing engine also uses the schema for type checking and to optimize queries and data modification.

    Per i valori xmltipizzati, SQL Server usa la raccolta di XML Schema associata per convalidare l'istanza XML.Also, SQL Server uses the associated XML schema collection, in the case of typed xml, to validate the XML instance. Se l'istanza XML è conforme allo schema, il database consente di archiviarla nel sistema insieme alle relative informazioni sul tipo,If the XML instance complies with the schema, the database allows the instance to be stored in the system with their type information. in caso contrario la rifiuta.Otherwise, it rejects the instance.

    Per recuperare la raccolta di schemi archiviata nel database è possibile utilizzare la funzione intrinseca XML_SCHEMA_NAMESPACE.You can use the intrinsic function XML_SCHEMA_NAMESPACE to retrieve the schema collection that is stored in the database. Per altre informazioni, vedere Visualizzare una raccolta di XML Schema archiviata.For more information, see View a Stored XML Schema Collection.

    La raccolta di XML Schema può essere utilizzata anche per tipizzare variabili, parametri e colonne XML.You can also use the XML schema collection to type XML variables, parameters, and columns.

Istruzioni DDL per la gestione di raccolte di XML Schema DDL for Managing Schema Collections

È possibile creare raccolte di XML Schema nel database e associarle a variabili e colonne di tipo xml .You can create XML schema collections in the database and associate them with variables and columns of xml type. Per gestire le raccolte di schemi nel database, in SQL ServerSQL Server sono disponibili le istruzioni DDL seguenti:To manage schema collections in the database, SQL ServerSQL Server provides the following DDL statements:

  • CREATE XML SCHEMA COLLECTION (Transact-SQL) Importa i componenti di schema in un database.CREATE XML SCHEMA COLLECTION (Transact-SQL) Imports schema components into a database.

  • ALTER XML SCHEMA COLLECTION (Transact-SQL) Modifica i componenti di schema in una raccolta XML Schema esistente.ALTER XML SCHEMA COLLECTION (Transact-SQL) Modifies the schema components in an existing XML schema collection.

  • DROP XML SCHEMA COLLECTION (Transact-SQL) Elimina l'intera raccolta XML Schema e tutti i relativi componenti.DROP XML SCHEMA COLLECTION (Transact-SQL) Deletes a complete XML schema collection and all its components.

    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.To use an XML schema collection and the schemas it contains, you must first create the collection and the schemas by using the CREATE XML SCHEMA COLLECTION statement. 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.After the schema collection is created, you can then create variables and columns of xml type and associate the schema collection with them. Si noti che dopo aver creato la raccolta, nei metadati verranno archiviati diversi componenti degli schemi.Note that after a schema collection is created, various schema components are stored in the metadata. È inoltre possibile utilizzare l'istruzione ALTER XML SCHEMA COLLECTION per aggiungere altri componenti agli schemi o nuovi schemi alla raccolta.You can also use the ALTER XML SCHEMA COLLECTION to add more components to the existing schemas or add new schemas to an existing collection.

    Per eliminare la raccolta di schemi, utilizzare l'istruzione DROP XML SCHEMA COLLECTION,To drop the schema collection, use the DROP XML SCHEMA COLLECTION statement. che consente di eliminare tutti gli schemi contenuti nella raccolta e di rimuovere l'oggetto raccolta.This drops all schemas that are contained in the collection and removes the collection object. Si noti che prima di eliminare una raccolta di schemi è necessario soddisfare le condizioni descritte in DROP XML SCHEMA COLLECTION (Transact-SQL).Note that before you can drop a schema collection, the conditions described in DROP XML SCHEMA COLLECTION (Transact-SQL)must be met.

Informazioni sui componenti dello schema Understanding Schema Components

Quando si utilizza l'istruzione CREATE XML SCHEMA COLLECTION, vengono importati nel database diversi componenti dello schema,When you use the CREATE XML SCHEMA COLLECTION statement, various schema components are imported into the database. ad esempio elementi, attributi e definizioni di tipi dello schema.Schema components include schema elements, attributes, and type definitions. Se si utilizza l'istruzione DROP XML SCHEMA COLLECTION, verrà rimossa l'intera raccolta.When you use the DROP XML SCHEMA COLLECTION statement, you remove the complete collection.

L'istruzione CREATE XML SCHEMA COLLECTION salva i componenti dello schema in diverse tabelle di sistema.CREATE XML SCHEMA COLLECTION saves the schema components into various system tables.

Si consideri ad esempio lo schema seguente:For example, consider the following schema:

<?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,The previous schema shows the different types of components that can be stored in the database. tra cui SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDatee ShippedDate.These include SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate, and ShippedDate.

Categorie di componentiComponent Categories

I componenti dello schema archiviati nel database rientrano nelle categorie seguenti:The Schema components stored in the database fall into the following categories:

  • ELEMENTELEMENT

  • ATTRIBUTEATTRIBUTE

  • TYPE (per tipi semplici o complessi)TYPE (for simple or complex types)

  • ATTRIBUTEGROUPATTRIBUTEGROUP

  • MODELGROUPMODELGROUP

    Esempio:For example:

  • SomeAttribute è un componente di tipo ATTRIBUTE.SomeAttribute is an ATTRIBUTE component.

  • SomeType, OrderTypee CustomerType sono componenti di tipo TYPE.SomeType, OrderType, and CustomerType are TYPE components.

  • Customer è un componente ELEMENT.Customer is an ELEMENT component.

    Quando si importa uno schema nel database, SQL ServerSQL Server non archivia direttamente lo schema,When you import a schema into the database, SQL ServerSQL Server does not store the schema itself. SQL ServerSQL Server archivia invece i singoli componenti.Instead, SQL ServerSQL Server stores the various individual components. Ciò significa che il tag <Schema> non viene archiviato, ma vengono mantenuti i componenti definiti al suo interno.That is, the <Schema> tag is not stored, only the components that are defined within it are preserved. Non vengono mantenuti tutti gli elementi dello schema.All schema elements are not preserved. 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.If the <Schema> tag contains attributes that specify default behavior of its components, these attributes are moved to the schema components within it during the import process, as shown in the following table.

Nome dell'attributoAttribute name ComportamentoBehavior
attributeFormDefaultattributeFormDefault 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 .The form attribute applied to all attribute declarations in the schema where it is not already present and the value is set to the value of the attributeFormDefault attribute.
elementFormDefaultelementFormDefault 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 .The form attribute applied to all element declarations in the schema where it is not already present and the value is set to the value of the elementFormDefault attribute.
blockDefaultblockDefault 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 .The block attribute applied to all element declarations and type definitions where it is not already present and the value is set to the value of the blockDefault attribute.
finalDefaultfinalDefault 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 .The final attribute applied to all element declarations and type definitions where it is not already present and the value is set to the value of the finalDefault attribute.
targetNamespacetargetNamespace Le informazioni sui componenti appartenenti allo spazio dei nomi di destinazione vengono archiviate nei metadati.Information about the components that belong to the target namespace is stored in the metadata.

Autorizzazioni per una raccolta di XML Schema Permissions on an XML Schema Collection

È necessario disporre delle autorizzazioni necessarie per eseguire le operazioni seguenti:You must have the necessary permissions to do the following:

  • Creare o caricare la raccolta XML Schema.Create/load the XML schema collection

  • Modificare la raccolta XML Schema.Modify the XML schema collection

  • Eliminare la raccolta XML Schema.Drop the XML schema collection

  • Usare la raccolta XML Schema per colonne, variabili e parametri di tipo xml oppure nei vincoli di tabella o di colonnaUse the XML schema collection to type xml type columns, variables, and parameters, or use it in table or column constraints

    Il modello di sicurezza di SQL Server consente l'autorizzazione CONTROL per tutti gli oggetti.The SQL Server security model allows CONTROL permission on every object. L'utente che dispone di questa autorizzazione ottiene tutte le altre autorizzazioni per l'oggetto.The grantee of this permission obtains all other permissions on the object. Il proprietario dell'oggetto dispone anch'esso di tutte le autorizzazioni per l'oggetto.The owner of the object also has all the permissions on the object.

    Il proprietario e l'utente che dispongono dell'autorizzazione CONTROL per un oggetto possono concedere qualsiasi autorizzazione per l'oggetto specifico.The owner and the grantee of the CONTROL permission on an object can grant any permission on the object. 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.A user who is not the owner and does not have CONTROL permission can still grant permission on an object when WITH GRANT OPTION is specified. 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.For example, assume User A has REFERENCES permission on XML schema collection S, through WITH GRANT OPTION, but no other permissions on S. User A could grant User B REFERENCES permission on schema collection 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.The security model also allows permissions to create and use XML schema collections or transfer ownership from one user to another. Negli argomenti seguenti vengono illustrate le autorizzazioni per le raccolte XML Schema.The following topics describe the XML schema collection permissions.

  • Concedere autorizzazioni per una raccolta di XML SchemaGrant Permissions on an XML Schema Collection

    Questo argomento presenta informazioni sulla concessione delle autorizzazioni per creare una raccolta XML Schema e delle autorizzazioni per un oggetto raccolta di schemi XML.This topic discussess how to grant permissions to create an XML schema collection and how to grant permissions on an XML schema collection object.

  • Revoca delle autorizzazioni per una raccolta di XML SchemaRevoke Permissions on an XML Schema Collection

    Questo argomento presenta informazioni sulla revoca delle autorizzazioni per impedire la creazione di una raccolta XML Schema e illustra la revoca delle autorizzazioni per un oggetto raccolta XML Schema.This topic discusses how revoking permissions can be used to prevent the creation of an XML schema collection and how to revoke permissions on an XML schema collection object.

  • Negazione delle autorizzazioni per una raccolta di XML SchemaDeny Permissions on an XML Schema Collection

    In questo argomento vengono fornite informazioni sulla negazione delle autorizzazioni per creare una raccolta XML Schema e delle autorizzazioni per un oggetto raccolta XML Schema.This topic discusses how to deny permissions to create an XML schema collection and deny permission on an XML schema collection object.

Acquisizione di Informazioni su XML Schema e Raccolte di schemi Getting Information about XML Schemas and Schema Collections

Le raccolte di XML Schema sono enumerate nella vista del catalogo sys.xml_schema_collections.XML schema collections are enumerated in the catalog view, sys.xml_schema_collections. La raccolta di XML Schema "sys" è definita dal sistemaThe XML schema collection "sys" is defined by the system. 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.It contains the predefined namespaces that can be used in all user-defined XML schema collections without having to load them explicitly. Tale elenco contiene gli spazi dei nomi per xml, xs, xsi, fn e xdt.This list contains the namespaces for xml, xs, xsi, fn, and xdt. Sono disponibili altre due viste del catalogo: sys.xml_schema_namespaces, che enumera tutti gli spazi dei nomi in ogni raccolta di XML Schema, e sys.xml_components, che enumera tutti i componenti degli elementi XML Schema presenti in ognuno.Two other catalog views are sys.xml_schema_namespaces, which enumerates all namespaces within each XML schema collection, and sys.xml_components, which enumerates all XML schema components within each XML schema.

La funzione predefinita XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-urirestituisce un'istanza del tipo di dati xml .The built-in function XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, yields an xml data type instance.. Tale istanza contiene frammenti di XML Schema per gli schemi inclusi in una raccolta di XML Schema, ad eccezione degli elementi XML Schema predefiniti.This instance contains XML schema fragments for schemas that are contained in an XML schema collection, except the predefined XML schemas.

Per enumerare il contenuto di una raccolta di XML Schema è possibile:You can enumerate the contents of an XML schema collection in the following ways:

  • Scrivere query Transact-SQL sulle viste del catalogo appropriate per le raccolte di XML Schema.Write Transact-SQL queries on the appropriate catalog views for XML schema collections.

  • Usare la funzione predefinita XML_SCHEMA_NAMESPACE().Use the built-in function XML_SCHEMA_NAMESPACE(). È possibile applicare i metodi per il tipo di dati xml all'output di questa funzione,You can apply xml data type methods on the output of this function. ma non è possibile modificare gli elementi XML Schema sottostanti.However, you cannot modify the underlying XML schemas.

    Queste tecniche di enumerazione sono illustrate negli esempi seguenti.These are illustrated in the following examples.

Esempio: enumerazione degli spazi dei nomi XML in una raccolta di XML SchemaExample: Enumerate the XML Namespaces in an XML Schema Collection

Per la raccolta di XML Schema "myCollection" utilizzare la query seguente:Use the following query for the XML schema collection "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: enumerazione del contenuto di una raccolta di XML SchemaExample: Enumerate the Contents of an XML Schema Collection

L'istruzione seguente enumera il contenuto della raccolta di XML Schema "myCollection" nell'ambito dello schema relazionale dbo.The following statement enumerates the contents of the XML schema collection "myCollection" within the relational schema, 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(),Individual XML schemas within the collection can be obtained as xml data type instances by specifying the target namespace as the third argument to XML_SCHEMA_NAMESPACE(). come illustrato nell'esempio seguente.This is shown in the following example.

Esempio: restituzione di uno schema specifico da una raccolta di XML SchemaExample: Output a Specified Schema from an XML Schema Collection

L'istruzione seguente restituisce l'elemento XML Schema con spazio dei nomi di destinazione "http://www.microsoft.com/books" dalla raccolta di XML Schema "myCollection" nell'ambito dello schema relazionale dbo.The following statement outputs the XML schema with the target namespace "http://www.microsoft.com/books" from the XML schema collection "myCollection" within the relational schema, dbo.

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

Esecuzione di query su elementi XML SchemaQuerying XML Schemas

Per eseguire query sugli elementi XML Schema caricati in raccolte di XML Schema è possibile:You can query XML schemas that you have loaded into XML schema collections in the following ways:

  • Scrivere query Transact-SQL sulle viste del catalogo per gli spazi dei nomi degli elementi XML Schema.Write Transact-SQL queries on catalog views for XML schema namespaces.

  • 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.Create a table that contains an xml data type column to store your XML schemas and also load them into the XML type system. Per eseguire query sulla colonna XML, è possibile usare i metodi per il tipo di dati xml .You can query the XML column by using the xml data type methods. È inoltre possibile compilare un indice XML su questa colonna.Also, you can build an XML index on this column. 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.However, with this approach, the application must maintain consistency between the XML schemas stored in the XML column and the XML type system. 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.For example, if you drop the XML schema namespace from the XML type system, you also have to drop it from the table in order to preserve consistency.

Vedere ancheSee Also

Visualizzare una raccolta di XML Schema archiviata View a Stored XML Schema Collection
Pre-elaborazione di uno schema per unire schemi inclusi Preprocess a Schema to Merge Included Schemas
Requisiti e limitazioni per l'utilizzo di raccolte di XML Schema nel server Requirements and Limitations for XML Schema Collections on the Server