Collections de schémas XML (SQL Server)XML Schema Collections (SQL Server)

Comme l’explique la rubrique xml (Transact-SQL), SQL Server assure un stockage natif des données XML par le biais du type de données xml.As described in the topic, xml (Transact-SQL), SQL Server provides native storage of XML data through the xml data type. Vous pouvez éventuellement associer des schémas XSD à une variable ou à une colonne de type xml à l'aide d'une collection de schémas XML.You can optionally associate XSD schemas with a variable or a column of xml type through an XML schema collection. La collection de schémas XML stocke les schémas XML importés et peut ensuite servir à :The XML schema collection stores the imported XML schemas and is then used to do the following:

  • valider des instances XML ;Validate XML instances

  • typer les données XML lors de leur stockage dans la base de données.Type the XML data as it is stored in the database

    Remarquez que la collection de schémas XML est une entité de métadonnées de même qu'une table de la base de données.Note that the XML schema collection is a metadata entity like a table in the database. Vous pouvez les créer, les modifier et les supprimer.You can create, modify, and drop them. Les schémas spécifiés dans une instruction CREATE XML SCHEMA COLLECTION (Transact-SQL) sont automatiquement importés dans l’objet de collection de schémas XML nouvellement créé.Schemas specified in a CREATE XML SCHEMA COLLECTION (Transact-SQL) statement are automatically imported into the newly created XML schema collection object. Vous pouvez importer d’autres schémas ou composants de schéma dans un objet de collection existant dans la base de données à l’aide de l’instruction 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.

    Comme l’explique la rubrique XML typé et non typé, le code XML stocké dans une colonne ou une variable à laquelle un schéma est associé est dit XML typé, car le schéma fournit toutes les informations nécessaires sur le type des données de l’instance.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 utilise ces informations de type pour optimiser le stockage des données.SQL Server uses this type information to optimize data storage.

    Le moteur de traitement des requêtes utilise aussi le schéma pour vérifier le type et optimiser les requêtes et la modification des données.The query-processing engine also uses the schema for type checking and to optimize queries and data modification.

    De plus, SQL Server utilise la collection de schémas XML associée, en cas de code xmltypé, pour valider l'instance XML.Also, SQL Server uses the associated XML schema collection, in the case of typed xml, to validate the XML instance. Si l'instance XML est conforme au schéma, la base de données autorise le stockage de l'instance dans le système avec ses informations de type.If the XML instance complies with the schema, the database allows the instance to be stored in the system with their type information. Sinon, elle rejette l'instance.Otherwise, it rejects the instance.

    Vous pouvez utiliser la fonction intrinsèque XML_SCHEMA_NAMESPACE pour récupérer la collection de schémas stockée dans la base de données.You can use the intrinsic function XML_SCHEMA_NAMESPACE to retrieve the schema collection that is stored in the database. Pour plus d’informations, consultez Afficher une collection de schémas XML stockée.For more information, see View a Stored XML Schema Collection.

    Vous pouvez aussi utiliser la collection de schémas XML pour typer les variables, les paramètres et les colonnes XML.You can also use the XML schema collection to type XML variables, parameters, and columns.

DDL pour la gestion des collections de schémas DDL for Managing Schema Collections

Vous pouvez créer des collections de schémas XML dans la base de données et les associer à des variables et des colonnes de type xml .You can create XML schema collections in the database and associate them with variables and columns of xml type. Pour gérer des collections de schémas dans la base de données, SQL ServerSQL Server fournit les instructions DDL suivantes :To manage schema collections in the database, SQL ServerSQL Server provides the following DDL statements:

  • CREATE XML SCHEMA COLLECTION (Transact-SQL) Importe les composants de schéma dans une base de données.CREATE XML SCHEMA COLLECTION (Transact-SQL) Imports schema components into a database.

  • ALTER XML SCHEMA COLLECTION (Transact-SQL) Modifie les composants de schéma dans une collection de schémas XML existante.ALTER XML SCHEMA COLLECTION (Transact-SQL) Modifies the schema components in an existing XML schema collection.

  • DROP XML SCHEMA COLLECTION (Transact-SQL) Supprime une collection de schémas XML complète et tous ses composants.DROP XML SCHEMA COLLECTION (Transact-SQL) Deletes a complete XML schema collection and all its components.

    Pour utiliser une collection de schémas XML et les schémas qu'elle contient, vous devez d'abord créer la collection et les schémas à l'aide de l'instruction 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. Une fois la collection de schémas créée, vous pouvez ensuite créer des variables et des colonnes de type xml et y associer la collection de schémas.After the schema collection is created, you can then create variables and columns of xml type and associate the schema collection with them. Notez qu'après la création d'une collection de schémas, différents composants de schémas sont stockés dans les métadonnées.Note that after a schema collection is created, various schema components are stored in the metadata. Vous pouvez également utiliser l'instruction ALTER XML SCHEMA COLLECTION pour ajouter des composants aux schémas existants ou pour ajouter de nouveaux schémas à une collection existante.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.

    Pour supprimer la collection de schémas, utilisez l'instruction DROP XML SCHEMA COLLECTION.To drop the schema collection, use the DROP XML SCHEMA COLLECTION statement. Cela supprime tous les schémas contenus dans la collection et supprime l'objet collection.This drops all schemas that are contained in the collection and removes the collection object. Notez qu’avant de pouvoir supprimer une collection de schémas, les conditions décrites dans DROP XML SCHEMA COLLECTION (Transact-SQL) doivent être remplies.Note that before you can drop a schema collection, the conditions described in DROP XML SCHEMA COLLECTION (Transact-SQL)must be met.

Description des composants de schémas Understanding Schema Components

Lorsque vous utilisez l'instruction CREATE XML SCHEMA COLLECTION, différents composants de schémas sont importés dans la base de données.When you use the CREATE XML SCHEMA COLLECTION statement, various schema components are imported into the database. Les composants de schémas incluent des éléments de schémas, des attributs et des définitions de types.Schema components include schema elements, attributes, and type definitions. Lorsque vous utilisez l'instruction DROP XML SCHEMA COLLECTION, vous supprimez l'intégralité de la collection.When you use the DROP XML SCHEMA COLLECTION statement, you remove the complete collection.

CREATE XML SCHEMA COLLECTION enregistre les composants de schémas dans différentes tables système.CREATE XML SCHEMA COLLECTION saves the schema components into various system tables.

Imaginons, par exemple, le schéma suivant :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>  

Le schéma précédent montre les différents types de composants qui peuvent être stockés dans la base de données.The previous schema shows the different types of components that can be stored in the database. Il s'agit notamment de SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDateet ShippedDate.These include SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate, and ShippedDate.

Catégories de composantComponent Categories

Les composants de schéma stockés dans la base de données appartiennent aux catégories suivantes :The Schema components stored in the database fall into the following categories:

  • ELEMENTELEMENT

  • ATTRIBUTEATTRIBUTE

  • TYPE (pour les types simples ou complexes)TYPE (for simple or complex types)

  • ATTRIBUTEGROUPATTRIBUTEGROUP

  • MODELGROUPMODELGROUP

    Exemple :For example:

  • SomeAttribute est un composant ATTRIBUTE.SomeAttribute is an ATTRIBUTE component.

  • SomeType, OrderTypeet CustomerType sont des composants TYPE.SomeType, OrderType, and CustomerType are TYPE components.

  • Customer est un composant ELEMENT.Customer is an ELEMENT component.

    Lorsque vous importez un schéma dans la base de données, SQL ServerSQL Server ne stocke pas le schéma lui-même.When you import a schema into the database, SQL ServerSQL Server does not store the schema itself. Au lieu de cela, SQL ServerSQL Server stocke les divers composants individuels.Instead, SQL ServerSQL Server stores the various individual components. Autrement dit, la balise <Schema> n’est pas stockée ; seuls les composants qui y sont définis sont conservés.That is, the <Schema> tag is not stored, only the components that are defined within it are preserved. Tous les éléments de schémas ne sont pas préservés.All schema elements are not preserved. Si la balise <Schema> contient des attributs qui spécifient le comportement par défaut de ses composants, ces attributs sont déplacés vers les composants de schéma dans la balise pendant le processus d’importation, comme illustré dans le tableau suivant.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.

Nom de l'attributAttribute name ComportementBehavior
attributeFormDefaultattributeFormDefault L'attribut form est appliqué à toutes les déclarations d'attributs du schéma où il n'est pas déjà présent et la valeur est définie à la valeur de l'attribut 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 L'attribut form est appliqué à toutes les déclarations d'éléments du schéma où il n'est pas déjà présent et la valeur est définie à la valeur de l'attribut 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 L'attribut block est appliqué à toutes les déclarations d'éléments et définitions de types où il n'est pas déjà présent et la valeur est définie à la valeur de l'attribut 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 L'attribut final est appliqué à toutes les déclarations d'éléments et définitions de types où il n'est pas déjà présent et la valeur est définie à la valeur de l'attribut 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 Les informations relatives aux composants qui appartiennent à l'espace de noms cible sont stockées dans les métadonnées.Information about the components that belong to the target namespace is stored in the metadata.

Autorisations sur une collection de schémas XML Permissions on an XML Schema Collection

Vous devez disposer des autorisations nécessaires pour effectuer les opérations suivantes :You must have the necessary permissions to do the following:

  • créer/charger la collection de schémas XML ;Create/load the XML schema collection

  • modifier la collection de schémas XML ;Modify the XML schema collection

  • supprimer la collection de schémas XML ;Drop the XML schema collection

  • utiliser la collection de schémas XML pour typer des colonnes, des variables et des paramètres de type xml ou l'utiliser dans des contraintes de tables ou de colonnes.Use the XML schema collection to type xml type columns, variables, and parameters, or use it in table or column constraints

    Le modèle de sécurité SQL Server accorde l'autorisation CONTROL sur chaque objet.The SQL Server security model allows CONTROL permission on every object. Le bénéficiaire de cette autorisation obtient toutes les autres autorisations sur l'objet.The grantee of this permission obtains all other permissions on the object. Le propriétaire de l'objet a également toutes les autorisations sur l'objet.The owner of the object also has all the permissions on the object.

    Le propriétaire et le bénéficiaire de l'autorisation CONTROL sur un objet peuvent accorder n'importe quelle autorisation sur l'objet.The owner and the grantee of the CONTROL permission on an object can grant any permission on the object. Un utilisateur qui n'est pas propriétaire et qui n'a pas l'autorisation CONTROL peut tout de même accorder l'autorisation sur un objet lorsque WITH GRANT OPTION est spécifié.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. Par exemple, supposons que l'utilisateur A dispose de l'autorisation REFERENCES sur la collection de schémas S (par le biais de WITH GRANT OPTION), mais d'aucune autre autorisation sur S. L'utilisateur A peut attribuer à l'utilisateur B l'autorisation REFERENCES sur la collection de schémas 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.

    Le modèle de sécurité permet également aux autorisations de créer et d'utiliser des collections de schémas XML ou de transférer la propriété d'un utilisateur à un autre.The security model also allows permissions to create and use XML schema collections or transfer ownership from one user to another. Les rubriques suivantes décrivent les autorisations de collections de schémas XML.The following topics describe the XML schema collection permissions.

  • Accorder des autorisations sur une collection de schémas XMLGrant Permissions on an XML Schema Collection

    Cette rubrique explique comment accorder des autorisations permettant de créer une collection de schémas XML et comment accorder des autorisations sur un objet de collection de schémas 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.

  • Révoquer des autorisations sur une collection de schémas XMLRevoke Permissions on an XML Schema Collection

    Cette rubrique explique comment utiliser la révocation d'autorisation pour empêcher la création d'une collection de schémas XML et comment révoquer des autorisations sur un objet de collection de schémas XML.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.

  • Refuser des autorisations sur une collection de schémas XMLDeny Permissions on an XML Schema Collection

    Cette rubrique explique comment refuser des autorisations permettant de créer une collection de schémas XML et comment refuser l'autorisation sur un objet de collection de schémas XML.This topic discusses how to deny permissions to create an XML schema collection and deny permission on an XML schema collection object.

Obtention d'informations sur les schémas XML et les collections de schémas Getting Information about XML Schemas and Schema Collections

Les collections de schémas XML sont répertoriées dans l'affichage catalogue sys.xml_schema_collections.XML schema collections are enumerated in the catalog view, sys.xml_schema_collections. La collection de schémas XML « sys » est définie par le système.The XML schema collection "sys" is defined by the system. Elle contient les espaces de noms prédéfinis qu'il est possible d'utiliser dans toutes les collections de schémas XML définies par l'utilisateur sans avoir à les charger explicitement.It contains the predefined namespaces that can be used in all user-defined XML schema collections without having to load them explicitly. Cette liste contient les espaces de noms pour xml, xs, xsi, fn et xdt.This list contains the namespaces for xml, xs, xsi, fn, and xdt. Il existe deux autres affichages catalogue : sys.xml_schema_namespaces, qui répertorie tous les espaces de noms de chaque collection de schémas XML, et sys.xml_components, qui répertorie tous les composants de schéma XML de chaque schéma XML.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 fonction intégrée XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, produit une instance de type de données xml .The built-in function XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, yields an xml data type instance.. Cette instance contient des fragments de schéma XML pour les schémas qui sont contenus dans une collection de schémas XML, à l'exception des schémas XML prédéfinis.This instance contains XML schema fragments for schemas that are contained in an XML schema collection, except the predefined XML schemas.

Pour répertorier le contenu d'une collection de schémas XML, vous pouvez au choix :You can enumerate the contents of an XML schema collection in the following ways:

  • écrire des requêtes Transact-SQL sur les affichages catalogue appropriés pour les collections de schémas XML ;Write Transact-SQL queries on the appropriate catalog views for XML schema collections.

  • utiliser la fonction intégrée XML_SCHEMA_NAMESPACE().Use the built-in function XML_SCHEMA_NAMESPACE(). Vous pouvez appliquer les méthodes du type de données xml sur le résultat de cette fonction.You can apply xml data type methods on the output of this function. En revanche, vous ne pouvez pas modifier les schémas XML sous-jacents.However, you cannot modify the underlying XML schemas.

    Ces méthodes sont illustrées dans les exemples ci-après.These are illustrated in the following examples.

Exemple : énumération des espaces de noms XML dans une collection de schémas XMLExample: Enumerate the XML Namespaces in an XML Schema Collection

Utilisez la requête suivante pour la collection de schémas XML « myCollection » :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'     

Exemple : énumération du contenu d'une collection de schémas XMLExample: Enumerate the Contents of an XML Schema Collection

L'instruction suivante énumère le contenu de la collection de schémas XML « myCollection » dans le schéma relationnel, 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')  

Les schémas XML individuels de la collection peuvent être obtenus sous forme d’instances de type xml en spécifiant l’espace de noms cible comme troisième argument de 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(). Cela est illustré par l'exemple suivant.This is shown in the following example.

Exemple : extraction d'un schéma spécifique d'une collection de schémas XMLExample: Output a Specified Schema from an XML Schema Collection

L'instruction suivante extrait le schéma XML dont l'espace de noms cible est « http://www.microsoft.com/books » de la collection de schémas XML « myCollection » dans le schéma relationnel, 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')  

Interrogation des schémas XMLQuerying XML Schemas

Vous pouvez interroger les schémas XML que vous avez chargés dans les collections de schémas XML en procédant ainsi :You can query XML schemas that you have loaded into XML schema collections in the following ways:

  • Écrivez des requêtes Transact-SQL sur les affichages catalogue appropriés pour les espaces de noms de schémas XML.Write Transact-SQL queries on catalog views for XML schema namespaces.

  • Créez une table qui contient une colonne de type xml pour stocker vos schémas XML et aussi les charger dans le système de type 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. Vous pouvez interroger la colonne XML à l'aide des méthodes de type de données xml .You can query the XML column by using the xml data type methods. Vous pouvez aussi placer un index XML sur cette colonne.Also, you can build an XML index on this column. Toutefois, dans ce cas, l'application doit assurer la cohérence entre les schémas XML stockés dans la colonne XML et le système de type XML.However, with this approach, the application must maintain consistency between the XML schemas stored in the XML column and the XML type system. Par exemple, si vous supprimez l'espace de noms du schéma XML du système de type XML, vous devez aussi le supprimer de la table pour garantir la cohérence.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.

Voir aussiSee Also

Afficher une collection de schémas XML stockée View a Stored XML Schema Collection
Prétraiter un schéma pour fusionner des schémas inclus Preprocess a Schema to Merge Included Schemas
Spécifications et limitations relatives aux collections de schémas XML sur le serveur Requirements and Limitations for XML Schema Collections on the Server