Partager via


Expressions de chemin : utilisation de la syntaxe abrégée

S’applique à :SQL Server

Tous les exemples de Présentation des expressions de chemin dans XQuery utilisent une syntaxe nonabbreviée pour 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 enfant est l’axe par défaut. Par conséquent, l’axe child:: peut être omis d’une étape dans une expression. Par exemple, /child::ProductDescription/child::Summary peut s'écrire sous la forme /ProductDescription/Summary.

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

  • Un /descendant-or-self::node()/ peut être abrégé en //. 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 de AdditionalContactInfo est défini de manière à ce qu’un <élément telephoneNumber> puisse 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="https://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.Contact             
    WHERE ContactID=1             
    

    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.

  • Le self::node() d’une étape peut être abrégé en point unique (.). Toutefois, le point n’est pas équivalent ou 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 parent::node() d’une étape peut être abrégé en point double (..).