Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

enseignement:tp:bd:tp-xquery-corr [2012/07/03 13:35]
ecoquery créée
enseignement:tp:bd:tp-xquery-corr [2012/07/06 12:48] (Version actuelle)
ecoquery
Ligne 2: Ligne 2:
  
  
-[[http://www710.univ-lyon1.fr/~ecoquery/files/xquery.jnlp|Interface XPath/XQuery]]+[[http://liris.cnrs.fr/~ecoquery/files/xquery.jnlp|Interface XPath/XQuery]]
  
  Pour lancer l'interface XQuery, cliquer sur le lien si dessus. Dans le cas où le navigateur vous demande avec quoi ouvrir le fichier, choisir "Java Web Start" ou javaws.exe. Voir le [[tp-xpath|TP XPath]] pour plus de détails ou si JavaWS ne fonctionne pas.   Pour lancer l'interface XQuery, cliquer sur le lien si dessus. Dans le cas où le navigateur vous demande avec quoi ouvrir le fichier, choisir "Java Web Start" ou javaws.exe. Voir le [[tp-xpath|TP XPath]] pour plus de détails ou si JavaWS ne fonctionne pas. 
  
 Voici quelques liens sur XPath et XQuery: Voici quelques liens sur XPath et XQuery:
-  * Tout d'abord, un [[http://www710.univ-lyon1.fr/~ecoquery/enseignement/bdav/cours-xml/resume-xquery.html|petit résumé]].+  * Tout d'abord, un [[:enseignement:bdav:xquery|petit résumé]].
   * La [[http://www.w3.org/TR/xpath20/|définition de XPath]] par le W3C.   * La [[http://www.w3.org/TR/xpath20/|définition de XPath]] par le W3C.
   * La [[http://www.w3.org/TR/xquery/|définition de XQuery]] par le W3C.   * La [[http://www.w3.org/TR/xquery/|définition de XQuery]] par le W3C.
Ligne 16: Ligne 16:
  
 Donner une expression FLWOR correspondant à chacune des requêtes suivantes: Donner une expression FLWOR correspondant à chacune des requêtes suivantes:
-  - Documents Collection et Collection 2: Pour chaque série, créer un élément serie avec un attribut titre contenant le nom de la série et un attribut editeur contenant le nom de son éditeur (la valeur de l'attribut editeur est "" s'il n'y a pas d'éditeur pour la série).\\ <color black/#ffcccc>**Correction:**</color><code>for $s in //serie+  - Documents Collection et Collection 2: Pour chaque série, créer un élément serie avec un attribut titre contenant le nom de la série et un attribut editeur contenant le nom de son éditeur (la valeur de l'attribut editeur est "" s'il n'y a pas d'éditeur pour la série).\\ **Correction:**<code>for $s in //serie
 return return
 <serie titre="{$s/@nom}" editeur="{$s/editeur/@nom}"/></code> <serie titre="{$s/@nom}" editeur="{$s/editeur/@nom}"/></code>
-  - Documents Collection et Collection 2: pour chaque tome de la collection donner son numero, le nom de sa serie et son titre sous forme d'attributs.\\ <color black/#ffcccc>**Correction:**</color><code>+  - Documents Collection et Collection 2: pour chaque tome de la collection donner son numero, le nom de sa serie et son titre sous forme d'attributs.\\ **Correction:**<code>
 for $tome in //tome for $tome in //tome
 return  return 
Ligne 25: Ligne 25:
   {$tome/@numero}   {$tome/@numero}
 </tome></code> </tome></code>
-  - Même question mais en ordonnant les résultats par titre.\\ <color black/#ffcccc>**Correction:**</color><code>+  - Même question mais en ordonnant les résultats par titre.\\ **Correction:**<code>
 for $tome in //tome for $tome in //tome
 let $titre := $tome/titre let $titre := $tome/titre
Ligne 34: Ligne 34:
 </tome> </tome>
 </code> </code>
-  - Document Database: pour chaque fichier créer un élément a contenant un attribut href indiquant l'url du document et ayant pour enfant du texte qui indique le nom du document. On pourra utiliser la fonction string(.) pour récupérer la valeur d'un attribut sous forme de texte.\\ <color black/#ffcccc>**Correction:**</color><code>+  - Document Database: pour chaque fichier créer un élément a contenant un attribut href indiquant l'url du document et ayant pour enfant du texte qui indique le nom du document. On pourra utiliser la fonction string(.) pour récupérer la valeur d'un attribut sous forme de texte.\\ **Correction:**<code>
 for $f in //file for $f in //file
 return  return 
 <a href="{$f/@url}">{string($f/@name)}</a> <a href="{$f/@url}">{string($f/@name)}</a>
 </code> </code>
-  - Transformer la requête précédente de manière à obtenir une liste html contenant les liens vers les fichiers. (On rappelle qu'une liste html est constituée par un élément ''ol'' ou ''ul'' contenant un ensemble d'éléments ''li'' dont le contenu correspond aux différents "items" de la liste.)\\ <color black/#ffcccc>**Correction:**</color><code>+  - Transformer la requête précédente de manière à obtenir une liste html contenant les liens vers les fichiers. (On rappelle qu'une liste html est constituée par un élément ''ol'' ou ''ul'' contenant un ensemble d'éléments ''li'' dont le contenu correspond aux différents "items" de la liste.)\\ **Correction:**<code>
 <ul> <ul>
 {for $f in //file {for $f in //file
Ligne 48: Ligne 48:
 </code> </code>
   - Transformer à nouveau la requête précédente de façon à ce que:   - Transformer à nouveau la requête précédente de façon à ce que:
-    * Les urls des liens soient absolues (i.e. commence bien par ''<nowiki>http://www710.univ-lyon1.fr/~ecoquery/files/</nowiki>''). On pourra utiliser la fonction ''concat(.,.)''.+    * Les urls des liens soient absolues (i.e. commence bien par ''<nowiki>http://liris.cnrs.fr/~ecoquery/files/</nowiki>''). On pourra utiliser la fonction ''concat(.,.)''.
     * Le résultat forme un document XML. On pourra utiliser le modèle ci-dessous<code>     * Le résultat forme un document XML. On pourra utiliser le modèle ci-dessous<code>
 <html> <html>
Ligne 59: Ligne 59:
 </html> </html>
 </code> </code>
-    * Copier coller le résultat dans un bloc note et l'enregistrer avec l'extension .html. Ouvrir le fichier avec un navigateur et vérifier que les liens marchent (si le navigateur a du mal, essayer sans la première ligne du résultat).\\ <color black/#ffcccc>**Correction:**</color><code>+    * Copier coller le résultat dans un bloc note et l'enregistrer avec l'extension .html. Ouvrir le fichier avec un navigateur et vérifier que les liens marchent (si le navigateur a du mal, essayer sans la première ligne du résultat).\\ **Correction:**<code>
 <html> <html>
   <head>   <head>
Ligne 68: Ligne 68:
     {for $f in //file     {for $f in //file
     return      return 
-      <li><a href="{concat('http://www710.univ-lyon1.fr/~ecoquery/files/',$f/@url)}">{string($f/@name)}</a></li>+      <li><a href="{concat('http://liris.cnrs.fr/~ecoquery/files/',$f/@url)}">{string($f/@name)}</a></li>
     }     }
     </ul>     </ul>
   </body>   </body>
 </html></code> </html></code>
-  - Document Bookmarks: donner pour chaque catégorie son nom et ses bookmarks (y compris ceux des sous-catégories). Le resultat devra être trié par nom ou titre, que ce soit pour les categories ou pour les bookmarks.\\ <color black/#ffcccc>**Correction:**</color><code>+  - Document Bookmarks: donner pour chaque catégorie son nom et ses bookmarks (y compris ceux des sous-catégories). Le resultat devra être trié par nom ou titre, que ce soit pour les categories ou pour les bookmarks.\\ **Correction:**<code>
 for $cat in //categorie for $cat in //categorie
 let $nom := $cat/@nom let $nom := $cat/@nom
Ligne 90: Ligne 90:
 ===== Fonctions XQuery ===== ===== Fonctions XQuery =====
  
- Voir le [[http://www710.univ-lyon1.fr/~ecoquery/enseignement/bdav/cours-xml/resume-xquery.html|résumé]] pour la syntaxe des fonctions.+ Voir le [[:enseignement:bdav:xquery|résumé]] pour la syntaxe des fonctions.
  
-  - Document Bookmarks: écrire une fonction de présentation simple des bookmarks: elle prend un argument un noeud bookmark et donne un paragraphe correspondant au titre qui sera un lien (si le titre est absent, mettre l'url à la place du titre) et un paragraphe contenant sa description (ou rien s'il n'y a pas de description). On regroupera ces deux paragraphes dans une élément ''div''.\\  Utiliser la fonction pour générer une page web contenant une liste des bookmarks que vous testerez comme précédement. On pourra utiliser la construction ''if ( test ) then  expr1  else  expr2''. ''()'' peut être utilisé pour renvoyer un ensemble d'éléments vide.\\ Note: si une expression de chemin est utilisée à la place d'un booléen, on considère qu'elle vaut vrai si son résultat n'est pas vide.\\ <color black/#ffcccc>**Correction:**</color><code>+  - Document Bookmarks: écrire une fonction de présentation simple des bookmarks: elle prend un argument un noeud bookmark et donne un paragraphe correspondant au titre qui sera un lien (si le titre est absent, mettre l'url à la place du titre) et un paragraphe contenant sa description (ou rien s'il n'y a pas de description). On regroupera ces deux paragraphes dans une élément ''div''.\\  Utiliser la fonction pour générer une page web contenant une liste des bookmarks que vous testerez comme précédement. On pourra utiliser la construction ''if ( test ) then  expr1  else  expr2''. ''()'' peut être utilisé pour renvoyer un ensemble d'éléments vide.\\ Note: si une expression de chemin est utilisée à la place d'un booléen, on considère qu'elle vaut vrai si son résultat n'est pas vide.\\ **Correction:**<code>
 declare function local:pres-bookmarks($bm as element(bookmark))  declare function local:pres-bookmarks($bm as element(bookmark)) 
 { {
Ligne 131: Ligne 131:
 </html> </html>
 </code> </code>
-  - On reprend la question précédente, mais en affichant à l'aide d'une fonction récursive les catégories avec leur bookmarks. Une catégorie sera représentée par un élément ''div'' dans lequel on mettra un paragraphe donnant le nom de la catégorie, un paragraphe regroupant toutes ses descriptions et enfin une liste html qui correspondra à l'ensemble des bookmarks et des catégories qui sont des enfants de la catégorie considérée. On utilisera la fonction précédente pour le formatage des bookmarks. Dans un premier temps on pourra éventuellement mettre en premier les sous-catégories, suivies des bookmarks. Dans un deuxième temps, on conservera l'ordre donné dans le document Bookmarks.\\ <color black/#ffcccc>**Correction:**</color><code>+  - On reprend la question précédente, mais en affichant à l'aide d'une fonction récursive les catégories avec leur bookmarks. Une catégorie sera représentée par un élément ''div'' dans lequel on mettra un paragraphe donnant le nom de la catégorie, un paragraphe regroupant toutes ses descriptions et enfin une liste html qui correspondra à l'ensemble des bookmarks et des catégories qui sont des enfants de la catégorie considérée. On utilisera la fonction précédente pour le formatage des bookmarks. Dans un premier temps on pourra éventuellement mettre en premier les sous-catégories, suivies des bookmarks. Dans un deuxième temps, on conservera l'ordre donné dans le document Bookmarks.\\ **Correction:**<code>
 (: Dans cette version on garde l'ordre :) (: Dans cette version on garde l'ordre :)
  
Ligne 191: Ligne 191:
   </body>   </body>
 </html></code> </html></code>
-  - Document Pieces: dans ce document, chaque pièce a un identifiant ''id'', un nom et optionnellement l'identifiant d'une pièce dont elle constitue une partie. Écrire une fonction récursive permettant d'obtenir une hierachie de pièces représentant la composition d'une pièce. Attention, on ne peut pas utiliser un chemain XPath commençant par / dans une fonction. Utiliser cette fonction pour représenter de manière hierachique le document Pieces. \\ <color black/#ffcccc>**Correction:**</color><code>+  - Document Pieces: dans ce document, chaque pièce a un identifiant ''id'', un nom et optionnellement l'identifiant d'une pièce dont elle constitue une partie. Écrire une fonction récursive permettant d'obtenir une hierachie de pièces représentant la composition d'une pièce. Attention, on ne peut pas utiliser un chemain XPath commençant par / dans une fonction. Utiliser cette fonction pour représenter de manière hierachique le document Pieces. \\ **Correction:**<code>
 declare function local:mkpc($pc as element(piece)) declare function local:mkpc($pc as element(piece))
 { {