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
![Concepts de base Concepts de base](https://www.itpro.fr/wp-content/uploads/2015/10/41b287a342f836eede881d43c0fada75.jpg)
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
![Guide de Reporting Microsoft 365 & Microsoft Exchange](https://www.itpro.fr/wp-content/uploads/2023/06/Promodag-Reports-pour-Microsoft-Exchange-Solution-de-reporting-detaille-de-lutilisation-de-Microsoft-Exchange-2023-1.jpg)
Guide de Reporting Microsoft 365 & Microsoft Exchange
Comment bénéficier d’une vision unifiée de vos messageries, mieux protéger vos données sensibles, vous conformer plus aisément aux contraintes réglementaires et réduire votre empreinte carbone ? Découvrez la solution de reporting complet de l’utilisation de Microsoft Exchange, en mode on-premise ou dans le Cloud.
Les articles les plus consultés
- N° 2 : Il faut supporter des langues multiples dans SharePoint Portal Server
- Chiffrements symétrique vs asymétrique
- Afficher les icônes cachées dans la barre de notification
- Partager vos images, vidéos, musique et imprimante avec le Groupe résidentiel
- Cybersécurité Active Directory et les attaques de nouvelle génération