TD 5: XSLT

Rappels / Outils

Exercice 1: Génération de HTML

On va travailler avec un exemple de fichier XML de bibliographie, dont un petit extrait est montré ici:

<?xml version="1.0" encoding="iso-8859-1"?>
<bibtex:file xmlns:bibtex="http://bibtexml.sf.net/">

<bibtex:entry id="berkman">
  <bibtex:book>
    <bibtex:author>Berkman, R. I.</bibtex:author>
    <bibtex:title>
      <bibtex:title>Find It Fast</bibtex:title>
      <bibtex:subtitle>How to Uncover Expert Information
         on Any Subject</bibtex:subtitle>
    </bibtex:title>
    <bibtex:publisher>HarperPerennial</bibtex:publisher>
    <bibtex:year>1994</bibtex:year>
    <bibtex:address>New York</bibtex:address>
  </bibtex:book>
</bibtex:entry>

<bibtex:entry id="moir">
  <bibtex:book>
    <bibtex:author>
      <bibtex:person>Moir, A.</bibtex:person>
      <bibtex:person>Jessel, D.</bibtex:person>
    </bibtex:author>
    <bibtex:title>
      <bibtex:title>Brain Sex</bibtex:title>
      <bibtex:subtitle>The Real Difference
        Between Men and Women</bibtex:subtitle>
    </bibtex:title>
    <bibtex:publisher>Mandarin</bibtex:publisher>
    <bibtex:year>1991</bibtex:year>
    <bibtex:address>London</bibtex:address>
  </bibtex:book>
</bibtex:entry>

</bibtex:file>
  1. Écrire une feuille de style XSL qui produit un document HTML contenant une table à 2 colonnes: titre et auteur(s) de chaque entrée.
    Précisions / Aides:
    Exemple indicatif de HTML souhaité en sortie (source à gauche; HTML à droite):
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head><title>TD 5 - Exo 1</title></head>
    <body>
      <table border=1 cellpadding=2 cellspacing=0>
        <tr>
          <th>Titre</th>
          <th>Auteurs</th>
        </tr>
        <tr>
          <td>L'essentiel de XML</td>
          <td>Olivier Carton</td>
        </tr>
        <tr>
          <td>War and Peace</td>
          <td>Leon Tolstoï</td>
        </tr>
      </table>
    </body>
    </html>
        
    Titre Auteur
    L'essentiel de XML Olivier Carton
    War and Peace Leon Tolstoï

    Voir un aperçu du résultat demandé.
    Essayez-le avec le fichier exemple!

    RENDU: 1.1.xsl


  2. Modifiez votre XSLT pour que, à l'intérieur des titres, le titre soit entre des balises <strong>, et le contenu des éléments <subtitle> soit affiché après un saut de ligne (en HTML: <br/>) et entre des balises <em>.
    Voir un aperçu du résultat demandé (note : dans l'aperçu le style de l'élément <em> donne une couleur verte foncée).

    RENDU: 1.2.xsl


  3. Modifiez votre XSLT pour que les auteurs multiples soit séparés par des slash, comme ceci: Olivier Carton / Leon Tolstoï.
    Indices / Conseils:
    Voir un aperçu du résultat demandé.

    RENDU: 1.3.xsl


  4. Ajoutez une colonne pour l'année de chaque entrée; et triez les entrées par année, grâce à <xsl-sort>.

    Voir un aperçu du résultat demandé.

    RENDU: 1.4.xsl


  5. Ajoutez une colonne qui contiendra la position originale de chaque entrée dans le fichier source (#1, #2, ...).
    Indices:
    Voir un aperçu du résultat demandé.

    RENDU: 1.5.xsl


  6. (*) Modifiez l'expression précédente pour que la position soit indexée à partir de #0, et non de #1.

    Voir un aperçu du résultat demandé.

    RENDU: 1.6.xsl


  7. (*) Ajoutez une colonne donnant le type de l'entrée, sans le préfixe bibtex: (eg. book, article, ...). Colorisez les cases de cette dernière colonne: les book en bleu et les article en rouge ; les autres inchangés. On préfèrera pour cela attribuer une classe "bleu" ou "rouge" à l'élément <td>, et définir un style pour cette classe dans le <head> du HTML de sortie.

    Voir un aperçu du résultat demandé.

    RENDU: 1.7.xsl