Collections de schémas XML (SQL Server)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance
Comme l’explique l’article xml (Transact-SQL), SQL Server assure un stockage natif des données XML par le biais du type de données xml. 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. 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.
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 l’article 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.
De plus, SQL Server utilise la collection de schémas XML associée, avec xml typé, 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 :
CREATE XML SCHEMA COLLECTION (Transact-SQL) Importe les composants de schéma dans une base de données.
ALTER XML SCHEMA COLLECTION (Transact-SQL) Modifie les composants de schéma dans une collection de schémas XML existante.
DROP XML SCHEMA COLLECTION (Transact-SQL) Supprime une collection de schémas XML complète et tous ses composants.
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. 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. 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
, RequiredDate
et 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
,OrderType
etCustomerType
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 <Schema> 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 <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.
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 typer des colonnes, des variables et des paramètres de type xml ou l'utiliser dans des contraintes de tables ou de colonnes.
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 articles suivants décrivent les autorisations de collections de schémas XML.
Accorder des autorisations sur une collection de schémas XML
Cet article 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.
Révoquer des autorisations sur une collection de schémas XML
Cet article 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.
Refuser des autorisations sur une collection de schémas XML
Cet article 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.
Obtenir des 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 une instance de type de données xml. 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 ;
Utilisez la fonction intégrée
XML_SCHEMA_NAMESPACE()
. Vous pouvez appliquer les méthodes du type de données xml sur le résultat 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.
Exemples
É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';
É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');
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(). Cela est illustré par l'exemple suivant.
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 pretend https://www.microsoft.com/was-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/was-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.