XML -- TP 8 : XSL-FO


Méthodologie

Au cours de ce TP, nous utiliserons le processeur FOP, développé par le projet Apache pour appliquer une transformation XSL à un document XML, obtenant un document XSL-FO, et transformer ce document XSL-FO en PDF. Téléchargez la dernière version de fop : fop-0.95-bin.tar.gz. Décompressez l'archive dans le dossier du TP d'aujourd'hui. Tapez ensuite la commande ./fop dans le dossier où vous avez décompressé l'archive, et vous obtiendrez les instructions sur l'utilisation de fop.

Dans les exercices suivants, nous utiliserons les fichiers suivants : films.xml, cinema.xml, thesis.xml, hamlet.xml

Exercice 1 : Premiers exemples

Nous considérons le document cinema.xml. Pour chacune des transformations XSLT suivantes, expliquer ce qu'elle fait et anticiper le résultat de son exécution. Vérifier à l'aide du processeur fop, en compilant également le fichier XSL-FO intermédiaire.

Exercice 2 : Affichage de films

Nous considérons le fichier films.xml qui contient un ensemble de films et un ensemble d'informations pour chacun de ces films.

  1. Définissez une transformation XSLT permettant d'imprimer, pour chaque film, son titre, son genre, son pays et les associations acteurs, rôles. On souhaite obtenir quelque chose de similaire à la présentation html suivante : affiche.xsl, qui utilise des mises en forme simples (gras, souligné) et des listes à puces (appliquée à films.xml, cela donne films2.xml). On se contentera au début d'une présentation sommaire. Attention, certains films n'ont aucun rôle (mais possèdent malgré tout une balise ROLES).

  2. Ajoutez le nom du réalisateur.

  3. Ajoutez la numérotation des pages en milieu de bas de page, et un en-tête avec le nom du document.

  4. Définissez une première page avec un titre et cette image, sans numéro de page, sans en-tête.
    Indication : on peut dans la partie "contenu" d'un document XSL-FO enchaîner plusieurs éléments fo:page-sequence. Comme illustration, voir cet exemple.

  5. Définissez une dernière page avec la liste de tous les films, sans numéro de page, sans en-tête.

  6. Nous souhaitons placer le numéro de page en en-tête et non plus en pied de page. Définissez un en-tête différent pour les pages paires et impaires (le numéro de page étant, avec le titre, toujours à l'extérieur).
    Indication : on utilisera l'élément fo:repeatable-page-master-alternatives afin de définir une mise en page différente sur les pages paires et les pages impaires. Un exemple de structure du document XSL-FO résultant est ici. Notez l'utilisation de l'attribut region-name dans les éléments fo:region-before.

Exercice 3 : Table des matières

Nous considérons le document thesis.xml présentant la structure (très simplifiée) d'une thèse. Nous souhaitons construire la table des matières de cette thèse, du type table.pdf (tel que c'est produit par laTex), ou encore du type de table_simple.pdf.
  1. Ecrivez une transformation permettant de produire une (séquence de) page(s) contenant la séquence des titres de la table des matières, avec les indentations (sans numérotation, sans références aux numéros de page).

  2. Rajoutez la numérotation des parties, chapitres et sections, éventuellement en précisant la nature de ces objets dans la table des matières. Vous pourrez utiliser la fonction XPath count(preceding-sibling::section) ou la fonction position(). Pour commencer, vous pourrez mettre simplement le numéro 1 au lieu de 1.1 pour la première section du premier chapitre...

  3. Modifiez votre transformation de sorte à afficher l'ensemble du contenu de la thèse, à partir de la seconde page.

  4. En introduisant des ancres, ajoutez à votre table des matières des liens internes vers les sections/chapitres/parties référencé(e)s, ainsi que les numéros de pages des objets référencés. Attention, les identifiants (id) doivent être distincts partout dans le document. Vous pourrez vous inspirer de cet exemple pour connaître les primitives XSL-FO adaptées, qui permettent également de placer les pointillés.

  5. (Option) Finalisez le résultat avec les en-têtes... et vous devriez obtenir un document très proche du pdf cible.

Exercice 4 : Un livre complet (optionnel)

Nous nous intéressons à la présentation xml du livre Hamlet donnée dans le fichier hamlet.xml. Le but de cet exercice est de produire un pdf d'un livre présentant cette oeuvre tel qu'on pourrait le trouver dans le commerce. Quelques indications :