XML - TP

Maîtrise TAL



home

contact

outils

xml

xslt

xpath


 

 

XSLT


Tp n°3 : Exploitation du corpus Le Petit Prince



Explications:

Feuille de style XSL de base pour l'instance de document XML
Cette feuille de style Xsl est un document Xml suivant les spécifications XSL du W3C. Il est composé, comme tout document Xml, d'un prologue. Il décrit la version du langage Xml utilisé, la référence aux spécification (URL indiquée). Le format de sortie est précisé (html). Ce prologue contient également la référence à la DTD de la feuille de style.
< ?xml version="1.0"?>
< xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
< xsl:output method="html" version="4.0" doctype-system="Tpprince.dtd" encoding="ISO-8859-1"/>


La suite du document décrit les instructions de traitement à apporter au corpus.
L'objectif est de proposer un modèle qui décrit les règles à porter sur les éléments.
Nous voulons faire une page html qui affiche le contenu du corpus.

On décrit un modèle général qui regroupe les autres. Ce modèle s'applique à la racine (défini par le chemin Xpath : " / ")
Il débute par les informations Html qui seront reportées dans le document résultat .
on retrouve ainsi la structure d'un document html classique. Les modèles suivants seront appliqués à l'emplacement de la commande
<xsl :apply-templates>
< xsl:template match="/">
< html>
< head>< /head>
< body bgColor="#330099">< xsl:apply-templates/>< /body>
< /html>
< /xsl:template>

Le premier modèle définit le traitement à apporter à l'élément " titre ". Il s'agit ici des instructions Html : alignement, taille et couleur de la police.
< xsl:template match="titre">
< div align="center"> < font color="#00FFCC">< h1>
< xsl:apply-templates/>< /h1>< /font> < /div>
< /xsl:template>

De la même manière, on décrit la mise en page de l'élément " auteur "
< xsl:template match="auteur">
< div align="center"> < i>< h2>< xsl:apply-templates/>< /h2>< /i> < /div>
< /xsl:template>

Ce modèle permet de spécifier des traitements sur différents éléments au sein d'un même modèle. Le modèle s'applique au nœud parent des éléments (" info_corpus "). On peut spécifier l'élément grâce à l'instruction "
<xsl : apply-template select='chemin Xpath'/> < xsl:template match="info_corpus">
< blockquote>< font color="#99CC99"> < br>< xsl:apply-templates select="but "/>
< /br> < br>< xsl:apply-templates select="auteurs"/>< /br> < br>
< xsl:apply-templates select="mail"/>< /br>< /font> < /blockquote>
< /xsl:template>

Les modèles suivants affichent le contenu des éléments " dialogue " et " paragraphe "
< xsl:template match="traduction">
< xsl:apply-templates/>< /xsl:template>

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

La feuille de style Xsl se termine par la balise fermante
< /xsl:stylesheet>

Traitements spécifiques
Pour séparer les phrases par des paragraphes, on crée un modèle qui s'applique à l'élément " phrase ". On peut alors contraindre ces éléments : l'ajout de la balise " Html <p> permet de séparer chaque phrase par un paragraphe.
<xsl:template match="paragraphe">
<p><xsl:apply-templates/></p>
</xsl:template>

les mots par des espaces, Ce modèle a pour fonction d'espacer les éléments " mots ". L'espace entre les balises <xsl :text> est retranscrit devant chaque élément mot.
< xsl:template match="mot"> < xsl:text> < /xsl:text>< xsl:apply-templates/> < /xsl:template>

les traductions par des lignes,
Pour cela, on va utiliser de la même manière que pour l'espacement des phrases, une balise html : <br>. On crée un modèle qui s'applique à l'élément " traduction " qui sera balisé par <br> qui est l'élément de mise en page Html qui passe une ligne.
<xsl:template match="traduction">
<br><xsl:apply-templates/></br>
</xsl:template>

mettre les phrases du narrateur en rouge et celles du Petit Prince en vert
Au sein du modèle visant l'élément " dialogue ", on va utiliser la balise Html <font> en spécifiant l'attribut " color " avec la valeur désirée (rouge : #FF9966 ; vert : #CCFF99 ). On précise ensuite le chemin Xpath qui permet d'attribuer cette couleur de police pour l'élément désiré : - pour le narrateur, depuis l'élément courant paragraphe, le chemin est " .//phrase[@loc='narrateur'] " ; - pour le Petit Prince, depuis l'élément courant paragraphe, le chemin est " .//phrase[@loc='LePetitPrince'] "
  • " .// " permet de descendre dans l'arbre à partir de l'élément courant,
  • " phrase " est l'élément cible.
  • On précise ensuite le locuteur. " @loc " entre crochets renvoie à l'attribut et permet de spécifier la valeur de l'attribut, soit " narrateur " soit " LePetitPrince ".
    Il ne faut pas oublier d'effectuer les mêmes précisions au sein du template " paragraphe " ..
    On peut ici omettre de préciser pour le locuteur " LePetitPrince " puisque les paragraphes sont uniquement constitués de narration.
    <xsl:template match="paragraphe">
    <font color="#FF9966">
    <xsl:apply-templates select=".//phrase[@loc='narrateur']"/>>
    </font>
    <font color="#CCFF99"><xsl:apply-templates select=".//phrase[@loc='LePetitPrince']"/>
    </font>
    </xsl:template>
    <xsl:template match="paragraphe">
    <font color="#FF9966">
    <xsl:apply-templates select=".//phrase[@loc='narrateur']"/>>
    </font>
    </xsl:template>

    N'afficher que la traduction tchèque
    Pour cela, on spécifie le modèle qui s'applique à " phrase " pour qu'il n'affiche que les nœuds " traduction " de l'arbre dont l'attribut " lang " a pour valeur " tcheque ".
    <xsl:template match="phrase">
    <xsl:apply-templates select=".//traduction[@lang='tcheque']"/>
    </xsl:template>

    Mettez le mot mouton en gras
    Pour cela, on utilise la même méthode : au sein d'un modèle, on précise les conditions d'affichage du contenu de l'élément visé. Pour ces précisions, on utilise deux spécifications qui seront incluses entre crochets: - contains() : énonce comme condition que l'élément contienne ce qui est précisé entre parenthèses ; - text(), suivi d'une valeur entre apostrophes. Cette fonction permet de préciser une chaîne de caractères. Ici c'est le mot " mouton " qui nous intéresse. La combinaison des deux nous permet de préciser un traitement à effectuer si l'élément visé (mot) contient la chaîne de caractères ('mouton'). L'utilisation d' " apply-templates " permet ensuite d'effectuer une mise en page Html avec la balise gras <b></b>
    <xsl:template match="mot[contains(text(), 'mouton')]">
    <xsl:text> </xsl:text> <b><xsl:apply-templates/></b>
    </xsl:template>
  • XML

    XSLT

    XPATH