Prise en charge du type de données xml dans SQLXML 4.0
Depuis SQL Server 2005, SQL Server prend en charge les données typées XML à l'aide du type de données xml. Cette rubrique fournit des informations sur la façon dont SQLXML 4.0 reconnaît les instances du type de données xml et implémente leur prise en charge.
Utilisation des types de données xml
Pour mieux comprendre l'utilisation des tables SQL qui implémentent des colonnes de type de données xml, les exemples suivants sont fournis :
Tâche |
Exemple |
Rubrique |
---|---|---|
Comment mapper et inclure une colonne xml dans une vue XML |
« Mappage d'un élément XML à une colonne de type de données XML » |
Mappage par défaut d'éléments et d'attributs XSD à des tables et des colonnes (SQLXML 4.0) |
Comment insérer des données dans une colonne xml avec des codes de mise à jour (updategrams) |
« Insertion de données dans une colonne de type de données XML » |
Insertion de données à l'aide de codes de mise à jour (updategrams) XML (SQLXML 4.0) |
Chargement en masse de données XML dans une colonne xml |
« Chargement en masse dans les colonnes de type de données xml » |
Instructions et limitations
<xsd:any> ne peut pas être mappé à une colonne incluant un type de données xml. La prise en charge de ce scénario en SQLXML est fournie via l'annotation sql:overflow-field. Une autre solution consiste à mapper un champ de type de données xml en tant qu'élément de xsd:anyType. Cette solution est illustrée dans l'exemple de mappage d'un élément XML à une colonne de type de données XML, référencé dans le tableau ci-dessus.
L'interrogation par une requête XPath du contenu de colonnes de type de données xml n'est pas prise en charge.
L'utilisation d'une colonne de type de données xml dans les annotations où cela n'est pas pris en charge (par exemple sql:relationship et sql:key-fields) ni autorisé, provoque des erreurs SQL Server qui ne sont pas interceptées par les composants de couche intermédiaire implémentant SQLXML 4.0. Cela se produit, car SQLXML ne requiert pas d'informations de type SQL. Ce comportement est semblable à celui de SQLXML pour les autres types de données, par exemple les types BLOB et binaires.
Le mappage de colonnes xml est pris en charge uniquement pour les schémas XSD. Les schémas XDR ne prennent pas en charge le mappage de colonnes xml.
SQLXML 4.0 s'appuie sur la prise en charge de l'analyse XML fournie dans SQL Server. Une colonne xml peut être mappée en tant que colonne XML typée ou non typée. Dans les deux cas, SQLXML 4.0 ne valide pas le code XML d'entrée. Si le code XML d'entrée n'est pas valide ou s'il est incorrect, SQL Server le signale à SQLXML et propage toutes les informations d'erreur pertinentes retournées par le serveur à l'utilisateur.
SQLXML 4.0 s'appuie sur la prise en charge limitée des DTD fournies dans SQL Server. SQL Server autorise l'utilisation d'une DTD interne dans les données de type xml, ce qui permet de fournir des valeurs par défaut et de remplacer les références d'entité par leurs contenus développés. SQLXML passe les données XML « en l'état » (y compris la DTD interne) au serveur. Vous pouvez convertir les DTD en documents XSD (XML Schema Documents) à l'aide d'outils tiers, puis charger les données avec des schémas XSD insérés dans la base de données.
SQLXML 4.0 ne conserve pas les instructions de traitement de déclaration XML (par exemple <?xml version='1.0'?>) en fonction du comportement de SQL Server. À la place, la déclaration XML est traitée comme une directive pour l'analyseur XML SQL Server ; en outre, ses attributs (version, encoding et standalone) sont perdus une fois que les données ont été converties vers le type de données xml. Les données XML sont stockées en interne au format UCS-2. Toutes les autres instructions de traitement dans l'instance XML sont conservées ; elles sont autorisées dans la colonne xml et peuvent être prises en charge par SQLXML.