57
XSL eXtensible Stylesheet Language

XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Embed Size (px)

Citation preview

Page 1: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XSL

eXtensible Stylesheet Language

Page 2: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Historique 1999:

XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils

depuis février 2007 XSLT 2.0 et XPATH 2.0 : nouvelles

recommandations du W3C XSLT 2.0 est plus simple et le

traitement associé plus efficace

Page 3: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XSL : principe général

Page 4: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XSL

"Un moyen de niveau balisage qui fournit une solution déclarative à la plupart des exigences de présentation."

J.C. Bernadac & F. Knab

Un langage de transformation et de style

Page 5: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XSL

Composé de : Un langage de transformation de

documents (XSLT) Un langage de mise en forme de

documents ( XSL Formatting, XSL FO)

Un langage d'adressage (XPath)

Page 6: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Structure d'une feuille de style Un prologue

Un fichier XSL doit commencer par les lignes indiquant le numéro de version XML et l'encodage de caractères utilisé :

<?xml version="1.0" encoding="ISO-8859-1"?> La définition de l'élément xsl:stylesheet

La déclaration peut contenir des attributs : la déclaration d'espace de noms le numéro de version, …

L'élément contient la déclaration de règles de réécriture

Page 7: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Applications de règles de réécriture Le principe de fonctionnement de

XSL est l'application de règles ou "templates" ou modèles Une règle permet de déterminer le

texte qui doit être réécrit à la place d'un "motif"/d'un "pattern" (élément, attribut, texte, …)

Page 8: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

<…>

</…>

<…>

</…>

<…></…>

Réorganiser

<…>

</…>

<…>

</…>

<…></…>

<…></…>

<…>

</…>

<…></…>

Présenter

Document pdf

Document html

Document XML

Document XML

Page 9: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

1ère étape : XML vers XML

Application de règles de transformation de l'arbre du document XML source : production d'un arbre XML résultat, pouvant être complètement différent.

A partir d'un document source, production d'un ou plusieurs documents XML résultats.

Ce qui est produit peut contenir des indications de formatage.

Page 10: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Ou du XML vers ??? On peut directement générer du

HTML. ou un document dans un langage

ad-hoc.

Page 11: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

2ème étape : du XML vers ??? Application des règles de mises en

forme

Ex : FOP (J. Tauber) "an open-source XSL Formatter and Renderer"

Génération de PDF ou à partir d'un arbre d'objets de formatage.

Page 12: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Règles de transformation

Syntaxe :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"><xsl:template match="[caractéristiques des éléments-cibles]">

[actions]</xsl:template>

</xsl:stylesheet>

L'élément racine indiqueque c'est une feuille de style XSL

Expression au format XPATH

Page 13: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Apply-templates Application récursive des

transformations à la racine et à ses descendants :<xsl:template match="/">

<xsl:apply-templates/>

</xsl:template>

En l’absence de l’attribut « select », traite tous les fils du nœud courant.

L’attribut « select » est une expression qui doit retourner un ensemble de nœuds.

<xsl:template match="/">

<xsl:apply-templates select="/book/chapter"/>

</xsl:template> Expression au format XPATH

Page 14: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XPATH : introduction

Page 15: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Xpath (= location paths)

Un langage "d'adressage" (chemins d'accès) Une syntaxe partagée avec d'autres spécifications exemples :

chapitre/section : toutes les sections d'un chapitre //section : toutes les sections descendantes de la racine child::*/child::para

: les nœuds de nom "para" petit-enfants du nœud courant

descendant::para : les nœuds "para" descendant du nœud courant

ancestor::para : les nœuds "para" ancêtres du nœud courant

Page 16: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XPATH

Extrait de http://www.commentcamarche.net/xml/xmlxslt.php3

personne d'un noeud

Page 17: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Exemples

<xsl:value-of select="section//paragraphe"/>

sélectionne tous les éléments paragraphe descendant d'un élément section, fils du noeud courant.

<xsl:value-of select=".//paragraphe"/>

sélectionne tous les éléments paragraphe descendant du noeud courant.

Page 18: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Autres exemples associés aux règles

<xsl:template match="chapitre/section"/> sélectionnera les éléments nommés section

quand ceux-ci sont "fils de" chapitre <xsl:template

match="intervention[@memorable='oui']"/> sélectionnera les éléments nommés

intervention qui possède l'attribut memorable dont la valeur est 'oui'

Page 19: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XSL : algorithme d'application des règles

Page 20: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Application des règles

Par défaut : de l’élément racine vers ses descendants, en suivant l’ordre d’apparition des éléments.

Les règles sont activées dans l’ordre de rencontre des éléments

L’ordre de définition des règles n’a pas d’importance

Page 21: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

L'algorithme du "XSL-processing"

1- le nœud racine est traité 2- chaque nœud de la liste courante est traité

en appliquant la règle correspondante. 3- cela peut ajouter de nouveaux nœud à

l'arbre résultat : sélection d'une liste de nœuds à traiter qui forment la liste courante de nœuds - on rejoue l'étape 2

4- on continue jusqu'à ce que plus aucun nœud ne soit sélectionné

Page 22: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Règles implicites

Citation de la spécification: "Il existe une règle modèle [template] interne permettant à un traitement récursif de continuer même en cas de non-concordance de motif par une règle modèle explicite de la feuille de styles. Cette règle modèle s'applique aussi bien aux noeuds d'éléments qu'au noeud racine.

Page 23: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Règles implicites

Ce qui suit montre ce qui équivaut à cette règle interne" : <xsl:template match="*|/">

<xsl:apply-templates/></xsl:template>

Autre règle implicite : copie implicite par défaut des nœuds texte dans le document résultat<xsl:template match="text()| @*">

<xsl:value-of select="."/></xsl:template>

(exemple du CUI)

Page 24: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XSL : instructions principales

Page 25: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

9 instructions principales xsl:import and xsl:include xsl:strip-space and xsl:preserve-space xsl:output xsl:variable xsl:param xsl:key xsl:decimal-format xsl:namespace-alias xsl:attribute-set xsl:template

Page 26: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Modulariser sa stylesheet <xsl:include>

Inclut textuellement la stylesheet référencée.<xsl:include href = uri-reference />Même niveau de précédence : les templates se

comportent comme ceux de la stylesheet. <xsl:import>

La stylesheet importée étend la stylesheet<xsl:import href = uri-reference />Les templates importés d’une autre stylesheet

à un niveau de précédence différent.

Page 27: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Gérer les espaces

xsl:strip-space ne préserve pas les espaces dans les

éléments xsl:preserve-space

préserve les espaces dans les éléments

Page 28: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Spécifier le type de sortie xsl:output

exemples : <xsl:output method="html"> <xsl:output method="xml"> <xsl:output method="text">

par défaut, xml, sauf si la première balise de l'arbre résultat est html.

Page 29: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Déclarer des variables

xsl:variable permet d'affecter une valeur à une

variable nommée xsl:param

permet de déclarer un paramètre de la feuille de style.

Page 30: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Autres déclarations

xsl:key permet d'associer un identifiant à un nœud

xsl:decimal-format permet de définir un modèle de

représentation des nombres décimaux (utile si internationalisation)

xsl:attribute-set déclare un ensemble d'attributs réutilisables

Page 31: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

xsl:apply-templates (suite)

Page 32: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

xsl:apply-templates : mode

Un nœud peut être calculé plusieurs fois, de façon différente : <xsl:apply-templates select="expr" mode="name"/>

<xsl:template match="pattern" mode="name">...</xsl:apply-templates>

Page 33: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Attribut mode

Si xsl:apply-templates a un attribut mode : il s’applique uniquement aux règles modèles des éléments ayant un attribut mode avec la même valeur

<xsl:template match="book" mode="short">

<!– mode short n’affiche que le titre --> <xsl:value-of select="titre"/>

</xsl:template>

Page 34: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

mode : exemple

Page 35: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XSL : des fonctions

Page 36: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Principales fonctions

xsl:element xsl:attribute xsl:number xsl:sort xsl:node …

Page 37: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

xsl:element

Permet de calculer dynamiquement le nom d’un élément

<xsl:template name="process.table.cell"> <xsl:param name="cellgi">td</xsl:param> <xsl:element name="{$cellgi}"> <!-- whatever processing is desired --> </xsl:element>

</xsl:template>

Page 38: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Des exemples…xsl:attribute Permet de rajouter dynamiquement des

attributs à une balise HTML par exemple

<xsl:template name="graphic"> <img src="{@fileref}"> <xsl:if test="@align"> <xsl:attribute name="align"> <xsl:value-of select="@align"/> </xsl:attribute> </xsl:if> </img> </xsl:template>

Page 39: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

xsl:number

Pour numéroter des nœuds d'un document en fonction de leur position dans l'arbre source level : pour préciser le niveau dans

l'arbre, from : point de départ de la

numérotation format : format d'affichage de la

numérotation

Page 40: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

xsl:sort Pour trier les nœuds du document Des attributs :

order : le sens du tri (ascending ou descending)

lang : la langue du critère de tri data-type : la nature de la clé de tri

(text, number) case-ordre (upper-first, lowerfirst)

Page 41: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Des tests

xsl:if <xsl:choose>

<xsl:when test="expr1">…</xsl:when><xsl:otherwise>…</xsl:otherwise>

</xsl:choose>(cf. exemple notation)

Page 42: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Des boucles

<xsl:for-each select="expr"> … </xsl:for-each>

Page 43: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Fonctions issues de XPath position() : retourne un nombre

égal à la position du nœud dans son contexte

last() : retourne un nombre égal à la taille de l'évaluation du contexte

Page 44: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0
Page 45: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0
Page 46: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0
Page 47: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Générer un identifiant unique generate-id()

le processeur génère l'ID, Un ID unique par nœud (durant la

même transformation) des nœuds différents ont un ID

différent. Intéressant pour générer des liens

internes dans l'arbre résultat.

Page 48: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

generate-id() : exemple

Page 49: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XSLT 2.0

Page 50: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Génération et manipulation de groupes cf. group-by de SQL Création du groupe : <xsl:for-each-groupe select="…" group-by="…">Plusieurs options possibles : group-by, group-

adjacent, group-starting-with, group-ending-with

Manipulation du groupe

Voir exemple "Feature 1"

Page 51: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Plusieurs formats de sortie Définition de plusieurs transformation

dans une seule feuille de style Permet de générer automatiquement

un fichier par sortie<xsl:result-document href="…"

format="…"> Voir exemple "Feature 2"

Page 52: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Création et manipulation de groupes Voir l'exemple "Feature 3"

Page 53: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Introduction des séquences Une séquence est une liste

d’objets qui peuvent être ordonnés et manipulés (objets XML, nombres, strings, …)

Cf exemple "Sequence and Space Separators in Element Content"

Page 54: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Création de fonctions "An xsl:function declaration

declares the name, parameters, and implementation of a stylesheet function that can be called from any XPath expression within the stylesheet."

extrait de la recommandation

Page 55: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Autres innovations Conversion possible de texte en

expressions régulières, Extension de Xpath par la

définition de nouvelles fonctions (écrites en C++, C#, Javascript, Java, Perl, … et XSLT!),

Page 56: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

Autres innovations (2) Déclaration de types conformes

aux schémas De nouvelles fonctions de

manipulation des dates et du temps

Cf exemple "Feature 5"

Page 57: XSL eXtensible Stylesheet Language Historique 1999: XSLT 1.0 et XPATH 1.0 : versions supportées par la plupart des outils depuis février 2007 XSLT 2.0

XSLT 2 Five XSLT 2.0 Features that Simplify XML

Document Transformations by Jinyu Wang http://www.oracle.com/technology/pub/articles/wang_xslt.html

La recommandation du W3Chttp://www.w3.org/TR/xslt20