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
Sécuriser Microsoft 365 avec une approche Zero-Trust
Découvrez comment renforcer la cyber-résilience de Microsoft 365 grâce à une approche Zero-Trust, une administration granulaire et une automatisation avancée. La technologie Virtual Tenant de CoreView permet de sécuriser et simplifier la gestion des environnements complexes, tout en complétant vos stratégies IAM, y compris dans les secteurs réglementés.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Cybersécurité française 2026 : explosion des startups, ralentissement des scale-ups et virage stratégique de l’IA
- Le Cercle de l’Innovation décerne le Prix de l’Innovation du Public 2026
- Avec l’IA agentique, la robustesse des SI redevient stratégique
- Les erreurs du secteur bancaire dans son approche IA
Articles les + lus
Couchbase lance AI Data Plane pour industrialiser l’IA agentique
Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
Computex 2026 : 5 signaux forts à retenir
La chaîne d’approvisionnement, point de rupture récurent du SI
Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
À la une de la chaîne Tech
- Couchbase lance AI Data Plane pour industrialiser l’IA agentique
- Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
- Computex 2026 : 5 signaux forts à retenir
- La chaîne d’approvisionnement, point de rupture récurent du SI
- Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
