Sie sind auf Seite 1von 15

2/10/2009

XSLT 1 Langages à base de


templates

Utilisation
• Transformation de documents
• Interopérabilité Java Server Pages
• Génération de documents, de code
• Réalisations d’éditeurs
• Environnements auteur

1
2/10/2009

JSP: génération de code Java


html xmlns:c="http://java.sun.com/jsp/jstl/core"
<

xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:jsp="http://java.sun.com/JSP/Page">

<head><title>Hello</title></head>
<body bgcolor="white">
<img src="duke.waving.gif" />
Template
<h2>My name is Duke. What is yours?</h2>
<form method="get">
<input type="text" name="username" size="25" />
Java Emitter Templates
<p></p>
<input type="submit" value="Submit" />
<input type="reset" value="Reset" />
</form>
(Eclipse)
<jsp:useBean id="userNameBean" class="hello.UserNameBean" scope="request"/>
<jsp:setProperty name="userNameBean" property="name“
value="${param.username}"/>
<c:if test="${fn:length(userNameBean.name) > 0}" >
<jsp:directive.include="response.jsp" />
</c:if>
</body>
</html>

JET StringTemplates
• Syntax à la JSP <!-- homepage.st-->
<html>
• Generation de SQL, XML, Java source <head>
<title>$title$</title>

• Navigation des modèles en utilisant des </head>


<body>
expressions XPath <p>Hello again, $name$\!</p>

• http://www.eclipse.org/articles/Article-
</body>
</html>
JET/jet_tutorial1.html

2
2/10/2009

StringTemplates
import org.antlr.stringtemplate.*;
import org.antlr.stringtemplate.language.*;

….

StringTemplate helloAgain = group.getInstanceOf("homepage"); XSLT


helloAgain.setAttribute("title", "Welcome To StringTemplate");
helloAgain.setAttribute("name", "World");

System.out.println(helloAgain.toString());

XML et
XSL: évolution
les transformations
XSL

(graphique de précision, e.g., PDF)


• XML est sans objet si l’on n’a pas un
langage de transformation
XSLT XSL-FO
• XSLT rend XML utile pour les non-
programmeurs
XML
Schemas
XQuery

XPath XSLT
XLink/
XPointer

3
2/10/2009

Moteur XSLT WEB & XSLT


XSL

Xalan(apache)
XML Saxon(M.Kay) XML ou texte
XT(James Clark)
XSLT Processor

Du plus structuré vers le moins structuré

XSLT & Java

Principes

4
2/10/2009

Schema XSLT Modèle objet


Idem XPATH: 7 types de nœuds
<grammar xmlns="http://relaxng.org/ns/structure/1.0" Root
ns="http://www.w3.org/1999/XSL/Transform"> Element
<start> Text
<choice> Attribute
<ref name="stylesheet.element" />
<ref name="transform.element" /> Namespace
<ref name="literal-result-element-as-stylesheet" /> Processing instruction
</choice> Comment
</start>
… + 60 définitions

Utilisation de XPATH
Dynamique

5
2/10/2009

Liste de templates
(pas d’ordre)
Exemple Exemple de règle
<?xml version=”1.0”?> <xsl:template match="FILM">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <html>
<head>
<xsl:template match=”/”> <title>Film:
[action] <xsl:value-of select=“child::TITRE"/>
/ </title>
</xsl:template>
</head> Contexte FILM
<xsl:template match=”film”> <body>
[action] film Le genre du film, c’est
</xsl:template> <b><xsl:value-of select=“child::GENRE"/></b>
... </body>
</xsl:stylesheet> </html>
</xsl:template>

Exemple: contexte Template

6
2/10/2009

Context & XPath Contexte & xpath


<xsl:template match="SALLE">
<h2>
Salle No <xsl:value-of select="@NO"/>
</h2>
<h3>
Film: <xsl:value-of select="FILM/TITRE"/>
</h3>
de <xsl:value-of select="FILM/TITRE"/>
<ol>
<xsl:for-each select="SEANCES/SEANCE">
<li> <xsl:value-of select="."/> </li>
</xsl:for-each>
</ol>
</xsl:template>

Fragments
Fragments et
Récursioin

7
2/10/2009

Fragments & Récursion Fragments & Récursion

Fragments & Récursion Fragments & Récursion

8
2/10/2009

Fragments & Récursion Récursion Infinie


<xsl:stylesheet xmlns:p="pays">

<xsl:template match="p:capital">
<xsl:copy>
<xsl:apply-templates select="/"/>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

Elements de niveau 1
Type d’élément Description
xsl:import Import d’un programme XSLT
xsl:include Inclusion d’un programme XSLT
xsl:output Indique le format de sortie XSLT
xsl:param Définit un paramètre (processeur)
Langage push-pull
xsl:template Définit une règle XSLT
xsl:variable Définit une variable XSLT
xsl:preserve-space Espace blanc préservés
xsl:strip-space Espace blanc enlevés

9
2/10/2009

Aperçu
Templates et Navigation
<?xml version=”1.0”?>
<xsl:stylesheet>

• Transformation push et pull entre


<xsl:template match=”/”>
....
[action] location path avec axes child ou attribute

• Structure source en XML .... seulement + location steps séparés par / ou


</xsl:template> //
<xsl:template match=”auteur”>

• Structure de sortie en XML dans la ....


....
<xsl:value-of select="/book/chapter/title"/>

[action]
mesure du possible ... <xsl:apply-templates select="titre"/>
string expression
(xpath)

• Structure de navigation sur le document </xsl:template>

<xsl:template match=”titre”>
nodeSet
expression (xpath)
source ....
[action]
...
</xsl:template>
...
</xsl:stylesheet>

Aperçu
3 éléments de base dont les attributs sont
des expressions xpath d’un type précis

• <xsl:template match=”pattern”> PUSH


• <xsl:appply-templates select=”node-set-
expression”>
• <xsl:value-of select=”string-
expression”>

10
2/10/2009

Transformations push
TransformationsPush Où?
<xsl:template match=”pattern”/>
A base de règles d’exécution (templates)
Structure de sortie dépendante de la structure Quoi?
location path:
d’entrée ce que l’on veut! axes child et attribute
location step: / ou //
Pour la transformation de documents <xsl:template match=”auteur//name/age”>
<html>
<head>
<title> transfo xslt </title>
</head>
......
</xsl:template>

Transformations pull
Où? Dans les règles
<xsl:template match=”...”/>

PULL Quoi? texte (ou noeuds ...)


texte <xsl:value-of-select=”...”/>
string expression (xpath)
<xsl:template match=”book//auteur[1]”>
<xsl:value-of select="/book/chapter/title"/>
</xsl:template>

rappel xpath: si nodeSet, valeur


du premier noeud

11
2/10/2009

Transformations Pull Démarrage


Au départ du processus de
Basée sur des templates-patterns (règles avec transformation:
désignation de noeuds du document source)
• Le noeud-contexte N est la racine du
Structure de sortie indépendante de la structure document.
d’entrée
• Il existe une règle R dont le pattern
Pour transformer des données est « / »
Idem Java Server Pages (JSP), ...
• en prenant n’importe quel noeud,
l’évaluation de « / » est N , donc la règle
s’applique.

xsl:template
<xsl:template match=”pattern” name=”qname”
priority=”number” mode=”qname”>
Règles (TEMPLATES) <!-- result fragments and instructions -->
<xsl:template>

name: nom du template servant pour un appel explicite par:

<xsl:call-template name=”qname”/>

12
2/10/2009

Pattern Patterns
<xsl:template match=”pattern”> Location path limité aux axes suivants :
<!-- result fragments and instructions -->
<xsl:template>
• Les fils d’un élément : child
• Les attributs d’un élément : attribute
Pattern:
. union de location path • L’abréviation // de descendant-or-self::node()/
. location steps séparés par les opérateurs / ou // Pourquoi ? Parce qu’on peut savoir si une
. axe child et attribute seulement dans les location steps règle doit être déclenchée uniquement en
regardant les ancêtres du noeud contexte
Un pattern matche un noeud ssi:
. partant d’un certain noeud dans l’arbre
. le noeud donné est inclus dnas le node-set résultat

Patterns: exemples Sélection des règles


• /film/titre Problème : étant donné un noeud,
• //seance[@id=2] Comment trouver la règle qui s’applique ?
Soit N le noeud
• salle[position()=2] tout noeud qui est le Soit le P pattern de la règle R
deuxième fils de nom salle de son père
S’il existe quelque part un noeud C tel que
• /film/@code[.=”F234”] L’attribut de nom l’évaluation de P à partir de C contient N :
alors la règle s’applique
code ayant pour parent l’élément racine
films et de valeur F234

13
2/10/2009

xsl:apply-template
<xsl:apply-templates select=“node-set-expression”
mode=”qname”>
<!-- Content: (xslt:sort | xsl:with-param)* -->
</xsl:apply-templates>
Navigation Exemples
<xsl:template match="member">
<xsl:apply-templates select="name"/>
<xsl:apply-templates select="phone[@type='work']"/>
</xsl:template>

<xsl:template match="Member">
<xsl:apply-templates select="*"/>
</xsl:template>

Règles par défaut Règles par défaut


<xsl:template match=”*|/”>
• Si on se contente des règles par défaut, on
obtient la concaténation de noeuds de type
<xsl:apply-templates/>
Text.
<xsl:template>
feuille minimale :
<xsl:template match=”text()|/@*”>
<xsl:value-of select=”.”/> <xsl:stylesheet
Copie de la valeur
<xsl:template> version="1.0"xmlns:xsl="http://www.w3.org/1
999/XSL/Transform">
<xsl:template match=”processing-instruction() |
</xsl:stylesheet>
comment()”/> Ne rien faire

14
2/10/2009

Navigation Priorité des règles


• Un parcours implicite du document Priorité d’importation (xsl:import):
existe:(parcours dit de la plus profonde . La feuille qui importe est prioritaire
descente)
• On “contre” ce parcours par des
Si plusieurs règles:
. on utilise l’attribut priority de <xsl:template>
éléments <xsl:apply-templates
select=”...”/> Priorité par défaut basée sur la selectivité du pattern

• Méchanisme de priorité des règles Erreur si il reste plusieurs règles de priorité égale

Priorités Selectivité du pattern


• Priorité 0 : les patterns constitués d’une
seule étape XPath, avec un nom d’élément
ou d’attribut et sans prédicat
• Priorité -0.5 les filtres autres qu’un nom
d’élément ou d’attribut ont une priorité égale
à -0,5 ( node(), *)
• Tous les autres ont une priorité de
0.5(prédicats, plusieurs étapes)

15

Das könnte Ihnen auch gefallen