1 XPath et XSLT Valeur C - Module Données et Services sur le Web Bernd Amann 2003/04 Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 3 Exemple: Document XML Document XML: / FILM TITRE Vertigo AUTEUR Hitchcock ANNEE 1958 RESUME Scotty... Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 2 Sélectionner des fragments XML Il faut souvent pouvoir sélectionner/extraire des fragments (noeuds) d’un document XML XPath. XPath est utilisé par XSLT pour sélectionner des règles de transformation XQuery pour l’interrogation de documents XML XML Schéma pour définir des clés/références XLink pour créer des liens entre noeuds XML Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 4 Exemple: Transformation en HTML Fragment HTML qu’on veut obtenir : p h1 i Vertigo i 1958 p Hitchcock h3 Résumé: Scotty... Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
23
Embed
Exemple: Document XML XPath et XSLT - [Cedric]cedric.cnam.fr/.../valeurc-xpath-xslt-4x.pdf9 Expressions XPath: Sémantique Une expression XPath: s’évalue en fonction d’un nœud
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
XPath et XSLT
Valeur C - Module Données et Services sur le Web
Bernd Amann
2003/04
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
3
Exemple: Document XML
Document XML:/
FILM
TITRE
Vertigo
AUTEUR
Hitchcock
ANNEE
1958
RESUME
Scotty...
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
2
Sélectionner des fragments XML
Il faut souvent pouvoir sélectionner/extraire des fragments (nœuds)d’un document XML � XPath.
XPath est utilisé par
� XSLT pour sélectionner des règles de transformation
� XQuery pour l’interrogation de documents XML
� XML Schéma pour définir des clés/références
� XLink pour créer des liens entre noeuds XML
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
4
Exemple: Transformation en HTML
Fragment HTML qu’on veut obtenir :p
h1
i
Vertigo
i
1958
p
Hitchcock
h3
Résumé: Scotty...
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
5
Exemple : Règle de transformation XSLT
/
FILM
TITRE
Vertigo
AUTEUR
Hitchcock
ANNEE
1958
RESUME
Scotty...
p
h1
i
*
i
*
p
*
h3
Résumé: *
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
7
Exemple : l’arbre DOM...
Document-
ElementEXEMPLE
Text-
Section littérale avec
SectionCDATA-
des ’&’, des ’ � ’ des ’ � ’
Text-
et un text
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
6
XPath: Le modèle
Le langage XPath permet de désigner un ou plusieurs nœuds dansun document XML, à l’aide d’expressions de chemins/d’arbres.
� XPath est fondé sur une représentation arborescente (DOM)du document XML
� Objectif : référencer nœuds (éléments, attributs,commentaires, ...) dans un document XML
� Un typage simplifié par rapport à celui de DOM � pasd’entités, pas de sections littérales
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
8
Puis l’arbre XPath...
Document-
ElementEXEMPLE
Text-
Section littérale avec des ’&’, des ’ � ’ des ’ � ’ et un texte
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
9
Expressions XPath : Sémantique
Une expression XPath :� s’évalue en fonction d’un nœud contexte
� désigne un ou plusieurs chemins dans l’arbre à partir dunœud contexte
� a pour résultat
– un ensemble de nœuds
– ou une valeur, numérique, booléenne ou alphanumérique
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
<TITRE>Alien</TITRE><AUTEUR>Ridley Scott</AUTEUR><ANNEE>1979</ANNEE><GENRE>Science-fiction</GENRE><PAYS>Etats Unis</PAYS><RESUME>Près d’un vaisseau spatial échoué sur une lointaine
planète, des Terriens en mission découvrent de bien étranges"oeufs". Ils en ramènent un à bord, ignorant qu’ils viennentd’introduire parmi eux un huitième passager particulièrementféroce et meurtrier.
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
65
Programmation XSLT
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
67
Principaux éléments de premier niveau
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
xsl:param Définit un paramètre
xsl:template Définit une règle XSLT
xsl:variable Définit une variable XSLT
Table 1:
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
66
Éléments XSLT (espace de noms XSLT)
On distingue :
� L’élement racine d’un programme : <xsl:stylesheet>.
� Les éléments de premier niveau, fils de <xsl:stylesheet>.
– Il s’agit essentiellement des règles (template)
� Les instructions : on les trouve dans le corps des règles.
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
68
Règles : définition et déclenchement
Une règle est définie par l’élément xsl:template.
Deux possibilités de définition (et de déclenchement) :
� L’attribut match est un pattern XPath définissant les « cibles »de la règle
Ex : xsl:template match=’FILM’
- déclenchement par xsl:apply-templatesselect=’...’
� L’attribut name donne un nom à la règle
Ex : xsl:template name=’TDM’
- déclenchement par xsl:call-template name=’...’
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
69
Sélection des règles par leur pattern
Problème : étant donné un nœud, comment trouver la règle quis’applique ?
� Soit � le nœud
� Soit � le pattern de la règle 4
� S’il existe quelque part un nœud � tel que l’évaluation de � àpartir de � contient � : la règle s’applique
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
71
Patterns : Axes autorisés
Seulement les axes suivants sont autorisés comme pattern desélection :
� Les fils d’un élément : child
� Les attributs d’un élément : attribute
� L’abréviation // de /descendant-or-self::node()/
Cette restriction garantit qu’on peut savoir si une règle doit êtredéclenchée pour un noeud � uniquement en regardant lesancêtres de � , ce qui diminue considérablement la compléxité dul’algorithme de séléction.
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
70
Exemple : la règle pour la racine
Au départ du processus de transformation :
� Le nœud-contexte � est la racine du document
� Il existe une règle 4 dont le pattern est « / »
� � en prenant n’importe quel nœud, l’évaluation de « / » est � ,donc la règle s’applique.
Il est donc bon (mais pas indispensable) d’avoir une règle avecpattern « / ».
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
72
Exemples de patterns
� /COURS/ENSEIGNANTS : la règle s’applique à tous les nœudsENSEIGNANTS fils d’un élément racine COURS
� //SEANCE[@ID=2] ; ... à tous les nœuds de type SEANCE
ayant un attribut ID valant 2
� /descendant::FILM[1] : ... au premier élément de typeFILM dans le document
� FILM[1] : ... aux premiers fils de type FILM (il peut y en avoirplusieurs!)
� /COURS[@CODE="TC234"] : ... aux cours avec le codeTC234
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
73
Règles par défaut
Quand aucune règle n’est sélectionnée, XSLT applique des règlespar défaut
Première règle pour les éléments et la racine du document.
<xsl:template match="* | /">
<xsl:apply-templates/>
</xsl:template>
� on demande l’application de règles pour les fils du nœudcourant.
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
75
Règle par défaut pour les autres types denœuds
Pour les instructions de traitement et les commentaires, on neproduit rien.
<xsl:template match="processing-instruction() |
comment()"/>
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
74
Règle par défaut pour les noeuds texte et lesattributs
Par défaut, on insère dans le document résultat la valeur du nœudText, ou de l’attribut.
<xsl:template match="text() | @*">
<xsl:value-of select="."/>
</xsl:template>
Cela suppose (surtout pour les attributs) d’avoir utilisé unxsl:apply-templates sélectionnant ces nœuds.
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
76
Conséquence
Si on se contente des règles par défaut, on obtient laconcaténation de nœuds de type Text.
NB : le programme n’affiche pas les attributs (pourquoi ?)
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
77
L’instruction xsl:apply-templates
Attributs : select, mode et priority.� select doit sélectionner un ensemble de nœuds. Ils
constituent le contexte d’évaluation
� pour chaque nœud on va chercher la règle à instancier.
� mode permet de choisir explicitement une des règles parmicelles qui sont candidates
� priority permet de définir une priorité pour que leprocesseur choisisse.
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
79
Exemple : filtre de certains nœuds
1 <?xml version="1.0" encoding="ISO-8859-1"?>2 <FILM>3 <TITRE>Vertigo</TITRE>4 <ANNEE>1958</ANNEE><GENRE>Drame</GENRE>5 <MES>Alfred Hitchcock</MES>6 <RESUME>Scottie Ferguson, ancien inspecteur de7 police, est sujet au vertige depuis qu’il a vu8 </RESUME>9 </FILM>
10 <FILM>11 <TITRE>Alien</TITRE>12 <ANNEE>1979</ANNEE><GENRE>Science-fiction</GENRE>13 <MES>Ridley Scott</MES>14 <RESUME>Près d’un vaisseau spatial échoué sur15 une lointaine planète, des Terriens en mission16 </RESUME>17 </FILM>
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
78
Sélection d’une règle
Que faire quand plusieurs règles sont candidates pour un mêmenœud ?
� il existe des priorités implicites qui permettent au processeurde choisir
� on peut aussi donner explicitement une priorité
� si le choix est impossible : le processeur s’arrête.
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
80
Le programme XSLT
Effacer les noeuds de type RESUME :
<xsl:template match="RESUME"/>
<xsl:template match="@*|node()" priority="-1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
81
Priorités implicites
Intuition : plus c’est « spécifique », plus c’est prioritaire� 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’attributont une priorité égale à -0,5 ( node(), *)
� Tous les autres ont une priorité de 0.5 (prédicats, plusieursétapes)
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
83
Exemple : création de liens HTML
On peut créer des ancres « internes » à un document.
<a name=’Alien’/>
On peut ensuite créer un lien vers cette ancre
<a href=’#Alien’>Lien vers le film Alien</A>
Objectif : une règles pour créer les liens, une autre pour créer lesancres.
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
82
Les modes
Raison d’être : un même nœud peut être traité plusieurs fois.Exemple :
� On parcourt tous les chapitres et sections pour produire unetable des matières.
� On les parcourt à nouveau pour publier le contenu.
Donc il faut des règles différentes s’appliquant aux même nœuds :on les distingue par le mode.
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann