Skip to content

Un processeur XSLT-2 gratuit et open source

25/10/2010

Je reviens brièvement sur la série de billets consacrés à XSL. Depuis plusieurs années je cherchais un processeur XSLT-2 gratuit. J’avais déjà essayé d’utiliser Saxon, mais je n’ai jamais réussi à comprendre comment m’en servir.

Donc j’utilisais AltovaXML, non open-source mais gratuit — jusque-là : Altova l’a rendu payant et me contraint donc d’y renoncer.

Et voilà qu’on me signale un logiciel qui permet de l’utiliser simplement : Kernow. Ce n’est pas un processeur XSL qui, en soi, s’occupe des transformations : il permet simplement d’utiliser Saxon facilement.

Kernow est très simple d’installation :

  1. Vous récupérez le fichier Zip
  2. Vous le décompressez dans Program Files : ça crée le répertoire Kernow
  3. vous vous faites un raccourci sur le bureau du fichier kernow.jar qui est dans le répertoire Kernow

Kernow est très simple d’usage :

  1. vous éditez votre fichier XML et votre fichier XSL avec un éditeur quelconque (cf. plus bas un exemple d’éditeur quelconque)
  2. vous ouvrez kernow.jar
  3. vous remplissez le formulaire
  4. c’est fait

Considérations initiales

Comme éditeur XML gratuit, j’ai depuis le début utilisé et recommandé XML Copy Editor, non que ce soit le meilleur, mais c’est, en gros, le seul éditeur XML à intégrer une fonction de validation XML et un processeur XSL. C’est-à-dire qu’avec ce logiciel on peut

  • éditer un fichier XML (on peut aussi le faire avec Notepad++),
  • mais aussi vérifier qu’il n’y manque pas une balise fermante
  • et surtout associer ce fichier à une feuille XSL, cliquer sur F8 et transformer le premier avec la seconde

XSLT-1 et XSLT-2

Mais XML Copy Editor ne contient qu’un processeur XSLT-1. En effet le langage XSLT a à ce jour deux versions : « 1.0 » et « 2.0 », la seconde incluant des fonctions supplémentaires suite aux carences constatées dans la première.

Donc avec XML Copy Editor on ne peut transformer des fichiers XML en utilisant des fonctions de XSLT-2.

Exemple 1 : si on exploite un fichier XML qui contient une liste de fichiers à ouvrir.

Voici un tronçon de fichier XML contenant une liste de veilleurs avec leurs flux de veille

Si je veux ouvrir chaque flux (qui est un fichier XML stocké en ligne), je dois utiliser la fonction document().

Exemple :

<xsl:for-each select="item">
<xsl:copy-of select="document(flux)"/>
</xsl:for-each>

Cela m’ouvre dans le fichier produit l’ensemble des flux mis bout à bout.

Cette fonction n’est pas disponible avec XSLT-2.

Exemple 2 : Si je veux produire plusieurs fichiers XML à partir d’un seul fichier

Si je veux, à partir de la liste ci-dessus, générer un fichier XML par item, dont le contenu sera le flux, et le nom du fichier : « le nom du veilleur.xml ».

Il me faut utiliser la fonction <xsl:result-document href= »nom_du_fichier »/>.

En reprenant le fichier ci-dessus, cela donne :

<xsl:template match="/">
<xsl:for-each select="//item">
<!--Ci-dessous, je génère une variable qui est simplement la concaténation du nom du veilleur, suivi de ".xml". J'utiliserai cette variable comme nom des fichiers à générer-->
<xsl:variable name="nom_fichier" select="concat(nom, '.xml')"/>
<xsl:result-document href="{$nom_fichier}">
<xsl:copy-of select="document(flux)"/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>

Publicités
%d blogueurs aiment cette page :