ous
avons étudié la structuration des documents XML.
Ce sont des fichiers presque auto-descriptifs, nous reviendrons
sur ce point plus tard. Je voudrais que l'on voit quelque chose
de concret avant de théoriser un peu plus. C'est bien joli
de stocker de l'information, encore faut-il qu'elle serve à
quelque chose, il faut donc être capable de la restituer
et le moins que l'on puisse dire, c'est qu'un fichier XML n'est
pas abordable en lecture humaine. Ce sera le rôle de XSLT.
Quelles
restitutions pour quels usages ?
Nous
allons nous pencher vers la restitution, non pas la plus simple
mais la plus abordable, celle en HTML. Ce n'est pas nécessairement
la plus simple car dès ce passage de XML à HTML
on entre dans le vif du sujet.
Pour
avoir quelque chose de plus conséquent je vais changer
de fichier XML, je vais prendre une description des articles que
j'ai écrit pour Sam-Mag, vous pouvez le voir sous IE ou
équivalent: sam.xml
et pour les autres sam-xml.html.
L'objectif est d'obtenir cela en simplifié dans un premier
temps sammag_2000.html
dont voici un extrait:
- #2
du 26/06/2000
- De
la réutilisabilité... ou comment ne pas tout
réécrire
- Les
expressions régulières
- #1
du 12/06/2000
- Pages
statiques vs dynamiques
- Comment
protéger le contenu de ses pages web ?
avec
le HTML correspondant :
UL>
<LI><A href="sam20000626.html">#2 du 26/06/2000</A>
<UL>
<LI>De la réutilisabilité... ou comment
ne pas tout réécrire</LI>
<LI>Les expressions régulières</LI>
</UL></LI>
<LI><A href="sam20000612.html">#1 du 12/06/2000</A>
<UL>
<LI>Pages statiques vs dynamiques</LI>
<LI>Comment protéger le contenu de ses pages
web ?</LI>
</UL></LI>
</UL>
Nous
allons décortiquer ce dont nous avons besoin pour arriver
à nos fins.
- filtrer
les articles en fonction de leur année ;
- les
trier par ordre décroissant sur les mois ;
- créer
les balises HTML <ul> et <li> sachant qu'il y a
un niveau d'indentation ;
- obtenir
les informations contenues dans le fichier XML ;
- nous
ne cherchons pas à produire la page web complète
;
Tout
cela va se faire avec des moteurs de transformations XSLT, transformations
qui sont décrites dans des feuilles de styles XSLT.
Nous
nous apercevons que des informations du fichier XML ne sont pas
utilisées dans ce que nous voulons faire, mais elles sont
utilisées par une page détail - c'est le cas du
lien vers l'article complet sur Sam-mag. C'est justement un des
intérêts de XML et XSLT, avec un moteur XSLT approprié
nous extraiyons et mettons en forme les informations qui nous
intéressent prises dans un document plus général.
Comment
fonctionne XSL/XSLT ?
Cette
transformation se fait à l'aide de feuilles de style XSL,
acronyme de Extensible Style Sheet Language - qui couvre deux
langages XSLT, langage de transformation et XSL-FO pour XSL Formating
objects. Nous n'étudierons que XSLT.
Une
feuille de style XSL est d'abord un document XML, il doit être
bien formé. Les noms des balises commencent tous par 'XSL:'.
Notre document XML en entrée s'appelle l'arbre source,
XSL va produire un arbre résultat.
XSLT
est un langage de programmation, on décrit ce que l'on
fait en fonction de l'endroit où l'onse situe dans l'arbre.
dans notre exemple ce sera : quand on lit un élément
<article> on doit commencer une balise <ul> de premier
niveau, mettre la date avec un lien vers la page html.
La
base de XSL est le modèle - template - ; chaque
modèle s'applique à un sous-arbre de l'arbre source
comme ceci :
<xsl:template
match="article"></xsl:template>
Tout
les traitements entre <xsl:template> et </xsl:template>
vont s'appliquer au sous-arbre de notre document XML correspondant
à un élément <article>. Nous aurons
par exemple ceci :
<xsl:template
match="article">
<li>
<xsl:value-of
select="titre" />
</li>
</xsl:template>
Cela
signifie que lorsque le processeur XSLT rencontre un élément
<article> il écrit les balies <li>, puis le
contenu de lélément <titre>, c'est à
dire ce qu'il y a entre <article> et </article>, puis
il écrit enfin les balises </li>
Le langage XSL est récursif, pour initialiser le processus,
il faut toujours au moins un template qui s'applique à
la racine de l'arbre ; dans notre cas nous aurons ceci :
<xsl:template
match="/">
<ul>
<xsl:for-each select="/newsletters/newsletter">
<li>
<a>
<xsl:attribute
name="href">
<xsl:value-of
select="lien vers page" />
</xsl:attribute>
<xsl:value-of
select="texte du lien" />
</a>
<ul>
<xsl:apply-templates
/>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
Qui
se lit comme ceci quand on est à la rcine de l'arbre source
:
- On
écrit <ul>
- pour
chaque élémnet <newsletter> on fait
- on
écrit <li>
- on
crée un lien <a href= ... lien et texte
- on
écrit <ul>
- on
applique les templates, et c'est ici que XSLT est récursif,
il va appliquer tous les templates de la feuille de style,
qui "matchent" à la position courante,
dans notre cas nous sommes dans une balise <newsletter>,
le seul template qui peut s'appliquer est celui sur les
articles.
- ensuite
on ferme </ul>
- on
ferme </li>
- on
ferme la balise de plus haut niveau </ul>
Et
voilà le tour est jouè...enfin si l'on peut dire.
La prochaine fois j'approndirai "écrire le lien",
"son texte" et les aspects de positionnement dans l'arbre
source : XPATH.
Compléments
Pour
traiter mes exemples j'utilise un outil (encore) gratuit..cooktop,
il permet l'utilisation de différents moteurs XSLT, pour
ma part c'est surtout Sablotron.
Bonne
lecture, et à bientôt sur le forum ou par messagerie.
Daniel Lucazeau
ajornet.com
Chef de projet Internet
Tous
droits réservés - Reproduction même partielle interdite sans
autorisation préalable
|