Document XML source
|
<doc>
<taggersent>
<taggertoken
wordform="Il" lemma="il" pos="PRO"/>
<taggertoken
wordform="était" lemma="être" pos="VER:sg"/>
<taggertoken
wordform="une" lemma="un" pos="DET:femi:sg"/>
<taggertoken
wordform="fois" lemma="fois" pos="NOM:femi:sg"/>
<taggertoken
wordform="," lemma="," pos="PUN"/>
<taggertoken
wordform="les" lemma="le" pos="DET:masc:pl"/>
<taggertoken
wordform="voleurs" lemma="voleur" pos="NOM:masc:pl"/>
<taggertoken
wordform="étaient" lemma="étayer|être"
pos="VER:pl"/>
<taggertoken
wordform="dans" lemma="dans" pos="PRP"/>
<taggertoken
wordform="la" lemma="le" pos="DET:femi:sg"/>
<taggertoken
wordform="forêt" lemma="forêt" pos="NOM:femi:sg"/>
<taggertoken
wordform="." lemma="." pos="PUN"/>
</taggersent>
</doc> |
XSL
Sans apply-templates :
|
|
Résultat |
<xsl:template match="/">
Liste des tokens :
</xsl:template>
<xsl:template match="taggertoken[pos != 'PUN']">
Forme : <xsl:value-of select="@wordform"/>
Lemme : <xsl:value-of select="@lemma"/>
</xsl:template>
|
|
Liste des tokens :
|
Le processeur commence la transformation
en cherchant un patron pour la racine du document, en trouve un
correspondant dans la feuille de style et l'applique. Il génère
en sortie le texte "Liste des tokens",
comme spécifié dans le patron. L'arbre a été
traité et la transformation s'arrète sans considérer
les descendants de la racine. Le deuxième patron n'est jamais
utilisé.
Avec apply-templates : |
<xsl:template match="/">
Liste des tokens :
<xsl:apply-templates/> </xsl:template>
<xsl:template match="taggertoken[pos != 'PUN']">
Forme : <xsl:value-of select="@wordform"/>
Lemme : <xsl:value-of select="@lemma"/>
</xsl:template>
|
|
Liste des tokens :
Forme : Il
Lemme : il
Forme : était
Lemme : être
Forme : une
Lemme : un
Forme : fois
Lemme : fois
Forme : les
Lemme : le
Forme : voleurs
Lemme : voleur
Forme : étaient
Lemme : étayer|être
Forme : dans
Lemme : dans
Forme : la
Lemme : le
Forme : forêt
Lemme : forêt
|
La transformation commence de la même
manière : la patron correspondant à la racine
est appliqué, le texte "Liste des
tokens" est reproduit en sortie. L'instruction apply-templates
intime au processeur de poursuivre la transformation pour les enfants
de l'élément courant. Pour les éléments
doc et taggersent,
pas de patron défini, le patron
par défaut est alors appliqué et indique qu'il
faut continuer la transformation en descendant dans l'arborescence.
Lorsque le processeur rencontre les éléments taggertoken
qui ne sont pas des signes de ponctuation, le patron correspondant
est appliqué. Pour les taggertoken
qui sont des signes de ponctuation, aucun patron n'est défini,
les éléments n'ont ni enfants ni valeur textuelle,
la sortie correspondante est vide.
Tricky : variantes avec attributs
- mode
L'instruction apply-template
peut être agrémentée de plusieurs attributs.
Nous avons vu dans la section priorités
que plusieurs templates peuvent être applicables aux mêmes
éléments. Dans ce cas, il est possible de spécifier
le template à appliquer. En reprenant le document XML
source précédent, définissons deux templates
pour les éléments taggertoken :
<xsl:template match="/">
Liste
des tokens : <xsl:apply-templates
mode="lemme"/>
</xsl:template> <xsl:template match="taggertoken"
mode="lemme">
Lemme :
<xsl:value-of select="@lemma"/>
</xsl:template> <xsl:template match="taggertoken"
mode="forme">
Forme :
<xsl:value-of select="@wordform"/>
</xsl:template>
|
|
Liste
des tokens :
Lemme : il
Lemme : être
Lemme : un
Lemme : fois
Lemme : le
Lemme : voleur
Lemme : étayer|être
Lemme : dans
Lemme : le
Lemme : forêt
Lemme : .
|
<xsl:template match="/">
Liste
des tokens : <xsl:apply-templates
mode="forme"/>
</xsl:template> <xsl:template match="taggertoken"
mode="lemme">
Lemme :
<xsl:value-of select="@lemma"/>
</xsl:template> <xsl:template match="taggertoken"
mode="forme">
Forme :
<xsl:value-of select="@wordform"/>
</xsl:template>
|
|
Liste
des tokens :
Forme : Il
Forme : était
Forme : une
Forme : fois
Forme : les
Forme : voleurs
Forme : étaient
Forme : dans
Forme : la
Forme : forêt
Forme : .
|
L'attribut mode permet de
sélectionner lequel des patrons éligibles doit
être sélectionné. En l'absence de cet attribut,
aucun des patrons n'étant plus spécifique que
l'autre, il serait impossible de savoir lequel des deux le processeur
XSLT choisirait.
- select
La signification par défaut de l'instruction apply-templates
est de faire opérer par le processeur les transformations
sur les enfants de l'élément courant. L'attribut
select permet de modifier
ce comportement en spécifiant au processeur une liste
d'autres noeuds à traiter. Supposons que nous voulions
extraire du document tous les tokens pour lesquels il y a ambigüité
sur le lemme et afficher le contexte (phrase) dans lequel il
se trouve :
<xsl:template
match=" /">
Tokens
avec lemme ambigüs :
<xsl:for-each
select=" //taggertoken[contains(@lemma,
'|')]"> Forme
: <xsl:value-of select=" @wordform"/>
Lemme :
<xsl:value-of select=" @lemma"/>
Contexte :
<xsl:apply-templates select=" .."/>
</xsl:for-each> </xsl:template>
<xsl:template match="taggersent">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match=" taggertoken">
<xsl:value-of select=" @wordform"/>
</xsl:template>
|
|
Tokens
avec lemme ambigüs :
Forme : étaient
lemme : étayer|être
Contexte : Il était une fois, les voleurs étaient
dans la forêt.
|
- with-param
Comme dans l'instruction call-template,
il est possible de passer des paramètres au template
qui va être instancié. Son usage est assez rare
mais peut se révéler pratique.
Un cas d'utilisation est donné dans la page Exemples/extraction
d'une liste de tokens.
|