XML - TP

Maîtrise TAL



home

contact

outils

xml

xslt

xpath

 

 

XSLT


Tp n°4 : Corpus Adresses.xml


CONSIGNES:
application des patrons adresses1/2/3.xsl à adresses.xml créez votre propre patron.


Explications:
Les patrons permettent d'effectuer une transformation sur le document de départ/ vers un document résultat au format texte :
Adresses1.xsl permet d'afficher les données avec une mise en page simple : listes avec des puces, mise en gras des noms et prénoms, affichage à la suite du reste des informations.

Adresses2.xsl donne un document texte en sortie sans mise en page. Les informations sont affichées les unes à la suite des autres (adresse, prénom, nom, email).

La feuille opère un tri grâce au traitement conditionnel (" xsl :if "). Cela permet d'afficher le modèle si un des nœuds fils de l'élément " adresse " correspond à " email ". le modèle décrit ensuite les valeurs à afficher.
<xsl:template match="adresse">
<xsl:if test="email">
<xsl:value-of select="prenom"/>
<xsl:text> </xsl:text>
<xsl:value-of select="nom"/>
<xsl:text> </xsl:text>
<xsl:value-of select="email"/>
<xsl:text>
</xsl:text>
</xsl:if>

Adresses3.xsl donne un document résultat similaire.
Elle réutilise la fonction " if " pour deux conditions. Comme dans la précédente feuille de style, la présence " email " dans " adresse " est la condition pour afficher les informations relatives à " adresse " . On a jouté un autre test qui affiche le téléphone s'il s'agit de celui de la maison, désigné grâce au chemin " tel/@lieu='maison' ". En outre la feuille de style utilise la fonction "for-each " pour afficher pour chaque adresse les différentes informations visées (prénom, nom, email). La fonction " sort " est utilisé pour faire un tri alphabétique des données par " nom ".
<xsl:for-each select="adresse">
<xsl:sort select="nom"/>
<xsl:if test="email">
<xsl:value-of select="prenom"/>
<xsl:text> </xsl:text>
<xsl:value-of select="nom"/>
<xsl:text> </xsl:text>
<xsl:value-of select="email"/>
<xsl:if test="tel/@lieu ='maison'">
<xsl:text> </xsl:text>
<xsl:value-of select="tel"/>
</xsl:if>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>

Il se distingue également par l'utilisation d'une variable. Celle-ci permet de définir une variable qui va compter le nombre d'occurrence d'un élément ou d'un attribut donné. Il s'agit d'un élément " variable " qu'on nomme " Nombre ". La valeur de cette variable est obtenue grâce à l'instruction " count() ". La référence à la variable se fait en précédant d'un symbole $ le nom de la variable.

<xsl:variable name="Nombre" select="count(adresse)"/>
<xsl:value-of select="$Nombre"/>
<xsl:text> adresse(s)</xsl:text>

Tpadresses.xml
Le fichier créé est un patron qui crée en sortie un document Html. Elles obéissent aux spécifications Xsl du W3.
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1"/>

<xsl:template match="/">
<html> <head> <title>Carnet d'adresses</title> </head>
<body>
<h1>Adresses postales</h1>
<ul> <xsl:apply-templates select="/"/> </ul>
</body>
</html>
</xsl:template>

<xsl:template match="/">
<xsl:apply-templates select="adresses"/>
</xsl:template>

<xsl:template match="adresses">
<xsl:variable name="Nombre" select="count(adresse)"/>
<h1> <xsl:text>Adresses électroniques et téléphones personnels</xsl:text> </h1>
<xsl:for-each select="adresse">
<xsl:sort select="nom"/>
<xsl:if test="email">
<li><b>
<xsl:value-of select="prenom"/> <xsl:text> </xsl:text>
<xsl:value-of select="nom"/> <xsl:text> </xsl:text> </b>
<br> <xsl:value-of select="email"/></br>
<xsl:if test="tel/@lieu ='maison'"> <xsl:text> </xsl:text>
<br><xsl:value-of select="tel"/></br>
</xsl:if> <xsl:text></xsl:text>
</li>
</xsl:if>
</xsl:for-each>

<p> <xsl:value-of select="$Nombre"/> <xsl:text> adresse(s) dans le répertoire</xsl:text></p>

</xsl:template>
</xsl:stylesheet>

XML

XSLT

XPATH