<texit info> author=E. Bruno title=XML TP3 </texit>

TP3 - Transformation de documents XML avec XSLT et présentation de documents HTML et XML avec CSS

L’objectif de ce TP est d’utiliser le langage XSLT pour (1) transformer la structure d’un ensemble de documents XML vers un format pivot, (2) puis de transformer ce format “pivot” vers un ou plusieurs formats applicatifs (XHTML dans un premier temps).

Outils utilisés pour l’application de feuilles XSLT:

La commande pour appliquer une feuille de style est :

 java -cp saxon9he.jar net.sf.saxon.Transform -strip:all -s:sourceDocument.xml -xsl:stylesheet.xsl -o:outputDocument.xml

Un squelette de feuille XSLT est fourni dans le fichier squel.xsl, le compléter pour que l’application de cette feuille de style au document books.xml des TP précédents créée un document qui réponde aux exigences suivantes :

  • Le document résultat contient un élément racine Result qui contient trois éléments Bloc.
  • Le premier contient la liste des catégories et de leurs descriptions
    • Faire une exception pour la catégorie C dont la description est secrète, on affichera alors “catégorie secrète”.
  • Le second élément bloc contient les informations qui décrivent le “top author” de la semaine (indiqué dans la variable top-author) dans un élément topAuthor
    • Ajouter un élément fils Books contenant un élément Title pour chacun de ses livres.
    • ajouter un attribut nbLivres à l’élément Books dont la valeur est le nombre de ses livres.
    • Créer un élement LastBook qui contient le texte du titre du dernier livre de cet auteur dans le document source.
    • Ajouter à cet élément un attribut price dont la valeur est le prix de ce livre.
    • Créer un élément Domain qui la liste des catégories des livres de cet auteur.
    • Ajouter un attribut averageBookPrice dont la valeur est le prix moyen de ses livres.
  • Le troisième élément Bloc contient la liste complètes des livres triées par premier auteur et par catégorie dans des éléments

de la forme <Book category='…’><FirstAuthor>…</FirstAuthor><Title></Title></Book>

Avez-vous pensé à utiliser les modes ?

Ecrire une feuille XSLT qui transforme le document XML obtenu dans l’exercice précédent en un document XHTML.

Un introduction très basique à HTML : http://www.w3.org/TR/html/. Important : Votre document XHTML ne contiendra que des informations liées à la structure logique du document mais aucune instructions de présentation.

Créer une feuille de style CSS (http://www.w3.org/TR/CSS2/) qui décrit précisément la présentation à associer au document XHTML précédent.

Des éditeurs CSS existent (par exemple bluefish http://bluefish.openoffice.nl/ sous Linux) ou un un mode emacs.

Vous pouvez utiliser comme point de départ la page dédiée du W3C http://www.w3.org/Style/CSS/.

Il est possible d’écrire une feuille de style qui s’applique directement au document XML précédent (CSS s’applique à HTML et à XML). ECrivez une feuille de style “simple” pour le document books.xml

Ecrire une feuille de style XSLT qui s’applique au document “book.xml” et produit un histogramme illustrant le nombre d’auteur de chaque livre.

La présentation du document pourra être réalisée en utilisant le langage XSLT-FO à la place de XHTML+CSS. Ecrire une feuille XSLT qui transforme le document sortie.xml en XSL-FO. Le document obtenu pour être transformé en pdf avec fop (cf. TP 1).

Une description de XSL-FO pourra être trouvée ici : http://www.w3.org/TR/xsl et un tutoriel ici : http://www.renderx.com/Tests/doc/html/tutorial.html

autre.xsl
<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
<xsl:output method="xml" 
            encoding="UTF-8"
            indent="yes"/>
 
<xsl:template match="/">
<Resultat>
	<Catégories><xsl:apply-templates select=".//Category"/></Catégories>
	<Livres><xsl:apply-templates select=".//Item"/></Livres>
</Resultat>
</xsl:template>
 
<xsl:template match="Category">
  <Categorie>
	<Code><xsl:value-of select="@code"/></Code>
	<Desc><xsl:value-of select="@desc"/></Desc>
  </Categorie>
</xsl:template>
 
<xsl:template match="Item">
  <Livre><xsl:apply-templates/></Livre>
</xsl:template>
 
<xsl:template match="Title">
  <h1><xsl:apply-templates/></h1>
</xsl:template>
 
<xsl:template match="Authors">
  <div><xsl:apply-templates/></div>
</xsl:template>
 
<xsl:template match="Author">
  <h2><xsl:apply-templates/></h2>
</xsl:template>
 
<xsl:template match="text()">
</xsl:template>
 
<xsl:template match="Title/text()|Author/text()">
	<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>