XML -- TP 8 : XSL-FO -- Correction


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.

Corrigé

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).

    Corrigé


  2. Ajoutez le nom du réalisateur.

    Corrigé


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

    Corrigé


  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.

    Corrigé


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

    Corrigé


  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.

    Corrigé


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).

    Corrigé


  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...

    Corrigé


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

    Corrigé


  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.

    Corrigé


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