Comparer du XML typé et du XML non typéCompare Typed XML to Untyped XML

Vous pouvez créer des variables, des paramètres et des colonnes du type xml .You can create variables, parameters, and columns of the xml type. Vous pouvez éventuellement associer une collection de schémas XML à une variable, un paramètre ou une colonne de type xml .You can optionally associate a collection of XML schemas with a variable, parameter, or column of xml type. Dans ce cas, l'instance de type de données xml est dite typée.In this case, the xml data type instance is called typed. Dans le cas contraire, l'instance XML est dite non typée.Otherwise, the XML instance is called untyped.

Code XML bien formé et le type de données xmlWell-formed XML and the xml Data Type

Le type de données xml implémente le type de données xml de norme ISO.The xml data type implements the ISO standard xml data type. Par conséquent, il peut stocker des documents bien formés en conformité avec XML version 1.0, ainsi que des fragments de contenu XML avec des nœuds de texte et un nombre arbitraire d'éléments de premier niveau dans une colonne XML non typée.Therefore, it can store well-formed XML version 1.0 documents and also so-called XML content fragments with text nodes and an arbitrary number of top-level elements in an untyped XML column. Le système vérifie que les données sont bien formées, n'exige pas l'association de schémas XML avec la colonne, puis rejette les données mal formées au sens large.The system checks that the data is well-formed, does not require the column to be bound to XML schemas, and rejects data that is not well-formed in the extended sense. Il peut aussi s'agir de variables et de paramètres XML non typés.This is true also of untyped XML variables and parameters.

Schémas XMLXML Schemas

Un schéma XML donne les informations suivantes :An XML schema provides the following:

  • Contraintes de validation.Validation constraints. Chaque fois qu'une instance typée xml est affectée ou modifiée, SQL Server la valide.Whenever a typed xml instance is assigned to or modified, SQL Server validates the instance.

  • Informations sur le type de donnes.Data type information. Les schémas fournissent des informations sur les types des attributs et des éléments de l’instance de type de données xml .Schemas provide information about the types of attributes and elements in the xml data type instance. Les informations de type fournissent une sémantique opérationnelle plus précise aux valeurs contenues dans l'instance qu'il n'est possible avec xmlnon typé.The type information provides more precise operational semantics to the values contained in the instance than is possible with untyped xml. Par exemple, des opérations arithmétiques décimales peuvent être effectuées sur une valeur décimale, mais pas sur une chaîne.For example, decimal arithmetic operations can be performed on a decimal value, but not on a string value. Grâce à cela, le stockage des données typées XML est considérablement plus compact qu'en cas de code XML non typé.Because of this, typed XML storage can be made significantly more compact than untyped XML.

Choix de XML typé ou non typéChoosing Typed or Untyped XML

Utilisez le type de données xml non typé dans les cas suivants :Use untyped xml data type in the following situations:

  • Vous n'avez pas de schéma pour vos données XML.You do not have a schema for your XML data.

  • Vous avez des schémas, mais vous ne voulez pas que le serveur valide les données.You have schemas, but you do not want the server to validate the data. C'est notamment le cas lorsqu'une application effectue la validation côté client avant de stocker les données sur le serveur, ou stocke temporairement les données XML déclarées non valides par rapport au schéma, ou utilise des composants de schéma non pris en charge par le serveur.This is sometimes the case when an application performs client-side validation before storing the data at the server, or temporarily stores XML data that is invalid according to the schema, or uses schema components that are not supported at the server.

    Utilisez le type de données xml typé dans les cas suivants :Use typed xml data type in the following situations:

  • Il existe des schémas pour vos données XML et vous souhaitez que le serveur valide les données XML par rapport aux schémas XML.You have schemas for your XML data and you want the server to validate your XML data according to the XML schemas.

  • Vous voulez profiter de l'optimisation du stockage et des requêtes que permettent les informations de type.You want to take advantage of storage and query optimizations based on type information.

  • Vous voulez tirer parti des avantages que procurent les informations de type lors de la compilation de vos requêtes.You want to take better advantage of type information during compilation of your queries.

    Des colonnes, paramètres et variables en XML typé peuvent stocker des documents ou du contenu XML.Typed XML columns, parameters, and variables can store XML documents or content. Toutefois, vous devez utiliser un indicateur pour spécifier qu'il s'agit d'un document ou d'un contenu au moment de la déclaration.However, you have to specify with a flag whether you are storing a document or content at the time of declaration. De plus, vous devez fournir la collection de schémas XML.Additionally, you have to provide the collection of XML schemas. Spécifiez DOCUMENT si chaque instance XML a un seul et unique élément de premier niveau.Specify DOCUMENT if each XML instance has exactly one top-level element. Sinon, utilisez CONTENT.Otherwise, use CONTENT. Le compilateur de requête utilise l'indicateur DOCUMENT dans les vérifications de type lors de la compilation de la requête pour déduire les éléments singletons de premier niveau.The query compiler uses the DOCUMENT flag in type checks during query compilation to infer singleton top-level elements.

Création de XML typéCreating Typed XML

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 (Transact-SQL).Before you can create typed xml variables, parameters, or columns, you must first register the XML schema collection by using CREATE XML SCHEMA COLLECTION (Transact-SQL). Vous pouvez ensuite associer la collection de schémas XML aux variables, paramètres ou colonnes typés xml .You can then associate the XML schema collection with variables, parameters, or columns of the xml data type.

Dans les exemples suivants, une convention d'affectation des noms en deux parties est utilisée pour spécifier le nom de la collection de schémas XML.In the following examples, a two-part naming convention is used for specifying the XML schema collection name. La première partie est le nom du schéma et la deuxième est le nom de la collection de schémas XML.The first part is the schema name, and the second part is the XML schema collection name.

Exemple : association d'une collection de schémas à une variable de type xmlExample: Associating a Schema Collection with an xml Type Variable

L’exemple suivant crée une variable de typexml et lui associe une collection de schémas.The following example creates anxml type variable and associates a schema collection with it. La collection de schémas spécifiée dans l'exemple est déjà importée dans la base de données AdventureWorks .The schema collection specified in the example is already imported in the AdventureWorks database.

DECLARE @x xml (Production.ProductDescriptionSchemaCollection);   

Exemple: spécification d'un schéma pour une colonne de type xmlExample: Specifying a Schema for an xml Type Column

L'exemple suivant crée une table avec une colonne de type xml et spécifie le schéma correspondant :The following example creates a table with an xml type column and specifies a schema for the column:

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

Exemple : transmission d'un paramètre de type xml vers une procédure stockéeExample: Passing an xml Type Parameter to a Stored Procedure

L'exemple suivant passe un paramètre de type xml à une procédure stockée et spécifie un schéma pour la variable :The following example passes an xml type parameter to a stored procedure and specifies a schema for the variable:

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

Notez les points suivants à propos de la collection de schémas XML :Note the following about the XML schema collection:

  • 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.An XML schema collection is available only in the database in which it was registered by using Creating an 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.If you cast from a string to a typed xml data type, the parsing also performs validation and typing, based on the XML schema namespaces in the collection specified.

  • Vous pouvez convertir des données de xml typé en xml non typé, et inversement.You can cast from a typed xml data type to an untyped xml data type, and vice versa.

    Pour plus d’informations sur d’autres façons de générer du code XML dans SQL Server, consultez Créer des instances de données XML.For more information about other ways to generate XML in SQL Server, see Create Instances of XML Data. 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.After XML is generated, it can be assigned either to an xml data type variable or stored in xml type columns for additional processing.

    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 type intégré.In the data type hierarchy, the xml data type appears below sql_variant and user-defined types, but above any of the built-in types.

Exemple : définition de facettes pour imposer des contraintes sur une colonne typée xmlExample: Specifying Facets to Constrain a Typed xml Column

Vous pouvez définir des contraintes sur des colonnes xml typées de façon à n’autoriser que des éléments uniques de premier niveau pour chaque instance qui y est stockée.For typed xml columns, you can constrain the column to allow only single, top-level elements for each instance stored in it. Pour cela, vous devez spécifier la facette facultative DOCUMENT lors de la création de la table, comme le montre l'exemple suivant :You do this by specifying the optional DOCUMENT facet when a table is created, as shown in the following example:

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 XMLBy default, instances stored in the typed xml column are stored as XML content and not as XML documents. de façon à autoriser :This allows for the following:

  • zéro ou plusieurs éléments de premier niveau ;Zero or many top-level elements

  • des nœuds de texte dans les éléments de premier niveau.Text nodes in top-level elements

    Vous pouvez aussi définir ce comportement de manière explicite en ajoutant la facette CONTENT , conformément à l'exemple suivant :You can also explicitly specify this behavior by adding CONTENT facet, as shown in the following example:

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

Notez que vous pouvez spécifier les facettes facultatives DOCUMENT/CONTENT partout où vous définissez le type xml (xml typé).Note that you can specify the optional DOCUMENT/CONTENT facets anywhere you define xml type (typed xml). Par exemple, quand vous créez une variable xml typée, vous pouvez ajouter la facette DOCUMENT/CONTENT, comme illustré dans l’exemple suivant :For example, when you create a typed xml variable, you can add the DOCUMENT/CONTENT facet, as shown in the following:

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection);  

Définition de type de document (DTD)Document Type Definition (DTD)

Les colonnes, variables et paramètres de type de données xml peuvent être typés à l'aide d'un schéma XML, mais pas en utilisant DTD.The xml data type columns, variables, and parameters can be typed by using XML schema, but not by using DTD. Toutefois, une DTD en ligne peut être utilisée à la fois avec du code XML typé et non typé pour fournir des valeurs par défaut et remplacer des références d'entité par leur forme étendue.However, inline DTD can be used for both untyped and typed XML to supply default values and to replace entity references with their expanded form.

Vous pouvez convertir les DTD en documents de schéma XML à l'aide d'outils tiers, puis charger les schémas XML dans la base de données.You can convert DTDs to XML schema documents by using third-party tools, and load the XML schemas into the database.

Mise à niveau de XML typé à partir de SQL Server 2005Upgrading Typed XML from SQL Server 2005

SQL Server 2008SQL Server 2008 offre plusieurs extensions de prise en charge du schéma XML, y compris la prise en charge de la validation de type lax, une gestion améliorée des données d'instance xs:date, xs:time et xs:dateTime et la nouvelle prise en charge des types de liste et d'union. made several extensions to the XML Schema support, including support for lax validation, improved handling of xs:date, xs:time and xs:dateTime instance data, and added support for list and union types. Dans la plupart des cas, les modifications n'affectent pas l'expérience de mise à niveau.In most cases the changes do not affect the upgrade experience. Toutefois, si vous avez utilisé une collection de schémas XML dans SQL Server 2005SQL Server 2005 qui autorisait les valeurs de type xs:date, xs:timeou xs:dateTime (ou n’importe quel sous-type), les étapes de mise à niveau suivantes ont lieu quand vous joignez votre base de données SQL Server 2005SQL Server 2005 à une version ultérieure de SQL ServerSQL Server:However if you used an XML Schema collection in SQL Server 2005SQL Server 2005 that allowed values of type xs:date, xs:time, or xs:dateTime (or any subtype) then the following upgrade steps occur when you attach your SQL Server 2005SQL Server 2005 database to a later version of SQL ServerSQL Server:

  1. Pour chaque colonne XML qui est typée avec une collection de schémas XML contenant des éléments ou des attributs typés comme xs:anyType, xs:anySimpleType, xs:date ou l'un de ses sous-types, xs:time ou tout sous-type, ou xs:dateTime ou l'un de ses sous-types, ou qui constituent des types d'union ou de liste contenant l'un de ces types, les événements suivants ont lieu :For every XML column, that is typed with an XML Schema Collection that contains elements or attributes that are typed as either xs:anyType, xs:anySimpleType, xs:date or any of its subtypes, xs:time or any subtype thereof, or xs:dateTime or any of its subtypes, or are union or list types containing any of these types the following occurs:

    1. Tous les index XML sur la colonne seront désactivés.All XML indices on the column will be disabled.

    2. Toutes les valeurs SQL Server 2005SQL Server 2005 continueront d'être représentées dans la période Z, car elles ont été normalisées selon cette période.All SQL Server 2005SQL Server 2005 values will continue to be represented in the Z timezone, because they have been normalized to the Z timezone.

    3. Toute valeur xs:date ou xs:dateTime plus petite que le 1er janvier de l’année 1 provoque une erreur d’exécution quand l’index est reconstruit ou que des instructions XQuery ou XML-DML sont exécutées sur le type de données XML contenant cette valeur.Any xs:date or xs:dateTime values that are smaller than January 1st of year 1 will lead to a runtime error when the index gets rebuild or an XQuery or XML-DML statements gets executed against the XML data type containing that value.

  2. Toute année négative dans les facettes xs:date ou xs:dateTime ou les valeurs par défaut dans une collection de schémas XML sont mises à jour automatiquement en fonction de la plus petite valeur autorisée par le type xs:date ou xs:dateTime de base (par exemple, 0001-01-01T00:00:00.0000000Z pour xs:dateTime).Any negative years in xs:date or xs:dateTime facets or default values in an XML Schema collection will automatically be updated to the smallest value allowed by the base xs:date or xs:dateTime type (e.g., 0001-01-01T00:00:00.0000000Z for xs:dateTime).

    Notez que vous pouvez encore utiliser une simple instruction select SQL pour extraire le type de données XML entier, même s'il contient des années négatives.Note that you can still use a simple SQL select statement to retrieve the whole XML data type, even if it contains negative years. Il est recommandé de remplacer les années négatives par une année comprise dans la plage nouvellement prise en charge, ou de modifier le type de l'élément ou attribut en xs:string.It is recommended that you replace negative years with a year within the newly supported range or change the type of the element or attribute to xs:string.

Voir aussiSee Also

Créer des instances de données XML Create Instances of XML Data
Méthodes des types de données xml xml Data Type Methods
Langage de modification de données XML (XML DML) XML Data Modification Language (XML DML)
Données XML (SQL Server)XML Data (SQL Server)