Maintenant nous allons écrire quelques programmes XSLT pour
transformer le document FilmsArtistes.xml en HTML.
Pour faire le transformations nous allons nous servir du logiciel
xsltproc qui prend comme argument un programme XSLT et un ou plusieurs documents XML :
xsltproc programme.xslt doc1.xml doc2.xml ...
Par défaut le résultat de la transformation est écrit dans la sortie
standard. Il peut être redirigé avec l'option -o
document.html. Par exemple la commande suivante traduit le document
FilmsArtistes.xml en un document HTML contenant la liste des films
(titre, année, genre et pays) avec le programme
ListeFilms.xsl :
xsltproc -o ListeFilms.html ListeFilms.xsl FilmsArtistes.xml
Le résultat peut ensuite être affiché
avec un navigateur standard.
Remarque: Vous pouvez également effectuer les transformations XSLT
avec le navigateur mozilla (installé sur kirov). Dans ce cas, il faut
ajouter une ligne comme la suivante au début du document XML à transformer:
<?xml-stylesheet href="progr.xsl" type="text/xml"?>
Vous pouvez maintenant ecrire vos propres programmes (en partant du
programme ListeFilms.xsl) :
-
La liste des artistes (nom, prénom et date de naissance). ATTENTION, envoyez le resultat à dgram.at.cnam.fr, avec pour sujet tpvalc 2 <votre nom>.
- La liste des films (titre) avec les roles et les noms des acteurs. ATTENTION, envoyez le resultat à dgram.at.cnam.fr, avec pour sujet tpvalc 2 <votre nom>.
- (un peu plus compliqué): la liste des films
(titre) avec le nom de leur metteur en scène (utiliser la fonction
current() ou l'instruction xsl:variable - Référence XPath/XSLT).
On peut également générer des documents XML (pour les programmeurs avertis...) :
-
Le même document où le nom et prénom
de l'acteur dans le rôle d'un film est remplacé par son identifiant :
par exemple
<ROLES>
<ROLE>
<PRENOM>James</PRENOM>
<NOM>Stewart</NOM>
<INTITULE>John Ferguson</INTITULE>
</ROLE>
<ROLE>
<PRENOM>Kim</PRENOM>
<NOM>Novak</NOM>
<INTITULE>Madeleine Elster</INTITULE>
</ROLE>
</ROLES>
devient
<ROLES>
<ROLE>
<ACTEUR>15</ACTEUR>
<INTITULE>John Ferguson</INTITULE>
</ROLE>
<ROLE>
<ACTEUR>16</ACTEUR>
<INTITULE>Madeleine Elster</INTITULE>
</ROLE>
</ROLES>
Vous pouvez utiliser l'instruction xsl:copy et la fonction
current().
- On veut générer un fichier par film :
-
on utilise l'instruction xsl:document qui permet
décrire le résultat dans un fichier.
- le nom du fichier est le titre du film suivi par l'extension
'.xml'. Il faut également enlever tous les espaces et '/' en
utilisant la fonction transform. Par exemple l'instruction suivante
génère un fichier dans un sous-répertoire tmp (qu'il faut
avoir créé avant) :
<xsl:template match="FILM">
<xsl:variable name='file' select="concat('tmp/',
translate(TITRE,' /',''),
'.xml')"/>
File: <xsl:value-of select="$file"/>
<xsl:document href="{$file}">
-- ici on mete le contenu
</xsl:document>
</xsl:template>