Skip to content

XML, XSL, XSLT-1, XSLT-2 (petites questions de terminologie) – N° 2/XXX

11/12/2009

XML

Un commentaire de Claire_h sur le premier billet consacré à XSL me permet de songer à une embûche possible. Je vais essayer de l’enlever tout de suite.

Ce que je vais aborder dans cette série, c’est bien l’utilisation du langage XSL comme outil de traitement et de transformation de données initialement en XML.

Je considèrerai donc que vous en êtes déjà à manipuler du XML, et que ce XML contient des données :

  • base de signets web ou de périodiques.
  • documents EAD.
  • pages web stockées en Docbook ou XHTML, etc.

Cela signifie que je ne vais pas vous parler du format de ces documents. Je ne vais pas parler de DTD ni de schéma XML.

Le XSL permet de traiter tous ces documents XML, que leurs balises soient normées et obéissent à une DTD, ou qu’elles soient dans un format interne.

Exemple : dans les trois cas cités ci-dessus, vous pouvez avoir 350 fichiers XML contenant des URL. Ces URL peuvent être dans les balises

  • <dc:identifier> si votre base de signets ou périodiques utilisent le Dublin Core
  • <extref href= »http:// »&gt; si vous utilisez de l’EAD
  • <ulink url= »http:// »&gt; si vous utilisez du Docbook
  • <a href= »http:// »&gt; si vous utilisez du XHTML

Et vous voudriez regrouper l’intégralité de ces URL dans un seul fichier HTML, afin de lancer ensuite un vérificateur de liens pour voir s’il y a des mises à jour à faire.

XSL vous permet de faire cette manipulation. Mais il faudra pas mal de petits cours avant cela.

Donc : comme il y a pas mal de choses à faire avec XSL, je considère que vous savez déjà faire du XML et que les fichiers XML existent déjà.

Je ne vais pas expliquer ce qu’est une balise, un attribut ou un document XML bien formé.

Cela signifie aussi que si vous utilisez jusque-là un éditeur du type Notepad++, qui permet de visualiser correctement un fichier XML mais ne contient pas de processeur XSL permettant d’effectuer des traitements sur les données éditées, il vous faut un autre logiciel.

XSL

XSL (eXtensible Styleshhet Language) sert la plupart du temps à afficher pour le navigateur des documents XML.

Autrement dit, XSL sert souvent à produire des fichiers HTML. C’est pourquoi ce langage ne sert alors en quelque sorte que « feuille de style » pour un bel affichage graphique à l’écran qui masque les balises et met du gras pour les titres.

On en verra un petit peu, mais ce ne sera pas l’essentiel : il est rare que vous vous trouviez avec des fichiers XML sans que vous soit aussi fourni l’outil pour les afficher au public, si telle est leur destination.

Remarque : un fichier XML, c’est un document texte avec des balises entre chevrons, éventuellement des attributs, dans lequel à chaque balise ouvrante correspond une balise fermante. Les balises sans contenu texte (exemple : <img src= »http://www.google.com/intl/fr_ALL/images/logo.gif »/&gt; pour afficher le logo de Google) doivent être auto-fermantes. Un fichier XSL correspond à cette description. C’est donc un fichier XML…

XSL-T

Le T final insiste justement sur le côté Transformation des données. XSL permet de retrier des listes, de décompter des items (en ajoutant des conditions spécifiques : ne compter que les villes dont le nombre d’habitants est supérieur à 50.000 et le nombre de DVD inférieur à 4, etc.), de concaténer des chaînes de caractères, de récupérer l’année dans une balise contenant l’information : 20040624, etc.

On est là plus dans le traitement des données que dans leur affichage. C’est surtout là-dessus que je m’appesantirai (mais quand on sait faire du XSLT, le XSL s’acquiert par défaut).

XSLT-1 et XSLT-2

Dans un langage de programmation, il y a des mises à jour pour rajouter des fonctions ou corriger des bugs, suite à des remarques de la communauté utilisatrice du langage.

XSLT-1 permettait déjà beaucoup de choses. XSLT-2 rajoute certaines fonctions : par exemple, avec mon fichier XML listant les villes et l’année d’apparition dans les stats DLL (cf. billet précédent), je pourrais vouloir produire autant de fichiers XML qu’il y a de villes, chaque fichier étant intitulé : Ambérieu-en-Bugey.xml et contenant simplement une ligne :

<annee>2005</annee>

(Dit ainsi, ça a l’air absurde : mais j’ai sous la main un fichier XML avec l’intégralité des stats sous chaque nom de ville : je pourrai générer autant de fichiers XML, les importer dans une base de données et les exploiter ensuite ainsi).

XSLT-2 permet de générer ces fichiers XML. La fonction n’existe pas dans XSLT-1. Or certains processeurs XSL ne savent faire que du XSLT-1. Cela peut expliquer des transformations impossibles…

Bon, de toute façon pour commencer on ne prendra que des fonctions de base.

<li><extref href= »</li>
Publicités
12 commentaires
  1. B. Majour permalink
    11/12/2009 14:22

    Salutations Lully.

    Donc, tu veux dire que les fichiers XML sont des bases de données (comme
    des tableaux Excel), et que le XSL permet de travailler sur ces tableaux… si j’ai tout compris.

    Bien cordialement
    B. Majour

  2. 11/12/2009 14:47

    J’ai dit ça ?????
    Les tableaux Excel ne sont pas des bases de données. Les fichiers XML non plus.
    Les fichiers XML ne sont ni des bases de données ni des tableaux.

    Ce que j’ai dit (ou ce que je dis maintenant), c’est :
    1. si on a un gros fichier XML avec plein de notices dedans, on peut les manipuler avec des feuilles XSL aussi bien que s’il s’agissait d’une base de données (en faisant des filtres, des rapports, des modifications de masse, etc.)
    2. Si on a plein de fichiers XML (chacun correspondant à une notice), on peut faire la même chose.
    3. Si on veut créer une base de données en XML (par exemple MySQL est une base SQL, mais eXist est une base qui stocke ses données en XML — et ORI-OAI, par exemple, stocke ses données dans une base eXist si ma mémoire est bonne — donc on peut initialiser une base ORI-OAI de cours en ligne en chargeant des centaines ou milliers de fichiers XML), XSL permet de dispatcher un gros fichier (comme l’est celui des stats DLL 2005-2008) en plein de fichiers XML.

    Est-ce plus clair ?

  3. 12/12/2009 17:29

    C’est une très bonne idée de faire un point sur le xml (et surtout comment « jouer » avec); c’était le « web2.0 » de l’info-doc en 2003.
    Aujourd’hui, ou plutôt il y a un an ou deux, on entend partout de la part des prestataires et éditeurs de solutions doc le terme web2.0 pour vendre leur joujoux; Archimag, BBF et autres Doc-Sciences de l’Info doivent avoir au moins un article avec le terme dans le titre ;-).
    Avant c’était la même chose avec le xml. Et puis maintenant tous les outils en font, il est partout, tout est transparent. Mais toujours aussi peu de personnel de bib pour en faire (ou du moins s’en servir). Il faut dire que c’est assez abscon, et que ça s’oublie très vite.
    Non, c’est vraiment une bonne idée.

    Bon, je ne suis pas là pour être nostalgique, mais juste pour dire que je ne comprends pas la conclusion du paragraphe « XSLT-1 et XSLT-2 » : veux tu dire que qu’on ne peut générer de xml à partir de xml avec du xslt-1 ? Parce que ça, c’est possible, c’est une des 3 méthodes de xsl:output, non ? ( http://xmlfr.org/w3c/TR/xslt/#section-XML-Output-Method )
    Ou alors tu veux signifier qu’avec XSLT-1 on ne peut obtenir n fichiers xml à partir d’un seul fichier xml ?
    D’ailleurs j’aimerais bien savoir faire ça…

    Alain

  4. 12/12/2009 17:47

    @Amarois : c’est bien la seconde hypothèse qui est la bonne.
    XSLT-1 permet de générer du XML, mais pas d’obtenir n fichiers XML (ou HTML ou texte) à partir d’un seul fichier.
    C’est très prématuré pour faire un cours là-dessus, mais je peux tout de même vous donner le code (si vous pensez être suffisamment avancé — ne prenez pas cette nuance en mal, j’ignore tout de votre usage du XML).
    Si par exemple vous avez un fichier XML avec 100 <notice>, contenant chacune une balise <titre>, vous pouvez générer 100 fichiers XML dont le nom sera « titre ».xml (la valeur de la balise <titre> étant utilisée pour le nom du fichier) :

    <xsl:for-each select= »//notice »>
    <!- – Pour chaque notice, on définit une variable qui est la concaténation du titre suivi de l’extension « .xml ». Cela servira pour donner un nom au fichier–>
    <xsl:variable name= »nom_fichier » select= »concat(titre, ‘.xml’)/>
    <xsl:result-document href= »{$nom_fichier} »>
    <!- – Mettre ici le contenu du fichier, par exemple le contenu intégral de la balise notice–>
    <xsl:copy-of select= ». »/>
    </xsl:for-each>

    C’est donc la fonction xsl:result-document (cf. ici, par exemple), qui n’existe pas en XSLT-1.

  5. 15/12/2009 19:13

    Merci pour la réponse concernant xsl:result-document.
    C’est donc une fonction intégrée aux parsers supportant XSLT-2 qui est bien pratique.

    J’avais jadis touché à XSLT pour traiter des tables des matières d’ouvrages numérisées encodées en XML (avec une DTD maison; une très mauvaise idée – la DTD maison – que je déconseille à tout le monde). Le XSLT générait du XHTML…donc du XML.
    http://bibli.ec-lyon.fr/patrimoine/patrimoine/tables/01201V02.html

    Merci pour le code.

  6. 02/01/2010 15:22

    Je reprends la main suite à un combat (perdu) contre Proxynator ™, profitant des vacances de Noël pour jouer à XSL chez moi.
    Ce qui me rassure, c’est que j’avais bien compris la différence entre XML et XSL :), merci beaucoup pour les définitions. J’ai donc potentiellement au travail plein de fichiers XML, mais je ne sais pas les exploiter, et c’est l’objet de ladite formation :).

  7. 08/01/2010 14:53

    Sur le rapport XML/base de donnée, cf. le premier paragraphe de l’article de Ronald Bourret ici :
    http://peccatte.karefil.com/software/RBourret/xmlBD.htm#isxmldatabase
    et la suite aussi d’ailleurs…)

  8. 22/04/2010 15:05

    En passant et par pur hasard je tombe sur ce tuto conseillé sur la liste de diffusion XML4lib pour la question de la création de n fichiers à partir d’un fichier xml via XSLT-2 :
    http://www.ibm.com/developerworks/xml/library/x-tipmultxsl.html

    si ça peut servir à quelqu’un d’autre qu’à moi…

    Alain Marois

  9. 22/04/2010 19:08

    @amarois Je souscris à tout ce qui est écrit sur la page en question : j’aurais encodé exactement de la même manière 😉

Trackbacks

  1. Techno-fil (13/12/09) « pintiniblog
  2. Composition d’un fichier XSL simple – N° 3/XXX « Encore un biblioblog…
  3. Série XSL : petit résumé au bout de deux mois « Bibliothèques [reloaded]

Commentaires fermés

%d blogueurs aiment cette page :