xsl extensible stylesheet language historique 1999: xslt 1.0 et xpath 1.0 : versions supportées par...

Post on 04-Apr-2015

105 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related