Partager via


Utilisation de la syntaxe abrégée dans une expression de chemin d'accès

Tous les exemples de la rubrique Expressions de chemin d'accès (XQuery) utilisent une syntaxe non abrégée dans les expressions de chemin d'accès. La syntaxe non abrégée pour une étape d'axe dans une expression de chemin d'accès inclut le nom de l'axe et le test du nœud, séparés par un double signe deux-points et suivis le cas échéant par des qualificatifs d'étape.

Par exemple :

child::ProductDescription[attribute::ProductModelID=19]

XQuery prend en charge les abréviations suivantes lors de l'utilisation d'expressions de chemin d'accès :

  • L'axe child correspond à l'axe par défaut. Par conséquent, l'axe child:: peut être omis dans une étape provenant d'une expression. Par exemple, /child::ProductDescription/child::Summary peut ainsi s'écrire sous la forme /ProductDescription/Summary.

  • Un axe attribute peut être abrégé par @. Par exemple, /child::ProductDescription[attribute::ProductModelID=10] peut s'écrire sous la forme /ProudctDescription[@ProductModelID=10].

  • Un axe /descendant-or-self::node()/ peut être abrégé par //. Par exemple, /descendant-or-self::node()/child::act:telephoneNumber peut s'écrire sous la forme //act:telephoneNumber.

    La requête précédente récupère tous les numéros de téléphone stockés dans la colonne AdditionalContactInfo de la table Contact. Le schéma pour AdditionalContactInfo est défini de telle façon qu'un élément <telephoneNumber> peut apparaître n'importe où dans le document. Ainsi, pour retrouver tous les numéros de téléphone, vous devez rechercher tous les nœuds du document. Cette recherche part de la racine du document et se poursuit à travers tous les nœuds descendants.

    La requête suivante permet de récupérer tous les numéros de téléphone pour un client donné d'après ses informations de contact :

     SELECT AdditionalContactInfo.query('           
                 declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";           
                 declare namespace crm="http://schemas.adventure-works.com/Contact/Record";           
                 declare namespace ci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";           
                 /descendant-or-self::node()/child::act:telephoneNumber           
                 ') as result           
     FROM Person.Person           
     WHERE BusinessEntityID = 291;           
    

    Si vous remplacez l'expression de chemin d'accès par sa syntaxe abrégée //act:telephoneNumber, vous obtenez les mêmes résultats.

  • L'élément self::node() d'une étape peut être abrégé par un point seul (.). Ceci dit, le point n'est ni équivalent ni interchangeable avec self::node().

    Par exemple, utiliser un point dans la requête suivante revient à représenter une valeur et non un nœud :

    ("abc", "cde")[. > "b"]
    
  • Le segment parent::node() d'une étape peut être abrégé par deux points consécutifs (..).