Sie sind auf Seite 1von 80

La technologie XML

Bernd Amann
amann@cnam.fr

Cnam

La technologie XML / B. Amann et P. Rigaux p.1/159

Objectifs du Cours
Mieux comprendre lutilisation de la technologie XML pour la gestion des donnes sur le Web : Reprsentation de donnes avec XML Interrogation avec XPath Transformation avec XSLT Stockage de documents/donnes XML

La technologie XML / B. Amann et P. Rigaux p.2/159

Introduction XML

Introduction XML - B. Amann p.3/159

Pourquoi XML?
Une prsentation, base sur une tude de cas, des apports de XML :

XML, format universel

Publication avec XSLT

change et intgration de donnes

XML et bases de donnes

Les questions : XML, cest quoi, et pour quoi faire?

Introduction XML - B. Amann p.4/159

Une tude de cas


LOfciel des spectacles ! On a des cinmas qui veulent

diffuser leur programme (salles, sances) sur le Web, sur le WAP, sur des tracts et des afches...

inclure des informations sur des lms provenant dune base de donnes MySQL,

approvisionner un moteur de recherche pour chercher des sances, des lms, des horaires...

Introduction XML - B. Amann p.5/159

Echanges et publication des donnes


Les salles Les horaires Les films

Les donnes (en XML)

Echange

Moteur de recherche

Site web (HTML)

Publication

Document papier (XSLFO)

Site Wap (WML)

Introduction XML - B. Amann p.6/159

Larchitecture du site
Requtes HTTP 80 Apache 8080 Transfert requtes Servlets Cocoon Programmes CGI Scripts PHP Pages HTML Doc. XML Pages JSP Tomcat Servlet A

Introduction XML - B. Amann p.7/159

La che du lm Gladiator
La che du lm peut tre publie

en HTML pour Netscape/IE

en WML pour le portables WAP

en SMIL pour Realplayer

dans un moteur de recherche SallesEnLigne.com cest la mme, sous des formes diffrentes

Linformation ? elle est change entre plusieurs acteurs

Introduction XML - B. Amann p.8/159

Les solutions XML ?

Format universel : reprsentation en chane de caractres dun contenu structur indpendant de toute application

Publier linformation outils de transformation simples pour convertir un contenu XML


changer et intgrer linformation assembler des contenus XML, ou au contraire en extraire des informations

Introduction XML - B. Amann p.9/159

Pourquoi pas HTML ?


Actuellement, le principal format du Web est HTML:

HTML est un langage pour prsenter des informations lcran. il ne permet pas dchanger des donnes il ne permet pas un traitement des donnes autre que lafchage

On ne sait pas interprter des donnes fournies en HTML.

Introduction XML - B. Amann p.10/159

XML, cest quoi ?


XML = rendre un contenu accessible toute application. Le contenu : LEpe de bois, 100 rue Mouffetard, mtro Censier-Daubenton Le mme, en XML : <?xml version="1.0" encoding="ISO-8859-1"?> <CINEMA><NOM>Epe de Bois</NOM><ADRESSE>100, rue Mouffetard</ADRESSE><METRO> Censier-Daubenton</METRO></CINEMA>

Introduction XML - B. Amann p.11/159

Le mme, mieux prsent


Prsentation courante : avec indentation <?xml version="1.0" encoding="ISO-8859-1"?> <CINEMA> <NOM> Epe de Bois </NOM> <ADRESSE> 100, rue Mouffetard </ADRESSE> <METRO> Censier-Daubenton </METRO> </CINEMA> NB : il y a des espaces et des sauts de ligne

Introduction XML - B. Amann p.12/159

Encore mieux : sous forme darbre


CINEMA

NOM

ADRESSE

METRO

pe de bois

100, rue Mouffetard

Censier-Daubenton

Traiter un document XML = extraire des informations dun arbre.

Introduction XML - B. Amann p.13/159

Un exemple plus complet, avec attributs


<?xml version="1.0" encoding="ISO-8859-1"?> <CINEMA> <NOM>Epe de bois</NOM> <ADRESSE>100, rue Mouffetard</ADRESSE> <METRO>Censier-Daubenton</METRO> <SALLE NO=1 PLACES=320> <TITRE>Alien</TITRE> <REMARQUE>Reservation conseille</REMARQUE> <SEANCES> <SEANCE>15:00</SEANCE> <SEANCE>18:00</SEANCE> <SEANCE>21:00</SEANCE> </SEANCES> </SALLE> </CINEMA>

Introduction XML - B. Amann p.14/159

Sous forme darbre


CINEMA

NOM Epe de bois

ADRESSE 100, rue Mouffetard

METRO Censier

SALLE

NO=1 PLACES=320

SALLE

NO=2 PLACES=120

TITRE Alien

REMARQUE Rservation conseille

SEANCES

TITRE Vertigo

SEANCES

SEANCE 15:00

SEANCE 18:00

SEANCE 21:00

SEANCE 22:00

Introduction XML - B. Amann p.15/159

Documents XML
Un document XML est

une reprsentation alphanumrique

de donnes (semi-)structures

provenant dun ou de plusieurs chiers et/ou dun message et/ou dune base de donnes...

Introduction XML - B. Amann p.16/159

Origine dun document XML


XML permet dintgrer des contenus provenant dorigines diverses

dun diteur de texte

dun site Web

dune base de donnes

dun chier...

Encore la mme ide : rendre le contenu indpendant de lapplication

Introduction XML - B. Amann p.17/159

Exemple dIntgration
<?xml version="1.0" encoding="ISO-8859-1"?> <SALLE NO=2 PLACES=120> <FILM> <TITRE>Vertigo</TITRE> <AUTEUR>Alfred Hitchcock</AUTEUR> <ANNEE>1958</ANNEE> <GENRE>Drame</GENRE> <PAYS>Etats Unis</PAYS> <RESUME>Scottie Ferguson, ancien inspecteur de police, est sujet au vertige depuis quil a vu mourir son collgue.... </RESUME> </FILM> <SEANCES> <SEANCE>22:00</SEANCE> </SEANCES> </SALLE>

Introduction XML - B. Amann p.18/159

Sous forme darbre


Salle2.xml:/ NO=2 PLACES=120

SALLE

FILM

SEANCES

TITRE

AUTEUR

ANNEE

GENRE

PAYS

RESUME SEANCE

Vertigo

Hitchcock

1958

1958

USA

Scotty... 22:00

Introduction XML - B. Amann p.19/159

Le cinma : intgration des salles


<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE CINEMA [ <!ENTITY salle1 SYSTEM "Salle1.xml"> <!ENTITY salle2 SYSTEM "Salle2.xml"> ]> <CINEMA> <NOM>Epe de bois</NOM> <ADRESSE>100, rue Mouffetard</ADRESSE> <METRO>Censier-Daubenton</METRO> &salle1; &salle2; </CINEMA>

Introduction XML - B. Amann p.20/159

Premier bilan
Disposer dune et une seule reprsentation

Jutilise un traitement de texte ? je suis prisonnier du format

Je stocke dans une base de donnes ? idem Ne pas utiliser HTML, ddi la prsentation dans un navigateur

Crer un langage pour dcrire nos donnes

utiliser XML, et convertir vers HTML

Introduction XML - B. Amann p.21/159

Publication de donnes avec XML


Sparer la gestion du contenu de la prsentation

Gestion du contenu = un vocabulaire XML


dcrire nos informations, avec

Prsentation = mettre en forme nos documents pour une application particulire

Introduction XML - B. Amann p.22/159

Application
Nous avons dcrit notre cinma avec notre propre langage (DTD). On peut traduire ce langage vers dautres langages XML :

HTML pour la prsentation Web standard

WML pour la prsentation WAP

SMIL pour une prsentation multimdia

XSL-FO pour la production de documents papier

Introduction XML - B. Amann p.23/159

Version HTML
HTML revisit :

Un document HTML est un document XML

Le vocabulaire est x, ainsi que la syntaxe

Chaque balise a une signication bien dnie

HTML a t normalis comme dialecte XML = XHTML

Introduction XML - B. Amann p.24/159

Ce quon veut obtenir (dmo)


<html> <head><title>Film: Vertigo</title></head> <body bgcolor="white"> <p><img SRC="Vertigo.png"> <h1><i>Vertigo</i></h1> Drame, <i>Etats Unis</i>, 1958 </p> <p> Mis en scne par <b>Alfred Hitchcock</b> <h3>Rsum</h3>Scottie Ferguson, ancien inspecteur de police, est sujet au vertige depuis quil a vu mourir son collgue... </p> </body> </html>

Introduction XML - B. Amann p.25/159

HTML, sous forme darbre


html

Marquage HTML

head title img p

body

...
h1 i i

"Film: " <TITRE>

Elments XML

<TITRE>

<GENRE> <PAYS>

Introduction XML - B. Amann p.26/159

Transformation XSLT
Un programme de transformation XSLT doit nous permettre :

De prendre en entre un document XML source

De produire en sortie un autre arbre XML

Dinsrer dans le document en sortie des fragments du document source

Introduction XML - B. Amann p.27/159

WML, autre dialecte de XML

Document WML : marqu par la balise


wml

Il est divis en cartes, unit dafchage sur le mobile ( card )


Elements principaux : des balises simples de mise en forme ( b , i ) des ancres pour passer dune carte une autre

Introduction XML - B. Amann p.28/159

Exemple dune carte WML


<?xml version="1.0" encoding="iso-8859-1"?> <wml> <card> <p> <b> Alien </b> , 1979, Ridley Scott <br/> Prs d&apos;un vaisseau spatial chou sur une lointaine plante, .. </p> </card> </wml>

Introduction XML - B. Amann p.29/159

SMIL
Langage pour la cration de documents multimdia avec XML.

On indique une fentre dafchage avec diffrentes rgions pour lafchage des composants.

On place les composants dans les diffrentes rgions (positionnement spatiale).

On synchronise lafchage des composants (positionnement temporel).

Introduction XML - B. Amann p.30/159

Entte SMIL: Fentre et rgions


reg_img_grand reg_img_petit

reg_texte

name="title" content="Version SMIL" /> <meta name="author" content=" c 2001 Sallesenligne.com" /> <layout> <root-layout width="450" height="600" /> <region id="reg_img_grand" width="400" height="300" left="25" top="25" fit="meet" /> <region id="reg_img_petit" width="200" height="125" left="125" top="75" fit="meet" /> <region id="reg_texte" width="350" height="325" left="50" top="250" z-index="1"/> </layout> </head>

<head> <meta

450 pixels

600 pixels

Introduction XML - B. Amann p.31/159

Corps SMIL: Positionnement


reg_img_grand reg_img_petit

Vertigo
Scottie Ferguson, ancien inspecteur de police est sujet au vertige depuis quil a vu mourir son collgue. Elster, son ami

<body> <seq> <par endsync="first" id="page1" > <audio src="Sound.wav" /> <a href="#page2" > <img src="Vertigo.png" region="reg_img_grand" /> </a> </par> <par id="page2" dur="30s" > <text src="Vertigo-Resume.txt" region="reg_texte" /> <img src="Vertigo.png" region="reg_img_petit" /> </par> </seq> </body>

450 pixels

Dmo !

600 pixels

Introduction XML - B. Amann p.32/159

XSL-FO
Langage de description de documents avec XML.

On indique les paramtres de mise en page (marges, taille des polices...)

On place le contenu entre des balises de formatage un processeur se charge de produire le document

Introduction XML - B. Amann p.33/159

Exemples dun document XSL-FO


<?xml version="1.0" encoding="iso-8859-1"?> <fo:root> <fo:layout-master-set> <fo:simple-page-master master-name="page" page-height="29.7cm" page-width="21cm"/> </fo:layout-master-set> <fo:page-sequence master-name=simple> <fo:flow font-size="20pt"> <fo:block> Ceci est le premier paragraphe, </fo:block> </fo:flow> </fo:page-sequence> </fo:root> Dmo ! Le programme de lEpe de Bois!

Introduction XML - B. Amann p.34/159

Quelques ides
Jai mes donnes

Je leur ai dni une reprsentation

Je leur applique des traitements (publication ou autre)

Je peux les transmettre quelquun dautre (tout ou partie) un service externe mapporte une valeur ajoute

Introduction XML - B. Amann p.35/159

Quel format ?
Mon problme :

Jai dcrit mes donnes avec mon langage XML

Lapplication attend des donnes dans son langage

Il faut :

Dcrire formellement les deux langages

Faire une traduction de lun lautre

Introduction XML - B. Amann p.36/159

Les DTD
Document Type Denition

Pour dnir la structure dune classe de documents (dun langage)

Exemple : un lment de type texte : <!ELEMENT TITRE (#PCDATA) >

Exemple : un lment constitu dun titre, dun cinma, dune ville, dune URL (optionnelle) et dune squence dheures. <!ELEMENT FILM (TITRE, CINEMA, VILLE, URL?, HEURE+)>

Introduction XML - B. Amann p.37/159

La DTD du moteur de recherche


Un chier auquel on peut faire rfrence dans un document :
1 2 3 4 5 6

<!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT

FILM TITRE CINEMA VILLE URL HEURE

( ( ( ( ( (

TITRE, CINEMA, VILLE, URL?, HEURE+ ) > #PCDATA ) > #PCDATA ) > #PCDATA ) > #PCDATA ) > #PCDATA ) >

Document valide : conforme une DTD.

Introduction XML - B. Amann p.38/159

Architecture ( Dmo )
DTD 1 XSLT Documents XML XSLT SQL DTD 2 BD Moteur de recherche Client web Client web Client web

Flux XML

Intgration

Recherche

Introduction XML - B. Amann p.39/159

Le document intgrateur
<?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>

Introduction XML - B. Amann p.40/159

Gestion de linformation avec XML


Echange/intgration contenu transformation
Donnes statiques Donnes dynamiques

Fichiers

Base de donnes

Rsultat Application

Message XML

XSLT

Transformation XSLT

Document XML

XSLT

XSLT

XSLT

XSLT

prsentation

Page XHTML

Contenu format application dition

Page WML

Document XML

application web

application WAP

application XML

Introduction XML - B. Amann p.41/159

Les applications du Web avec XML


Publication dinformations: transformation de XML en diffrents formats/dialectes : HTML, SMIL, WML, SVG, MathML Diffusion dinformations: Web Smantique : RDF/RSS, Dublin core change et partage dinformations : dialectes XML partags entre les membres dune communaut, services Web (SOAP) Recherche dinformation : langages requtes (XQuery)

Introduction XML - B. Amann p.42/159

Rcapitulons !
XML = format dchange de donnes entre application

Permet de dnir des langages pour dcrire des donnes ( mta-langage )

Permet de reprsenter pratiquement toute information semi-structure

De nombreux outils danalyse, parsing, interrogation, transformation, ... Bien adapt au web.

Introduction XML - B. Amann p.43/159

Les API DOM et Sax

Les API DOM et Sax - B. Amann p.44/159

Programmer avec XML


Les deux principales interfaces de programmation XML :

DOM (Document Object Model ), bas sur une reprsentation hirarchique

SaX (Simple API for XML), bas sur des dclencheurs (vnements/action)

Les API DOM et Sax - B. Amann p.45/159

Les API XML


LAPI DOM :

Construit une reprsentation du document en mmoire sous forme darbre

Adapte aux applications qui modient ou traitent dans leur globalit un document. Dnit des triggers qui se dclenchent sur certaines balises.

LAPI SaX :

Adapte aux applications qui extraient de linformation dun document

Les API DOM et Sax - B. Amann p.46/159

DOM et SaX
Toutes les applications XML passent par une phase pralable danalyse
Processeur XSLT Parseur DOM Document XML Editeur XML ... Base de donnes Dclenchement doprations

Parseur SaX

flux de donnes

Les API DOM et Sax - B. Amann p.47/159

Document Object Model (DOM)

Document Object Model (DOM) - B. Amann p.48/159

LAPI oriente-objet DOM


Un parseur DOM prend en entre un document XML et construit un arbre form dobjets :

chaque objet appartient une sous-classe de Node

des oprations sur ces objets permettent de crer de nouveaux nuds, ou de naviguer dans le document diteurs XML, processeurs XSLT

Document Object Model (DOM) - B. Amann p.49/159

Les nuds DOM


Node

Attribute

TreeNode

Leaf

Container

Notation

Character Data

Processing Instruction

Entity

Document

Entity Reference

Element

Document Type

Comment

Text

CData Section

Document Object Model (DOM) - B. Amann p.50/159

Types de noeuds DOM


Type de Nuds Document DocumentType ProcessingInstruction Element Attribute Entity Catgorie syntaxique XML document XML (racine) type du document (DTD) instruction de traitement lment XML attribut XML dclaration dentit

Table 1: Types de nuds DOM

Document Object Model (DOM) - B. Amann p.51/159

Types de noeuds DOM (suite)


Type de Nuds EntityReference Comment CharacterData Text CDataSection DocumentFragment Notation Catgorie syntaxique XML rfrence vers entit commentaire commentaire et section de texte section de texte section CDATA fragment de document XML notation

Table 2: Types de nuds DOM

Document Object Model (DOM) - B. Amann p.52/159

Structure dun arbre DOM

childNodes[] childNodes[]

Leaf

Container

Document Object Model (DOM) - B. Amann p.53/159

Un document avec attributs


<?xml version=1.0 encoding="ISO-8859-1"?> <COURS CODE="19599"> <SUJET>Structures de donnes</SUJET> <ENSEIGNANTS> <NOM RESPONSABLE="0">Carrez</NOM> <NOM RESPONSABLE="1">Akoka</NOM> </ENSEIGNANTS> </COURS>

Document Object Model (DOM) - B. Amann p.54/159

Larbre DOM
Document -

Element COURS Element SUJET Texte Structures de donnes Texte Carrez Attr CODE 19599 Element NOM Attr RESPONSABLE 0 Element ENSEIGNANTS Element NOM Attr RESPONSABLE 1 Texte Akoka

Document Object Model (DOM) - B. Amann p.55/159

Proprits du type Node


Proprit nodeType nodeName nodeValue attributes Type unsigned short DOMString DOMString NamedNodeMap

Table 3: Proprits du type Node

Document Object Model (DOM) - B. Amann p.56/159

Proprits du type Node


Proprit parentNode rstChild lastChild childNodes previousSibling nextSibling Type Node Node Node NodeList Node Node

Table 4: Proprits du type Node

Document Object Model (DOM) - B. Amann p.57/159

Oprations du type Node


Rsultat Node Node Node Node boolean Node Mthode insertBefore() replaceChild() removeChild() appendChild() hasChildNodes() cloneNode() Paramtres Node nouv, Node fils Node nouv, Node anc Node fils Node nouv boolean prof

Table 5: Oprations du type Node


Document Object Model (DOM) - B. Amann p.58/159

DOM : Exemple de code


Ajoute <adventure type="epic">&adventure1;</adventure> avant le 4e lment du document : var racine = myDocument.documentElement; var enfants = racine.childNodes; var el_nouv = createElement("adventure") ; var ent_ref = createEntityReference("adventure1"); el_nouv.setAttribute("type", "epic"); el_nouv.appendChild(ent_ref) insertBefore(el_nouv, enfants.item(3));

Document Object Model (DOM) - B. Amann p.59/159

LAPI SAX

LAPI SAX - B. Amann p.60/159

Architecture SAX
Associer des vnements aux balises :
Document XML Parseur SAX Evnements <ELT1> </ELT1> <ELT2> ... Accumulateur Donnes

Fonctions

LAPI SAX - B. Amann p.61/159

Les vnements SAX


Un parseur SAX gnre un vnement chaque fois quil rencontre

le dbut et la n de document,

le dbut et la n dun lment,

une instruction de traitements

un commentaire, ...

Les fonctions sexcutent indpendamment = il faut leur faire partager une zone mmoire ( accumulateur )

LAPI SAX - B. Amann p.62/159

Les vnements SAX: exemple


import java.io.*; import org.xml.sax.*; import org.xml.sax.helpers.*; import org.apache.xerces.parsers.SAXParser; public class Trace extends DefaultHandler { // dbut de document public void startDocument() { System.out.println("start document"); } // fin de document public void endDocument() { System.out.println("end document"); }

LAPI SAX - B. Amann p.63/159

Suite...
// balise douverture public void startElement(String uri, String localName, String qName, Attributes attributes) { System.out.println("starting element: " + qName); } // balise de fermeture public void endElement(String uri, String localName, String qName) { System.out.println("end element: " + qName); }

LAPI SAX - B. Amann p.64/159

Suite...
// espace blanc public void ignorableWhitespace(char[] ch, int start, int length) { System.out.println("whitespace, length " + length); } // instruction de traitement public void processingInstruction(String target, String data) { System.out.println("processing instruction: " + target); }

LAPI SAX - B. Amann p.65/159

Suite...
// texte public void characters(char[] ch, int start, int length){ System.out.println("character data, length " + length); } // procdure principale public static void main(String[] args) { Trace t = new Trace(); SAXParser p = new SAXParser(); p.setContentHandler(t); try { p.parse(args[0]); } catch (Exception e) {e.printStackTrace();} }

LAPI SAX - B. Amann p.66/159

Exemple type : insertion dans une BD


partir dun ux XML contenant des lms : <FILMS> ... <FILM> <TITRE>Alien</TITRE> <ANNEE>1979</ANNEE> <AUTEUR>Ridley Scott</AUTEUR> <GENRE>Science-fiction</GENRE <PAYS>USA</PAYS> </FILM> ... </FILMS>

LAPI SAX - B. Amann p.67/159

Les vnements

Dbut de document : connexion la base

Balise

FILM : cration dun enregistrement Film


Balise

TITRE : on affecte Film.titre


Balise

ANNEE : on affecte Film.annee

etc..

Balise base

FILM : insertion de lenregistrement dans la


Balise

/FILM : destruction de Film

LAPI SAX - B. Amann p.68/159

XPath: Slectionner des Fragments XML

XPath: Slectionner des Fragments XML - B. Amann p.69/159

Exemple: Document XML


Document XML:
/

FILM

TITRE

AUTEUR

ANNEE

RESUME

Vertigo

Hitchcock

1958

Scotty...

XPath: Slectionner des Fragments XML - B. Amann p.70/159

Exemple: Rgle de transformation


/ FILM TITRE Vertigo AUTEUR Hitchcock ANNEE 1958 RESUME Scotty...

* i h1 * i * p p Rsum: h3 *

XPath: Slectionner des Fragments XML - B. Amann p.71/159

Exemple: Rsultat
Fragment HTML:
p

h1

h3

1958

Hitchcock

Rsum:

Scotty...

Vertigo

XPath: Slectionner des Fragments XML - B. Amann p.72/159

Rfrencer des fragments XML avec XPATH


Pour pouvoir transformer un document XML il faut pouvoir extraire des fragments (nuds) XML dun document XPath :

XPath est fond sur une reprsentation arborescente (DOM) du document XML

Objectif : rfrencer nuds (lments, attributs, commentaires, ...) dans un document XML

XPath: Slectionner des Fragments XML - B. Amann p.73/159

XPath: Exemples de chemins XPath


Document XML:
/

/FILM FILM

/FILM/TITRE TITRE AUTEUR ANNEE

/FILM/RESUME RESUME

/FILM/RESUME/text() Vertigo Hitchcock 1958 Scotty...

XPath: Slectionner des Fragments XML - B. Amann p.74/159

XPath: Utilisation
Le langage permet de dsigner un ou plusieurs nuds dans un document XML, laide dexpressions de chemin. XPath est utilis par

XSLT pour slectionner des rgles de transformation

XQuery pour linterrogation de documents XML

XML Schma pour crer des cls et rfrences

XLink pour crer des liens entre documents/fragments XML

XPath: Slectionner des Fragments XML - B. Amann p.75/159

Les arbres XPath


Un typage simpli par rapport celui de DOM

Document

Element

Text

Attribut ProcessingInstruction

Comment

pas dentit, pas de section littrale

XPath: Slectionner des Fragments XML - B. Amann p.76/159

Exemple : larbre DOM...


Document -

Element EXEMPLE

Text Section littrale avec

SectionCDATA des &, des des


Text et un text

XPath: Slectionner des Fragments XML - B. Amann p.77/159

Puis larbre XPath...


Document -

Element EXEMPLE

Text Section littrale avec des &, des des et un texte


XPath: Slectionner des Fragments XML - B. Amann p.78/159

Expressions XPath
Une expression XPath :

svalue en fonction dun nud contexte

dsigne un ou plusieurs chemins dans larbre partir du nud contexte

a pour rsultat un ensemble de nuds ou une valeur, numrique, boolenne ou alphanumrique


XPath: Slectionner des Fragments XML - B. Amann p.79/159

Chemins XPath
Un chemin XPath est une suite dtapes : [/]tape /tape /.../tape Deux variantes : Un chemin peut tre

absolu : /FILM/RESUME Le nud contexte est alors la racine du document.

ou relatif : RESUME/text() Le nud contexte est un nud dans le document (pas forcment la racine).

XPath: Slectionner des Fragments XML - B. Amann p.80/159

tapes XPath
Une tape : trois composants [axe::]filtre[prdicat1][prdicat2]

laxe : sens de parcours des nuds (par dfaut: child).

le ltre : type des nuds/noms des lments qui seront retenus

le(s) prdicat(s) que doivent satisfaire les nuds retenus

XPath: Slectionner des Fragments XML - B. Amann p.81/159

Les axes XPath


Un axe XPath recouvre les deux notions suivantes :

un sous-ensemble des nuds de larbre relatif au nud contexte ;

lordre de parcours de ces nuds partir du nud contexte.

XPath: Slectionner des Fragments XML - B. Amann p.82/159

Exemple de rfrence
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Element B

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.83/159

Exemple : le nud contexte


Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Element B

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.84/159

child::D ou D
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Nud contexte

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.85/159

attribute::att1 ou @att1
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Nud contexte

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.86/159

parent::A
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Nud contexte

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.87/159

Notation abrge de parent::A


La notation abrge .. dsigne le pre du nud contexte, quel que soit son type. quivalent : parent::node() node() est un ltre qui dsigne tous les types de nuds (sauf les attributs). parent::* * est un ltre qui dsigne tous les lments.

XPath: Slectionner des Fragments XML - B. Amann p.88/159

descendant::node()
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Nud contexte

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.89/159

ancestor::node()
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Nud contexte

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.90/159

self::node()

il dsigne le nud contexte lui-mme. Doit tre complt par un ltre. Exemples : notre nud contexte : self::B mais self::A renvoie un ensemble vide

Pour prendre le nud quel que soit son type : self::node()

Notation abrge : .

XPath: Slectionner des Fragments XML - B. Amann p.91/159

preceding-sibling::node()
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Nud contexte

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.92/159

following::node()
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Nud contexte

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.93/159

Axes: Rsum

nuds enfants et descendants: child, descendant, descendant-or-self

nud parent et anctres: parent, ancestor

frres: preceding-sibling, following-sibling

nuds prcdents et suivants: preceding, following

nud mme: self

XPath: Slectionner des Fragments XML - B. Amann p.94/159

Filtres
Deux manires de ltrer les nuds :

par leur nom : possible pour les types de nuds qui ont un nom : Element, ProcessingInstruction et Attr

par leur type DOM.

XPath: Slectionner des Fragments XML - B. Amann p.95/159

Chemin absolu : /A/B/D


Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Element B

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.96/159

/descendant::node()/@att2
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Element B

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.97/159

Nom gnrique : /A/*


Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Element B

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.98/159

Filtrage sur le type de nud

text() : Nuds de type Text

comment() : Nuds de type Comment Exemple : /comment()

processing-instruction() : Nuds de type ProcessingInstruction Exemple : /processing-instruction(), ou /processing-instruction(java)

node() : Tous les types de nud

XPath: Slectionner des Fragments XML - B. Amann p.99/159

/A/B//text()
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Element B

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.100/159

/comment()
Document -

Instruction Java ins1 Element B

Element A

Comment CommFin

Element B

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.101/159

Prdicats

Prdicat : expression boolenne constitue dun ou plusieurs tests, composs avec les connecteurs logiques habituels and et or

Test : toute expression XPath, dont le rsultat est convertie en boolen; une comparaison, un appel de fonction.

il faut connatre les rgles de conversion

XPath: Slectionner des Fragments XML - B. Amann p.102/159

Quelques exemples
/A/B[@att1] : Les nuds /A/B qui ont un attribut @att1 /A/B[@att1=a1] : Les nuds /A/B qui ont un attribut @att1 valant a1 /A/B/descendant::text()[position()=1] : Le premier nud de type Text descendant dun /A/B. /A/B/descendant::text()[1] : idem

XPath: Slectionner des Fragments XML - B. Amann p.103/159

Pour bien comprendre


Dans lexpression /A/B[@att1] :

On sintresse aux nuds de type B ls de llment racine A.

Parmi ces nuds on ne prend que ceux pour lesquels le prdicat [@att1] svalue true

Cette expression svalue avec pour nud contexte un lment B

[@att1] vaut true ssi @att1 renvoie un ensemble de nuds non vide

XPath: Slectionner des Fragments XML - B. Amann p.104/159

Contexte dvaluation
Une tape svalue en tenant compte dun contexte constitu de

un nud contexte, position initiale du chemin ;

ce nud fait lui-mme partie dun ensemble obtenu par valuation de ltape prcdente on connat la taille de cet ensemble (fonction last ()) on connat la position du nud contexte dans cet ensemble (fonction position())

XPath: Slectionner des Fragments XML - B. Amann p.105/159

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

Instruction Java ins1 Element B

Element A

Comment CommFin

Element B

Element C

Attr att1 a1

Element D

Element D

Attr att1 a2

Element D

Attr att2 a3

Attr att3 15

Text Texte1

Text Texte2

Text Texte3

XPath: Slectionner des Fragments XML - B. Amann p.106/159

Typage avec XPath


On peut effectuer des comparaisons, des oprations. Cela implique un typage et des conversions de type. Types XPath :

les numriques

les chanes de caractres

les boolens (true et false)

enn les ensembles de nuds

XPath: Slectionner des Fragments XML - B. Amann p.107/159

Numriques
Notation dcimale habituelle

Comparaisons habituelles (<, >, !=)

Oprations : +, -, *, 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]

XPath: Slectionner des Fragments XML - B. Amann p.108/159

Conversions
Deux conversions sont toujours possibles.

Vers une chane de caractres. utile pour la production de texte en XSLT (balise xsl:value-of)

Vers un boolen utile pour les tests effectus dans XSLT (xsl:if, xsl:when)

XPath: Slectionner des Fragments XML - B. Amann p.109/159

Conversions boolennes

Pour les numriques : 0 ou NaN sont false, tout le reste est true

Pour les chanes : une chane vide est false, tout le reste est true

Pour les ensembles de nuds : un ensemble vide est false, tout le reste est true

Comparaisons : des rgles de conversion tranges...

XPath: Slectionner des Fragments XML - B. Amann p.110/159

Fonctions XPath
Quelques fonctions utiles dans les prdicats :

concat(chane1, chane2, ...) pour concatner des chanes

contains(chane1, chane2) teste si chane1 contient chane2

count (expression) renvoie le nombre de nuds dsigns par expression

name() renvoie le nom du nud contexte

not(expression) : ngation

XPath: Slectionner des Fragments XML - B. Amann p.111/159

Prdicats: Exemples
Axes davancement :

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

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

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

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

La position dun nud dpend de laxe choisi.

XPath: Slectionner des Fragments XML - B. Amann p.112/159

Prdicats: Axes inverses


Axes inverses :

ancestor::*[1]: le premier anctre du nud contexte (dernier dans lordre du document).

preceding-sibling::*[last()]: le dernier frre qui prcde le nud contexte (premier dans lordre du document).

XPath: Slectionner des Fragments XML - B. Amann p.113/159

Prdicats: Exemples
Test du nombre doccurrences :

CINEMA[count(SEANCE) > 1]: cinmas avec au moins 2 sances

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

FILM[not(ACTEUR)]: lms sans acteur

XPath: Slectionner des Fragments XML - B. Amann p.114/159

Prdicats: Slection par valeur


Slection par valeur:

FILM[not(ACTEUR[NOM=Willis])]: lms sans Bruce Willis

FILM[ACTEUR/NOM=Willis]: lms avec Bruce Willis

FILM[ACTEUR[NOM=Willis]]: idem

XPath: Slectionner des Fragments XML - B. Amann p.115/159

Prdicats: Exemples
Test sur la structure : chemins imbriqus avec connecteurs logiques (qualiers)

ACTEUR[NOM and DATENAISSANCE] ou ACTEUR[NOM][DATENAISSANCE]: les acteurs avec un nom et une date de naissance

FILM[@TITRE = Brazil and ACTEUR/NOM = De Niro]: le lm Brazil avec lacteur De Niro

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

XPath: Slectionner des Fragments XML - B. Amann p.116/159

Remarque sur les prdicats


Attention: Les deux premires expressions sont equivalentes, mais pas la troisime! Pourquoi?

FILM[ACTEUR and position()=1]

FILM[position()=1][ACTEUR]

FILM[ACTEUR][position()=1]

XPath: Slectionner des Fragments XML - B. Amann p.117/159

Un cas pineux : les espaces


Un document XML avec espaces <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="ex.xsl" type="text/xsl"?> <!-- commentaire --> <!DOCTYPE A SYSTEM "ex.dtd" > <A> <B at1= val1 at2= avec blanc /> <C> </C> <D> texte </D> </A>

XPath: Slectionner des Fragments XML - B. Amann p.118/159

O sont les espaces ?


Un peu partout !

avant la balise ouvrante de llment racine ;

lintrieur dune balise ;

lintrieur dun lment ;

lintrieur de la valeur dun attribut ;

entre deux balises ;

entre deux attributs.

Tous nont pas la mme importance

XPath: Slectionner des Fragments XML - B. Amann p.119/159

Les espaces dans XPath

Les espaces du prologue ou de lpilogue sont supprims.

Les espaces conscutifs sont rduits un seul.

Les ns de lignes sont reprsentes par le caractre #xA.

En gnral, les espaces en dbut et n dattributs sont supprimes.

XPath: Slectionner des Fragments XML - B. Amann p.120/159

Larbre XPath du document


Document -

Element A

Text #xA#20

Element B

Text #xA#20

Element C

Text #xA#20

Element D

Text #xA#20

Attr at1 #20val1#20

Attr at2 #20avec#20blanc#20

Text #20

Text #20texte#20

XPath: Slectionner des Fragments XML - B. Amann p.121/159

Instruction xsl:strip-space
Document -

Element A

Element B

Element C

Element D

Attr at1 #20val1#20

Attr at2 #20avec#20blanc#20

Text #20texte#20

XPath: Slectionner des Fragments XML - B. Amann p.122/159

XPath : Rsum
XPath est un langage pour extraire des noeuds dans un arbre XML :

On navigue dans larbre grce des axes de navigation.

Un chemin de navigation est une squence dtapes.

Dans chaque tape on choisi un axe, un ltre et ventuellement des prdicats.

Le rsultat dune tape (dune squence dtapes) est un squence de noeuds.

XPath: Slectionner des Fragments XML - B. Amann p.123/159

Introduction XSLT

Introduction XSLT - B. Amann p.124/159

Sommaire
Une introduction XSLT, destine comprendre les mcanismes du langage.

Rgles XSLT

Dsignation de fragments XML

Appels de rgles

Application : XML

HTML et XML

WML

Passage de paramtres

Introduction XSLT - B. Amann p.125/159

Quest-ce quon 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

Introduction XSLT - B. Amann p.126/159

Fonctions dune Feuille de Style XSLT


Fonction de Base: Langage de rgles de transformation de documents/arbres XML:

extraction de donnes

gnration de texte

suppression de contenu (noeuds)

dplacer contenu (noeuds)

dupliquer contenu (noeuds)

trier

Introduction XSLT - B. Amann p.127/159

Exemple
/ FILM TITRE Vertigo AUTEUR Hitchcock ANNEE 1958 RESUME Scotty...

* i h1 * i * p p Rsum: h3 *

Introduction XSLT - B. Amann p.128/159

Exemple: Rgle de transformation


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

<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>Rsum: <xsl:value-of select="RESUME"/> </h3> </p> </xsl:template>

Introduction XSLT - B. Amann p.129/159

Extraction de donnes

Exemple : recherche du titre pour le nud FILM :

xsl:value-of select="TITRE"/

Plus gnralement : on donne un chemin daccs XPath un nud partir du nud courant (noeud contexte).

Introduction XSLT - B. Amann p.130/159

Gnration de texte
Produire une phrase quand on rencontre un nud FILM : <xsl:template match="FILM"> Ceci est le texte produit par application de cette rgle. </xsl:template>

Introduction XSLT - B. Amann p.131/159

Gnration dun arbre XML


Produire un document/fragment/arbre XML quand on rencontre un nud FILM : <xsl:template match="FILM"> <body> <p>Un paragraphe</p> </body </xsl:template>

Introduction XSLT - B. Amann p.132/159

Gnration avec extraction


Produire un document/fragment/arbre XML quand on rencontre un nud FILM :
1 2 3 4 5 6 7 8

<xsl:template match="FILM"> <body> <p> <xsl:text>Titre: </xsl:text> <xsl:value-of select="TITRE"/> </p> </body> </xsl:template>

Introduction XSLT - B. Amann p.133/159

Structure de base : les rgles


Rgle = template : lment de base pour produire le rsultat

une rgle sapplique dans le contexte dun nud de larbre

lapplication de la rgle produit un fragment du rsultat.

Programme XSLT = ensemble de rgles pour construire un rsultat

Introduction XSLT - B. Amann p.134/159

Un exemple
1 2 3 4 5 6 7 8 9 10 11 12

<xsl:template match="FILM"> <p> <h1> <i><xsl:value-of select="TITRE"/></i> </h1> <i><xsl:value-of select="ANNEE"/></i> <p><xsl:value-of select="AUTEUR"/></p> <h3> Rsum: <xsl:value-of select="RESUME"/> </h3> </p> </xsl:template>

Motif de slection : match="FILM"

Corps de la rgle = fragment darbre produire

Introduction XSLT - B. Amann p.135/159

Illustration
Contexte dapplication de la rgle XSLT select="TITRE" FILM

TITRE

AUTEUR

ANNEE

GENRE

PAYS

RESUME

Vertigo

Hitchcock

1958

Drame

USA

Scotty...

Introduction XSLT - B. Amann p.136/159

Une rgle complte


1 2 3 4 5 6 7 8 9 10 11 12 13

<xsl:template match="FILM"> <html> <head> <title>Film: <xsl:value-of select="TITRE"/> </title> </head> <body> Le genre du film, cest <b><xsl:value-of select="GENRE"/></b> </body> </html> </xsl:template>

Introduction XSLT - B. Amann p.137/159

Le rsultat
On obtient :
1 2 3 4 5 6 7 8 9 10 11

<html> <head> <title>Film: Vertigo </title> </head> <body> Le genre du film, cest <b>Suspense</b> </body> </html>

Introduction XSLT - B. Amann p.138/159

Chemins complexes
Dans lexemple prcdent, on accdait aux ls dun nud. En fait on peut :

Accder tous les descendants

Accder aux parents, aux frres, aux neveux...

Accder aux attributs

Effectuer des boucles

Le langage dexpression de chemins : XPath.

Introduction XSLT - B. Amann p.139/159

Exemple: Document XML


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
<?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>Prs dun vaisseau spatial chou sur une lointaine plante, des Terriens en mission dcouvrent de bien tranges "oeufs". Ils en ramnent un bord, ignorant quils viennent dintroduire parmi eux un huitime passager particulirement froce et meurtrier. </RESUME> </FILM> <REMARQUE>Rservation conseille</REMARQUE> <SEANCES> <SEANCE>15:00</SEANCE> <SEANCE>18:00</SEANCE> <SEANCE>21:00</SEANCE> </SEANCES> </SALLE>

Introduction XSLT - B. Amann p.140/159

Exemple: Traduction de Salle


1 2 3 4 5 6 7 8 9 10

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

Introduction XSLT - B. Amann p.141/159

Le rsultat
Appliqu Salle1.xml :
1 2 3 4 5 6 7 8

<h2>Salle No 1 </h2> Film: Alien de Ridley Scott <ol> <li> 15:00</li> <li> 18:00</li> <li> 21:00</li> </ol> NB : cest un fragment HTML, intgrer dans un document complet.

Introduction XSLT - B. Amann p.142/159

Salles et sances
Contexte dapplication de la rgle SALLE chemin "FILM/TITRE" NO=2 PLACES=320 chemin SEANCES/SEANCE FILM chemin "REMARQUE" TITRE AUTEUR ANNEE GENRE PAYS RESUME REMARQUE SEANCES chemin "@NO"

Alien

Scott Science-Fiction

1979

USA

Prs dun Rservation vaisseau spatial... conseille

boucle for-each

SEANCE

SEANCE

SEANCE

15:00

18:00

21:00

Introduction XSLT - B. Amann p.143/159

Chemins complexes

Descendants : le titre du lm est dsign par select="FILM/TITRE" ;

Attributs : le numro de la salle est dsign par select="@NO" ;

Boucles : avec xsl:for-each sur lensemble des sances dsignes par select="SEANCES/SEANCE" ;

Llment contexte : dsign par le symbole ., comme dans select=".".

Introduction XSLT - B. Amann p.144/159

Appels de rgles
En gnral on produit un rsultat en combinant plusieurs rgles :

La rgle initiale sapplique la racine du document trait (/)

On produit alors le cadre du document HTML

On appelle dautres rgles pour complter la cration du rsultat

Introduction XSLT - B. Amann p.145/159

Exemple : Lpe de bois


Cadre HTML, puis appel de la rgle 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>

Introduction XSLT - B. Amann p.146/159

Rgle CINEMA
Exploitation de llment CINEMA, puis appel la rgle SALLE
1 2 3 4 5 6 7 8 9 10 11

<xsl:template match="CINEMA"> <h1><i> <xsl:value-of select="NOM"/> </i></h1><hr/> <xsl:value-of select="ADRESSE"/>, <i>Mtro: </i> <xsl:value-of select="METRO"/> <hr/> <xsl:apply-templates select="SALLE"/> </xsl:template>

Introduction XSLT - B. Amann p.147/159

Vue densemble
html

head

body

title Rgle "/"

h1

hr

adresse

i h2 Epe de bois Salle No 1 Rgle "CINEMA" Rgle "SALLE" Film: Alien Salle No 2 Film : Vertigo h3 h2 h3

Introduction XSLT - B. Amann p.148/159

La mme chose, en WML


On gnre les cartes du site
1 2 3 4 5 6 7 8 9 10 11 12

<xsl:template match="/"> <wml> <!-- Carte daccueil --> <xsl:apply-templates select="CINEMA"/> <!-- Cartes pour les salles et sances --> <xsl:apply-templates select="CINEMA/SALLE"/> <!-- cration des cartes pour les films --> <xsl:apply-templates select=".//FILM"/> </wml> </xsl:template>

Introduction XSLT - B. Amann p.149/159

Arbre XML du site


wml

card

id=index

card

id=S1

card

id=S2

card

id=Alien

card

id=Vertigo

p href=S1

p href=Alien a href=S2

p href=Vertigo a

Introduction XSLT - B. Amann p.150/159

Rgle CINEMA
1 2 3 4 5 6 7 8 9 10 11 12 13 14

<xsl:template match="CINEMA"> <card id="index" title="Programme"> <p align="center"> <xsl:value-of select="NOM"/> </p> <xsl:for-each select="SALLE"> <p> <a href="#S{@NO}"> Salle <xsl:value-of select="@NO"/>: </a> <xsl:value-of select="FILM/TITRE"/> </p> </xsl:for-each> </card> </xsl:template>

Introduction XSLT - B. Amann p.151/159

Rsultat
1 2 3 4 5 6 7 8 9 10 11 12 13

<card id="index" title="Programme"> <p align="center"> Ep&#xE9;e de bois </p> <p> <a href="#S1"> Salle 1: </a> Alien </p> <p> <a href="#S2"> Salle 2: </a> Vertigo </p> </card>

Introduction XSLT - B. Amann p.152/159

Rgle SALLE
1 2 3 4 5 6 7 8 9 10 11 12 13

<xsl:template match="SALLE"> <card id="S{@NO}"> <p>Sances salle <xsl:value-of select="@NO"/></p> <p> <a href="#{FILM/TITRE}"> Film : <xsl:value-of select="FILM/TITRE"/> </a> </p> <xsl:apply-templates select="SEANCES"/> </card> </xsl:template>

Introduction XSLT - B. Amann p.153/159

Rsultat
1 2 3 4 5 6 7 8 9 10 11 12

<card id="S2"> <p> S&#xE9;ances salle 2 </p> <p> <a href="#Vertigo"> Film : Vertigo</a> </p> <p> S&#xE9;ance 22:00 </p> </card>

Introduction XSLT - B. Amann p.154/159

XSLT avec paramtres


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

<html> <head> <title>Formulaire de Recherche</title> </head> <body bgcolor="white"> <h1>Formulaire de Recherche</h1> <form method=get action=Moteur.xml name=Form> Film: <input type=text name=titre> <br> Sance: <input type=text NAME=seance > (hh:mm)<br> Ville: <input type=text name=ville><br> <input type=submit name=chercher value="Chercher"/> </form> </body> </html>

Introduction XSLT - B. Amann p.155/159

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>

Introduction XSLT - B. Amann p.156/159

Traitement des paramtres


<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) and CINEMA//HEURE &gt;= $seance) and CINEMA/VILLE = $ville)"> <xsl:apply-templates select="." /><p/> </xsl:if> </xsl:for-each> </xsl:template>

Introduction XSLT - B. Amann p.157/159

Conclusion sur XSLT


Un langage totalement adapt au traitement de documents XML

Parcours dun document, vu comme un arbre

Dclenchement de rgles sur certains nuds

Association de plusieurs programmes un mme document

Introduction XSLT - B. Amann p.158/159

Bibliographie sur XSLT


1. Recommendation XSLT sur le site du W3C 2. B. Amann et P. Rigaux, Comprendre XSLT, OReilly http://cortes.cnam.fr:8080/XSLT 3. P. Wadler, A formal semantics of patterns in XSLT

Introduction XSLT - B. Amann p.159/159

Das könnte Ihnen auch gefallen