XSLT (extensible Stylesheet Language Transformation)

Documents pareils
Production de documents avec XSLT. Production de documents p.1/??

<?xml version="1.0" encoding="iso " standalone="yes"?>

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Master d Informatique Corrigé du partiel novembre 2010

Thierry BOULANGER. par la pratique. Bases indispensables Concepts et cas pratiques XML. 3 ième édition. Nouvelle édition

PIVOT. Pivot/Querier Documentation technique XML/XSD/XSLT

Faculté de Génie Chaire industrielle en infrastructures de communication. La technologie XML. Wajdi Elleuch

BIRT (Business Intelligence and Reporting Tools)

L'API DOM : Document Object Model

Design et implémentation d un logiciel de validation et de génération de configurations réseaux

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Java Licence Professionnelle CISII,

Module BD et sites WEB

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Gestion Électronique de Documents et XML. Master 2 TSM

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

SP1 : Intégration d'une vidéo dans une mardi 21/01/2014. page web, fonction du format vidéo et 3 mercredi 22/01/2014

1 INTRODUCTION ET OBJECTIFS GÉNÉRATION DE PDF AVEC.NET LES SOLUTIONS DE BI AVEC.NET...13

Formation HTML / CSS. ar dionoea

Document Object Model (DOM)

Gestion d identités PSL Exploitation IdP Authentic

L'essentiel de XML. Cours XML. Olivier Carton

Les architectures 3-tiers Partie I : les applications WEB

La base de données XML exist. A. Belaïd

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Systèmes d'informations historique et mutations

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Evolution et architecture des systèmes d'information, de l'internet. Impact sur les IDS. IDS2014, Nailloux 26-28/05/2014

Machines Virtuelles. et bazard autour. Rémi Forax

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Programmation Internet Cours 4

WordPress Référencement naturel (SEO) Optimiser. son référencement. Daniel Roch. Préface d Olivier Andrieu

SII Stage d informatique pour l ingénieur

Formulaires et Compteurs

Le codage informatique

Gestion documentaire (Extraits du CCI version 1.2)

COMPRENDRE L ARCHITECTURE DES WEB SERVICES REST. Amosse EDOUARD, Doctorant

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Initiation à html et à la création d'un site web

Programmation en Java IUT GEII (MC-II1) 1

Architectures Web Services RESTful

Plan du cours. Historique du langage Nouveautés de Java 7

TP JAVASCRIPT OMI4 TP5 SRC

Séance d ED n 5 : HTML et JavaScript

les techniques d'extraction, les formulaires et intégration dans un site WEB

Q-Checker pour V6 Release 2.1

LES GRANDES ETAPES DE CREATION D UN WEB DESIGN

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

HTML. Notions générales

XML, PMML, SOAP. Rapport. EPITA SCIA Promo janvier Julien Lemoine Alexandre Thibault Nicolas Wiest-Million

THEME PROJET D ELABORATION D UNE BASE DE DONNEES SOUS LE SERVEUR MYSQL

Malgré son aspect spartiate, Freeplane offre de nombreuses fonctionnalités en particulier dans le domaine de la diffusion des cartes sur le Web.

Cours de Programmation 2

Adobe Technical Communication Suite 5

34. DOM (Document Object Model)

Les types de fichiers

Tutoriel : Feuille de style externe

Outils logiciels pour l'ingénierie documentaire

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Bernard Lecomte. Débuter avec HTML

Faculté Polytechnique de Mons. Le processus d Extraction, Transformation et Load (ETL) dans des entrepôts de données XML

Module : programmation site Web dynamique Naviguer entre les pages via site map

Unix/Linux I. 1 ere année DUT. Université marne la vallée

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programme Compte bancaire (code)

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

TD3: tableaux avancées, première classe et chaînes

Génie Logiciel avec Ada. 4 février 2013

Couches 4 à 7 : Traitement des données

Bases de programmation. Cours 5. Structurer les données

3. RÉALISATION ET QUALIFICATION D UN PROTOTYPE 3.1 Réalisation d un prototype CRÉATION D UNE PAGE WEB STATIQUE AU FORMAT HTML

Devenez un véritable développeur web en 3 mois!

Tutoriel d installation de Hibernate avec Eclipse

Le référencement naturel

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Introduction à MATLAB R

Livre Blanc WebSphere Transcoding Publisher

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

données en connaissance et en actions?

Manuel d intégration API FTP SMS ALLMYSMS.COM

Formation Word/Excel. Présentateur: Christian Desrochers Baccalauréat en informatique Clé Informatique, 15 février 2007

Introduction à Microsoft InfoPath 2010

ERETES-SERIES. Support de formation. Formation ERETES ERETES-SERIE 1/58

Premiers Pas en Programmation Objet : les Classes et les Objets

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Projet de Semestre. Page Web Didactique de Visualisation d Algorithme. Université de Genève - semestre de printemps 2012

WordPress Référencement naturel (SEO) Optimiser. son référencement. Daniel Roch. Préface d Olivier Andrieu

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Architecture Orientée Service, JSON et API REST

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

Package Java.util Classe générique

Les outils de création de sites web

4. SERVICES WEB REST 46

JavaServer Pages (JSP)

SQL Parser XML Xquery : Approche de détection des injections SQL

Transcription:

XSLT (extensible Stylesheet Language Transformation) Table des matières 1 Introduction 2 1.1 Définition de XSL........................................... 2 1.2 Structure d une Feuille de style.................................... 3 2 Les déclarations 3 2.1 Importation de feuilles XSL...................................... 3 2.2 Inclusion de feuille XSL........................................ 3 2.3 Format de sortie............................................ 3 2.4 Gestion des espaces.......................................... 4 3 Les règles de transformation 4 3.1 Déclaration d une règle........................................ 4 3.2 Une règle pour plusieurs éléments................................... 4 3.3 Traitement des éléments fils...................................... 5 3.4 Sélection des éléments fils....................................... 5 3.5 Notre exemple............................................. 6 3.6 Une feuille sans règle......................................... 6 3.7 Exemple de feuille de style...................................... 7 3.8 Sélection des règles par paquets.................................... 7 4 Construction de l arbre résultat 8 4.1 Noeud textuel constant........................................ 8 4.2 Noeud textuel par XPATH...................................... 9 4.3 Noeud élément et attribut....................................... 9 4.4 Noeud élément et attribut dynamique................................ 10 4.5 Copie de noeuds............................................ 11 4.6 Copie du noeud courant sans le contenu et les attributs....................... 11 4.7 Liste d attributs réutilisable...................................... 12 4.8 Noeud commentaire.......................................... 12 4.9 Noeud instruction de traitement................................... 12 5 Les éléments de structure 13 5.1 Les sections conditionnelles...................................... 13 5.2 Boucle sur des ensembles de noeuds................................. 14 5.3 Tri d un ensemble de noeuds..................................... 14 1

6 Les variables XSL 15 6.1 Définition de variables......................................... 15 6.2 Priorité des règles importées..................................... 16 6.3 Priorités fixées entre les règles.................................... 16 7 Règles nommées et paramètres 17 7.1 Paramètres de règle.......................................... 17 7.2 Règles nommées............................................ 17 7.3 Paramètres d une feuille XSL..................................... 17 8 Traitement des espaces de noms 18 9 Indexation et utilitaires 19 9.1 Indexation du document XML.................................... 19 9.2 Utilitaires............................................... 20 10 Formatage des nombres 20 11 Extension d XPATH par XSL 20 12 Étendre XSLT 21 12.1 Étendre XSL avec JAVA........................................ 21 12.2 Utiliser son extension......................................... 22 12.3 Extension standard pour XSLT.................................... 22 1 Introduction 1.1 Définition de XSL XSL (extensible Stylesheet Language) c est XSLT (XSL Transformation), FO (Formatting Object) XSLT est un langage permettant de produire un document XML ou texte à partir d un autre document par application de règles de transformation. C est donc un outil essentiel dans une chaîne de traitement XML. FO est une DTD XML qui définie la présentation d un texte sur un document papier (PS, GV, PDF, DPS). 2

1.2 Structure d une Feuille de style <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0" id="identifiant (?)" > déclarations optionnelles (?) règles de transformation (?) </xsl:stylesheet> Une feuille de style XSL est un document XML (version 2.0 prête, version 3.0 en préparation). Le symbole (?) indique le caractère optionnel d un attribut ou d un élément. 2 Les déclarations 2.1 Importation de feuilles XSL Importation de feuilles XSL avec gestion de la priorité : <xsl:import href="url_de_la_feuille_xsl" /> Les règles importées sont moins prioritaires que les règles définies dans la feuille courante. Cette déclaration doit figurer en tête d une feuille de style. 2.2 Inclusion de feuille XSL Inclusion de feuilles XSL (aucun impact sur la priorité) : <xsl:include href="url_de_la_feuille_xsl" /> 2.3 Format de sortie Déclaration optionnelle du format de sortie : <xsl:output method="xml html text " (xml) version="nu_de_version" (1.0) encoding="encodage" (UTF-8) indent="yes no" (yes) xml-declaration="yes no" (yes) doctype-system="url_de_la_dtd" (?) doctype-public="fpi_de_la_dtd" (?) cdata-section-elements="liste d éléments" (?) /> 3

2.4 Gestion des espaces Politique par défaut de gestion des blancs pour les noeuds de type texte. <xsl:preserve-space elements="liste_d éléments" (!) /> <xsl:strip-space elements="liste_d éléments" (!) /> 3 Les règles de transformation 3.1 Déclaration d une règle L attribut match indique les noeuds traités par cette règle : <xsl:template match="expression_xpath" > élément(s) de remplacement (?) Fonctionnement : Dans le corps d une règle les noeuds de type texte sont recopiés les noeuds éléments XSL sont interprétés les autres noeuds éléments sont recopiés Remarque : dans le traitement du corps d une règle, le noeud par défaut est celui sur lequel s applique la règle. Exemple : <xsl:template match="section[ section ]/nom" > <p>nom : <xsl:value-of select="."/></p> 3.2 Une règle pour plusieurs éléments L attribut match peut contenir plusieurs expressions XPATH connectées par un (union des ensembles de noeuds) : <xsl:template match="expr_1 expr_2 " > élément(s) de remplacement Exemple : <xsl:template match="section chapitre definition"> <p>nom : <xsl:value-of select="nom"/></p> 4

3.3 Traitement des éléments fils Dans le corps d une règle, l élément <xsl:apply-templates/> lance le traitement sur les fils du noeud courant : Pour le fichier XML : <a> <b> <c>hello</c> </b> <b/> <a/> </a> et la feuille XSL : <xsl:template match="/"> <liste><xsl:apply-templates /></liste> <xsl:template match="a b"> <xsl:apply-templates /> <xsl:template match="c"> <c/> Nous obtenons : <liste><c/></liste> 3.4 Sélection des éléments fils Nous pouvons directement sélectionner les élements à traiter avec l attribut select de xsl:apply-templates : <xsl:template match="/"> <liste> <xsl:apply-templates select="//c" /> </liste> <xsl:template match="c"> <c/> C est une feuille XSL qui dirige le traitement. Elle est également plus rapide. 5

3.5 Notre exemple <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE stock SYSTEM "essai.dtd"> <stock> <produit> <nom> Livre </nom> <prix monnaie="francs"> 50 </prix> <comment> Un article très recherché </comment> </produit> <produit> <nom> CD </nom> <prix monnaie="euros"> 23 </prix> </produit> </stock> 3.6 Une feuille sans règle La feuille de style vide contient deux règles par défaut : La première code le parcours en profondeur : <xsl:template match="* /"> <!-- R1 --> <xsl:apply-templates/> La seconde extrait les noeuds de type texte : <xsl:template match="text()"> <!-- R2 --> <xsl:value-of select="."/> L application d une feuille de style vide donne : <?xml version="1.0" encoding="utf 8"?> Livre R2 50 R2 Un article très recherché R2 R1 CD R2 23 R2 R1 R1 R1 XSL Le texte est codé en UTF-8. 6

3.7 Exemple de feuille de style <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:output method="html" doctype-system="http://www.w3.org/tr/rec-html40/loose.dtd" /> <xsl:template match="/"> <!-- R1 --> <html><body> <xsl:apply-templates/> </body></html> <xsl:template match="stock"> <!-- R2 --> <h1>stock de la société</h1> <xsl:apply-templates/> <xsl:template match="produit"> <!-- R3 --> <h2>produit <xsl:value-of select="nom"/></h2> <p>prix : <xsl:value-of select="prix"/> en <xsl:value-of select="prix/@monnaie"/></p> <xsl:if test="comment"> <p><xsl:value-of select="comment"/></p> </xsl:if> </xsl:stylesheet> L application de la feuille de style précédente donne : <!DOCTYPE HTML SYSTEM "http://www"> <html> <body> <h1>stock de la société</h1> XSL R1 R2 <h2>produit Livre </h2> R3 <p>prix : 50 en Francs</p> <p> Un article très recherché </p> <h2>produit CD </h2> <p>prix : 23 en Euros</p> R3 </body> </html> 3.8 Sélection des règles par paquets L attribut mode selectionne un nouveau jeu de règles. <xsl:apply-templates mode="mode-choisi" /> Exemple : 7

<xsl:template match="produit"> <h2>produit <xsl:value-of select="nom"/></h2> <xsl:apply-templates select="." mode="seulement-prix" /> <xsl:apply-templates select="." mode="seulement-comment" /> <xsl:template match="produit" mode="seulement-prix"> <p>prix : <xsl:value-of select="prix"/> en <xsl:value-of select="prix/@monnaie"/></p> <xsl:template match="produit" mode="seulement-comment"> <xsl:if test="comment"> <p><xsl:value-of select="comment"/></p> </xsl:if> 4 Construction de l arbre résultat 4.1 Noeud textuel constant Insérer un texte : <xsl:text disable-output-escaping="(no) yes" > texte à insérer </xsl:text> Exemple : pour obtenir Soleil & nuages : <xsl:text>soleil & nuages</xsl:text> <xsl:text><![cdata[soleil & nuages]]></xsl:text> Par défaut, les noeuds de texte sont également recopiés : <xsl:template match="prix"> <p>prix : <xsl:value-of select="."/> en <xsl:value-of select="@monnaie"/></p> Pour éviter les espaces superflus il est préférable d utiliser : <xsl:template match="prix"> <p> <xsl:text>prix : </xsl:text> <xsl:value-of select="."/> <xsl:text> en </xsl:text> <xsl:value-of select="@monnaie"/> </p> 8

Remarque : Les noeuds constitués uniquement d espaces ( &x20;, &x9;, &xd;, &xa; ) ne sont pas récopiés. <xsl:template match="/"> <p> <b>bonjour </b> </p> <p><b>bonjour </b></p> Notez les espaces après Bonjour. 4.2 Noeud textuel par XPATH Produire un noeud textuel par évaluation d une expression XPATH : <xsl:value-of select="expression_xpath" (!) disable-output-escaping="no yes" (no) /> Exemples : <xsl:value-of select="/stock/produit[nom= Livre ]/prix" /> <xsl:value-of select="//prix[@monnaie= Euros ]" /> Seul le premier noeud renvoyé est utilisé (appel implicite de la fonction string ). 4.3 Noeud élément et attribut Pour insérer un noeud de type élément dont on connait le nom il suffit de le placer dans la règle : <xsl:template match="produit"> <h2>produit <xsl:value-of select="nom"/></h2> Une expression XPATH peut être utilisée dans la valeur d un attribut si elle est entourée d accolades (utilisez {{ pour { et }} pour } ). <xsl:template match="produit"> <h2 id="{@id}" title="description : {comment}"> <xsl:text>produit </xsl:text> <xsl:value-of select="nom"/> </h2> On considère dans cet exemple que l élément produit possède un attribut id et un sous-élément comment. 9

4.4 Noeud élément et attribut dynamique Quand on ne connait pas le nom de l élément à insérer, on utilise : <xsl:element name="nom_local" (!) namespace="espace_de_nom" (?) use-attribute-sets="nom-de-liste" (?) > contenu de l élément </xsl:element> Même chose pour un attribut : <xsl:attribute name="nom_local" (!) namespace="espace_de_nom" (?) > valeur de l attribut </xsl:attribute> Exemple : effectuer la transformation suivante <prix monnaie="euros"> 10 ==> <Euros prix="10"/> </prix> avec la règle <xsl:template match="prix"> <xsl:element name="{@monnaie}"> <xsl:attribute name="prix"> <xsl:value-of select="."/> </xsl:attribute> </xsl:element> Exemple 2 : La notation <mon-element id="{une-expression-xpath}"> définition du contenu </mon-element> est équivalente à <mon-element> <xsl:attribute name="id"> <xsl:value-of select="une-expression-xpath"/> </xsl:attribute> définition du contenu </mon-element> 10

On peut donc commencer par définir un élément, puis lui ajouter des attributs et enfin lui ajouter du contenu. 4.5 Copie de noeuds Copie directe d un ensemble de noeuds : <xsl:copy-of select="expression_xpath" /> Exemple 1 : ajouter une quantité à chaque produit : <xsl:template match="produit"> <produit> <xsl:copy-of select="nom prix comment"/> <quantité>inconnue</quantité> </produit> Exemple 2 : copie fidèle : <xsl:template match="/" > <xsl:copy-of select="/" /> 4.6 Copie du noeud courant sans le contenu et les attributs Créer un élément de même nom que le noeud courant : <xsl:copy use-attribute-sets="nom-de-listes(?)" > contenu de l élément </xsl:copy> Exemple 1 : tout recopier (ou presque) en traversant l arbre. <xsl:template match="*"> <xsl:copy> <xsl:xsl:copy-of select="@*" /> <xsl:apply-templates /> </xsl:copy> Exemple 2 : enlever le commentaire d un produit ou d un cadeau : <xsl:template match="produit cadeau"> <xsl:copy> <xsl:copy-of select="*[ not(self::comment) ]"/> </xsl:copy> 11

4.7 Liste d attributs réutilisable Forme générale : <xsl:attribute-set name="nom-de-liste" (!) use-attribute-sets="nom-de-liste" (?) > <xsl:attribute name="nom1">valeur1</xsl:attribute> <xsl:attribute name="nom2">valeur2</xsl:attribute> </xsl:attribute-set> Utilité : regrouper les définitions d attributs pour les réutiliser associées à plusieurs éléments (tableaux, paragraphes, images, etc.) Les listes sont définies en dehors des règles. Exemple : <xsl:attribute-set name="classetableau" > <xsl:attribute name="class">tableau</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="tableauavecbords" > <xsl:attribute name="style">border : solid 1px blue;</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="tableau" use-attribute-sets="classetableau tableauavecbords" /> <xsl:template match="/"> <table xsl:use-attribute-sets="tableau" > </table> nous donne <table class="tableau" style="border : solid 1px blue;"> </table> 4.8 Noeud commentaire Insérer un commentaire : <xsl:comment> texte du commentaire </xsl:comment> 4.9 Noeud instruction de traitement L instruction XSL 12

<xsl:processing-instruction name="cible" (!) > arg1= val1 arg2= val2 </xsl:processing-instruction> donne dans le document produit <?cible arg1= val1 arg2= val2?> 5 Les éléments de structure 5.1 Les sections conditionnelles <xsl:if test="expression_xpath"> </xsl:if> Comportement : Le corps de l élément xsl:if est traité si et seulement si boolean(expression XPATH) est vraie. Remarque : Il n y a pas de structure sinon. Exemple : <xsl:template match="produit"> <h2>produit <xsl:value-of select="nom"/></h2> <xsl:if test="comment[ (normalize-space(.)!= ) ]"> <p><xsl:value-of select="comment"/></p> </xsl:if> Le choix multiple <xsl:choose> <xsl:when test="expression_xpath_1"> </xsl:when> <xsl:when test="expression_xpath_2"> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose> 13

La partie otherwise est optionnelle. Les éléments when peuvent être vides. Exemple de choix multiple : <xsl:template match="produit"> <xsl:choose> <xsl:when test="not(comment)"> <p>pas de commentaire.</p> </xsl:when> <xsl:when test="(normalize-space(comment) = )"> <p>commentaire vide.</p> </xsl:when> <xsl:otherwise> <p><xsl:value-of select="comment" /></p> </xsl:otherwise> </xsl:choose> 5.2 Boucle sur des ensembles de noeuds L instruction XSL for-each modifie le noeud courant : <xsl:for-each select="expression_xpath"> </xsl:for-each> Exemple : <xsl:template match="/"> <h1>liste des noms</h1> <xsl:for-each select="//nom"> <p>nom : <xsl:value-of select="."/></p> </xsl:for-each> 5.3 Tri d un ensemble de noeuds L instruction xsl:sort associée à xsl:for-each et xsl:apply-templates modifie l ordre des noeuds : <xsl:sort select="expression_xpath" (.) data-type="text number" (text) order="ascending descending" (ascending) case-order="upper-first lower-first" (upper-first) lang="nom_de_langue" (langue système) /> Exemple 1 : 14

<xsl:template match="/"> <h1>liste des produits</h1> <xsl:for-each select="//produit"> <xsl:sort select="nom"/> <p>nom : <xsl:value-of select="nom"/></p> <p>prix : <xsl:value-of select="prix"/></p> </xsl:for-each> Exemple 2 : <xsl:template match="/"> <h1>liste des produits</h1> <xsl:apply-templates select="//produit" > <xsl:sort select="prix" order="descending" /> <xsl:sort select="nom" order="descending" /> </xsl:apply-templates> Plusieurs clauses xsl:sort sont utilisables. 6 Les variables XSL 6.1 Définition de variables Les variables contenants un fragment de l arbre resultat : <xsl:variable name="nom_de_la_variable"> contenu </xsl:variable> Les variables peuvent être globales ou locales. Exemple : <xsl:variable name="head"> <head> <link rel="stylesheet" type="text/css" href="style.css" /> </head> </xsl:variable> <xsl:template match="/"> <html> <xsl:copy-of select="$head"/> <body></body> </html> Les variables contenants un fragment de l arbre d entrée : <xsl:variable name="nom_de_la_variable" select="expression_xpath" /> 15

Exemple : <xsl:variable name="produits" select="//produit" /> <xsl:variable name="pas.cher" select="$produits[prix < 10]" /> <xsl:variable name="gratuit" select="$pas.cher[prix = 0]" /> <xsl:template match="/"> <xsl:for-each select="$pas.cher[ comment ]"> </xsl:for-each> 6.2 Priorité des règles importées Les règles internes sont plus prioritaires que les règles importées. La clause <xsl:apply-imports/> permet de choisir les règles importées. Feuille base.xsl : <xsl:template match="pre"> <xsl:copy-of select="."/> Feuille mise-en-forme.xsl : <xsl:import href="base.xsl" /> <xsl:template match="pre"> <center><xsl:apply-imports /></center> L application de la feuille mise-en-forme.xsl donne : <center><pre></pre></center> 6.3 Priorités fixées entre les règles L attribut priority permet d augmenter (si > 0) ou de diminuer (si < 0) la priorité d une règle : <xsl:template match="produit[ (prix > 10) ]" priority="100" > <xsl:template match="produit" priority="0" > <!-- défaut --> <xsl:template match="*" priority="-1000" > 16

7 Règles nommées et paramètres 7.1 Paramètres de règle Il est possible d appeler une règle en lui passant des paramètres : <xsl:template match="produit"> <xsl:param name="avecprix" select="false()" /> <xsl:param name="prix" select="prix" /> <h2><xsl:value-of select="nom" /></h2> <xsl:if test="$avecprix"> <p>prix : <xsl:value-of select="$prix" /></p> </xsl:if> Les paramètres se définissent et s utilisent comme des variables : <xsl:apply-templates select="//produit"> <xsl:with-param name="avecprix" select="true()" /> </xsl:apply-templates> L attribut select de l élément xsl:param permet de prévoir une valeur par défaut. 7.2 Règles nommées Il est possible de nommer et d appeler une règle par son nom : <xsl:template name="faire-un-lien"> <xsl:param name="href" /> <xsl:param name="target" >_blank</xsl:param> <a href="{$href}" target="{$target}"> <xsl:apply-templates/> </a> Appel d une règle : <xsl:call-template name="faire-un-lien"> <xsl:with-param name="target">all</xsl:with-param> <xsl:with-param name="href" select=" ma-page.html " /> </xsl:call-template> Remarque : le noeud courant de la règle appelante devient le noeud courant de la règle appelée. 7.3 Paramètres d une feuille XSL Il est possible d ajouter des paramètres à une feuille XSL afin de changer son fonctionnement : 17

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:output method="html"/> <xsl:param name="debug" select="false()" /> règles </xsl:stylesheet> Les paramètres s utilisent comme des variables : <xsl:if test="($debug)"> MODE DEBUG </xsl:if> 8 Traitement des espaces de noms Il est possible de travailler sur plusieurs espaces de noms : <stock xmlns="http://www.luminy.univ-mrs.fr"> </stock> La feuille de style : <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:lum="http://www.luminy.univ-mrs.fr" xmlns:dil="http://www.dil.univ-mrs.fr" version="1.0"> <xsl:template match="/"> <dil:prix> <xsl:for-each select="//lum:prix"> <dil:monprix valeur="{.}"/> </xsl:for-each> </dil:prix> </xsl:stylesheet> L application de la feuille de style donne : <dil:prix xmlns:dil="http://www.dil.univ-mrs.fr" xmlns:lum="http://www.luminy.univ-mrs.fr" > <dil:monprix valeur="50"/> <dil:monprix valeur="23"/> </dil:prix> L espace de nom lum est défini mais pas utilisé. Nous pouvons demander sa suppression avec exclude-result-prefixes : 18

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:lum="http://www.luminy.univ-mrs.fr" xmlns:dil="http://www.dil.univ-mrs.fr" exclude-result-prefixes="lum" version="1.0"> m^eme règle </xsl:stylesheet> 9 Indexation et utilitaires 9.1 Indexation du document XML Création de clés : <programme> <module> <cours> <nom>xml</nom> <enseignant>jean-luc Massat</enseignant> <xsl:key name="lescours" (!) match="/programmes/module/cours" (!) use="nom" (!) /> Il est possible de faire référence à un noeud cours à partir de son nom dans une expression XPATH. Par exemple, les enseignants d XML : key( lescours, XML )/enseignant Exemple 2 : <produit code="126000"> </produit> <produit code="756200"> </produit> <produit code="563980"> </produit> <commande> <code-produit>756200</code-produit> <code-produit>563980</code-produit> </commande> 19

<xsl:key name="produitsparcode" match="//produit" use="@code" /> <xsl:key name="commandesparcode" match="//commande" use="code-produit" /> <xsl:template match="/"> <h2>les produits commandés</h2> <xsl:apply-templates select="key( produitsparcode, //commande/code-produit)" /> <h2>les commandes des produits en stock</h2> <xsl:variable name="enstock" select="//produit[ en-stock ]" /> <xsl:apply-templates select="key( commandesparcode, $enstock/@code)" /> 9.2 Utilitaires Émission d un message d erreur : <xsl:message terminate="yes no" (?) /> texte du message </xsl:message> Pour imprimer un message sur la sortie d erreur standard et éventuellement arrêter le processeur XSL. 10 Formatage des nombres La fonction format-number(nombre,format) renvoie une chaîne issue du formatage d un nombre : format-number(500100, "###,###.00") = 500,100.00 Nous pouvons également définir un format et l utiliser : <xsl:decimal-format name="mesnombres" (?) decimal-separator="," (.) grouping-separator="." (,) infinity="" (infinity) NaN="" (NaN) percent="%" (%) per-mille="m" (?) /> format-number(34.567, "0,##", "mesnombres") = 34,57 format-number(.6, "0%", "mesnombres") = 6% format-number(.6, "0M", "mesnombres") = 60M 11 Extension d XPATH par XSL XPATH est étendu : ajout de la fonction generate-id(noeud) qui renvoie un identifiant unique : 20

<!-- test de noeuds identiques --> <xsl:if test="generate-id($n1) = generate-id($n2)"> </xsl:if> ajout de la fonction current() qui renvoie le noeud courant <xsl:template > <xsl:variable name="p" select="//article[@id = current()/@id]"/> </xsl:template > ajout de la fonction key(index,clef), ajout du ou dans les expressions. ajout de la fonction format-number(nombre,format) ajout de la fonction document(uri) qui renvoie le document XML identifié par l URI <xsl:value-of select="document( stock.xml )//produit[prix > 10]" /> deux documents liés : <xsl:variable name="stock" select="document( /chemin/vers/stock.xml )" /> <xsl:variable name="achats" select="document( achat.xml, $stock)" /> Attention : l utilisation des noeuds issus d un autre arbre entraîne un changement de contexte qui s applique a toutes les expressions XPATH (nouvelle définition de la racine / ). 12 Étendre XSLT 12.1 Étendre XSL avec JAVA Il est possible, dans une feuille XSL, de faire appel à des routines externes (écrites en Java, Perl, Javascript, TCL, C, etc.) Avec la classe Java import java.util.date; import java.util.calendar; public class GetDate { } public static Date getdate(string full) { Date d = Calendar.getInstance().getTime(); if (! full.equals("true")) { d.setminutes(0); d.sethours(0); } return d; } 21

12.2 Utiliser son extension et la feuille de style : <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0" xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java"> <xsl:output method="html"/> <xsl:template match="/"> <xsl:value-of select="java:getdate.getdate( true )" /> <xsl:value-of select="java:getdate.getdate( false )" /> nous obtenons Tue Jan 21 17:48:03 CET 2013 Tue Jan 21 00:00:03 CET 2013 12.3 Extension standard pour XSLT Vous pouvez étudier la librairie EXSLT : http://www.exslt.org/ 22