23
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

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

  • Upload
    lamdat

  • View
    229

  • Download
    0

Embed Size (px)

Citation preview

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

11

Étapes XPath

Une étape a trois types de composants :

�� � � � �� �� � � � �� � � � � � ... � �� � � � � � �

Exemple :

� ��� �� ��� � �� ::

� ��� ��� �� ��� � [

! ��" �#$ �� �� �

%& � � � %' ()+* , ]

� L’axe (optionnel) recouvre les deux notions suivantes :

– un sous-ensemble des nœuds de l’arbre relatif au nœudcontexte ;

– l’ordre de parcours de ces nœuds

� Le filtre (obligatoire) définit le type des nœuds/noms deséléments qui seront retenus

� Le(s) prédicat(s) (optionnels) doivent être satisfaites par lesnœuds retenus.

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

10

Expressions XPath : Syntaxe

Un chemin XPath est une suite d’étapes :

[/]étape /étape - /.../étape �

Deux variantes : Un chemin peut être

� absolu :

. $ # � � �� �� �/

0 � $ 1�� �� ��� � �� � � �� � 2 � 1$ �$ � �3 �� �� �

/

0 � $ 1�� �� �� � � �� � � 45 67 5

Le nœud contexte est la racine du document.

� relatif :

0 � $ 1�� � � ��� � �� � � 45 67 52 � 1$ �$ � �3 �� �� �

/

0 � $ 1�� �� ��� � �� � � � �� � ( )

Le nœud contexte est un nœud dans le document (pasforcément la racine).

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

12

Document XML avec un nœud contexte

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

13

child::D ou D

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

Nœud contexte

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

15

parent::A

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

Nœud contexte

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

14

attribute::att1 ou @att1

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

Nœud contexte

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

16

descendant::node()

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

Nœud contexte

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

17

ancestor::node()

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

Nœud contexte

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

19

following::node()

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

Nœud contexte

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

18

preceding-sibling::node()

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

Nœud contexte

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

20

Autres axes et axe/étape par défaut

� Autres axes:

– preceding : les précédents (dans l’ordre du document)

– descendant-or-self : les descendants, plus le nœudcontexte

– ancestor-or-self : les ancêtres, plus le nœud contexte

� L’axe par défaut est child : /A correspond à /child::A

� L’étape par défaut est descendant-or-self::node() :A//B exprimechild::A/descendant-or-self::node()/child::B

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

21

Filtres

Deux manières de filtrer les nœuds :� par leur nom : possible pour les types de nœuds : Element,

ProcessingInstruction et Attr (qui ont un nom)

� par leur type DOM :

– * : nœuds de type Element ou Attribute

– text() : nœuds de type Text

– comment() : nœuds de type Comment

– processing-instruction() : nœuds de typeProcessingInstruction

Exemple : /processing-instruction(), ou/processing-instruction(’java’)

– node() recouvre tous les types de nœud

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

23

//@att2

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

22

/A/B/D

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

24

Nom générique : /A/*

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

25

/descendant::text()

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

27

Notation abrégée de parent::node()

� La notation abrégée “..” désigne le père du nœud contexte,quel que soit son type.

� L’expression “..” est équivalent à parent::node() (le filtrenode() désigne tous les types de nœuds sauf les attributs).

� L’expression “.” désigne le nœud contexte lui-même (surtoututile dans les prédicats).

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

26

/comment()

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

28

Prédicats

� Prédicat : expression booléenne constituée d’un ou plusieurstests, composés avec les connecteurs logiques habituels andet or

� Test :

– toute expression XPath, dont le résultat est convertie enbooléen;

– une comparaison, un appel de fonction.

� il faut connaître les règles de conversion

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

29

Pour bien comprendre

Dans l’expression /A/B[@att1] :� On s’intéresse aux nœuds de type B fils de l’élément racine A.

� Parmi ces nœuds on ne prend que ceux pour lesquels leprédicat [@att1] s’évalue à true

� Cette expression s’évalue avec pour nœud contexte unélément B

� [@att1] vaut true ssi @att1 renvoie un ensemble denœuds non vide

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

31

Contexte d’évaluation

Une étape s’évalue en tenant compte d’un contexte constitué de

� un nœud contexte, position initiale du chemin ;

� ce nœud fait lui-même partie d’un ensemble obtenu parévaluation de l’étape précédente

– on connaît la taille de cet ensemble (fonction last())

– on connaît la position du nœud contexte dans cetensemble (fonction position())

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

30

Quelques exemples

/A/B[@att1] : les nœuds /A/B qui ont un attribut @att1

/A/B[@att1=’a1’] : les nœuds /A/B qui ont un attribut @att1valant ’a1’

/A/B/descendant::text()[position()=1] : le premiernœud de type Text descendant d’un /A/B.

/A/B/descendant::text()[1] : idem

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

32

/A/B/descendant::text()[1]

Document-

InstructionJava

ins1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

33

Les types XPath

On peut effectuer des comparaisons, des opérations. Celaimplique un typage et des conversions de type.

Les types XPath sont :

� les numériques

� les chaînes de caractères

� les booléens (true et false)

� enfin les ensembles de nœuds

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

35

Conversions de types

Deux conversions sont toujours possibles.

� Vers une chaîne de caractères.

– utile pour la production de texte en XSLT (balisexsl:value-of)

� Vers un booléen

– utile pour les tests effectués dans XSLT (xsl:if,xsl:when)

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

34

Numériques

Notation décimale habituelle

� Comparaisons habituelles (<, >, !=)

� Opérations : +, -, *, div, mod

� La fonction number () permet de tenter une conversion

� Si la conversion échoue on obtient NaN (Not a Number ). Àéviter...

Ex : //node()[number(@att1) mod 2=1]

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

36

Conversions booléennes

� Pour les numériques : 0 ou NaN sont false, tout le reste esttrue

� Pour les chaînes : une chaîne vide est false, tout le resteest true

� Pour les ensembles de nœuds : un ensemble vide estfalse, tout le reste est true

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

37

Les fonctions XPath

Quelques fonctions utiles :� concat(chaîne1, chaîne2, ...) pour concaténer des chaînes

� contains(chaîne1, chaîne2) teste si chaîne1 contient chaîne2

� count (expression) renvoie le nombre de nœuds désignés parexpression

� name() renvoie le nom du nœud contexte

� not(expression) : négation

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

39

�� �� � et sélection par valeur

Test du nombre d’occurrences :

� CINEMA[count(SEANCE) > 1]: cinémas avec au moins 2séances

� FILM[count(ACTEUR) = 0]: films sans acteur

� FILM[not(ACTEUR)]: films sans acteur

Sélection par valeur:

� FILM[not(ACTEUR[NOM=’Willis’])]: films sans BruceWillis

� FILM[ACTEUR/NOM=’Willis’]: films avec Bruce Willis

� FILM[ACTEUR[NOM=’Willis’]]: idem

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

38

Prédicats: Axes d’avancements et inverses

La position d’un nœud dépend de l’axe choisi:

Axes « d’avancement » :

� child::*[3]: le 3e enfant

� child::*[position()=3]: idem

� child::*[last()]: le dernier enfant

� descendant::*[last()]: le dernier descendant

Axes « inverses » :

� ancestor::*[1]: le premier ancêtre du nœud contexte(dernier dans l’ordre du document).

� preceding-sibling::*[last()]: le dernier frère quiprécède le nœud contexte (premier dans l’ordre du document).

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

40

Prédicats plus complexes

Test sur la structure : chemins imbriqués avec connecteurs logiques

(qualifiers)

� ACTEUR[NOM and DATENAISSANCE] ouACTEUR[NOM][DATENAISSANCE]: les acteurs avec un nom et une

date de naissance

� FILM[@TITRE = ’Brazil’ and ACTEUR/NOM = ’De Niro’]:

le film Brazil avec l’acteur De Niro

� FILM[@TITRE = ’Brazil’][ACTEUR/NOM = ’De Niro’]:

idem

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

41

XPath : Résumé

XPath est un langage pour extraire des noeuds dans un arbreXML :

� On navigue dans l’arbre grâce à des axes de navigation.

� Un chemin de navigation est une séquence d’étapes.

� Dans chaque étape on choisi un axe, un filtre etéventuellement des prédicats.

� Le résultat d’une étape (d’une séquence d’étapes) est unséquence de noeuds.

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

43

Sommaire

Une introduction à XSLT, destinée à comprendre les mécanismesdu langage.

� Règles XSLT

� Désignation de fragments XML

� Appels de règles

� Application : XML - � HTML et XML - � WML

� Passage de paramètres

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

42

Introduction à XSLT

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

44

XSLT, où, quand, comment

»>Logbook error: File ’FIGURES/ArchiXSLT’ does not exist!

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

45

Exemple : La fiche du film Gladiator

La fiche du film peut être publiée

� en HTML pour Netscape/IE

� en WML pour le portables WAP

� en SMIL pour Realplayer

� dans un moteur de recherche SallesEnLigne.com

L’information ?

� c’est la même, sous des formes différentes

� elle est échangée entre plusieurs acteurs

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

47

Fonctions d’un programme XSLT

Transformation d’arbres XML:

� extraction de données

� génération de texte

� suppression de contenu (noeuds)

� déplacer contenu (noeuds)

� dupliquer contenu (noeuds)

� trier

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

46

Qu’est-ce qu’on peut faire avec XSLT?

Transformer un document XML en

� un ou plusieurs documents XML, HTML, WML, SMIL

� document papier: PDF (XSL-FO), LaTeX

� texte simple

arbreDOM

ProcesseurXSLT

arbrerésultat

Document XSLTDocument XML

AnalyseSérialisation

Document résultat

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

48

Exemple: Règle de transformation

XSLT utilise XPath pour sélectionner la règle à appliquer et lesfragments à afficher ou transformer :<xsl:template match="FILM">

<p><h1>

<i><xsl:value-of select="TITRE"/></i>

</p><i>

<xsl:value-of select="ANNEE"/></i><p>

<xsl:value-of select="AUTEUR"/></p><h3>Résumé:

<xsl:value-of select="RESUME"/></h3>

</p></xsl:template>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

49

XSLT et XPath

/

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

51

Fonctionnalités XSLT

Génération d’un arbre XML:

<xsl:template match="FILM">

<body>

<p>Un paragraphe</p>

</body

</xsl:template>

Génération d’arbre avec extraction :<xsl:template match="FILM">

<body><p>Titre:

<xsl:value-of select="TITRE"/></p>

</body></xsl:template>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

50

Fonctionnalités XSLT

Extraction de données:

<xsl:template match="FILM">

<xsl:value-of select="TITRE"/>

</xsl:template>

Génération de texte:

<xsl:template match="FILM">

Ceci est le texte produit par

application de cette règle.

</xsl:template>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

52

Structure de base : les règles

Règle = template : élément de base pour produire le résultat

� une règle s’applique dans le contexte d’un nœud de l’arbre

� l’application de la règle produit un fragment du résultat.

Programme XSLT = ensemble de règles pour construire un résultat

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

53

Chemins complexes

Dans une règle, on peut :

� accéder aux fils, aux descendants, au parent, aux frères, auxneveux, aux attributs, ... du noeud à transformer (XPath).

� effectuer des tests et des boucles, etc...

� “appeler” d’autres règles (récursion)

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

55

Exemple de boucle: Traduction de Salle

<xsl:template match="SALLE">

<h2>Salle No

<xsl:value-of select="@NO"/></h2>

Film: <xsl:value-of select="FILM/TITRE"/>

de <xsl:value-of select="FILM/AUTEUR"/>

<ol>

<xsl:for-each select="SEANCES/SEANCE">

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

</xsl:for-each>

</ol>

</xsl:template>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

54

Exemple: Document XML

<?xml version="1.0" encoding="ISO-8859-1"?>

<?xml-stylesheet href="Salle.xsl" type="text/xsl"?><?cocoon-process type="xslt"?><SALLE NO=’1’ PLACES=’320’><FILM>

<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.

</RESUME></FILM><REMARQUE>Réservation conseillée</REMARQUE><SEANCES>

<SEANCE>15:00</SEANCE><SEANCE>18:00</SEANCE><SEANCE>21:00</SEANCE>

</SEANCES></SALLE>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

56

Le résultat

Appliqué à Salle1.xml :

<h2>Salle No 1 </h2>Film: Aliende Ridley Scott<ol>

<li> 15:00</li><li> 18:00</li><li> 21:00</li>

</ol>

NB : c’est un fragment HTML, à intégrer dans un documentcomplet.

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

57

Salles et séances

15:00 18:00 21:00

Réservationconseilléevaisseau spatial...

PLACES=320

Contexte d’application de la règle

chemin "FILM/TITRE"

chemin "@NO"

"REMARQUE"

chemin

chemin

SEANCES/SEANCE

bouclefor−each

AUTEUR ANNEE GENRE PAYS RESUME

FILM

SALLE

SEANCES

SEANCE SEANCE SEANCE

REMARQUE

USAAlien Scott Science−Fiction 1979 Près d’un

TITRE

NO=2

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

59

Exemple : L’Épée de bois

« Cadre » HTML, puis appel de la règle CINEMA

<xsl:template match="/">

<html>

<head><title>Programme de

<xsl:value-of select="CINEMA/NOM"/>

</title>

</head>

<body bgcolor="white">

<xsl:apply-templates select="CINEMA"/>

</body>

</html>

</xsl:template>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

58

Appels de règles

En général on produit un résultat en combinant plusieurs règles :

� La règle initiale s’applique à la racine du document traité (’/’)

� On produit alors le cadre du document HTML

� On appelle d’autres règles pour compléter la création durésultat

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

60

Règle CINEMA

Exploitation de l’élément CINEMA, puis appel à la règle SALLE

<xsl:template match="CINEMA"><h1><i>

<xsl:value-of select="NOM"/></i></h1><hr/>

<xsl:value-of select="ADRESSE"/>,<i>Métro: </i>

<xsl:value-of select="METRO"/><hr/>

<xsl:apply-templates select="SALLE"/>

</xsl:template>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

61

Vue d’ensemble

Règle "/"

Règle "CINEMA"Règle "SALLE"

html

head

h1

i

hr adresse p

h2 h3

Salle No 2 Film : VertigoFilm: Alien

p

Salle No 1

h2 h3

body

title

Epée de bois

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

63

Le document XML

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE MOTEUR [<!ENTITY EpeeDeBois

SYSTEM "http://epee-de-bois.fr/EDB.xml"><!ENTITY CineMarseille

SYSTEM "http://cine-marseille.fr/CM.xml">]><MOTEUR>

<CINEMA>&EpeeDeBois;

</CINEMA><CINEMA>

&CineMarseille;</CINEMA>

</MOTEUR>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

62

XSLT avec paramètres

1 <html>

2 <head>

3 <title>Formulaire de Recherche</title>

4 </head>

5 <body bgcolor="white">

6 <h1>Formulaire de Recherche</h1>

7 <form method=’get’ action=’Moteur.xml’

8 name=’Form’>

9 Film: <input type=’text’ name=’titre’> <br>

10 Séance: <input type=’text’ NAME=’seance’ >

11 (hh:mm)<br>

12 Ville: <input type=’text’ name=’ville’><br>

13 <input type=’submit’ name=’chercher’

14 value="Chercher"/>

15 </form>

16 </body>

17 </html>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

64

Traitement des paramètres

<xsl:param name="titre"/><xsl:param name="seance"/><xsl:param name="ville"/>

<xsl:template match="MOTEUR"><xsl:for-each select="CINEMA">

<xsl:if test="CINEMA//TITRE = $titre) andCINEMA//HEURE &gt;= $seance) andCINEMA/VILLE = $ville)">

<xsl:apply-templates select="." /><p/></xsl:if>

</xsl:for-each></xsl:template>

Démo : SallesEnLigne.com

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.

Programme minimal :

1 <?xml version="1.0" encoding="ISO-8859-1"?>23 <xsl:stylesheet version="1.0"4 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">5 </xsl:stylesheet>

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

84

Les deux règles

1 <xsl:template match="FILM" mode="Ancres">2 <a href="#{TITRE}">3 <xsl:value-of select="TITRE"/>4 </a>5 </xsl:template>67 <xsl:template match="FILM">8 <a name="{TITRE}"/>9 <h1><xsl:value-of select="TITRE"/></h1>

10 <b><xsl:value-of select="TITRE"/>,</b>11 <xsl:value-of select="GENRE"/>12 <br/>13 <b>Réalisateur</b> :14 <xsl:value-of select="MES"/>15 </xsl:template>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

85

L’appel des règles

Résultat1 <xsl:template match="FILMS">2 <html>3 <head><title>Liste des films</title></head>4 <body bgcolor="white">56 <xsl:apply-templates select="FILM"7 mode ="Ancres"/>89 <xsl:apply-templates select="FILM"/>

10 </body>11 </html>12 </xsl:template>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

87

Jointures intra-document

Deux types d’éléments :

� FILM avec un attribut @MES (référence vers le metteur enscène)

� ARTISTE avec un attribut @ARTID (identificateur)

<xsl:template match="FILM">

Titre:

<xsl:value-of select="TITRE"/>

Metteur en scène:

<xsl:value-of select="//ARTISTE

[@ARTID=current()/@MES]/NOM"/>

</li>

</xsl:template>

Pourquoi on a besoin de la fonction current()?

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

86

Résumé : sélection d’une règle

Soit un xsl:apply-templates, et � un des nœud sélectionnés.

� On ne prend que les règles avec le même mode quexsl:apply-templates

� On teste le pattern pour savoir si le nœud satisfait la règle.

� On prend celle qui a la plus grande priorité.

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

88

Jointures inter-document

Deux documents :

� Films.xml : FILM avec un attribut @MES (référence vers lemetteur en scène)

� Artistes.xml : ARTISTE avec un attribut @ARTID(identificateur)

<xsl:template match="FILM">

Titre:

<xsl:value-of select="TITRE"/>

Metteur en scène:

<xsl:value-of select="document(’Artistes.xml’)//ARTISTE

[@ARTID=current()/@MES]/NOM"/>

</li>

</xsl:template>

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

89

Conclusion sur XSLT

Un langage totalement adapté au traitement de documents XML� Parcours d’un document, vu comme un arbre

� Déclenchement de règles sur certains nœuds

� Association de plusieurs programmes à un même document

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann

90

Bibliographie sur XSLT

1. Recommendation XSLT sur le site du W3C

2. B. Amann et P. Rigaux, Comprendre XSLT, O’Reillyhttp://cortes.cnam.fr:8080/XSLT

3. P. Wadler, A formal semantics of patterns in XSLT

Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann