TD 4: XPath

Rappels


Exercice 1

Observez le XML suivant, et téléchargez le : 1.xml, puis répondez aux questions qui suivent.

 0:
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
<?xml version="1.0" encoding="utf-8"?>
<a>
  <b
    carre="oui">
    <b>
      <c/>
      <d>
        l'école
      </d>
      <d
        combien="12"/>
    </b>
    youpi
  </b>
  <b>
    <d/>
  </b>
  <de
    triangle="oui">
    <e>
      finie
    </e>
  </de>
  <b>
    <c>
      <d/>
      es
    </c>
  </b>
</a>
  1. Pour les nœuds en bleu, donnez les nœuds (les numéros de ligne) correspondant aux axes XPath suivants:

  2. Par exemple, pour le nœud <de>, on obtient:
    19           (pour l'axe "child")
    19 20        (pour l'axe "descendant")
    17 19 20     (pour l'axe "descendant-or-self")
    23           (pour l'axe "following-sibling")
    17           (pour l'axe "self")
    1            (pour l'axe "parent")
    1            (pour l'axe "ancestor")
    23 24 25 26  (pour l'axe "following")
      
  3. Entrez vos réponses pour le nœud <b> dans un fichier 1.2.txt, en utilisant une ligne par axe, et en listant les numéros de ligne séparés par des espaces, comme cela:
    1 3 4 10 11     (pour l'axe "child")
    4 5             (pour l'axe "descendant")
    ...
        
    Vérifiez la validité avec 1.2.sh : Lancez juste la comande
    bash 1.2.sh
    RENDU: 1.2.txt

  4. Téléchargez, lisez, et comprenez le fichier 1.3.xslt. Que renvoie la commande :
    xsltproc 1.3.xslt 1.xml
    Modifiez le fichier 1.xml, mais ne modifiez pas le fichier 1.3.xslt, pour faire en sorte que la commande précédente affiche "51 s" (sans compter les espaces et retours à la lignes).

    RENDU: 1.3.xml

  5. Que donnera xsl:value-of appliqué à la racine de l’arbre ? Testez en modifiant 1.3.xslt pour créer 1.4.xslt.

    RENDU: 1.4.xslt


Exercice 2

En regardant le fichier XML suivant (téléchargeable ici : 2.xml):
<racine>
  <rep1>
	 <rep2>
	 La
	 </rep2>
	 <rep2>
	 meilleure
	 </rep2>
	 <rep2>
	 façon
	 </rep2>
  </rep1>
  <rep1 couleur="rouge">
  </rep1>de marcher
  <rep1>c'est
		<rep2>
	 encore
	 </rep2>
	 <rep2>
	 la
	 </rep2>
	 <rep2>
	 nôtre
	 </rep2>
  </rep1>
</racine>
  1. À quoi correspond descendant::rep1/child::rep2 ?
  2. À quoi correspond descendant::rep1/descendant::rep2/ancestor::* ?
  3. À quoi correspond child::rep1/child::rep2[position() < 2] ?
  4. Modifiez le fichier 2.xslt, puis utilisez xsltproc pour vérifier vos réponses
    Note: Le caractère < doit être saisi à l'aide des entités prédéfinies

  5. RENDU: 2.1.xslt, 2.2.xslt, 2.3.xslt


Exercice 3

Donnez des requêtes XPath (faire aussi avec les motifs) permettant de constituer les ensembles suivants à partir de filmotheque.xml
Vérifiez vos requêtes en les injectant dans le fichier print.xslt, puis avec: xsltproc print.xslt filmotheque.xml.
Faites une copie de print.xslt pour chaque rendu (voir ci-dessous).
  1. L'ensemble des films, séries et documentaires
  2. Le nombre total de films
  3. Le deuxième et le troisième film
  4. Le nom de tous les films sortis en 2013
  5. Le nom de tous les films, séries ou documentaires sortis après 2000
  6. Le nom des films avec J. Reno parmi les acteurs
  7. Les années de sorties des films avec au moins trois acteurs
  8. Les films sortis après 2003 et les documentaires sortis avant 1990
  9. Les films dont le titre est court (moins de 6 lettres)
  10. Les films dont le titre commence par "La vie"
RENDU: 3.1.xslt 3.2.xslt 3.3.xslt 3.4.xslt 3.5.xslt 3.6.xslt 3.7.xslt 3.8.xslt 3.9.xslt 3.10.xslt