<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
Objectif
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:
- Processeur XSLT : Saxon (http://saxon.sourceforge.net/#F9.4HE)
Transformation pas à pas de XML vers XML
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émentsBloc
. - 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émentTitle
pour chacun de ses livres. - ajouter un attribut
nbLivres
à l’élémentBooks
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 ?
De XML à HTML
Ecrire une feuille XSLT qui transforme le document XML obtenu dans l’exercice précédent en un document XHTML.
Le document XHTML sans instructions de présentation
La présentation avec une feuille de style CSS
XML+CSS
XML vers SVG
Pour aller plus loin
XML vers XSL-FO
Exemple de solution
Un autre exemple de feuille de style
- 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>