Partager via


Introduction à l’utilisation de requêtes XPath (SQLXML 4.0)

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 récupérées à partir de la base de données. Ce processus est conceptuellement similaire à la création de vues à l’aide de l’instruction CREATE VIEW et à l’écriture de requêtes SQL sur celles-ci.

Remarque

Pour comprendre les requêtes XPath dans SQLXML 4.0, vous devez être familiarisé avec les vues XML et les concepts connexes tels que les modèles et le schéma 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 se compose de nœuds tels qu’un nœud d’élément, un nœud d’attribut, un nœud de texte, etc. Par exemple, considérez ce document XML :

<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 de graphe utilisé pour sélectionner un ensemble de nœuds à partir d’un document XML. Chaque opérateur XPath sélectionne un jeu de nœuds basé sur un jeu de nœuds 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 ». Le jeu de nœuds résultant contient toutes les commandes avec la date de commande 14/14/1999.

Le langage XPath est défini par le World Wide Web Consortium (W3C) comme 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 aucune condition d’erreur. Les requêtes XPath qui ne parviennent pas à sélectionner les nœuds retournent un jeu de nœuds 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 des documents n’est pas toujours déterminé. Par conséquent, les prédicats numériques et les axes qui utilisent l’ordre de document (par exemple following) 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 est mappé à une seule colonne dans une seule ligne. 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 key-fields clés de l’annotation relationship 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 dans l’implémentation des types de données et booleannumberXPathstring. 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 inter-produits, telles que Customers[Order/@OrderDate=Order/@ShipDate]. Cette requête sélectionne tous les clients avec n’importe quelle commande pour laquelle OrderDate est égal à ShipDate de n’importe quelle commande.

    Toutefois, SQLXML 4.0 prend en charge les requêtes telles que Customer[Order[@OrderDate=@ShippedDate]], qui sélectionne les clients avec n’importe quelle commande pour laquelle OrderDate est égal à son ShipDate.

  • Gestion des erreurs et sécurité

    Selon le schéma et l’expression de requête XPath utilisés, Transact-SQL erreurs peuvent être exposées aux utilisateurs dans certaines conditions.

Les tableaux des sections suivantes fournissent des détails sur la façon 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 présente les fonctionnalités du langage XPath implémentées dans SQLXML 4.0.

Caractéristique Élément Lien vers des exemples de requêtes
Axes attribute, child, parentet self axes Spécification d’axes dans les requêtes XPath (SQLXML 4.0)
Prédicats booléens, y compris les prédicats successifs et imbriqués Spécification d’opérateurs arithmétiques dans les requêtes XPath (SQLXML 4.0)
Tous les opérateurs relationnels =, !=, , <=, >>= < Spécification d’opérateurs relationnels dans les requêtes XPath (SQLXML 4.0)
Opérateurs arithmétiques +, -, *, div Spécification d’opérateurs arithmétiques dans les requêtes XPath (SQLXML 4.0)
Fonctions de conversion explicites number(), , string()Boolean() Spécification de fonctions de conversion explicites dans les requêtes XPath (SQLXML 4.0)
Opérateurs booléens ET, OU Spécification d’opérateurs booléens dans des 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é non prise en charge

Le tableau suivant présente les fonctionnalités du langage XPath qui ne sont pas implémentées dans SQLXML 4.0.

Caractéristique Élément
Axes ancestor, ancestor-or-self, , descendant-or-self (//)descendant, following, following-sibling, namespace, preceding,preceding-sibling
Prédicats numériques
Opérateurs arithmétiques Mod
Fonctions de nœud ancestor, ancestor-or-self, , descendant-or-self (//)descendant, following, following-sibling, namespace, preceding,preceding-sibling
Fonctions de chaîne string(), , concat(), contains()starts-with(), , substring-after()normalize()substring()string-length()substring-before()translate()
Fonctions booléennes lang()
Fonctions Numeric sum(), , floor()ceiling(), ,round()
Opérateur 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 de requêtes XPath dans SQLXML 4.0