publication de données avec xml, xpath et...
TRANSCRIPT
Publication de données avec XML,Xpath et XSLT
License Professionelle ACSID
CNAM, Paris 2003 - Bernd Amann
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'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 < ni > ni & ni ' ni "
&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 "<"> < <
<!ENTITY gt ">"> > >
<!ENTITY amp "&"> & &
<!ENTITY apos "'"> ' ’
<!ENTITY 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é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éances salle 24 </p>5 <p>6 <a href="#Vertigo">7 Film : Vertigo</a>8 </p>9 <p>
10 Sé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 >= $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