Exercices en XSLT
Le retour de la bolo...
Créez une feuille de transformation qui
transforme la recette de spaghetti en un document html
(XHTML) qui contient simplement le texte Ceci est une
recette de cuisine. Associez votre document xml à
cette feuille de transformation et visualisez-le résultat avec Firefox.
Créez une vraie feuille de transformation pour
obtenir un document Xhtml à partir de la recette.
Les observations ornithologiques
Créez une vraie feuille de transformation pour obtenir un
document Xhtml à partir du document
oiseaux.xml. Les photos doivent apparaître, bien sûr, et
la page HTML doit être associée à une css.
Au final, le document html devra comporter un menu en haut
qui permettra d'accéder directement à une fiche :
- Fiche obs1 (Clairmarais - 10-11-2006)
- ...
Chacun des items étant un lien vers une ancre dans le
document.
Le livre de comptes
Cet exercice est aménagé à partir d'un
exemple du livre Introduction à XML de Erick Ray,
ed. O'Reilly. Récupérez
le livre
de comptes. L'objectif est de réaliser une page HTML
qui pré ce document.
Présentez chacune des opérations de base. Dans un premier
temps, vous n'écrirez pas de feuille de style mais vos
préparerez le terrain pour que cela soit possible.
Tout d'abord, quelques expressions XPath :
- Comment accéder à la date du premier
dépôt ou retrait? à la date du dernier ?
- Quelle est l'expression XPath qui donne le montant sur le
compte ?
Ecrire la règle qui présente le
livre de comptes en commençant par
Opération du ... au ...
Solde : ...
Le solde sera affiché en rouge si le montant est négatif, en
bleu sinon. Cette information doit se trouver au début du
document.
Ecrire la règle qui termine le
document en présentant la somme des dépenses et la somme
des recettes.
Comment séparer la présentation d'un
retrait au distributeur d'un autre retrait quelconque?
Implémentez votre solution.
Présentez maintenant les retraits dans
l'ordre décroissant de leur montant.
La tarte à la ricotta... c'est pas bon, hein?
Hé bien, tant pis pour vous, elle revient.
Écrivez les règles de transformations qui permettent de retourner,
à partir de la recette de la tarte à la
ricotta et autres recettes danoises
une estimation de la quantité d'ingrédients (en poids) pour chaque plat.
Pour simplifier, on prendra arbitrairement :
- une tasse (cup) contient 100gr
- une petite cuiller (teaspoon)
contient 5 gr
- une cuiller à soupe (tabspoon) contient 10gr.
- tout ingrédient dont l'unité de mesure n'est pas
donnée (les oeufs, le lait) est ramené à 20 gr. l'unité (i.e., 3
oeufs donnent 3 fois 20 gr. = 60 gr.).
- tout
ingrédient dont la quantité est donnée par "*" (le lait) est ramené
à une quantité de 1 gr.
- une livre (pound) est équivalent à 453,59 gr.
- une once (ounce) est équivalente à 28,35 gr.
- une boîte de conserve (can) contient 250 gr.
- tout ingrédient pour lequel ni la quantité ni
l'unité n'est spécifiée est ignoré (la garniture, la pâte, etc),
ainsi que ceux dont l'unité n'est pas précisée ici.
On veut l'information sous la forme :
<plats>
<plat>
Ricotta Pie - poids estimé : 2555,77 gr.
</plat>
...
</plats>
On veut maintenant que les recettes soient présentées selon leur
apport calorique. Donnez les titres des recettes à l'intérieur d'une
des trois catégories : plats inférieurs à 500 calories; plats de 500
à 1000 calories; plats supérieurs à 1000 calories. On veut
l'information sous la forme :
<plats>
<categorie minCalories="0" maxCalories="500">
<recette>Ricotta Pie</recette>
</categorie>
<categorie minCalories="500" maxCalories="1000">
<recette>Linguine Pescadoro</recette>
<recette>Zuppa Inglese</recette>
</categorie>
<categorie minCalories="1000" maxCalories="unbounded">
<recette>Cailles en Sarcophages</recette>
</categorie>
</plats>
Utiliser eXSLT (extensions to XSLT)
Plusieurs communautés travaillent à proposer des
extensions à XSLT. Allez regarder le
site www.exslt.org. Les fonctions
proposées sont implémentées
dans xsltproc. Vous n'aurez qu'à ajouter un
espace de nom et une extension de préfixe à votre
feuille de style. Cela donnera :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="http://exslt.org/math"
extension-element-prefixes="math">
pour l'utilisation des fonctions mathématiques par exemple.
Ecrivez la règle de transformation qui retourne le montant du
plus gros retrait sur le compte ainsi que le montant le plus petit.
Utiliser des paramètres
Vérifiez que vous savez bien
écrire la fonction factorielle en XSLT...
Ecrivez un document XML qui comporte une liste
de personnes. Ecrivez la feuille de style XSLT qui produit un
document XHTML dans lequel les noms et prénoms des personnes
apparaissent dans un tableau à deux colonnes (i.e. la moitié des
personnes dans la colonne de gauche, l'autre moitié dans la colonne
de droite).
Implémentez une solution pour que le
nombre de colonnes soit paramétrable.
On veut maintenant ajouter à la page XHTML des
fiches d'observations ornithologiques (du premier exercice), en
début de page, un tableau récapitulatif
qui indique pour chaque espèce dans quelles fiches elle a été
observée (avec là aussi un lien vers la fiche). Ce qui identifie
une espèce, c'est son nom, aussi vous devrez faire attention à
ne proposer dans le tableau qu'une ligne par espèce, i.e. ne pas
dupliquer les lignes.
Travailler avec la numérotation
On travaille à partir du fichier
Grand prix.
Ecrivez une feuille de style qui produit un
document XHTML mettant légèrement en forme ce
document. Notamment, les producteurs, les scénaristes,
etc... seront présentés dans des sections bien
déterminées.
Insérez au début de votre
document une table des matières numérotée
avec des ancres pointant vers les sections décrivant les
scénaristes, les producteurs, ...
Le Lens-Jazz-Festival
Vous devez maintenant proposer des feuilles de transformations
pour vos documents du LJF :
- une feuille de transformation du programme complet vers le
programme allégé;
- une feuille de transformation du programme complet vers la
liste des artistes;
- une feuille de transformation vers XHTML pour chacune des trois
formes que peut prendre le document du festival (pensez à
l'inclusion de règles template pour factoriser votre code). Dans
le cas de la page html qui présentera le programme complet,
prévoyez au début un récapitulatif du festival : jour par jour,
donnez les concerts qui auront lieu (titre et horaire), avec un
lien vers la description du concert.
Vous devez rendre ces feuilles de transformations (avec le
README qui conviendra) pour le jeudi 20 novembre.