Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
enseignement:tp:bd:tp-xpath-corr [2012/07/03 13:33]
ecoquery créée
enseignement:tp:bd:tp-xpath-corr [2013/04/11 14:16] (Version actuelle)
ecoquery [Évaluation de requêtes XPath]
Ligne 4: Ligne 4:
  
  
-[[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 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
Ligne 10: Ligne 10:
 Il s'agit simplement d'une interface graphique utilisant la bibliothèque [[http://saxon.sourceforge.net/|Saxon]] pour traiter les requêtes XQuery. L'interface est composée de trois zones de texte principales: une pour le document XML à traiter, une pour le programme XQuery et une dans laquelle s'affiche le résultat. Sur la gauche, il y a une liste de documents XML disponibles. Double cliquez sur un document pour le charger dans la zone de données. Il est également possible de charger un document du serveur en saisissant l'url dans la petite zone de texte en haut. Le bouton "XQuery" permet de lancer la requête XQuery de la zone "Programme". Le bouton "XSLT" (non utilisé dans ce TP) permet d'appliquer une feuille de style [[http://www.w3.org/TR/xslt|XSLT]] donnée dans la zone programme sur le document de la zone "Données". Il est en particulier possible de l'utiliser pour afficher les DTDs de certains des documents de la base. Les racourcis claviers classiques fonctionnent dans les zones de texte: Ctrl-C pour copier, Ctrl-V pour coller, Ctrl-X pour couper. Ctrl-Q permet de quitter. Il s'agit simplement d'une interface graphique utilisant la bibliothèque [[http://saxon.sourceforge.net/|Saxon]] pour traiter les requêtes XQuery. L'interface est composée de trois zones de texte principales: une pour le document XML à traiter, une pour le programme XQuery et une dans laquelle s'affiche le résultat. Sur la gauche, il y a une liste de documents XML disponibles. Double cliquez sur un document pour le charger dans la zone de données. Il est également possible de charger un document du serveur en saisissant l'url dans la petite zone de texte en haut. Le bouton "XQuery" permet de lancer la requête XQuery de la zone "Programme". Le bouton "XSLT" (non utilisé dans ce TP) permet d'appliquer une feuille de style [[http://www.w3.org/TR/xslt|XSLT]] donnée dans la zone programme sur le document de la zone "Données". Il est en particulier possible de l'utiliser pour afficher les DTDs de certains des documents de la base. Les racourcis claviers classiques fonctionnent dans les zones de texte: Ctrl-C pour copier, Ctrl-V pour coller, Ctrl-X pour couper. Ctrl-Q permet de quitter.
  
-Pour utiliser l'interface sans internet, télécharger les fichiers suivants: [[http://www710.univ-lyon1.fr/~ecoquery/files/xquery.jar|xquery.jar]], [[http://www710.univ-lyon1.fr/~ecoquery/files/saxon8.jar|saxon8.jar]] et [[http://www710.univ-lyon1.fr/~ecoquery/files/xmlfiles.jar|xmlfiles.jar]]. Lancer ensuite la commande:+Pour utiliser l'interface sans internet, télécharger les fichiers suivants: [[http://liris.cnrs.fr/~ecoquery/files/xquery.jar|xquery.jar]], [[http://liris.cnrs.fr/~ecoquery/files/saxon9.jar|saxon9.jar]], [[http://liris.cnrs.fr/~ecoquery/files/saxon9-xpath.jar|saxon9-xpath.jar]], [[http://liris.cnrs.fr/~ecoquery/files/saxon9-dom.jar|saxon9-dom.jar]] et [[http://liris.cnrs.fr/~ecoquery/files/xmlfiles.jar|xmlfiles.jar]]. Lancer ensuite la commande:
  
 <code shell> <code shell>
-java -cp saxon8.jar:xquery.jar:xmlfiles.jar fr.cnrs.liris.ecoquery.xqueryapp.Main+java -cp saxon9.jar:saxon9-xpath.jar:saxon9-dom.jar:xquery.jar:xmlfiles.jar fr.cnrs.liris.ecoquery.xqueryapp.Main
 </code> </code>
  
Ligne 19: Ligne 19:
  
 <code shell> <code shell>
-/usr/lib/jvm/java-1.5.0-sun/bin/java -cp saxon8.jar:xquery.jar:xmlfiles.jar fr.cnrs.liris.ecoquery.xqueryapp.Main+/usr/lib/jvm/java-1.5.0-sun/bin/java -cp saxon9.jar:saxon9-xpath.jar:saxon9-dom.jar:xquery.jar:xmlfiles.jar fr.cnrs.liris.ecoquery.xqueryapp.Main
 </code> </code>
  
Ligne 27: Ligne 27:
  
 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.
   * Les [[http://www.w3.org/TR/xpath-functions/|fonctions standard de XQuery/XPath]].   * Les [[http://www.w3.org/TR/xpath-functions/|fonctions standard de XQuery/XPath]].
- 
 ===== Évaluation de requêtes XPath ===== ===== Évaluation de requêtes XPath =====
  
Ligne 41: Ligne 40:
   - Document: "Vente livres", requête: ''<nowiki>//</nowiki>editor/last''   - Document: "Vente livres", requête: ''<nowiki>//</nowiki>editor/last''
   - Document: "Vente livres", requête: ''/bib/book[attribute::year >= 1999]''   - Document: "Vente livres", requête: ''/bib/book[attribute::year >= 1999]''
-  - Document: "Collection", requête: ''/collection/tome/dessinateur'' \\ <color black/#FFCCCC>//**Correction: **rien: il n'y a pas d'enfant direct qui soit des éléments ''tome'' dans la collection (il n'y a que des ''series'')//</color>+  - Document: "Collection", requête: ''/collection/tome/dessinateur'' \\ //**Correction: **rien: il n'y a pas d'enfant direct qui soit des éléments ''tome'' dans la collection (il n'y a que des ''series'')//
   - Document: "Collection", requête: ''<nowiki>//</nowiki>scenariste''   - Document: "Collection", requête: ''<nowiki>//</nowiki>scenariste''
   - Document: "Collection", requête: ''/collection<nowiki>//</nowiki>dessinateur[child::text() = <nowiki>"</nowiki>Tarquin<nowiki>"</nowiki>]/..''   - Document: "Collection", requête: ''/collection<nowiki>//</nowiki>dessinateur[child::text() = <nowiki>"</nowiki>Tarquin<nowiki>"</nowiki>]/..''
-  - Document: "Collection", requête: ''<nowiki>//</nowiki>tome[numero=<nowiki>"1"</nowiki>]/parent::element()''\\ <color black/#FFCCCC>//**Correction: **rien: dans les tomes, le numéro est spécifié par un attribut et non par un élément (requête correcte: ''<nowiki>//</nowiki>tome[@numero="1"]/parent::element()'')//</color>+  - Document: "Collection", requête: ''<nowiki>//</nowiki>tome[numero=<nowiki>"1"</nowiki>]/parent::element()''\\ //**Correction: **rien: dans les tomes, le numéro est spécifié par un attribut et non par un élément (requête correcte: ''<nowiki>//tome[@numero="1"]/parent::element()</nowiki>'')//
   - Document: "Hamlet", requête: ''/PLAY/TITLE''   - Document: "Hamlet", requête: ''/PLAY/TITLE''
   - Document: "Hamlet", requête: ''<nowiki>//</nowiki>ACT/TITLE''   - Document: "Hamlet", requête: ''<nowiki>//</nowiki>ACT/TITLE''
-  - Document: "Hamlet", requête: ''<nowiki>//</nowiki>LINE/TITLE''\\ <color black/#FFCCCC>//**Correction: **rien: il n'y a pas de titre dans les lignes//</color> +  - Document: "Hamlet", requête: ''<nowiki>//</nowiki>LINE/TITLE''\\ //**Correction: **rien: il n'y a pas de titre dans les lignes//
 ===== Écriture de requêtes XPath ===== ===== Écriture de requêtes XPath =====
  
Ligne 55: Ligne 53:
  
   - Document: "Database"   - Document: "Database"
-    - L'ensemble des éléments file\\ <color black/#ffcccc>**Correction:**</color><code>//file</code> +    - L'ensemble des éléments file\\ **Correction:**<code>//file</code> 
-    - L'élément file ayant pour nom "Hamlet"\\ <color black/#ffcccc>**Correction:**</color><code>//file[@name="Hamlet"]</code> +    - L'élément file ayant pour nom "Hamlet"\\ **Correction:**<code>//file[@name="Hamlet"]</code> 
-    - L'élément file ayant pour url ''collection.xml''\\ <color black/#ffcccc>**Correction:**</color><code>//file[@url="collection.xml"]</code>+    - L'élément file ayant pour url ''collection.xml''\\ **Correction:**<code>//file[@url="collection.xml"]</code>
   - Document: "Vente livres"   - Document: "Vente livres"
-    - L'ensemble des auteurs\\ <color black/#ffcccc>**Correction:**</color><code>//author</code> +    - L'ensemble des auteurs\\ **Correction:**<code>//author</code> 
-    - Les livres ayant pour auteur W.Stevens\\ <color black/#ffcccc>**Correction:**</color><code>//book[author[last="Stevens" and first="W."]]</code> +    - Les livres ayant pour auteur W.Stevens\\ **Correction:**<code>//book[author[last="Stevens" and first="W."]]</code> 
-    - Les livres ayant un éditeur\\ <color black/#ffcccc>**Correction:**</color><code>//book[editor]</code> +    - Les livres ayant un éditeur\\ **Correction:**<code>//book[editor]</code> 
-    - Les livres datant d'avant 1999 (inclus) et dont le prix est supérieur à 100. Proposer une solution avec et une solution sans opérateur booléen explicite\\ <color black/#ffcccc>**Correction:**</color><code>//book[@year <= 1999 and price >= 100]</code><color black/#FFCCCC>et</color><code>//book[@year <= 1999][price >= 100]</code> +    - Les livres datant d'avant 1999 (inclus) et dont le prix est supérieur à 100. Proposer une solution avec et une solution sans opérateur booléen explicite\\ **Correction:**<code>//book[@year <= 1999 and price >= 100]</code>et<code>//book[@year <= 1999][price >= 100]</code> 
-    - Les livres dont un des auteurs a écrit un autre livre vendu ici.\\ <color black/#ffcccc>**Correction:**</color><code>//book[author = preceding-sibling::book/author or author = following-sibling::book/author]</code>+    - Les livres dont un des auteurs a écrit un autre livre vendu ici.\\ **Correction:**<code>//book[author = preceding-sibling::book/author or author = following-sibling::book/author]</code>
   - Document: "Collection" et "Collection 2"   - Document: "Collection" et "Collection 2"
-    - Les séries dont on possède le numero 2.\\ <color black/#ffcccc>**Correction:**</color><code>//serie[tome/@numero = 2]</code> +    - Les séries dont on possède le numero 2.\\ **Correction:**<code>//serie[tome/@numero = 2]</code> 
-    - Les tomes dont on connaît le scénariste et le dessinateur.\\ <color black/#ffcccc>**Correction:**</color><code>//tome[dessinateur][scenariste]</code> +    - Les tomes dont on connaît le scénariste et le dessinateur.\\ **Correction:**<code>//tome[dessinateur][scenariste]</code> 
-    - L'ensemble des tomes des séries "Lanfeust de Troy" et "Calvin et Hobbes"\\ <color black/#ffcccc>**Correction:**</color><code>//tome[parent::serie[@nom = "Lanfeust de Troy" or @nom = "Calvin &amp; Hobbes"]]</code>+    - L'ensemble des tomes des séries "Lanfeust de Troy" et "Calvin et Hobbes"\\ **Correction:**<code>//tome[parent::serie[@nom = "Lanfeust de Troy" or @nom = "Calvin &amp; Hobbes"]]</code>
   - Document: "Hamlet"   - Document: "Hamlet"
-    - L'ensemble des lignes dites par Hamlet\\ <color black/#ffcccc>**Correction:**</color><code>//SPEECH[SPEAKER="HAMLET"]/LINE</code> +    - L'ensemble des lignes dites par Hamlet\\ **Correction:**<code>//SPEECH[SPEAKER="HAMLET"]/LINE</code> 
-    - Les titres des scenes dans lesquelles Horatio répond à Hamlet\\ <color black/#ffcccc>**Correction:**</color><code>//SCENE[//SPEAKER[../preceding-sibling::SPEECH[1]/SPEAKER = "HAMLET"][child::text() = "HORATIO"]]/TITLE</code> <color black/#FFCCCC>ou</color> <code>//SCENE//SPEAKER[../preceding-sibling::SPEECH[1]/SPEAKER = "HAMLET"][child::text() = "HORATIO"]/../../TITLE</code> <color black/#FFCCCC>ou</color> <code>//SPEECH[SPEAKER="HORATIO" and preceding-sibling::SPEECH[1]/SPEAKER = "HAMLET"]/../TITLE</code>+    - Les titres des scenes dans lesquelles Horatio répond à Hamlet\\ **Correction:**<code>//SCENE[//SPEAKER[../preceding-sibling::SPEECH[1]/SPEAKER = "HAMLET"][child::text() = "HORATIO"]]/TITLE</code> ou <code>//SCENE//SPEAKER[../preceding-sibling::SPEECH[1]/SPEAKER = "HAMLET"][child::text() = "HORATIO"]/../../TITLE</code> ou <code>//SPEECH[SPEAKER="HORATIO" and preceding-sibling::SPEECH[1]/SPEAKER = "HAMLET"]/../TITLE</code>