Upload
philippe-collin
View
105
Download
1
Embed Size (px)
Citation preview
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 et XPATH 2.0 : nouvelles
recommandations du W3C XSLT 2.0 est plus simple et le
traitement associé plus efficace
XSL : principe général
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
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)
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
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, …)
<…>
</…>
<…>
</…>
<…></…>
Réorganiser
<…>
</…>
<…>
</…>
<…></…>
<…></…>
<…>
</…>
<…></…>
Présenter
Document pdf
Document html
Document XML
Document XML
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.
Ou du XML vers ??? On peut directement générer du
HTML. ou un document dans un langage
ad-hoc.
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.
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
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
XPATH : introduction
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
XPATH
Extrait de http://www.commentcamarche.net/xml/xmlxslt.php3
personne d'un noeud
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.
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'
XSL : algorithme d'application des règles
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
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é
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.
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)
XSL : instructions principales
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
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.
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
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.
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.
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
xsl:apply-templates (suite)
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>
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>
mode : exemple
XSL : des fonctions
Principales fonctions
xsl:element xsl:attribute xsl:number xsl:sort xsl:node …
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>
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>
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
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)
Des tests
xsl:if <xsl:choose>
<xsl:when test="expr1">…</xsl:when><xsl:otherwise>…</xsl:otherwise>
</xsl:choose>(cf. exemple notation)
Des boucles
<xsl:for-each select="expr"> … </xsl:for-each>
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
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.
generate-id() : exemple
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"
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"
Création et manipulation de groupes Voir l'exemple "Feature 3"
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"
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
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!),
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"
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