IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

 

Développons en Java   2.30  
Copyright (C) 1999-2022 Jean-Michel DOUDOUX    (date de publication : 15/06/2022)

[ Précédent ] [ Sommaire ] [ Suivant ] [Télécharger ]      [Accueil ]

 

50. XSLT (Extensible Stylesheet Language Transformations)

 

chapitre    5 0

 

Niveau : niveau 4 Supérieur 

 

XSLT est une recommandation du consortium W3C qui permet de transformer facilement des documents XML en d'autres documents standard sans programmation. Le principe est de définir une feuille de style qui indique comment transformer le document XML et de la fournir avec le document à un processeur XSLT.

On peut produire des documents de différents formats : XML, HTML, XHTML, WML, PDF, etc...

XSLT fait partie de XSL avec les recommandations :

  • XSL-FO : flow object
  • XPath : langage pour spécifier un élément dans un document. Ce langage est utilisé par XSL.

Une feuille de style XSLT est un fichier au format XML qui contient les informations nécessaires au processeur pour effectuer la transformation.

Le composant principal d'une feuille de style XSLT est le template qui définit le moyen de transformer un élément du document XML dans le nouveau document.

XSLT est relativement complet mais complexe : cette section n'est qu'une présentation rapide de quelques fonctionnalités de XSLT. XSLT possède plusieurs fonctionnalités avancées, telles que la sélection des éléments à traiter, le filtrage ou le tri de ces éléments.

Ce chapitre contient plusieurs sections :

 

50.1. XPath

XML Path ou XPath est une spécification qui fournit une syntaxe pour permettre de sélectionner un ou plusieurs éléments dans un document XML. Il existe sept types d'éléments différents :

  • racine (root)
  • element
  • text
  • attribute (attribute)
  • commentaire (comment)
  • instruction de traitement (processing instruction)
  • espace de nommage (name space)

Cette section ne présente que les fonctionnalités de base de XPath.

XPath est utilisé dans plusieurs technologies liées à XML telles que XPointer et XSLT.

Un document XML peut être représenté sous la forme d'un arbre composé de noeuds. XPath grâce à une notation particulière permet de localiser précisément un composant de l'arbre.

La notation reprend une partie de la notation utilisée pour naviguer dans un système d'exploitation, ainsi :

  • le séparateur est le caractère slash /
  • pour préciser un chemin à partir de la racine (chemin absolu), il faut qu'il commence par un /
  • un double point .. permet de préciser l'élément père de l'élément courant
  • un simple point . permet de préciser l'élément courant
  • un arobase @ permet de préciser un attribut d'un élément
  • pour préciser l'indice d'un élément il faut l'écrire entre crochets

XPath permet de filtrer les éléments sur différents critères en plus de leur nom

  • @categorie="test" : recherche un attribut dont le nom est categorie et dont la valeur est "test"
  • une barre verticale | permet de préciser deux valeurs

 

50.2. La syntaxe de XSLT

Une feuille de style XSLT est un document au format XML et doit donc respecter toutes les règles d'un tel document. Pour préciser les différentes instructions permettant de réaliser la transformation, un espace de nommage particulier est utilisé : xsl. Tous les tags de XSLT commencent donc par ce préfixe, ainsi le tag racine du document est xsl:stylesheet. Ce tag racine doit obligatoirement posséder un attribut version qui précise la version de XSLT utilisée.

Exemple : une feuille de style minimale qui ne fait rien
<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

</xsl:stylesheet>

Le tag xsl:output permet de préciser le format de sortie. Ce tag possède plusieurs attributs :

  • method : cet attribut permet de préciser le format. Les valeurs possibles sont : texte, xml ou html
  • indent : cet attribut permet de définir si la sortie doit être indentée ou non. Les valeurs possibles sont : yes ou no
  • encoding : cet attribut permet de préciser le jeu de caractères utilisé pour la sortie

Pour effectuer la transformation, le document doit contenir des règles. Ces règles suivent une syntaxe particulière et sont contenues dans des modèles (templates) associés à un ou plusieurs éléments désignés avec un motif au format XPath.

Un modèle est défini grâce au tag xsl:template. La valeur de l'attribut match permet de fournir le motif au format XPath qui sélectionnera le ou les éléments sur lesquels le modèle va agir.

Le tag xsl:apply-templates permet de demander le traitements des autres modèles définis pour chacun des noeuds fils du noeud courant.

Le tag xsl:value-of permet d'extraire la valeur de l'élément respectant le motif XPath fourni avec l'attribut select.

Il existe beaucoup d'autres tags notamment plusieurs qui permettent d'utiliser des structures de contrôles de types itératifs ou conditionnels.

Le tag xsl:for-each permet de parcourir un ensemble d'éléments sélectionnés par l'attribut select. Le modèle sera appliqué sur chacun des éléments de la liste.

Le tag xsl:if permet d'exécuter le modèle si la condition précisée par l'attribut test au format XPath est juste. XSLT ne définit pas de tag équivalent à la partie else : il faut définir un autre tag xsl:if avec une condition opposée.

Le tag xsl:choose permet de définir plusieurs conditions. Chaque condition est précisée grâce à l'attribut xsl:when avec l'attribut test. Le tag xsl:otherwise permet de définir un cas par défaut qui ne correspond pas aux autres cas définis dans le tag xsl:choose.

Le tag xsl:sort permet de trier un ensemble d'éléments. L'attribut select permet de préciser les éléments qui doivent être triés. L'attribut data-type permet de préciser le format des données (text ou number). l'attribut order permet de préciser l'ordre de tri (ascending ou descending).

 

50.3. Un exemple avec Internet Explorer

Le plus simple pour tester une feuille XSLT qui génère une page HTML est de la tester avec Internet Explorer version 6. Cette version est entièrement compatible avec XML et XSLT. Les versions 5 et 5.5 ne sont que partiellement compatibles. Les versions antérieures ne le sont pas du tout.

 

50.4. Un exemple avec Xalan 2

Xalan 2 utilise l'API JAXP.

Exemple : TestXSL2.java
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import org.xml.sax.*;
import java.io.IOException;

public class TestXSL2
{
  public static void main(String[] args)
	throws TransformerException, TransformerConfigurationException, 
         SAXException, IOException	   
	{
	
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer(new StreamSource("test.xsl"));

    transformer.transform(new StreamSource("test.xml"), new StreamResult("test.htm"));
  }   
}
Exemple : la feuille de style XSL test.xsl
<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   xmlns="http://www.w3.org/TR/REC-html40">

<xsl:output method="html" indent="no" />
<xsl:strip-space elements="*" />

<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>Test avec XSL</TITLE>
</HEAD>
<xsl:apply-templates />
</HTML>
</xsl:template>

<xsl:template match="BIBLIOTHEQUE">
<BODY>
<H1>Liste des livres</H1>
<TABLE border="1" cellpadding="4">
<TR><TD>Titre</TD><TD>Auteur</TD><TD>Editeur</TD></TR>
<xsl:apply-templates />
</TABLE>
</BODY>
</xsl:template>

<xsl:template match="LIVRE"> 
<TR>
<TD><xsl:apply-templates select="TITRE"/></TD>
<TD><xsl:apply-templates select="AUTEUR"/></TD>
<TD><xsl:apply-templates select="EDITEUR"/></TD>
</TR> 
</xsl:template>
</xsl:stylesheet>
Exemple : compilation et exécution avec Xalan
javac TestXSL2.java -classpath .;xalan2.jar
java -cp .;xalan2.jar TestXSL2

 

 


[ Précédent ] [ Sommaire ] [ Suivant ] [Télécharger ]      [Accueil ]

78 commentaires Donner une note à l´article (5)

 

Copyright (C) 1999-2022 Jean-Michel DOUDOUX. Vous pouvez copier, redistribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU, Version 1.1 ou toute autre version ultérieure publiée par la Free Software Foundation; les Sections Invariantes étant constitués du chapitre Préambule, aucun Texte de Première de Couverture, et aucun Texte de Quatrième de Couverture. Une copie de la licence est incluse dans la section GNU FreeDocumentation Licence. La version la plus récente de cette licence est disponible à l'adresse : GNU Free Documentation Licence.