XML typé et non typé

Vous pouvez créer des variables, des paramètres et des colonnes typés xml. Vous pouvez éventuellement associer une collection de schémas XML à une variable, un paramètre ou une colonne typés xml. Dans ce cas, l'instance de type de données xml est dite typée. Dans le cas contraire, l'instance XML est dite non typée.

Un schéma XML donne les informations suivantes :

  • Contraintes de validation
    Chaque fois qu'une instance typée xml est affectée ou modifiée, SQL Server la valide.
  • Informations sur le type des données de l'instance
    Les schémas fournissent des informations sur les types des attributs et des éléments de l'instance de type de données xml. Les informations relatives au type donnent une sémantique opérationnelle plus précise aux valeurs. Par exemple, des opérations arithmétiques décimales peuvent être effectuées sur une valeur décimale, mais pas sur une chaîne. Grâce à cela, le stockage des données typées XML est considérablement plus compact qu'en cas de code XML non typé.

Avant de créer des variables, des paramètres ou des colonnes xml typés, vous devez inscrire la collection de schémas XML à l'aide de CREATE XML SCHEMA COLLECTION. Vous pouvez ensuite associer la collection de schémas XML aux variables, paramètres ou colonnes typés xml. Les exemples suivants vous expliquent la procédure.

Exemples

Dans les exemples suivants, une convention d'appellation en deux parties est utilisée pour spécifier le nom de la collection de schémas XML. La première partie est le nom du schéma AdventureWorks et la deuxième est le nom de la collection de schémas XML.

A. Création d'une variable de type xml et association d'une collection de schémas

L'exemple suivant explique comment créer une variable de type xml, et lui associer une collection de schémas. La collection de schémas spécifiée dans l'exemple est déjà importée dans la base de données AdventureWorks.

DECLARE @x xml (Production.ProductDescriptionSchemaCollection) 

B. Création d'une table avec une colonne de type xml et spécification d'un schéma pour la colonne

L'exemple suivant montre comment créer une table avec une colonne de type xml et spécifier le schéma correspondant :

CREATE TABLE T1(
 Col1 int, 
 Col2 xml (Production.ProductDescriptionSchemaCollection)) 

C. Transmission d'un paramètre de type xml vers une procédure stockée

L'exemple suivant montre comment transférer un paramètre de type xml à une procédure stockée et spécifier un schéma pour la variable :

CREATE PROCEDURE SampleProc 
  @ProdDescription xml (Production.ProductDescriptionSchemaCollection) 
AS 

Notez les points suivants à propos de la collection de schémas XML :

  • Une collection de schémas XML est disponible seulement dans la base de données où elle a été inscrite à l'aide de CREATE XML SCHEMA COLLECTION.
  • Si vous transformez une chaîne en données typées xml, l'analyse se charge de la validation et de l'attribution du type en fonction des espaces de noms du schéma XML de la collection spécifiée.
  • Vous pouvez convertir des données de xml typé en xml non typé, et inversement.

Pour plus d'informations sur la façon de générer du code XML dans SQL Server, consultez Génération d'instances XML. Une fois le code XML généré, il peut être affecté à une variable de type xml ou stocké dans des colonnes de type xml en vue d'un traitement supplémentaire.

Dans la hiérarchie des types de données, le type de données xml apparaît après sql_variant et les types définis par l'utilisateur, mais avant tout autre type intégré.

D. Définition de facettes pour imposer des contraintes sur une colonne typée xml

Vous pouvez définir des contraintes sur des colonnes typées xml de façon à n'autoriser que des éléments uniques de premier niveau pour chaque instance qui y est stockée. Pour cela, vous devez spécifier la facette facultative DOCUMENT lors de la création de la table, comme le montre l'exemple suivant :

CREATE TABLE T(Col1 xml 
   (DOCUMENT Production.ProductDescriptionSchemaCollection))
GO
DROP TABLE T
GO

Par défaut, les instances stockées dans la colonne typée xml sont considérées comme du contenu XML et non comme des documents XML de façon à autoriser :

  • zéro ou plusieurs éléments de premier niveau ;
  • des nœuds de texte dans les éléments de premier niveau.

Vous pouvez aussi définir ce comportement de manière explicite en ajoutant la facette CONTENT, conformément à l'exemple suivant :

CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection))
GO -- Default

Remarquez que vous pouvez spécifier les facettes facultatives DOCUMENT/CONTENT chaque fois que vous définissez le type xml (xml typé). Par exemple, lorsque vous créez une variable typée xml, vous pouvez ajouter la facette DOCUMENT/CONTENT, comme le montre l'exemple suivant :

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection)

Voir aussi

Concepts

Génération d'instances XML
Langage de modification de données XML (XML DML)
Type de données xml
Exemples d'applications XML

Autres ressources

Méthodes des types de données xml

Aide et Informations

Assistance sur SQL Server 2005