Introduction à l'utilisation des requêtes XPath (SQLXML 4.0)
S’applique à : SQL Server Azure SQL Database
Une requête XPath (XML Path Language) peut être spécifiée dans le cadre d'une URL ou dans un modèle. Le schéma de mappage détermine la structure de ce fragment résultant et les valeurs sont extraites de la base de données. Ce processus est conceptuellement semblable à la création de vues à l'aide de l'instruction CREATE VIEW et à l'écriture de requêtes SQL dans ces vues.
Remarque
Pour comprendre les requêtes XPath dans SQLXML 4.0, vous devez avoir une bonne connaissance des vues XML et des concepts connexes tels que les modèles et les schémas de mappage. Pour plus d’informations, consultez Présentation des schémas XSD annotés (SQLXML 4.0) et la norme XPath définie par le World Wide Web Consortium (W3C).
Un document XML est constitué de nœuds tels qu'un nœud d'élément, un nœud d'attribut, un nœud de texte, et ainsi de suite. Considérons par exemple le document XML suivant :
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was
very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
Dans ce document, <Customer> est un nœud d’élément, cid est un nœud d’attribut et « Important » est un nœud de texte.
XPath est un langage de navigation graphique utilisé pour sélectionner une collection de nœuds à partir d'un document XML. Chaque opérateur XPath sélectionne un élément node-set sur la base d'un élément node-set sélectionné par un opérateur XPath précédent. Par exemple, étant donné un ensemble de <nœuds Customer>, XPath peut sélectionner tous les< nœuds Order> avec la valeur d’attribut de date « 7/14/1999 ». L'élément node-set résultant contient toutes les commandes avec la date de commande 7/14/1999.
Le langage XPath est défini par le W3C (World Wide Web Consortium) en tant que langage de navigation standard. SQLXML 4.0 implémente un sous-ensemble de la spécification XPath W3C, qui se trouve à http://www.w3.org/TR/1999/PR-xpath-19991008.html.
Voici les principales différences entre l'implémentation XPath W3C et l'implémentation SQLXML 4.0.
Requêtes racines
SQLXML 4.0 ne prend pas en charge la requête racine (/). Chaque requête XPath doit commencer à un ElementType> de niveau <supérieur dans le schéma.
Signaler des erreurs
La spécification XPath W3C ne définit pas de conditions d'erreur. Les requêtes XPath qui ne sélectionnent aucun nœud retournent un élément node-set vide. Dans SQLXML 4.0, une requête peut retourner de nombreux types de messages d'erreur.
Ordre des documents
Dans SQLXML 4.0, l'ordre du document n'est pas toujours déterminé. Par conséquent, les prédicats numériques et les axes qui utilisent l’ordre des documents (tels que les suivants) ne sont pas implémentés.
L'absence d'ordre de document signifie également que la valeur de chaîne d'un nœud peut être évaluée uniquement lorsque ce nœud mappe à une colonne unique dans une ligne unique. Un élément avec des éléments enfants ou un nœud IDREFS ou NMTOKENS ne peut pas être converti en chaîne.
Remarque
Dans certains cas, l’annotation ou les clés des champs clés de l’annotation de relation peuvent entraîner un ordre de document déterministe. Toutefois, il ne s’agit pas de l’utilisation principale de ces annotations Pour plus d’informations, consultez Identifier les colonnes clés à l’aide de sql :key-fields (SQLXML 4.0) et spécifier des relations à l’aide de sql :relationship (SQLXML 4.0).
Types de données
SQLXML 4.0 présente des limitations pour implémenter les types de données booléens, chaîne, nombre et chaîne XPath. Pour plus d’informations, consultez Les types de données XPath (SQLXML 4.0).
Requêtes inter-produits
SQLXML 4.0 ne prend pas en charge les requêtes XPath entre les produits, telles que
Customers[Order/@OrderDate=Order/@ShipDate]
. Cette requête sélectionne tous les éléments Customers avec tout élément Order pour lequel OrderDate est égal à l'élément ShipDate de tout élément Order.En revanche, SQLXML 4.0 prend en charge les requêtes telles que
Customer[Order[@OrderDate=@ShippedDate]]
, qui sélectionne les éléments Customers avec tout élément Order pour lequel OrderDate est égal à son élément ShipDate.Gestion des erreurs et sécurité
Selon le schéma et l’expression de requête XPath utilisés, les erreurs Transact-SQL peuvent être exposées aux utilisateurs dans certaines conditions.
Les tableaux des sections suivantes fournissent des détails sur la manière dont l'implémentation des requêtes XPath dans SQLXML 4.0 diffère de la spécification W3C dans ces domaines.
Fonctionnalités prises en charge
Le tableau suivant indique les fonctionnalités du langage XPath implémentées dans SQLXML 4.0.
Fonctionnalités non prises en charge
Le tableau suivant indique les fonctionnalités du langage XPath non implémentées dans SQLXML 4.0.
Fonctionnalité | Article |
---|---|
Axes | ancêtre, ancêtre ou auto, descendant, descendant-ou-self (/), suivant, frère suivant, espace de noms, précédent, frère précédent |
Prédicats à valeurs numériques | |
Opérateurs arithmétiques | mod |
Fonctions de nœuds | ancêtre, ancêtre ou auto, descendant, descendant-ou-self (/), suivant, frère suivant, espace de noms, précédent, frère précédent |
Fonctions de chaînes | string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize(), translate() |
fonctions booléennes | lang() |
Fonctions Numeric | sum(), floor(), ceiling(), round() |
Opérateur d'union | | |
Lorsque vous spécifiez des requêtes XPath dans un modèle, notez le comportement suivant :
- XPath peut contenir des caractères tels que < ou & qui ont des significations spéciales dans XML (et le modèle est un document XML). Vous devez échapper à ces caractères à l’aide de l’encodage XML ou spécifier le XPath dans l’URL.