TME XQuery
Préparation
- votre environnement doit déjà être configuré : votre fichier /.bash_profile doit contenir la ligne source /usr/local/oracle/config
- Installer les fichiers du TME
Commande | Description |
cd | aller dans votre répertoire $HOME |
tar zxvf $BD_TOOL/xquery.tgz | installer l'archive dans votre répertoire principal |
cd xquery | aller dans votre répertoire de travail |
Exécuter une requête avec la commande : xquery fichier_requête.xql
Exemple : xquery r1.xql
Lire attentivement les indications sur la syntaxe XQuery ci-dessous.
Exercice
1) Ecrire en XQuery les requêtes sur la base tennis (fichiers joueur.xml, gain.xml, rencontre.xml)
- t0.xql : afficher tous les tournois (lieu,année) triés par année, puis lieu. Le résultat de la requête doit être ainsi : xml ( ou txt)
- t1.xql : pour chaque tournoi (lieu, année) donner les nom et prénom des participants. Le résultat de la requête doit être ainsi : xml ( ou txt)
- t2.xql : pour chaque année, donner le nombre tournois auxquels chaque joueur a participé. Le résultat de la requête doit être ainsi : xml ( ou txt)
- t3.xql (facultatif). Pour chaque tournoi (tournoi dames et tournoi hommes pour un lieu et une année), donner l'arbre binaire des matchs (finale, demi finale et quart de finale). Le résultat de t3.xql doit valider la DTD t3.dtd.
2) Ecrire en XQuery les requêtes r5.xql, r7.xsql, r9.xql, r11.xql et r12.xql sur la base de données bibliographique.
3) Faire l'ex XQuery de l'examen juin 2003. Les données sont dans les fichiers joueur2.xml (txt) et rencontre2.xml (txt)
4) (facultatif) les requêtes Q1 à Q18 du use-case "R".
Questions/réponses fréquentes
- Les mots clés doivent être en lettres minuscules (ex. for, in, let, where, return, and, or, ... )
- Commentaires : accolade avec 2 tirets: {-- un commentaire --}
La clause return s'écrit sans parenthèses, par exemple :
- return expression
- return <nom_element> {expression} </nom_element>
La fonction distinct-values(...) produit un ensemble sans doubles. Cf. cours tr. 28
- for $x in distinct-values( document("bib.xml")/bib/book/author )
- Une expression XPath peut contenir un prédicat entre crochets. Cf cours tr. 25,27
document("bib.xml")//book[publisher=$p]
- La fonction xpath position() donne le rang d'un élément (i.e., le n-ième fils). Cf. cours tr.18,19
Requêtes imbriquées
- il est possible d'imbriquer des expressions FLWOR dans la clause return d'une requête ou dans une clause let.
Tri: ajouter une clause order by nom_element avant la clause return.
- à ne pas confondre avec l'opérateur sort by (nom_element) servant à trier une collection. L'opérateur sort by est ajouté dans les clauses for ou let.
Comparaison de valeurs avec l'opérateur d'égalité: a eq b
- si le type de a et b est simple (simpleType), alors a eq b est vrai ssi leur valeurs sont égales.
- si le type de a et b est complexe (complexType), alors a eq b est vrai ssi xs:string(a) eq xs:string(b)
Comparaison générale de deux ensembles : A = B lorsque les opérandes A et B sont des ensembles
- A = B est vrai ssi il existe au moins un elt a dans A et un elt b dans B tels que a eq b
- Comparaison "en profondeur" de deux éléments: utiliser la fonction deep-equal(a,b) au lieu de l'opérateur d'égalité =
Comparaison des identifiants de 2 éléments :
- a is b est vrai ssi a représente le même élément que b
Message d'erreur rencontré "context item not defined"
- erreur dans le noeud contextuel d'une expression xpath. Le premier terme d'une expression xpath est erroné.
- Vérifier la présence des guillemets dans les expressions xpath commençant par document("fichier")
- Vérifier la présence du $ au début des expressions xpath commençant par un nom de variable.
Documentation
- Les exemples de cas d'utilisation (use case XMP et R)
- La norme XQuery , XQuery and XPath Data Model
- Les fonctions et opérateurs prédéfinis et la sémantique formelle du langage XQuery.
Outils
*Deux moteurs de requêtes XQuery : Galax, oracle xquery (installer chez soi le moteur Galax de préférence). *Pour vérifier la syntaxe d'une requête : XQuery grammar test page , *Divers prototypes en ligne : Galax, Microsoft, Cogneticsystems, Ipsi, Qizx, MXquery