TP 4
XML — Licence Pro BDISE — 4 janvier 2017
Rappels
Pour transformer arbre.xml en page.html via la feuille transformation.xsl, on utilise la commande suivante:
xsltproc -o page.html transformation.xsl arbre.xml
On pourra utiliser la feuille de style vide fournie.
Exercice 1
- Le but de l'exercice est de définir une feuille de style XSLT qui transforme le fichier
RoisMages.xml
vers un fichier HTML qui présente les données de la même manière que dans cet exemple. - Parenthèse culturelle: dans le sud de l'europe (Espagne surtout), ce sont les Rois Mages qui apportent les cadeaux (ou du charbon pour les enfants pas sages), en référence à l'épiphanie.
- Construire la template pour la racine.
- On remarque qu'il y a tout d'abord une partie qui lit la liste des enfants et affiche leurs cadeaux.
- Prévoir ce parcours, soit dans une template pour
enfants
, soit directement dans la racine. - On commence par le cas des enfants sages. La principale difficulté est ici de sélectionner dans la liste des cadeaux (le
chameau
) les cadeaux correspondant à chaque enfant. Dans ce cas, on va garder le nom de l'enfant dans une variable de sorte à pouvoir comparer lors du parcours de la totalité des cadeaux. - On s'occupe ensuite des enfants pas sages. Cette fois, la sélection des cadeaux correspondant à l'enfant se fera par une expression XPath.
- Prévoir ce parcours, soit dans une template pour
- On s'intéresse maintenant à la deuxième partie, le parcours du contenu du chargement du
chameau
.- Prévoir ce parcours dans la template de la racine.
- On va parcourir la liste des
boite
s deux fois. La première fois, on filtre (par une expression XPath) pour n'afficher que les éléments dont ledestinataire
a étésage
. Remarquez que lesobjet
s sont classés parpoids
décroissant... - Lors du second parcours, on adapte le filtre pour ne considérer que les enfants
passage
s. Notez qu'ici on veut un ordre alphabétique sur les références. - En bonus: avec une expression XPath, on veut obtenir le
poids
total de tous les cadeaux à remplacer par du charbon.
- Vous pouvez maintenant décommenter dans le
xml
la ligne qui référence la feuille de style.
Exercice 2
On va travailler sur le contenu de l'archive petit_prince.tar.gz
. Pour la décompresser: tar -xvzf petit_prince.tar.gz
Le but de l'exercice est de définir une feuille de style XSLT qui transforme le fichier petit_prince.xml
vers un fichier HTML qui présente les données comme dans cet exemple.
- Préambule
-
- La structure de
petit_prince.xml
respecte PRESQUE la DTD fournie. Trouver l'erreur et modifier le XML en conséquence. En profiter pour ajouter votre nom, la date... Enregistrer et vérifier que la DTD est désormais respectée. - Récupérer la feuille de style vide. Remplir la template de la racine. On pensera bien à lier la feuille de style fournie. Sauvegarder et nommer le fichier
.xsl
.
- La structure de
- Échauffement: les images
-
On va commencer par le traitement des
image
s. On remarque dans la DTD que l'élémentimage
peut se trouver soit sous la racine, soit dans les informations sur le texte, soit, enfin, dans le corps du texte.- Construire une template pour le cas où l'image est dans le corps du texte. On veut que l'élément
img
dans le HTML produit ait les attributs (obligatoires) suivants:src
, qui indique l'URL de l'image, etalt
, qui indique le texte affiché s'i l'URL desrc
n'a pu être chargé. Le contenu dualt
est le contenu de l'élémentimage
d'origine ou un texte par défaut (voir exemple). - Dans le cas où l'image est directement à la racine, on insère la même chose que dans le cas précédent, mais dans un
div
de classeillustration
. On s'attachera ici à minimiser les recopies de code! - Faire de même avec le cas des images dans
info_texte
, cette fois en l'encadrant d'undiv
de classecouverture
.
- Construire une template pour le cas où l'image est dans le corps du texte. On veut que l'élément
- L'entête
-
L'
entete
du document XML contient les informations sur l'ouvrage et sur l'exercice.- Modifier le XML pour faire apparaître votre nom et la date du jour.
- Transformer
info_texte
en un titre de la page (dans undiv
de classetitre
). - Transformer
info_corpus
en un entête informatif (dans undiv
de classetitre
).
- Traitement du corps du texte — Les paragraphes
-
On s'intéresse à la mise en forme des
paragraphe
s.- Faire en sorte que chaque paragraphe se trouve dans un élément
<p>...</p>
. - Faire en sorte que chaque
phrase
se trouve dans un élément<span>...</span>
dont laclass
sera la langue du paragraphe. - Chaque phrase sera séparée de la suivante par un saut de ligne
<br/>
. [Bonus: pas de<br/>
après la dernière phrase du paragraphe.] - Faire en sorte que le mot "mouton" ("beranka" ou "beranek" en tchèque) soit dans un
<span>...</span>
declass
"mouton".
- Faire en sorte que chaque paragraphe se trouve dans un élément
- Traitement du corps du texte — Les dialogues
-
On va maintenant mettre en forme les
dialogue
s.- Les dialogues seront présentés sous le forme d'un tableau. Dans la cellule de gauche, le nom du locuteur. On pourra faire en sorte de l'écrire "joliement" (transformer par exemple "LePetitPrince" en "Le Petit Prince").
- Encore une fois, indiquer la langue du dialogue dans un
span
; mettre également un saut de ligne entre les phrases.