XQuery est strictement sensible à la casse, ses mots-clés sont en minuscule. Il peut travailler avec du contenu XML typé (validé par un schéma) ou non typé. Sachez toutefois que le travail sur le contenu typé est plus rapide, car il évite une conversion implicite de type lors du traitement.
Concepts de base
XQuery est, comme SQL, un langage fortement typé.
Si un paramètre est passé à une fonction XQuery, celui-ci doit être du type attendu. Si le XML est non typé, une conversion implicite est tentée. Si par contre le contenu XML est typé, vous devez explicitement transtyper votre paramètre si nécessaire. Précisons également la nomenclature : on appelle noeud un élément ou un attribut, son identifiant est un QName (Qualified Name), c’est-à-dire un nom, possiblement qualifié par un espace de noms. La donnée scalaire que contient ce noeud est nommée valeur atomique. Un item est soit un noeud, soit une valeur atomique. Une séquence est une liste comportant de zéro à plusieurs items.
XPath
XQuery est basé sur XPath 2.0, un langage permettant de parcourir le document pour retrouver un noeud ou un valeur atomique. Vous pouvez très simplement dessiner un chemin d’élément à sous-élément et filtrer le noeud recherché. Le filtrage se fait à l’aide d’un prédicat contenu entre crochets [], qui applique son contenu (une expression évaluée à vrai ou faux) au contexte du chemin. Par exemple, dans notre XML, le chemin pour trouver le premier coup du troisième pion blanc peut être exprimé en XPath ainsi :
/echiquier/blancs/pieces/pion[@numero = "3"]/historique/coup[@sequence = "1"]
Un chemin est composé d’une suite de noeuds (des étapes) séparés par des /. Chaque étape comporte un axe, qui spécifie la direction du mouvement, un test de noeud (le QName de l’élément ou de l’attribut) et peut introduire des expressions de filtre, nommées qualificateurs d’étapes (step qualifiers). L’axe peut être explicite, ou abrégé.
Par exemple, l’exemple ci-dessus avec axes explicites donne :
self::node()/child::echiquier/child::blancs/child::pieces/child::pion[attribute:: numero = "3"]/child::historique/child::coup[attribute::sequence = "1"] ::
étant le séparateur d’axe. Vous avez compris que child est l’axe par défaut, et que attribute:: s’abrège « @ ». Le noeud parent s’abrège « .. », et le noeud actuel (le noeud de contexte), « . ».
Vous pouvez également sauter des étapes et chercher des sous-noeuds dans tous les enfants, en utilisant la syntaxe // (déconseillée pour des raisons de performance, et les risques encourus en cas de changement de structure). Pour retourner des noeuds au même niveau mais portant des QNames différents, vous pouvez utiliser le caractère générique *.
Prologue
Le type XML supporte les espaces de noms (namespaces, recommandation W3C ), qui sont des identificateurs de vocabulaire, permettant d’attribuer un noeud à un vocabulaire.
Si le contenu de la colonne ou de la variable les utilise, la requête XQuery doit déclarer les namespaces avec lesquels elle va travailler. Cette déclaration peut se faire en ligne – à l’intérieur de la requête Xquery – à l’aide d’un prologue, ou en préfixe à la requête SQL (au SELECT) dans laquelle on va écrire des requêtes XQuery. Cette deuxième solution est à préférer pour améliorer la lisibilité du code, et pour éviter une redéclaration dans les diverses requêtes. La recommandation W3C indique que le prologue contient une suite de déclarations diverses séparées par des points-virgule.
En SQL Server, il ne peut contenir que des déclarations d’espaces de noms. Exemple avec une déclaration de namespaces en prologue :
SELECT joueurs.query(‘
declare namespace
ecj="http://www.babaluga.com/xmlnamespaces/echecs/joueur";
/joueurs/ecj:joueur[@position = "blancs"]’)
FROM #partie
La déclaration en préfixe de la requête utilise la syntaxe SQL suivante :
WITH XMLNAMESPACES (‘urn’ as alias, ‘urn2’ as alias2) …?
Exemple : WITH XMLNAMESPACES (‘http://www.babaluga.com/xmlnamespaces/echecs/joueur’ as e)
SELECT joueurs.query(‘/joueurs/e:joueur[@position = "blancs"]’)
FROM #partie
Le mot-clé WITH étant déjà utilisé dans la syntaxe T-SQL pour spécifier des options de requête par exemple, l’utilisation de WITH XMLNAMESPACES dans un lot de requêtes doit être précédée de la fermeture de l’instruction précédente par un ;.
Téléchargez cette ressource
Microsoft 365 Tenant Resilience
Face aux failles de résilience des tenants M365 (configurations, privilèges, sauvegarde). Découvrez 5 piliers pour durcir, segmenter et surveiller vos environnements afin de limiter l’impact des attaques. Prioriser vos chantiers cyber et améliorer la résilience de vos tenants Microsoft 365.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
- Reprendre le contrôle de son SI : la clé d’un numérique à la fois souverain et responsable
- Splunk : vers un SOC agentique et de confiance
- Le trilemme de la souveraineté : le coût caché du cloud qui freine l’IA en Europe
Articles les + lus
Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
Moderniser le développement logiciel : de la fragmentation à l’intégration
Analyse Patch Tuesday Mars 2026
Une nouvelle ère de la modernisation du mainframe
Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
À la une de la chaîne Tech
- Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
- Moderniser le développement logiciel : de la fragmentation à l’intégration
- Analyse Patch Tuesday Mars 2026
- Une nouvelle ère de la modernisation du mainframe
- Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
