Actualites | Forum |Archives
Le magazine des décideurs et webmasters qui gagnent !
Inscription | Livre d'or | Plan du site | 15 visiteurs actifs
   
A la Une
Actualité
Dossiers
Communiqués
Coin Technique
Agenda des salons
Emploi
Echange de liens

Archives
Sélection
Expérience qui parle
Internet quotidien
Tous les dossiers

Forum
Forum SAM-MAG

Guides
Check-list de la promotion des sites
Promouvoir et référencer les sites web

Contact
Nous contacter
Newsletter
La protection des données personnelles


 
Comment restituer l'information d'un document XML
Dossier "SAM l'Informaticien" du 14 mai au 03 juin 2001 par Daniel Lucazeau

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&eacute;utilisabilit&eacute;... ou comment ne pas tout r&eacute;&eacute;crire</LI>
<LI>Les expressions r&eacute;guli&egrave;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&eacute;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

 
 
Google
 
Web www.sam-mag.com
 

Copyright © ACORUS 2004. All Rights Reserved

- Sam-Mag.com Referencement-Sur-mesure - Referencer-Site-Web.com
Visibilite-Internationale.com - Referencement-Immobilier.net