Collections de schémas XML (SQL Server)

Comme décrit dans la rubrique xml (Transact-SQL), SQL Server fournit un stockage natif des données XML via le xml type de données. Vous pouvez éventuellement associer des schémas XSD à une variable ou à une colonne de type via une collection de xml schémas XML. La collection de schémas XML stocke les schémas XML importés et peut ensuite servir à :

  • valider des instances XML ;

  • typer les données XML lors de leur stockage dans la base de données.

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. Vous pouvez les créer, les modifier et les supprimer. 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éé. 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) .

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. SQL Server utilise ces informations de type pour optimiser le stockage des données.

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.

En outre, SQL Server utilise la collection de schémas XML associée, dans le cas de typé xml, pour valider l’instance XML. 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. Sinon, elle rejette l'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. Pour plus d’informations, consultez Afficher une collection de schémas XML stockée.

Vous pouvez aussi utiliser la collection de schémas XML pour typer les variables, les paramètres et les colonnes XML.

DDL pour la gestion des collections de schémas

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. Pour gérer des collections de schémas dans la base de données, SQL Server fournit les instructions DDL suivantes :

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. 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. 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. 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.

Pour supprimer la collection de schémas, utilisez l'instruction DROP XML SCHEMA COLLECTION. Cela supprime tous les schémas contenus dans la collection et supprime l'objet collection. 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.

Description des composants de schémas

Lorsque vous utilisez l'instruction CREATE XML SCHEMA COLLECTION, différents composants de schémas sont importés dans la base de données. Les composants de schémas incluent des éléments de schémas, des attributs et des définitions de types. Lorsque vous utilisez l'instruction DROP XML SCHEMA COLLECTION, vous supprimez l'intégralité de la collection.

CREATE XML SCHEMA COLLECTION enregistre les composants de schémas dans différentes tables système.

Imaginons, par exemple, le schéma suivant :

<?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. Il s'agit notamment de SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDateet ShippedDate.

Catégories de composant

Les composants de schéma stockés dans la base de données appartiennent aux catégories suivantes :

  • ELEMENT

  • ATTRIBUTE

  • TYPE (pour les types simples ou complexes)

  • ATTRIBUTEGROUP

  • MODELGROUP

Par exemple :

  • SomeAttribute est un composant ATTRIBUTE.

  • SomeType, OrderTypeet CustomerType sont des composants TYPE.

  • Customer est un composant ELEMENT.

Lorsque vous importez un schéma dans la base de données, SQL Server ne stocke pas le schéma lui-même. Au lieu de cela, SQL Server stocke les divers composants individuels. Autrement dit, la <balise Schéma> n’est pas stockée, seuls les composants qui y sont définis sont conservés. Tous les éléments de schémas ne sont pas préservés. Si la <balise Schéma> 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 qu’elle contient pendant le processus d’importation, comme indiqué dans le tableau suivant.

Nom de l’attribut Comportement
attributeFormDefault 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 .
elementFormDefault 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 .
blockDefault 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 .
finalDefault 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 .
targetNamespace Les informations relatives aux composants qui appartiennent à l'espace de noms cible sont stockées dans les métadonnées.

Autorisations sur une collection de schémas XML

Vous devez disposer des autorisations nécessaires pour effectuer les opérations suivantes :

  • créer/charger la collection de schémas XML ;

  • modifier la collection de schémas XML ;

  • supprimer la collection de schémas XML ;

  • Utiliser la collection de schémas XML pour taper xml des colonnes de type, des variables et des paramètres, ou l’utiliser dans des contraintes de table ou de colonne

Le modèle de sécurité SQL Server accorde l'autorisation CONTROL sur chaque objet. Le bénéficiaire de cette autorisation obtient toutes les autres autorisations sur l'objet. Le propriétaire de l'objet a également toutes les autorisations sur l'objet.

Le propriétaire et le bénéficiaire de l'autorisation CONTROL sur un objet peuvent accorder n'importe quelle autorisation sur l'objet. 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é. 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.

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. Les rubriques suivantes décrivent les autorisations de collections de schémas XML.

Obtention d'informations sur les schémas XML et les collections de schémas

Les collections de schémas XML sont répertoriées dans l'affichage catalogue sys.xml_schema_collections. La collection de schémas XML « sys » est définie par le système. 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. Cette liste contient les espaces de noms pour xml, xs, xsi, fn et 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.

La fonction intégrée XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, génère un xml type de données 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.

Pour répertorier le contenu d'une collection de schémas XML, vous pouvez au choix :

  • écrire des requêtes Transact-SQL sur les affichages catalogue appropriés pour les collections de schémas XML ;

  • utiliser la fonction intégrée XML_SCHEMA_NAMESPACE() . Vous pouvez appliquer des xml méthodes de type de données à la sortie de cette fonction. En revanche, vous ne pouvez pas modifier les schémas XML sous-jacents.

Ces méthodes sont illustrées dans les exemples ci-après.

Exemple : Énumération des espaces de noms XML dans une collection de schémas XML

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

L'instruction suivante énumère le contenu de la collection de schémas XML « myCollection » dans le schéma relationnel, dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection')  

Vous pouvez obtenir des schémas XML individuels au sein de la collection en tant qu’instances xml de type de données en spécifiant l’espace de noms cible comme troisième argument à XML_SCHEMA_NAMESPACE(). Cela est illustré par l'exemple suivant.

Exemple : Extraction d’un schéma spécifique d’une collection de schémas XML

L’instruction suivante extrait le schéma XML dont l’espace de noms cible est « https://www.microsoft.com/books » de la collection de schémas XML « myCollection » dans le schéma relationnel, dbo.

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

Interrogation des schémas XML

Vous pouvez interroger les schémas XML que vous avez chargés dans les collections de schémas XML en procédant ainsi :

  • Écrivez des requêtes Transact-SQL sur les affichages catalogue appropriés pour les espaces de noms de schémas XML.

  • 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. Vous pouvez interroger la colonne XML à l'aide des méthodes de type de données xml. Vous pouvez aussi placer un index XML sur cette colonne. 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. 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.

Voir aussi

Afficher une collection de schémas XML stockée
Prétraiter un schéma pour fusionner des schémas inclus
Spécifications et limitations relatives aux collections de schémas XML sur le serveur