Share via


Introduction à l'utilisation des requêtes XPath (SQLXML 4.0)

S’applique à :SQL ServerAzure 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é Article Lien aux exemples de requêtes
Axes attribut, enfant, parent et axes auto Spécification d’axes dans les requêtes XPath (SQLXML 4.0)
Prédicats à valeurs booléennes, y compris les prédicats consécutifs et imbriqués Spécification d’opérateurs arithmétiques dans des requêtes XPath (SQLXML 4.0)
Tous les opérateurs relationnels =, !=, , <=, >>= < Spécification d’opérateurs de relation dans les requêtes XPath (SQLXML 4.0)
Opérateurs arithmétiques +, -, *, div Spécification d’opérateurs arithmétiques dans des requêtes XPath (SQLXML 4.0)
Fonctions de conversion explicite number(), string(), Boolean() Spécification de fonctions de conversion explicite dans les requêtes XPath (SQLXML 4.0)
Opérateurs booléens AND, OR Spécification d’opérateurs booléens dans les requêtes XPath (SQLXML 4.0)
fonctions booléennes true(), false(), not() Spécification de fonctions booléennes dans des requêtes XPath (SQLXML 4.0)
variables XPath Spécification de variables XPath dans les requêtes XPath (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.

Voir aussi

Utilisation des requêtes XPath dans SQLXML 4.0