Expressions de chemin : utilisation de la syntaxe abrégée
S'applique à : SQL Server
Tous les exemples de Présentation des expressions de chemin d’accès dans XQuery utilisent une syntaxe nonbrevié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 enfant :: peut être omis à partir d’une étape d’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 tant que @. 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.L’auto ::node() d’une étape peut être abrégé en un point unique (.). Toutefois, le point n’est pas équivalent ou interchangeable avec l’auto ::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 (..).