publication de données avec xml, xpath et...

Post on 17-Jul-2020

8 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Publication de données avec XML,Xpath et XSLT

License Professionelle ACSID

CNAM, Paris 2003 - Bernd Amann

amann@cnam.fr

CNAM, Paris

Introduction à XML/XSLT / B. Amann et P. Rigaux – p.1/167

Objectifs du Cours

Mieux comprendre la publication des donnéessur le Web :

Intégration de données avec XML

Adressage de fragments avec XPath

Transformation de documents XML avec XSLT

Site de Comprendre XSLT, B. Amann etP. Rigaux, O’Reilly, 2002 :

http://cortes.cnam.fr:8080/XSLT

Introduction à XML/XSLT / B. Amann et P. Rigaux – p.2/167

La publication de données avecXML

La publication de données avec XML - B. Amann et P. Rigaux – p.3/167

Les applications du Web

Diffusion d’informations: journaux, publicité,radio, télévision

Échange et partage d’informations : forums,news, portails

Recherche d’information : moteurs de recherchepar mots-clés

Commerce électronique : billetterie, bourse,catalogues électroniques

La publication de données avec XML - B. Amann et P. Rigaux – p.4/167

Nouveaux besoins

Mots clés : échange et publication de données.L’environnement est hétérogène:

� Les données doivent être représentéesindépendamment d’un langage ou d’unemachine donnée.

� Il faut pouvoir transformer facilement lesdonnées échangées entre différentesapplications

La publication de données avec XML - B. Amann et P. Rigaux – p.5/167

Le problème ?

Je voudrais :

� rendre les mêmes données disponibles et

� récupérer les données existantes

sans gérer � � � interfaces pour � clients et �

serveurs différents.

La publication de données avec XML - B. Amann et P. Rigaux – p.6/167

Pourquoi XML ?

Le langage XML est une réponse à ces besoins.Un document XML

� peut être échangé facilement (format ASCII) ;

� permet de représenter pratiquement touteinformation structurée ;

� n’est pas lié à un mode d’utilisation : chacunpeut se définir ses propres « structures » ;

� peut être transformé (relativement)facilement (avec le langage XSLT).

La publication de données avec XML - B. Amann et P. Rigaux – p.7/167

Les applications du Web avec XML

Publication d’informations: transformation deXML en différents formats/dialectes : HTML,SMIL, WML, SVG, MathML

Diffusion d’informations: Web Sémantique :RDF/RSS, Dublin core

Échange et partage d’informations : dialectesXML partagés entre les membres d’unecommunauté, services Web (SOAP)

Recherche d’information : recherche avec“requêtes structurés”

Commerce électronique : standards(EDI/EDIFACT, ...)

La publication de données avec XML - B. Amann et P. Rigaux – p.8/167

Pourquoi pas HTML ?

Actuellement, le principal format du Web estHTML:

� HTML est un langage pour présenter desinformations à l’écran.

� il ne permet pas d’échanger des données

� il ne permet pas un traitement desdonnées autre que l’affichage

On ne sait pas interpréter des données fourniesen HTML.

La publication de données avec XML - B. Amann et P. Rigaux – p.9/167

Une étude de cas

L’Officiel des spectacles !On a des cinémas qui veulent

� diffuser leur programme (salles, séances)sur le Web, sur le WAP, sur des tracts et desaffiches...

� inclure des informations sur des filmsprovenant d’une base de données MySQL,

� approvisionner un moteur de recherche pourchercher des séances, des films, deshoraires...

La publication de données avec XML - B. Amann et P. Rigaux – p.10/167

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

L’information ?

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

� elle est échangée entre plusieurs acteursLa publication de données avec XML - B. Amann et P. Rigaux – p.11/167

Les solutions XML ?

� Format universel :

� représentation en chaîne de caractèresd’un contenu structuré

� indépendant de toute application

� Publier l’information

� outils de transformation simples pourconvertir un contenu XML

� Échanger et intégrer l’information

� assembler des contenus XML, ou aucontraire en extraire des informations

La publication de données avec XML - B. Amann et P. Rigaux – p.12/167

XML, format universel

XML, format universel - B. Amann et P. Rigaux – p.13/167

XML, c’est quoi ?

XML = rendre un contenu accessible à touteapplication.Le contenu :L’Epée de bois, 100 rue Mouffetard,

métro Censier-DaubentonLe même, en XML :

<?xml version="1.0" encoding="ISO-8859-1"?><CINEMA><NOM>Epée de Bois</NOM><ADRESSE>100,rue Mouffetard</ADRESSE><METRO>Censier-Daubenton</METRO></CINEMA>

XML, format universel - B. Amann et P. Rigaux – p.14/167

Le même, mieux présenté

Présentation courante : avec indentation

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

<NOM>Epée de Bois

</NOM><ADRESSE>

100, rue Mouffetard</ADRESSE>

<METRO>Censier-Daubenton

</METRO></CINEMA>

NB : il y a des espaces et des sauts de ligne

XML, format universel - B. Amann et P. Rigaux – p.15/167

Encore mieux : sous forme d’arbre

CINEMA

NOM

Épée de bois

ADRESSE

100, rue Mouffetard

METRO

Censier-Daubenton

Traiter un document XML = extraire desinformations d’un arbre.

XML, format universel - B. Amann et P. Rigaux – p.16/167

Un exemple plus complet, avec attributs

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

<NOM>Epée de bois</NOM><ADRESSE>100, rue Mouffetard</ADRESSE><METRO>Censier-Daubenton</METRO>

<SALLE NO=’1’ PLACES=’320’><TITRE>Alien</TITRE><REMARQUE>Reservation conseillée</REMARQUE><SEANCES>

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

</SEANCES></SALLE>

</CINEMA>

XML, format universel - B. Amann et P. Rigaux – p.17/167

Sous forme d’arbre

CINEMA

METROADRESSENOM SALLE

TITRE REMARQUE SEANCES

SEANCE SEANCE SEANCE

SALLE

TITRE SEANCES

SEANCE

Epée de bois 100, rueMouffetard

Censier

Alien Réservationconseillée

15:00 18:00 21:00

Vertigo

22:00

NO=1 NO=2PLACES=320 PLACES=120

XML, format universel - B. Amann et P. Rigaux – p.18/167

Documents XML

Un document XML est

� une représentation alphanumérique

� de données (semi-)structurées

� provenant

� d’un ou de plusieurs fichiers et/ou

� d’un message et/ou

� d’une base de données...

XML, format universel - B. Amann et P. Rigaux – p.19/167

Exemple d’Intégration

<?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 depuisqu’il a vu mourir son collègue....

</RESUME></FILM><SEANCES>

<SEANCE>22:00</SEANCE></SEANCES>

</SALLE>

XML, format universel - B. Amann et P. Rigaux – p.20/167

Sous forme d’arbre

TITRE AUTEUR ANNEE GENRE PAYS RESUME

SEANCESFILM

SALLE

SEANCE

Salle2.xml:/

22:00

Vertigo 1958Hitchcock Scotty...USA1958

NO=2PLACES=120

XML, format universel - B. Amann et P. Rigaux – p.21/167

Le cinéma : intégration des salles

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

<!DOCTYPE CINEMA [<!ENTITY salle1 SYSTEM "Salle1.xml"><!ENTITY salle2 SYSTEM "Salle2.xml">

]><CINEMA>

<NOM>Epée de bois</NOM><ADRESSE>100, rue Mouffetard</ADRESSE><METRO>Censier-Daubenton</METRO>

&salle1;

&salle2;</CINEMA>

XML, format universel - B. Amann et P. Rigaux – p.22/167

Premier bilan

Disposer d’une et une seule représentation

� J’utilise un traitement de texte ? je suisprisonnier du format

� Je stocke dans une base de données ? idem

Créer un langage pour décrire nos données

� Ne pas utiliser HTML, dédié à la présentationdans un navigateur

� = � utiliser XML, et convertir vers HTML

XML, format universel - B. Amann et P. Rigaux – p.23/167

Publication de données avec XSLT

Publication de données avec XSLT - B. Amann et P. Rigaux – p.24/167

XSLT : pour quoi faire

Séparer la gestion du contenu de la présentation

� Gestion du contenu = � décrire nosinformations, avec un vocabulaire XML

� Présentation = � mettre en forme nosdocuments pour une application particulière

XSLT permet d’écrire des programmes deconversions, très adaptés au traitement dedocuments XML

Publication de données avec XSLT - B. Amann et P. Rigaux – p.25/167

Application

Nous avons décrit notre cinéma avec notrepropre langage. XSLT va permettre de traduirece langage vers d’autres langages :

� HTML pour la présentation Web standard

� WML pour la présentation WAP

� SMIL pour une présentation multimédia

� XSL-FO pour la production de documentspapier

Publication de données avec XSLT - B. Amann et P. Rigaux – p.26/167

Version HTML

HTML revisité :

� Un document HTML est un document XML

� Le vocabulaire est fixé, ainsi que la syntaxe

� Chaque balise a une signification bien définie

HTML a été normalisé comme « dialecte » XML= � XHTML

Publication de données avec XSLT - B. Amann et P. Rigaux – p.27/167

Ce qu’on veut obtenir (démo)

<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 scène par <b>Alfred Hitchcock</b><h3>Résumé</h3>Scottie Ferguson,ancien inspecteur de police, est sujetau vertige depuis qu’il a vu mourir son

collègue...</p>

</body></html>

Publication de données avec XSLT - B. Amann et P. Rigaux – p.28/167

HTML, sous forme d’arbre

"Film: "

...

<TITRE>

<TITRE> <GENRE> <PAYS>

Marquage HTML

Eléments XML

html

head

title

body

img

p

h1

i

i

Publication de données avec XSLT - B. Amann et P. Rigaux – p.29/167

Le rôle de XSLT

XSLT doit nous permettre :

� De prendre en entrée un document XMLsource

� De produire en sortie un autre arbre XML

� D’insérer dans le document en sortie desfragments du document source

Donc bien adapté à une transformation XML - �

HTML

Publication de données avec XSLT - B. Amann et P. Rigaux – p.30/167

WML, autre dialecte de XML

� Document WML : marqué par la balise

wml

� Il est divisé en cartes, unité d’affichage sur lemobile ( �

card

� )

� Elements principaux :

� des balises simples de mise en forme( �

b

� , �

i

� )

� des ancres pour passer d’une carte à uneautre

Publication de données avec XSLT - B. Amann et P. Rigaux – p.31/167

Exemple d’une carte WML

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

<wml><card><p>

<b>Alien

</b>, 1979, Ridley Scott

<br/>Près d&apos;un vaisseau spatialéchoué sur une lointaineplanète, ..</p>

</card></wml>

Publication de données avec XSLT - B. Amann et P. Rigaux – p.32/167

SMIL

Langage pour la création de documentsmultimédia avec XML.

� On indique une fenêtre d’affichage avecdifférentes régions pour l’affichage descomposants.

� On place les composants dans lesdifférentes régions (positionnement spatiale).

� On synchronise l’affichage des composants(positionnement temporel).

Publication de données avec XSLT - B. Amann et P. Rigaux – p.33/167

Entête SMIL: Fenêtre et régions

reg_img_grand

reg_img_petit

600

pixe

ls

450 pixels

reg_texte

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

Publication de données avec XSLT - B. Amann et P. Rigaux – p.34/167

Corps SMIL: Positionnement

reg_img_grand

reg_img_petit

600

pixe

ls

450 pixels

Scottie Ferguson, ancieninspecteur de police estsujet au vertige depuisqu’il a vu mourir son collègue. Elster, son ami

Vertigo

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

Démo !

Publication de données avec XSLT - B. Amann et P. Rigaux – p.35/167

Version XSL-FO

Version XSL-FO - B. Amann et P. Rigaux – p.36/167

XSL-FO

Langage de description de documents avecXML.

� On indique les paramètres de mise en page(marges, taille des polices...)

� On place le contenu entre des balises deformatage

= � un processeur se charge de produire ledocument

Version XSL-FO - B. Amann et P. Rigaux – p.37/167

Transformation, et mise en forme

Document XSL-FO Document PDFDocument XML

Transformation Mise en Forme

Version XSL-FO - B. Amann et P. Rigaux – p.38/167

Exemples d’un 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>

Démo ! Le programme de l’Epée de Bois!

Version XSL-FO - B. Amann et P. Rigaux – p.39/167

Échanges et intégration de données

Échanges et intégration de données - B. Amann et P. Rigaux – p.40/167

Exemple : moteur de recherche

réponse

requête

www.sallesenligne.fr

www.cine-marseille.fr

www.epee-de-bois.fr

Échanges et intégration de données - B. Amann et P. Rigaux – p.41/167

Quelques idées

J’ai mes données

� Je leur ai défini une représentation

� Je leur applique des traitements (publicationou autre)

� Je peux les transmettre à quelqu’un d’autre(tout ou partie)

= � un service externe m’apporte une valeurajoutée

Échanges et intégration de données - B. Amann et P. Rigaux – p.42/167

Quel format ?

Mon problème :

� J’ai décrit mes données avec mon langageXML

� L’application attend des données dans sonlangage

Il faut :

� Décrire formellement les deux langages

� Faire une traduction de l’un à l’autre

Échanges et intégration de données - B. Amann et P. Rigaux – p.43/167

Les DTD

Document Type Definition

� Pour définir la structure d’une classe dedocuments (d’un langage)

� Exemple : un élément de type texte :

!ELEMENT TITRE ( #PCDATA )

� Exemple : un élément constitué d’une liste

!ELEMENT FILM (TITRE, CINEMA,VILLE, URL?, HEURE+)

Échanges et intégration de données - B. Amann et P. Rigaux – p.44/167

La DTD du moteur de recherche

Un fichier auquel on peut faire référence dans undocument :

1 <!ELEMENT FILM ( TITRE, CINEMA, VILLE, URL?, HEURE+ ) >2 <!ELEMENT TITRE ( #PCDATA ) >3 <!ELEMENT CINEMA ( #PCDATA ) >4 <!ELEMENT VILLE ( #PCDATA ) >5 <!ELEMENT URL ( #PCDATA ) >6 <!ELEMENT HEURE ( #PCDATA ) >

Document valide : conforme à une DTD.

Échanges et intégration de données - B. Amann et P. Rigaux – p.45/167

Architecture ( Démo )

XSLT

XSLT

Clientweb

Clientweb

ClientwebFlux XML

DocumentsXML

DTD 1

DTD 2

Intégration

BD

Moteurde recherche

Recherche

SQL

Échanges et intégration de données - B. Amann et P. Rigaux – p.46/167

Le document intégrateur

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

Échanges et intégration de données - B. Amann et P. Rigaux – p.47/167

Gestion de l’information avec XML

TransformationXSLT Document XML

Document XML

application XMLapplication web application WAPapplication édition

formatéPage XHTML

Contenu Page WML

présentationtransform

ationcontenu

Echange/intégration

Données statiques Données dynamiques

Application

XSLT

XSLTXSLT XSLT

XSLT

Base de données

MessageXML

FichiersRésultat

Échanges et intégration de données - B. Amann et P. Rigaux – p.48/167

Récapitulons !

XML = format d’échange de données entreapplication

� Permet de définir des « langages » pourdécrire des données (« méta-langage »)

� De nombreux outils d’analyse, parsing,interrogation, ...

� Transformation d’un langage à un autre avecXSLT

= � Bien adapté au web.

Échanges et intégration de données - B. Amann et P. Rigaux – p.49/167

XML = syntaxe + modèle

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.50/167

Le World Wide Web Consortium (W3C)

� URL: http://www.w3.org

� 400 partenaires industriels, parmi lesquelsles plus grand comme Oracle, IBM, Compaq,Xerox, Microsoft

� Laboratoires de recherche: MIT pour lesÉtats Unis, INRIA pour l’Europe, universitéKeio (Japon) pour l’Asie

� Objectif: définir un modèle pour faciliterl’échange de données sur le Web

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.51/167

Le langage de marquage XML

XML = eXtensible Markup Language

Recommendation W3C pour

� les documents Web (généralisation deHTML),

� mais aussi pour

� l’échange,

� l’intégration et

� l’interrogation des données sur le Web.

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.52/167

XML = Syntaxe

“ASCII du 21e siècle” :

� ASCII (ISO 646) et UNICODE/ISO 10646:encodage de caractères

� XML: encodage/linéarisation de données

XML premet de représenter des données avecune structure irrégulière, implicite et partielle

Les nouvelles techniques d’intégration etd’interrogation de données semi-structuréespeuvent être appliquées.

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.53/167

Notion de balisage structurel

Principe clé de XML : séparer la structure logiquedes données de leur présentation.

Avantages (par rapport à HTML):

� indépendance entre les outils de navigation(browser) et les outils de gestion de données(e.g. BD)

� différentes présentations sont possibles pourle même document

� indexation et interrogation

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.54/167

Forme sérialisée et forme arborescente

Il existe deux représentations d’un documentXML.

� Forme sérialisée : c’est la forme courante,où le contenu est marqué par des balises.

� Forme arborescente : elle met en évidencela structure du document.

Il est plus facile de raisonner sur la formearborescente pour concevoir des traitements

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.55/167

Un document sous forme sérialisée

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

<NOM>Epée de Bois

</NOM><ADRESSE>

100, rue Mouffetard</ADRESSE>

<METRO>Censier-Daubenton

</METRO></CINEMA>

Cette représentation permet le stockage etl’échange de documents.

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.56/167

XML = modèle de données

Un arbre, constitué de nœuds typés (éléments,commentaires, etc)

CINEMA

NOM

Épée de bois

ADRESSE

100, rue Mouffetard

METRO

Censier-Daubenton

La structure des arbres XML est définie par leDocument Object Model (DOM).

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.57/167

En pratique

On utilise la forme sérialisée :

� pour stocker un document dans un fichier

� pour échanger des documents

La forme arborescente :

� permet de spécifier des manipulations dedonnées XML modèle de données

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.58/167

Représentation sérialisée

Elle permet de marquer, par des balises, lastructure d’un document.

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

<!-- Commentaire --><A>Le texte de A

<B>Le texte de B</B><D attr1="1" attr2="azerty"><C/>

</D><![CDATA[2x < y]]>

</A>

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.59/167

Passage à la représentation DOM

Le document sérialisé est analysé, et unereprésentation arborescente est créée :

� le nœud racine est de type Document

� les catégories syntaxiques (commentaires,balises, texte) se traduisent par différentstypes de nœuds (Comment, Element, Text)

� les nœuds constituent un arbre qui reflètel’imbrication des éléments dans la formesérialisée

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.60/167

La représentation DOM

Document-

Comment-

Commentaire

ElementA

Text-

Le texte de A

ElementB

Text-

Le texte de B

ElementD

Attrattr1

1

Attrattr2azerty

ElementC

CDataSection-

2x � y

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.61/167

Présentation de la syntaxe XML

Un ensemble de catégories syntaxiques :

� les éléments (et leurs attributs)

� les commentaires

� les instructions de traitement

� les sections de texte

� les sections littérales

Ainsi que quelques règles sur la structure d’undocument

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.62/167

La déclaration XML

Tout document XML peut être précédé par unedéclaration :<?xml version="1.0" encoding="ISO-8859-1"?>

� l’attribut encoding indique le jeu decaractères utilisé dans le document

� l’attribut optionnel standalone indique si ledocument est composé de plusieurs entités.

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.63/167

Déclaration de type

On peut indiquer qu’un document est conforme àune DTD, et déclarer des entités.<!DOCTYPE nom SYSTEM "sourceExt" [decLoc]>

� nom est le type de l’élément racine

� sourceExt est un source extérieurecontenant la DTD

� decLoc sont des déclarations locales (pourles entités principalement)

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.64/167

Entités et références à des entités

Les entités servent à factoriser des parties dudocument.

<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE A SYSTEM "minimal.dtd" [

<!ENTITY monTexte "texte simple"><!ENTITY maSignature SYSTEM "signature.xml">

]><A>

Du &monTexte;, sans caractères réservés:ni &lt; ni &gt; ni &amp; ni &apos; ni &quot;

&maSignature;</A>

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.65/167

Entités caractères

Déclaration entité Référence Car.<!ENTITY lt "&#60;"> &lt; <

<!ENTITY gt "&#62;"> &gt; >

<!ENTITY amp "&#38;"> &amp; &

<!ENTITY apos "&#39;"> &apos; ’

<!ENTITY quot "&#34;"> &quot "

Table 1:

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.66/167

Commentaires et instructions de traitement

� Les commentaires : à utiliser avecparcimonie :<!-- Ceci est un commentaire -->

� Instructions de traitement : lié au systèmequi traite le document :<?xml-stylesheet href="prog.xslt"type="text/xslt">

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.67/167

Éléments

Dans la forme sérialisée :

� C’est une balise ouvrante avec un nom,puis un contenu, puis une balise fermante

Dans la forme arborescente

� C’est un nœud avec un nom

� Le contenu est un arbre

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.68/167

Exemple : un élément avec contenu

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

<A>Le texte de A<B>Le texte de B</B>

</A>

ElementA

Text-

Le texte de A

ElementB

Text-

Le texte de B

Text-

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.69/167

Quelques remarques sur les éléments

� Un nom d’élément ne contient pas de blanc,ni de caractère accentué

� Les majuscules sont distinguées desminuscules

� Il existe une forme abrégée pour leséléments sans contenu : <C></C> peuts’écrire <C/>.

� Tout document comprend un et un seulélément racine

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.70/167

Attributs

Les attributs constituent un autre moyen dereprésenter de l’information.<A att1=’1’ att2=’2’>

� l’ordre des attributs n’est pas important

� il doit toujours y avoir une valeur, encadréepar des guillemets (différent de HTML)

� il ne peut pas y avoir deux attributs avec lemême nom dans un élément.

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.71/167

Attributs : exemples

� <A att1=’1’ att2=’2’> est équivalent à<A att2=’2’ att1=’1’>

ElementAAttr

att11

Attratt2

2

� <A att=a> n’est pas bien formé : pasd’apostrophe

� <A att1=’1’ att1=’2’/> : interdit

� <A att1=’1’/> <B att1=’2’/> :autorisé (deux éléments différents)

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.72/167

Les sections littérales

À priori, on n’a pas le droit de placer dans lecontenu d’un document XML des caractèrescomme ’<’, ’>’, ou ’&’.

<?xml version=’1.0’?><PROGRAMME>if ((i < 5) && (j > 6)) printf("error");</PROGRAMME>

est incorrecte!

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.73/167

Solution : sections CDATA

Elles permettent d’inclure du texte qui n’est pasanalysé par le parseur :<?xml version=’1.0’?><PROGRAMME><![CDATA[if ((i < 5) && (j > 6)) printf("error"); ]]></PROGRAMME>

CDATASection-

if ((i < 5) && (j > 6)) printf("error");

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.74/167

Résumé : structure d’un document XML

Un document XML comprend trois parties :

� le prologue, avec la déclaration XML, laDTD, des commentaires, des instructions detraitements (optionnels)

� un élément racine avec son contenu

� un épilogue avec des commentaires, ou desinstructions de traitements (optionnels)

Le contenu du document proprement dit est le

contenu de l’élément racine.

XML = syntaxe + modèle - B. Amann et P. Rigaux – p.75/167

XPath

Sélectionner des Fragments XML

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.76/167

Exemple: Document XML

Document XML:/

FILM

TITRE

Vertigo

AUTEUR

Hitchcock

ANNEE

1958

RESUME

Scotty...

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.77/167

Exemple: Règle de transformation

/

FILM

TITRE

Vertigo

AUTEUR

Hitchcock

ANNEE

1958

RESUME

Scotty...

p

h1

i

*

i

*

p

*

h3

Résumé: *

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.78/167

Exemple: Résultat

Fragment HTML:p

h1

i

Vertigo

i

1958

p

Hitchcock

h3

Résumé: Scotty...

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.79/167

Référencer des fragments XML avec XPATH

Pour pouvoir transformer un document XML ilfaut pouvoir extraire des fragments (nœuds) XMLd’un document XPath :

� XPath est fondé sur une représentationarborescente (DOM) du document XML

� Objectif : référencer nœuds (éléments,attributs, commentaires, ...) dans undocument XML

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.80/167

XPath: Exemples de chemins XPath

Document XML:

/

FILM

TITRE

Vertigo

AUTEUR

Hitchcock

ANNEE

1958

RESUME

Scotty...

/FILM

/FILM/RESUME/FILM/TITRE

/FILM/RESUME/text()

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.81/167

XPath: Utilisation

� Le langage permet de désigner un ouplusieurs nœuds dans un document XML, àl’aide d’expressions de chemin.

� XPath est utilisé par

� XSLT pour sélectionner des règles detransformation

� XML Schéma pour créer des clés etréférences

� XLink pour créer des liens entredocuments/fragments XML

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.82/167

Les arbres XPath

Un typage simplifié par rapport à celui de DOM

� Document

� Element

� Text

� Attribut

� ProcessingInstruction

� Comment

pas d’entité, pas de section littérale

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.83/167

Exemple : l’arbre DOM...

Document-

ElementEXEMPLE

Text-

Section littérale avec

SectionCDATA-

des ’&’, des ’ � ’ des ’ � ’

Text-

et un text

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.84/167

Puis l’arbre XPath...

Document-

ElementEXEMPLE

Text-

Section littérale avec des ’&’, des ’ � ’ des ’ � ’ et un texte

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.85/167

Expressions XPath

Une expression XPath :

� s’évalue en fonction d’un nœud contexte

� désigne un ou plusieurs chemins dansl’arbre à partir du nœud contexte

� a pour résultat

� un ensemble de nœuds

� ou une valeur, numérique, booléenne oualphanumérique

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.86/167

Chemins XPath

Un chemin XPath est une suite d’étapes :[/]étape �/étape �/.../étape �

Deux variantes : Un chemin peut être

� absolu : /FILM/RESUMELe nœud contexte est alors la racine dudocument.

� ou relatif : RESUME/text()Le nœud contexte est un nœud dans ledocument (pas forcément la racine).

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.87/167

Étapes XPath

Une étape : trois composants

[axe::]filtre[prédicat1][prédicat2] � � �

� l’axe : sens de parcours des nœuds (pardéfaut: child).

� le filtre : type des nœuds qui seront retenus

� le(s) prédicat(s) que doivent satisfaire lesnœuds retenus

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.88/167

Les axes XPath

Un axe XPath recouvre les deux notionssuivantes :

� un sous-ensemble des nœuds de l’arbrerelatif au nœud contexte ;

� l’ordre de parcours de ces nœuds à partir dunœud contexte.

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.89/167

Exemple de référence

Document-

InstructionJavains1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.90/167

Exemple : le nœud contexte

Document-

InstructionJavains1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.91/167

child::D ou D

Document-

InstructionJavains1

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.92/167

attribute::att1 ou @att1

Document-

InstructionJavains1

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.93/167

parent::A

Document-

InstructionJavains1

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.94/167

Notation abrégée de parent::A

La notation abrégée .. désigne le père dunœud contexte, quel que soit son type.Équivalent à :

parent:node()

node() est un filtre qui désigne tous les types

de nœuds (sauf les attributs)

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.95/167

Axe descendant

Document-

InstructionJavains1

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.96/167

Axe ancestor

Document-

InstructionJavains1

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.97/167

Axe self

� il désigne le nœud contexte lui-même. Doitêtre complété par un filtre. Exemples :

� notre nœud contexte : self::B

� mais self::A renvoie un ensemble vide

� Pour prendre le nœud quel que soit sontype :

self::node()

� Notation abrégée : « . »

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.98/167

Axe preceding-sibling

Document-

InstructionJavains1

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.99/167

Axe following

Document-

InstructionJavains1

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.100/167

Axes: Résumé

� nœuds enfants et descendants: child,descendant, descendant-or-self

� nœud parent et ancêtres: parent,ancestor

� frères: preceding-sibling,following-sibling

� nœuds précédents et suivants:preceding, following

� nœud même: self

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.101/167

Filtres

Deux manières de filtrer les nœuds :

� par leur nom :

� possible pour les types de nœuds qui ontun nom : Element,ProcessingInstruction et Attr

� par leur type DOM.

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.102/167

Chemin absolu : /A/B/D

Document-

InstructionJavains1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.103/167

/descendant::node()/@att2

Document-

InstructionJavains1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.104/167

Nom générique : /A/*

Document-

InstructionJavains1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.105/167

Filtrage sur le type de nœud

� text() : Nœuds de type Text

� comment() : Nœuds de type CommentExemple : /comment()

� processing-instruction() : Nœuds detype ProcessingInstructionExemple : /processing-instruction(),ou/processing-instruction(’java’)

� node() : Tous les types de nœud

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.106/167

/A/B//text()

Document-

InstructionJavains1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.107/167

/comment()

Document-

InstructionJavains1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.108/167

Prédicats

� Prédicat : expression booléenne constituéed’un ou plusieurs tests, composés avec lesconnecteurs logiques habituels and et or

� Test :

� toute expression XPath, dont le résultatest convertie en booléen;

� une comparaison, un appel de fonction.

il faut connaître les règles de conversion

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.109/167

Quelques exemples

/A/B[@att1] : Les nœuds /A/B qui ont unattribut @att1

/A/B[@att1=’a1’] : Les nœuds /A/B qui ontun attribut @att1 valant ’a1’

/A/B/descendant::text()[position()=1] :Le premier nœud de type Text descendantd’un /A/B.

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.110/167

Pour bien comprendre

Dans l’expression /A/B[@att1] :

� On s’intéresse aux nœuds de type B fils del’élément racine A.

� Parmi ces nœuds on ne prend que ceuxpour lesquels le prédicat [@att1] s’évalueà true

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

� [@att1] vaut true ssi @att1 renvoie unensemble de nœuds non vide

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.111/167

Contexte d’évaluation

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

� un nœud contexte, position initiale duchemin ;

� ce nœud fait lui-même partie d’un ensembleobtenu 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 contextedans cet ensemble (fonction position())

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.112/167

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

Document-

InstructionJavains1

ElementA

ElementB

Attratt1

a1

ElementD

Text-

Texte1

ElementD

Text-

Texte2

ElementB

Attratt1

a2

ElementD

Text-

Texte3

ElementC

Attratt2

a3

Attratt3

15

Comment-

CommFin

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.113/167

Typage avec XPath

On peut effectuer des comparaisons, desopérations. Cela implique un typage et desconversions de type.Types XPath :

� les numériques

� les chaînes de caractères

� les booléens (true et false)

� enfin les ensembles de nœuds

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.114/167

Numériques

Notation décimale habituelle

� Comparaisons habituelles (<, >, !=)

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

� La fonction number () permet de tenter uneconversion

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

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.115/167

Conversions

Deux conversions sont toujours possibles.

� Vers une chaîne de caractères.

� utile pour la production de texte en XSLT(balise xsl:value-of)

� Vers un booléen

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.116/167

Conversions booléennes

� Pour les numériques : 0 ou NaN sontfalse, tout le reste est true

� Pour les chaînes : une chaîne vide estfalse, tout le reste est true

� Pour les ensembles de nœuds : unensemble vide est false, tout le reste esttrue

Comparaisons : des règles de conversionétranges...

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.117/167

Fonctions XPath

Quelques fonctions utiles dans les prédicats :

� concat(chaîne1, chaîne2, ...) pourconcaténer des chaînes

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

� count (expression) renvoie le nombre denœuds désignés par expression

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

� not(expression) : négation

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.118/167

Prédicats: Exemples

Axes « d’avancement » :

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

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

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

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

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.119/167

Prédicats: Axes inverses

Axes « inverses » :

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

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.120/167

Prédicats: Exemples

Test du nombre d’occurrences :

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

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

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.121/167

Prédicats: Sélection par valeur

Sélection par valeur:

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

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

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.122/167

Prédicats: Exemples

Test sur la structure : chemins imbriqués avec connecteurslogiques (qualifiers)

� ACTEUR[NOM and DATENAISSANCE] ouACTEUR[NOM][DATENAISSANCE]: les acteurs avecun 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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.123/167

Remarque sur les prédicats

Attention: Les deux premières expressions sontequivalentes, mais pas la troisième! Pourquoi?

� FILM[ACTEUR and position()=1]

� FILM[position()=1][ACTEUR]

� FILM[ACTEUR][position()=1]

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.124/167

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>

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.125/167

Où sont les espaces ?

Un peu partout !

� avant la balise ouvrante de l’élément racine ;

� à l’intérieur d’une balise ;

� à l’intérieur d’un élément ;

� à l’intérieur de la valeur d’un attribut ;

� entre deux balises ;

� entre deux attributs.

Tous n’ont pas la même importance

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.126/167

Les espaces dans XPath

� Les espaces du prologue ou de l’épiloguesont supprimés.

� Les espaces consécutifs sont réduits à unseul.

� Les fins de lignes sont représentées par lecaractère #xA.

� En général, les espaces en début et find’attributs sont supprimées.

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.127/167

L’arbre XPath du document

Document-

ElementA

Text-

#xA#20

ElementB

Attrat1

#20val1#20

Attrat2

#20avec#20blanc#20

Text-

#xA#20

ElementC

Text-

#20

Text-

#xA#20

ElementD

Text-

#20texte#20

Text-

#xA#20

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.128/167

Instruction xsl:strip-space

Document-

ElementA

ElementB

Attrat1

#20val1#20

Attrat2

#20avec#20blanc#20

ElementC

ElementD

Text-

#20texte#20

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.129/167

XPath : Résumé

XPath est un langage pour extraire des noeudsdans un arbre XML :

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

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

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

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

XPathSélectionner des Fragments XML - B. Amann et P. Rigaux – p.130/167

Introduction à XSLT

Introduction à XSLT - B. Amann et P. Rigaux – p.131/167

Sommaire

Une introduction à XSLT, destinée à comprendreles mécanismes du langage.

� Règles XSLT

� Désignation de fragments XML

� Appels de règles

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

� Passage de paramètres

Introduction à XSLT - B. Amann et P. Rigaux – p.132/167

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

Introduction à XSLT - B. Amann et P. Rigaux – p.133/167

Fonctions d’une Feuille de Style XSLT

Fonction de Base: Langage de règles detransformation de documents/arbres XML:

� extraction de données

� génération de texte

� suppression de contenu (noeuds)

� déplacer contenu (noeuds)

� dupliquer contenu (noeuds)

� trier

Introduction à XSLT - B. Amann et P. Rigaux – p.134/167

Exemple

/

FILM

TITRE

Vertigo

AUTEUR

Hitchcock

ANNEE

1958

RESUME

Scotty...

p

h1

i

*

i

*

p

*

h3

Résumé: *

Introduction à XSLT - B. Amann et P. Rigaux – p.135/167

Exemple: Règle de transformation

1 <xsl:template match="FILM">2 <p>3 <h1>4 <i>5 <xsl:value-of select="TITRE"/>6 </i>7 </p>8 <i>9 <xsl:value-of select="ANNEE"/>

10 </i>11 <p>12 <xsl:value-of select="AUTEUR"/>13 </p>14 <h3>Résumé:15 <xsl:value-of select="RESUME"/>16 </h3>17 </p>18 </xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.136/167

Extraction de données

� Exemple : recherche du titre pour le nœudFILM :

xsl:value-of select="TITRE"/

� Plus généralement : on donne un chemind’accès XPath à un nœud à partir du nœudcourant (noeud contexte).

Introduction à XSLT - B. Amann et P. Rigaux – p.137/167

Génération de texte

Produire une phrase quand on rencontre unnœud FILM :

<xsl:template match="FILM">Ceci est le texte produit parapplication de cette règle.

</xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.138/167

Génération d’un arbre XML

Produire un document/fragment/arbre XMLquand on rencontre un nœud FILM :

<xsl:template match="FILM"><body>

<p>Un paragraphe</p></body>

</xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.139/167

Génération avec extraction

Produire un document/fragment/arbre XMLquand on rencontre un nœud FILM :

1 <xsl:template match="FILM">2 <body>3 <p>4 <xsl:text>Titre: </xsl:text>5 <xsl:value-of select="TITRE"/>6 </p>7 </body>8 </xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.140/167

Structure de base : les règles

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

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

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

Programme XSLT = ensemble de règles pourconstruire un résultat

Introduction à XSLT - B. Amann et P. Rigaux – p.141/167

Un exemple

1 <xsl:template match="FILM">2 <p>3 <h1>4 <i><xsl:value-of select="TITRE"/></i>5 </h1>6 <i><xsl:value-of select="ANNEE"/></i>7 <p><xsl:value-of select="AUTEUR"/></p>8 <h3>9 Résumé: <xsl:value-of select="RESUME"/>

10 </h3>11 </p>12 </xsl:template>

� Motif de sélection : match="FILM"

� Corps de la règle = fragment d’arbre àproduire

Introduction à XSLT - B. Amann et P. Rigaux – p.142/167

Illustration

FILM

TITRE

Vertigo

AUTEUR

Hitchcock

ANNEE

1958

GENRE

Drame

PAYS

USA

RESUME

Scotty...

select="TITRE"

Contexte d’application de la règle XSLT

Introduction à XSLT - B. Amann et P. Rigaux – p.143/167

Une règle complète

1 <xsl:template match="FILM">2 <html>3 <head>4 <title>Film:5 <xsl:value-of select="TITRE"/>6 </title>7 </head>8 <body>9 Le genre du film, c’est

10 <b><xsl:value-of select="GENRE"/></b>11 </body>12 </html>13 </xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.144/167

Le résultat

On obtient :

1 <html>2 <head>3 <title>Film:4 Vertigo5 </title>6 </head>7 <body>8 Le genre du film, c’est9 <b>Suspense</b>

10 </body>11 </html>

Introduction à XSLT - B. Amann et P. Rigaux – p.145/167

Chemins complexes

Dans l’exemple précédent, on accédait aux filsd’un nœud.En fait on peut :

� Accéder à tous les descendants

� Accéder aux parents, aux frères, auxneveux...

� Accéder aux attributs

� Effectuer des boucles

Le langage d’expression de chemins : XPath.

Introduction à XSLT - B. Amann et P. Rigaux – p.146/167

Exemple: Document XML

1 <?xml version="1.0" encoding="ISO-8859-1"?>23 <?xml-stylesheet href="Salle.xsl" type="text/xsl"?>4 <?cocoon-process type="xslt"?>5 <SALLE NO=’1’ PLACES=’320’>6 <FILM>7 <TITRE>Alien</TITRE>8 <AUTEUR>Ridley Scott</AUTEUR>9 <ANNEE>1979</ANNEE>

10 <GENRE>Science-fiction</GENRE>11 <PAYS>Etats Unis</PAYS>12 <RESUME>Près d’un vaisseau spatial échoué sur une lointaine13 planète, des Terriens en mission découvrent de bien étranges14 "oeufs". Ils en ramènent un à bord, ignorant qu’ils viennent15 d’introduire parmi eux un huitième passager particulièrement16 féroce et meurtrier.17 </RESUME>18 </FILM>19 <REMARQUE>Réservation conseillée</REMARQUE>20 <SEANCES>21 <SEANCE>15:00</SEANCE>22 <SEANCE>18:00</SEANCE>23 <SEANCE>21:00</SEANCE>24 </SEANCES>25 </SALLE>

Introduction à XSLT - B. Amann et P. Rigaux – p.147/167

Exemple: Traduction de Salle

1 <xsl:template match="SALLE">2 <h2>Salle No3 <xsl:value-of select="@NO"/></h2>4 Film: <xsl:value-of select="FILM/TITRE"/>5 de <xsl:value-of select="FILM/AUTEUR"/>6 <ol> <xsl:for-each select="SEANCES/SEANCE">7 <li><xsl:value-of select="."/></li>8 </xsl:for-each>9 </ol>

10 </xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.148/167

Le résultat

Appliqué à Salle1.xml :

1 <h2>Salle No 1 </h2>2 Film: Alien3 de Ridley Scott4 <ol>5 <li> 15:00</li>6 <li> 18:00</li>7 <li> 21:00</li>8 </ol>

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

Introduction à XSLT - B. Amann et P. Rigaux – p.149/167

Salles et séances

15:00 18:00 21:00

Réservationconseilléevaisseau spatial...

PLACES=320chemin "FILM/TITRE"

"REMARQUE"

chemin

chemin

SEANCES/SEANCE

bouclefor-each

chemin "@NO"Contexte d’application de la règle

AUTEUR ANNEE GENRE PAYS RESUME

FILM

SALLE

SEANCES

SEANCE SEANCE SEANCE

REMARQUE

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

TITRE

NO=2

Introduction à XSLT - B. Amann et P. Rigaux – p.150/167

Chemins complexes

� Descendants : le titre du film est désignépar select="FILM/TITRE" ;

� Attributs : le numéro de la salle est désignépar select="@NO" ;

� Boucles : avec xsl:for-each surl’ensemble des séances désignées parselect="SEANCES/SEANCE" ;

� L’élément contexte : désigné par le symbole’.’, comme dans select=".".

Introduction à XSLT - B. Amann et P. Rigaux – p.151/167

Appels de règles

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

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

� On produit alors le cadre du documentHTML

� On appelle d’autres règles pour compléter lacréation du résultat

Introduction à XSLT - B. Amann et P. Rigaux – p.152/167

Exemple : L’Épée de bois

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

1 <xsl:template match="/">2 <html>3 <head><title>Programme de4 <xsl:value-of select="CINEMA/NOM"/>5 </title>6 </head>7 <body bgcolor="white">8 <xsl:apply-templates select="CINEMA"/>9 </body>

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

Introduction à XSLT - B. Amann et P. Rigaux – p.153/167

Règle CINEMA

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

1 <xsl:template match="CINEMA">2 <h1><i>3 <xsl:value-of select="NOM"/>4 </i></h1><hr/>5 <xsl:value-of select="ADRESSE"/>,6 <i>Métro: </i>7 <xsl:value-of select="METRO"/>8 <hr/>9 <xsl:apply-templates select="SALLE"/>

1011 </xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.154/167

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

Introduction à XSLT - B. Amann et P. Rigaux – p.155/167

La même chose, en WML

On génère les cartes du site

1 <xsl:template match="/">2 <wml>3 <!-- Carte d’accueil -->4 <xsl:apply-templates select="CINEMA"/>56 <!-- Cartes pour les salles et séances -->7 <xsl:apply-templates select="CINEMA/SALLE"/>89 <!-- création des cartes pour les films -->

10 <xsl:apply-templates select=".//FILM"/>11 </wml>12 </xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.156/167

Arbre XML du site

card card

pp

a

a

card card card

p p p

wml

a a

id=index id=S1

href=S1

href=S2

id=S2 id=Alien id=Vertigo

href=Vertigohref=Alien

Introduction à XSLT - B. Amann et P. Rigaux – p.157/167

Règle CINEMA

1 <xsl:template match="CINEMA">2 <card id="index" title="Programme">3 <p align="center">4 <xsl:value-of select="NOM"/>5 </p>6 <xsl:for-each select="SALLE">7 <p> <a href="#S{@NO}">8 Salle <xsl:value-of select="@NO"/>:9 </a>

10 <xsl:value-of select="FILM/TITRE"/>11 </p>12 </xsl:for-each>13 </card>14 </xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.158/167

Résultat

1 <card id="index" title="Programme">2 <p align="center">3 Ep&#xE9;e de bois4 </p>5 <p>6 <a href="#S1"> Salle 1: </a>7 Alien8 </p>9 <p>

10 <a href="#S2"> Salle 2: </a>11 Vertigo12 </p>13 </card>

Introduction à XSLT - B. Amann et P. Rigaux – p.159/167

Règle SALLE

1 <xsl:template match="SALLE">2 <card id="S{@NO}">3 <p>Séances salle4 <xsl:value-of select="@NO"/></p>5 <p>6 <a href="#{FILM/TITRE}">7 Film :8 <xsl:value-of select="FILM/TITRE"/>9 </a>

10 </p>11 <xsl:apply-templates select="SEANCES"/>12 </card>13 </xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.160/167

Résultat

1 <card id="S2">2 <p>3 S&#xE9;ances salle 24 </p>5 <p>6 <a href="#Vertigo">7 Film : Vertigo</a>8 </p>9 <p>

10 S&#xE9;ance 22:0011 </p>12 </card>

Introduction à XSLT - B. Amann et P. Rigaux – p.161/167

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>

Introduction à XSLT - B. Amann et P. Rigaux – p.162/167

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 et P. Rigaux – p.163/167

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="($titre = ’’ or TITRE = $titre)

and ($seance = ’’ or HEURE &gt;= $seance)and ($ville = ’’ or VILLE = $ville)"><xsl:apply-templates select="." /><p/>

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

</xsl:template>

Introduction à XSLT - B. Amann et P. Rigaux – p.164/167

Conclusion sur XSLT

Un langage totalement adapté au traitement dedocuments XML

� Parcours d’un document, vu comme un arbre

� Déclenchement de règles sur certainsnœuds

� Association de plusieurs programmes à unmême document

Introduction à XSLT - B. Amann et P. Rigaux – p.165/167

Bibliographie sur XSLT

1. Recommendation XSLT sur le site du W3C

2. B. Amann et P. Rigaux, Comprendre XSLT,O’Reilly

3. P. Wadler, A formal semantics of patterns inXSLT

Introduction à XSLT - B. Amann et P. Rigaux – p.166/167

Conclusion

Le monde XML est encore dans ces débuts et ilresterait beaucoup de choses à dire sur

� le langage XSLT même (syntaxe etsémantique),

� sa relation avec d’autres technologies (e.g.XQuery, DOM, services Web...) et

� son intégration dans les architectures(serveurs et portails Web, SGBD, ...)

Introduction à XSLT - B. Amann et P. Rigaux – p.167/167

top related