Copyright © 2010-2023 Yves MARCOUX; dernière modification de cette page: 2023-03-12.

INU3011 Documents structurés

Exercice XSLT avancé

Yves MARCOUX - EBSI - Université de Montréal


But de l’exercice et prérequis

Le but de cet exercice est de vous préparer au stylage de vos documents dans le cadre du projet de modélisation et stylage. Les exemples des deux séries de 240-Ex-XSLT-pas-a-pas sont un prérequis. Vous devriez également avoir complété les Exercices XSLT de base.


Quoi faire?

Vous devez rédiger une feuille de style XSLT qui transforme en HTML des documents XML selon un certain style, lequel vous est présenté par une série d’exemples. Chaque exemple consiste en une paire de fichiers :

ex-xslt.nn.xml
ex-xslt.nn.html

nn est le numéro de l’exemple.

Chaque exemple illustre comment un document XML spécifique doit être formaté par la feuille de styles demandée. Ainsi, par exemple, le fichier ex-xslt.6.html est le résultat qui doit être produit par la feuille de styles lorsqu’on l’applique au document XML ex-xslt.6.xml.

Cinq exemples sont fournis, numérotés de 6 à 10 :

Exemples
Document XML intrant Extrant HTML qui doit être produit
ex-xslt.6.xml ex-xslt.6.html
ex-xslt.7.xml ex-xslt.7.html
ex-xslt.8.xml ex-xslt.8.html
ex-xslt.9.xml ex-xslt.9.html
ex-xslt.10.xml ex-xslt.10.html

Faites Affichage → Source dans votre navigateur pour voir la source (le code) des fichiers HTML.

Vous devez produire une unique feuille de styles, appelons-la ex-xslt.xsl, telle que si on l’applique à ex-xslt.6.xml, le résultat HTML obtenu est ex-xslt.6.html; si on l’applique à ex-xslt.7.xml, le résultat HTML obtenu est ex-xslt.7.html; etc.


Préparatif

N.B. : La même préparation de votre navigateur Web que pour les Exercices XSLT de base est requise. Assurez-vous de l’avoir déjà faite.

Vous devez rapatrier sur votre poste de travail les fichiers exemples, ainsi que la DTD (fichier ex-xslt.dtd), dans un même dossier. L’ensemble des fichiers est disponible dans un fichier compressé unique. Avant de le décompresser, assurez-vous que le fichier n’est pas « bloqué » par Windows (Comment vérifier?).

Vous verrez que chaque document XML contient un lien vers une feuille de style appelée ex-xslt.xsl :

<?xml-stylesheet type="text/xsl" href="ex-xslt.xsl" ?>

Cette feuille, également incluse dans le fichier compressé, ne contient au départ aucun gabarit :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- C'est ici que vous insérerez vos gabarits -->

</xsl:stylesheet>

Conseils

Contrôle de l’extrant produit par la feuille en développement

Durant l’élaboration de votre feuille de style, vous pouvez en tout temps contrôler l’extrant produit à partir d’un des documents en lançant dans oXygen une transformation du document :

  1. Ouvrez le document que vous voulez transformer.
  2. Assurez-vous que c’est bien l’onglet de ce document qui est sélectionné.
  3. Cliquer sur l’icône oXygen Appliquer scénario de transformation (Appliquer scénario de transformation) dans la barre d’outils.
    • La 1ère fois que l’on fait cette opération pour un document donné, oXygen demande de confirmer l’utilisation du scénario basé sur l’instruction de traitement xml-stylesheet du document.

Si la transformation s’effectue sans erreur, l’extrant HTML produit par votre feuille XSLT est créé dans le même dossier (même nom de fichier, avec l’extension .html) et il est tout de suite ouvert en navigateur web.

Notez que le défi n’est absolument pas de trouver comment réaliser en HTML le formatage voulu, puisque le code HTML des extrants vous est donné explicitement. Le défi consiste à exprimer en XSLT une transformation qui permette d’obtenir le code HTML d’un exemple à partir du document XML correspondant, et ce pour chacun des exemples fournis. Essayez de développer une feuille XSLT qui produise, pour chaque exemple, un extrant HTML le plus proche possible du HTML fourni dans les exemples HTML.

La liste qui suit n’est pas une description exhaustive du stylage que votre feuille XSLT doit effectuer, mais souligne quelques points particuliers:

  1. Tous les exemples fournis sont valides selon la DTD ex-xslt.dtd. Votre feuille de styles peut présupposer que tous les documents qu’on lui présentera seront valides selon cette DTD. En particulier, vous pouvez vous fier sur le fait que les éléments apparaîtront toujours dans le même ordre.
  2. Le titre de la notice (élément titre) se retrouve à deux endroits dans le HTML produit: dans le sous-élément title de l’élément head et dans l’entête h1 de l’élément body.
  3. Le seul élément facultatif est anpub (année de publication). Si cet élément est présent, alors le titre dans l’élément h1 est suivi d’une indication de l’année de publication (anpub).
  4. Les éléments lisibilité et accès sont présentés chacun dans une ligne d’un tableau HTML, lequel mesure donc deux lignes par une colonne. Le contenu de ces éléments, qui peut être l’élément vide général ou l’élément vide restreint, est « traduit » en une périphrase appropriée qui varie selon que le parent est lisibilité ou accès.
  5. L’attribut type de l’élément notice et l’attribut degré de l’élément em sont présents dans les documents, mais ignorés au stylage. Votre feuille XSLT n’a donc pas à se préoccuper de ces attributs. Il s’agit là d’une situation tout à fait légitime en documents structurés et non d’une erreur dans l’exercice demandé.
  6. Votre feuille doit réagir à la présence de l’élément em, qui signifie emphase et dont le contenu doit être formaté avec l’élément HTML em. Notez que la DTD ne permet pas l’imbrication d’éléments em l’un dans l’autre; vous n’avez donc pas à prévoir ce cas. Elle permet un attribut degré, mais celui-ci doit être ignoré par la feuille XSLT.
  7. La présence d’un attribut type possédant la valeur pers-mora pour un élément auteur doit déclencher deux choses: (1) l’insertion d’un astérisque en exposant* après le nom de l’auteur et (2) l’insertion, après la liste des auteurs, de la « légende » de l’astérisque, à savoir le passage suivant:

    * : personne morale

    Ce passage ne doit être inséré que si un auteur ou plus avait un attribut type avec valeur pers-mora. N’essayez pas de déclencher les deux insertions dans le même gabarit. La première insertion devrait être effectuée dans le gabarit pour l’élément auteur et la seconde dans celui pour l’élément auteurs.

Voir une solution