La technologie XML
Bernd Amannamann@cnam.fr
Cnam
La technologie XML / B. Amann et P. Rigaux – p.1/159
Objectifs du Cours
Mieux comprendre l’utilisation de la technologie XML pour la gestion des données sur le Web :
Représentation de données avec XML
Interrogation avec XPath
Transformation avec XSLT
Stockage de documents/données XML
Introduction à XML
Introduction à XML - B. Amann – p.3/159
Pourquoi XML?
Une présentation, basée sur une étude de cas, des apports de XML :
XML, format universel Publication avec XSLT
Échange et intégration de données XML et bases de données
Les questions : XML, c’est quoi, et pour quoi faire?
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 des affiches...
inclure des informations sur des films provenant d’une base de données MySQL,
approvisionner un moteur de recherche pour chercher des séances, des films, des horaires...
Introduction à XML - B. Amann – p.5/159
Echanges et publication des données
Les données Les sallesLes horaires Les films (en XML) Publication Echange Site Wap (WML) Site web (HTML) Document papier (XSL−FO) recherche Moteur de Introduction à XML - B. Amann – p.6/159
L’architecture du site
Cocoon Servlet A
Apache
Programmes CGI Pages HTML
Pages JSP Doc. XML Tomcat 8080 80 Requêtes HTTP Scripts PHP Transfert requêtes Servlets Introduction à XML - B. Amann – p.7/159
La fiche du film Gladiator
La fiche du film peut être publiée en HTML pour Netscape/IE en WML pour le portables WAP en SMIL pour Realplayer
dans un moteur de recherche SallesEnLigne.com L’information ?
c’est la même, sous des formes différentes elle est échangée entre plusieurs acteurs
Les solutions XML ?
Format universel :
représentation en chaîne de caractères d’un contenu structuré
indépendant de toute application Publier l’information
outils de transformation simples pour convertir un contenu XML
Échanger et intégrer l’information
assembler des contenus XML, ou au contraire en extraire des informations
Introduction à XML - B. Amann – p.9/159
Pourquoi pas HTML ?
Actuellement, le principal format du Web est HTML: HTML est un langage pour présenter des informations à l’écran.
il ne permet pas d’échanger des données
il ne permet pas un traitement des données autre que l’affichage
On ne sait pas interpréter des données fournies en HTML.
XML, c’est quoi ?
XML = rendre un contenu accessible à toute application. Le contenu :
L’Epée de bois, 100 rue Mouffetard, métro Censier-Daubenton Le 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> Introduction à XML - B. Amann – p.11/159
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
Encore mieux : sous forme d’arbre
CINEMA NOM Épée de bois ADRESSE 100, rue Mouffetard METRO Censier-Daubenton Traiter un document XML = extraire des informations d’un arbre.Introduction à XML - B. Amann – p.13/159
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> Introduction à XML - B. Amann – p.14/159
Sous forme d’arbre
CINEMA
METRO ADRESSE
NOM SALLE
TITRE REMARQUE SEANCES
SEANCE SEANCE SEANCE SALLE
TITRE SEANCES
SEANCE Epée de bois 100, rue
Mouffetard Censier Alien Réservation conseillée 15:00 18:00 21:00 Vertigo 22:00 NO=1 NO=2 PLACES=320 PLACES=120 Introduction à XML - B. Amann – p.15/159
Documents XML
Un document XML estune 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...
Origine d’un document XML
XML permet d’intégrer des contenus provenant d’origines diverses
d’un éditeur de texte d’un site Web
d’une base de données d’un fichier...
Encore la même idée : rendre le contenu indépendant de l’application
Introduction à XML - B. Amann – p.17/159
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 depuis qu’il a vu mourir son collègue....
</RESUME> </FILM> <SEANCES> <SEANCE>22:00</SEANCE> </SEANCES> </SALLE> Introduction à XML - B. Amann – p.18/159
Sous forme d’arbre
TITRE AUTEUR ANNEE GENRE PAYS RESUME
SEANCES FILM SALLE SEANCE Salle2.xml:/ 22:00 Vertigo Hitchcock 1958 1958 USA Scotty...
NO=2 PLACES=120
Introduction à XML - B. Amann – p.19/159
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>
Premier bilan
Disposer d’une et une seule représentation
J’utilise un traitement de texte ? je suis prisonnier 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ésentation dans un navigateur
= utiliser XML, et convertir vers HTML
Introduction à XML - B. Amann – p.21/159
Publication de données avec XML
Séparer la gestion du contenu de la présentation
Gestion du contenu = décrire nos informations, avec
un vocabulaire XML
Présentation = mettre en forme nos documents pour
une application particulière
Application
Nous avons décrit notre cinéma avec notre propre langage (DTD). On peut traduire ce langage vers d’autres langages XML :
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 documents papier
Introduction à XML - B. Amann – p.23/159
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
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 sujet au vertige depuis qu’il a vu mourir son
collègue... </p>
</body> </html>
Introduction à XML - B. Amann – p.25/159
HTML, sous forme d’arbre
"Film: "
...
<TITRE>
<TITRE> <GENRE> <PAYS>
Marquage HTML Eléments XML html head title body img p h1 i i Introduction à XML - B. Amann – p.26/159
Transformation XSLT
Un programme de transformation XSLT doit nous permettre :
De prendre en entrée un document XML source De produire en sortie un autre arbre XML
D’insérer dans le document en sortie des fragments du document source
Introduction à XML - B. Amann – p.27/159
WML, autre dialecte de XML
Document WML : marqué par la balise wml
Il est divisé en cartes, unité d’affichage sur le mobile
( card )
Elements principaux :
des balises simples de mise en forme ( b , i )
des ancres pour passer d’une carte à une autre
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 lointaine
planète, .. </p> </card> </wml> Introduction à XML - B. Amann – p.29/159
SMIL
Langage pour la création de documents multimédia avec XML.
On indique une fenêtre d’affichage avec différentes régions pour l’affichage des composants.
On place les composants dans les différentes régions (positionnement spatiale).
On synchronise l’affichage des composants (positionnement temporel).
Entête SMIL: Fenêtre et régions
reg_img_grand reg_img_petit 600 pixels 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>
Introduction à XML - B. Amann – p.31/159
Corps SMIL: Positionnement
reg_img_grand reg_img_petit
600 pixels
450 pixels
Scottie Ferguson, ancien inspecteur de police est sujet au vertige depuis qu’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 ! Introduction à XML - B. Amann – p.32/159
XSL-FO
Langage de description de documents avec XML.
On indique les paramètres de mise en page (marges, taille des polices...)
On place le contenu entre des balises de formatage
= un processeur se charge de produire le document
Introduction à XML - B. Amann – p.33/159
Exemples 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!
Quelques idées
J’ai mes données
Je leur ai défini une représentation
Je leur applique des traitements (publication ou autre) Je peux les transmettre à quelqu’un d’autre (tout ou partie)
= un service externe m’apporte une valeur ajoutée
Introduction à XML - B. Amann – p.35/159
Quel format ?
Mon problème :
J’ai décrit mes données avec mon langage XML L’application attend des données dans son langage Il faut :
Décrire formellement les deux langages Faire une traduction de l’un à l’autre
Les DTD
Document Type Definition
Pour définir la structure d’une classe de documents (d’un langage)
Exemple : un élément de type texte :
<!ELEMENT TITRE (#PCDATA) >
Exemple : un élément constitué d’un titre, d’un
cinéma, d’une ville, d’une URL (optionnelle) et d’une séquence d’heures.
<!ELEMENT FILM (TITRE, CINEMA, VILLE, URL?, HEURE+)>
Introduction à XML - B. Amann – p.37/159
La DTD du moteur de recherche
Un fichier auquel on peut faire référence dans un document :
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.
Architecture (
Démo)
XSLT XSLT Client web Client web Client web Flux XML Documents XML DTD 1 DTD 2 Intégration BD Moteur de recherche Recherche SQL Introduction à XML - B. Amann – p.39/159Le 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> Introduction à XML - B. Amann – p.40/159Gestion de l’information avec XML
Transformation
XSLT Document XML
Document XML
application XML application web application édition application WAP
formaté
Page XHTML Contenu Page WML
présentation
transformation
contenu
Echange/intégration
Données statiques Données dynamiques
Application XSLT XSLT XSLT XSLT XSLT Base de données Message XML Fichiers Résultat Introduction à XML - B. Amann – p.41/159
Les applications du Web avec XML
Publication d’informations: transformation de XML 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 : dialectes XML partagés entre les membres d’une communauté, services Web (SOAP)
Recherche d’information : langages requêtes (XQuery)
Récapitulons !
XML = format d’échange de données entre application Permet de définir des « langages » pour décrire des données (« méta-langage »)
Permet de représenter pratiquement toute information semi-structurée
De nombreux outils d’analyse, parsing, interrogation, transformation, ...
= Bien adapté au web.
Introduction à XML - B. Amann – p.43/159
Les API DOM et Sax
Programmer avec XML
Les deux principales interfaces de programmation XML : DOM (Document Object Model), basé sur une
représentation hiérarchique
SaX (Simple API for XML), basé sur des déclencheurs (événements/action)
Les API DOM et Sax - B. Amann – p.45/159
Les API XML
L’API DOM :
Construit une représentation du document en mémoire sous forme d’arbre
Adaptée aux applications qui modifient ou traitent dans leur globalité un document.
L’API SaX :
Définit des triggers qui se déclenchent sur certaines balises.
Adaptée aux applications qui extraient de l’information d’un document
DOM et SaX
Toutes les applications XML passent par une phase préalable d’analyse Parseur SaX DOM Parseur Document XML Processeur XSLT Editeur XML ... flux de données Base de données Déclenchement d’opérations
Les API DOM et Sax - B. Amann – p.47/159
Document Object Model (DOM)
L’API orientée-objet DOM
Un parseur DOM prend en entrée un document XML et construit un arbre formé d’objets :
chaque objet appartient à une sous-classe de Node
des opérations sur ces objets permettent de créer de nouveaux nœuds, ou de naviguer dans le document
= éditeurs XML, processeurs XSLT
Document Object Model (DOM) - B. Amann – p.49/159
Les nœuds DOM
Leaf Processing Instruction Text CData Section Comment Entity Reference Element Document Type Document Entity Attribute TreeNode Node Data Character Container Notation
Types de noeuds DOM
Type de Nœuds Catégorie syntaxique XML
Document document XML (racine)
DocumentType type du document (DTD)
ProcessingInstruction instruction de traitement
Element élément XML
Attribute attribut XML
Entity déclaration d’entité
Table 1: Types de nœuds DOM
Document Object Model (DOM) - B. Amann – p.51/159
Types de noeuds DOM (suite)
Type de Nœuds Catégorie syntaxique XML EntityReference référence vers entité
Comment commentaire
CharacterData commentaire et section de texte
Text section de texte
CDataSection section CDATA
DocumentFragment fragment de document XML
Notation notation
Table 2: Types de nœuds DOM
Structure d’un arbre DOM
Leaf Container
childNodes[]
childNodes[]
Document Object Model (DOM) - B. Amann – p.53/159
Un document avec attributs
<?xml version=’1.0’ encoding="ISO-8859-1"?> <COURS CODE="19599"> <SUJET>Structures de données</SUJET> <ENSEIGNANTS> <NOM RESPONSABLE="0">Carrez</NOM> <NOM RESPONSABLE="1">Akoka</NOM> </ENSEIGNANTS> </COURS>
L’arbre DOM
Document -Element COURS Element SUJET Texte -Structures de données Attr CODE 19599 Element ENSEIGNANTS Element NOM Texte -Carrez Attr RESPONSABLE 0 Element NOM Attr RESPONSABLE 1 Texte -AkokaDocument Object Model (DOM) - B. Amann – p.55/159
Propriétés du type Node
Propriété Type
nodeType unsigned short
nodeName DOMString
nodeValue DOMString
attributes NamedNodeMap
Table 3: Propriétés du type Node
Propriétés du type Node
Propriété Type parentNode Node firstChild Node lastChild Node childNodes NodeList previousSibling Node nextSibling NodeTable 4: Propriétés du type Node
Document Object Model (DOM) - B. Amann – p.57/159
Opérations du type Node
Résultat Méthode Paramètres
Node insertBefore() Node nouv,
Node fils
Node replaceChild() Node nouv,
Node anc
Node removeChild() Node fils
Node appendChild() Node nouv
boolean hasChildNodes()
Node cloneNode() boolean
prof
Table 5: Opérations du type Node
DOM : Exemple de code
Ajoute
<adventure
type="epic">&adventure1;</adventure>
avant le 4e élément du document :
var racine = myDocument.documentElement; var enfants = racine.childNodes;
var el_nouv = createElement("adventure") ;
var ent_ref = createEntityReference("adventure1");
el_nouv.setAttribute("type", "epic"); el_nouv.appendChild(ent_ref)
insertBefore(el_nouv, enfants.item(3));
Document Object Model (DOM) - B. Amann – p.59/159
L’API SAX
Architecture SAX
Associer des événements aux balises :
Document XML
Fonctions
<ELT1> </ELT1> <ELT2> ... Parseur SAX
Evénements
Accumulateur Données
L’API SAX - B. Amann – p.61/159
Les événements SAX
Un parseur SAX génère un événement à chaque fois qu’il rencontre
le début et la fin de document, le début et la fin d’un élément, une instruction de traitements un commentaire, ...
Les fonctions s’exécutent indépendamment = il faut leur
faire partager une zone mémoire (« accumulateur »)
Les événements SAX: exemple
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.xerces.parsers.SAXParser;
public class Trace extends DefaultHandler {
// début de document
public void startDocument() {
System.out.println("start document"); }
// fin de document
public void endDocument() {
System.out.println("end document"); }
L’API SAX - B. Amann – p.63/159
Suite...
// balise d’ouverture
public void startElement(String uri,
String localName, String qName, Attributes attributes) {
System.out.println("starting element: " + qName);
}
// balise de fermeture
public void endElement(String uri,
String localName, String qName) {
System.out.println("end element: " + qName); }
Suite...
// espace blanc
public void ignorableWhitespace(char[] ch,
int start, int length) {
System.out.println("whitespace, length " + length);
}
// instruction de traitement
public void processingInstruction(String target,
String data) {
System.out.println("processing instruction: " + target);
}
L’API SAX - B. Amann – p.65/159
Suite...
// texte
public void characters(char[] ch, int start,
int length){
System.out.println("character data, length " + length);
}
// procédure principale
public static void main(String[] args) { Trace t = new Trace();
SAXParser p = new SAXParser(); p.setContentHandler(t);
try { p.parse(args[0]); }
catch (Exception e) {e.printStackTrace();} }
Exemple type : insertion dans une BD
À partir d’un flux XML contenant des films :
<FILMS> ... <FILM> <TITRE>Alien</TITRE> <ANNEE>1979</ANNEE> <AUTEUR>Ridley Scott</AUTEUR> <GENRE>Science-fiction</GENRE <PAYS>USA</PAYS> </FILM> ... </FILMS>
L’API SAX - B. Amann – p.67/159
Les événements
Début de document : connexion à la base
Balise FILM : création d’un enregistrement Film
Balise TITRE : on affecte Film.titre
Balise ANNEE : on affecte Film.annee
etc..
Balise FILM : insertion de l’enregistrement dans la
base
Balise /FILM : destruction de Film
XPath: Sélectionner des
Fragments XML
XPath: Sélectionner des Fragments XML - B. Amann – p.69/159
Exemple: Document XML
Document XML: / FILM TITRE Vertigo AUTEUR Hitchcock ANNEE 1958 RESUME Scotty...Exemple: Règle de transformation
/ FILM TITRE Vertigo AUTEUR Hitchcock ANNEE 1958 RESUME Scotty... p h1 i * i * p * h3 Résumé: *XPath: Sélectionner des Fragments XML - B. Amann – p.71/159
Exemple: Résultat
Fragment HTML: p h1 i Vertigo i 1958 p Hitchcock h3 Résumé: Scotty...Référencer des fragments XML avec XPATH
Pour pouvoir transformer un document XML il faut pouvoir extraire des fragments (nœuds) XML d’un document
XPath :
XPath est fondé sur une représentation arborescente (DOM) du document XML
Objectif : référencer nœuds (éléments, attributs, commentaires, ...) dans un document XML
XPath: Sélectionner des Fragments XML - B. Amann – p.73/159
XPath: Exemples de chemins XPath
Document XML: / FILM TITRE Vertigo AUTEUR Hitchcock ANNEE 1958 RESUME Scotty... /FILM /FILM/RESUME /FILM/TITRE /FILM/RESUME/text()
XPath: Utilisation
Le langage permet de désigner un ou plusieurs nœuds dans un document XML, à l’aide d’expressions de chemin.
XPath est utilisé par
XSLT pour sélectionner des règles de transformation XQuery pour l’interrogation de documents XML
XML Schéma pour créer des clés et références XLink pour créer des liens entre
documents/fragments XML
XPath: Sélectionner des Fragments XML - B. Amann – p.75/159
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
Exemple : l’arbre DOM...
Document -Element EXEMPLE Text-Section littérale avec
SectionCDATA
-des ’&’, -des ’ ’ -des ’ ’
Text
-et un text
XPath: Sélectionner des Fragments XML - B. Amann – p.77/159
Puis l’arbre XPath...
Document -Element EXEMPLE Text
-Section littérale avec des ’&’, des ’ ’ des ’ ’ et un texte
Expressions XPath
Une expression XPath :
s’évalue en fonction d’un nœud contexte
désigne un ou plusieurs chemins dans l’arbre à partir du nœud contexte
a pour résultat
un ensemble de nœuds
ou une valeur, numérique, booléenne ou alphanumérique
XPath: Sélectionner des Fragments XML - B. Amann – p.79/159
Chemins XPath
Un chemin XPath est une suite d’étapes :
[/]étape /étape /.../étape
Deux variantes : Un chemin peut être absolu : /FILM/RESUME
Le nœud contexte est alors la racine du document.
ou relatif : RESUME/text()
Le nœud contexte est un nœud dans le document (pas forcément la racine).
Étapes XPath
Une étape : trois composants
[axe::]filtre[prédicat1][prédicat2]
l’axe : sens de parcours des nœuds (par défaut:
child).
le filtre : type des nœuds/noms des éléments qui seront retenus
le(s) prédicat(s) que doivent satisfaire les nœuds retenus
XPath: Sélectionner des Fragments XML - B. Amann – p.81/159
Les axes XPath
Un axe XPath recouvre les deux notions suivantes : un sous-ensemble des nœuds de l’arbre relatif au nœud contexte ;
l’ordre de parcours de ces nœuds à partir du nœud contexte.
Exemple de référence
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Element B Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinXPath: Sélectionner des Fragments XML - B. Amann – p.83/159
Exemple : le nœud contexte
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Element B Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFin
child::D
ou
D
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Nœud contexte Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinXPath: Sélectionner des Fragments XML - B. Amann – p.85/159
attribute::att1
ou
@att1
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Nœud contexte Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinparent::A
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Nœud contexte Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinXPath: Sélectionner des Fragments XML - B. Amann – p.87/159
Notation abrégée de
parent::A
La notation abrégée .. désigne le père du nœ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).
parent::*
* est un filtre qui désigne tous les éléments.
descendant::node()
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Nœud contexte Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinXPath: Sélectionner des Fragments XML - B. Amann – p.89/159
ancestor::node()
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Nœud contexte Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinself::node()
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 son type :
self::node()
Notation abrégée : « . »
XPath: Sélectionner des Fragments XML - B. Amann – p.91/159
preceding-sibling::node()
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Nœud contexte Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinfollowing::node()
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Nœud contexte Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinXPath: Sélectionner des Fragments XML - B. Amann – p.93/159
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
Filtres
Deux manières de filtrer les nœuds : par leur nom :
possible pour les types de nœuds qui ont un nom : Element, ProcessingInstruction et Attr
par leur type DOM.
XPath: Sélectionner des Fragments XML - B. Amann – p.95/159
Chemin absolu :
/A/B/D
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Element B Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFin
/descendant::node()/@att2
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Element B Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinXPath: Sélectionner des Fragments XML - B. Amann – p.97/159
Nom générique :
/A/*
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Element B Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFin
Filtrage sur le type de nœud
text(): Nœuds de type Text
comment(): Nœuds de type Comment
Exemple : /comment()
processing-instruction(): Nœuds de type ProcessingInstruction
Exemple : /processing-instruction(), ou
/processing-instruction(’java’) node(): Tous les types de nœud
XPath: Sélectionner des Fragments XML - B. Amann – p.99/159
/A/B//text()
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Element B Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFin/comment()
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Element B Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinXPath: Sélectionner des Fragments XML - B. Amann – p.101/159
Prédicats
Prédicat : expression booléenne constituée d’un ou plusieurs tests, composés avec les connecteurs
logiques habituels and et or
Test :
toute expression XPath, dont le résultat est convertie en booléen;
une comparaison, un appel de fonction. il faut connaître les règles de conversion
Quelques exemples
/A/B[@att1]: Les nœuds /A/Bqui ont un attribut
@att1
/A/B[@att1=’a1’]: Les nœuds /A/Bqui ont un
attribut @att1 valant ’a1’
/A/B/descendant::text()[position()=1]: Le
premier nœud de type Text descendant d’un /A/B.
/A/B/descendant::text()[1]: idem
XPath: Sélectionner des Fragments XML - B. Amann – p.103/159
Pour bien comprendre
Dans l’expression /A/B[@att1]:
On s’intéresse aux nœuds de type B fils de l’élément
racine A.
Parmi ces nœuds on ne prend que ceux pour lesquels
le prédicat [@att1] s’évalue à true
Cette expression s’évalue avec pour nœud contexte
un élément B
[@att1] vaut true ssi @att1 renvoie un ensemble de nœuds non vide
Contexte d’évaluation
Une étape s’évalue en tenant compte d’un contexte constitué de
un nœud contexte, position initiale du chemin ;
ce nœud fait lui-même partie d’un ensemble obtenu par évaluation de l’étape précédente
on connaît la taille de cet ensemble (fonction last())
on connaît la position du nœud contexte dans cet ensemble (fonction position())
XPath: Sélectionner des Fragments XML - B. Amann – p.105/159
/A/B/descendant::text()[1]
Document -Instruction Java ins1 Element A Element B Attr att1 a1 Element D Text -Texte1 Element D Text -Texte2 Element B Attr att1 a2 Element D Text -Texte3 Element C Attr att2 a3 Attr att3 15 Comment -CommFinTypage avec XPath
On peut effectuer des comparaisons, des opérations. Cela implique un typage et des conversions de type.
Types XPath :
les numériques
les chaînes de caractères les booléens (true etfalse) enfin les ensembles de nœuds
XPath: Sélectionner des Fragments XML - B. Amann – p.107/159
Numériques
Notation décimale habituelle
Comparaisons habituelles (<, >, !=) Opérations : +, -, *, div, mod
La fonction number () permet de tenter une conversion
Si la conversion échoue on obtient NaN (Not a
Number ). À éviter...
Ex : //node()[number(@att1) mod 2=1]
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)
XPath: Sélectionner des Fragments XML - B. Amann – p.109/159
Conversions booléennes
Pour les numériques : 0 ou NaN sont false, tout le
reste est true
Pour les chaînes : une chaîne vide est false, tout le
reste est true
Pour les ensembles de nœuds : un ensemble vide est false, tout le reste est true
Comparaisons : des règles de conversion étranges...
Fonctions XPath
Quelques fonctions utiles dans les prédicats :
concat(chaîne1, chaîne2, ...) pour concaténer des chaînes
contains(chaîne1, chaîne2) teste si chaîne1 contient chaîne2
count (expression) renvoie le nombre de nœuds désignés par expression
name() renvoie le nom du nœud contexte not(expression) : négation
XPath: Sélectionner des Fragments XML - B. Amann – p.111/159
Prédicats: Exemples
Axes « d’avancement » :
child::*[3]: le 3e enfant
child::*[position()=3]: idem
child::*[last()]: le dernier enfant
descendant::*[last()]: le dernier descendant
La position d’un nœud dépend de l’axe choisi.
Prédicats: Axes inverses
Axes « inverses » :
ancestor::*[1]: le premier ancêtre du nœud contexte (dernier dans l’ordre du document).
preceding-sibling::*[last()]: le dernier frère qui précède le nœud contexte (premier dans l’ordre du document).
XPath: Sélectionner des Fragments XML - B. Amann – p.113/159
Prédicats: Exemples
Test du nombre d’occurrences :
CINEMA[count(SEANCE) > 1]: cinémas avec au moins 2 séances
FILM[count(ACTEUR) = 0]: films sans acteur
FILM[not(ACTEUR)]: films sans acteur
Prédicats: Sélection par valeur
Sélection par valeur:
FILM[not(ACTEUR[NOM=’Willis’])]: films sans Bruce Willis
FILM[ACTEUR/NOM=’Willis’]: films avec Bruce Willis
FILM[ACTEUR[NOM=’Willis’]]: idem
XPath: Sélectionner des Fragments XML - B. Amann – p.115/159
Prédicats: Exemples
Test sur la structure : chemins imbriqués avec connecteurs logiques (qualifiers)
ACTEUR[NOM and DATENAISSANCE] ou
ACTEUR[NOM][DATENAISSANCE]: les acteurs avec un nom et une date de naissance
FILM[@TITRE = ’Brazil’ and ACTEUR/NOM = ’De Niro’]: le film Brazil avec l’acteur De Niro
FILM[@TITRE = ’Brazil’][ACTEUR/NOM = ’De Niro’]: idem
Remarque sur les prédicats
Attention: Les deux premières expressions sont equivalentes, mais pas la troisième! Pourquoi?
FILM[ACTEUR and position()=1] FILM[position()=1][ACTEUR] FILM[ACTEUR][position()=1]
XPath: Sélectionner des Fragments XML - B. Amann – p.117/159
Un cas épineux : les espaces
Un document XML avec espaces
<?xml version="1.0"
encoding="ISO-8859-1"?> <?xml-stylesheet href="ex.xsl"
type="text/xsl"?> <!-- commentaire -->
<!DOCTYPE A SYSTEM "ex.dtd" > <A>
<B at1=’ val1 ’
at2=’ avec blanc ’ />
<C> </C>
<D> texte </D> </A>
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
XPath: Sélectionner des Fragments XML - B. Amann – p.119/159
Les espaces dans XPath
Les espaces du prologue ou de l’épilogue sont supprimés.
Les espaces consécutifs sont réduits à un seul.
Les fins de lignes sont représentées par le caractère
#xA.
En général, les espaces en début et fin d’attributs sont supprimées.
L’arbre XPath du document
Document -Element A Text -#xA#20 Element B Attr at1 #20val1#20 Attr at2 #20avec#20blanc#20 Text -#xA#20 Element C Text -#20 Text -#xA#20 Element D Text -#20texte#20 Text -#xA#20XPath: Sélectionner des Fragments XML - B. Amann – p.121/159
Instruction
xsl:strip-space
Document -Element A Element B Attr at1 #20val1#20 Attr at2 #20avec#20blanc#20 Element C Element D Text -#20texte#20XPath : Résumé
XPath est un langage pour extraire des noeuds dans un arbre XML :
On navigue dans l’arbre grâce à des axes de navigation.
Un chemin de navigation est une séquence d’étapes. Dans chaque étape on choisi un axe, un filtre et
éventuellement des prédicats.
Le résultat d’une étape (d’une séquence d’étapes) est un séquence de noeuds.
XPath: Sélectionner des Fragments XML - B. Amann – p.123/159
Introduction à XSLT
Sommaire
Une introduction à XSLT, destinée à comprendre les 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 – p.125/159
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
Fonctions d’une Feuille de Style XSLT
Fonction de Base: Langage de règles de transformation 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 – p.127/159
Exemple
/ FILM TITRE Vertigo AUTEUR Hitchcock ANNEE 1958 RESUME Scotty... p h1 i * i * p * h3 Résumé: * Introduction à XSLT - B. Amann – p.128/159Exemple: 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 – p.129/159Extraction de données
Exemple : recherche du titre pour le nœud FILM:
xsl:value-of select="TITRE"/
Plus généralement : on donne un chemin d’accès XPath à un nœud à partir du nœud courant (noeud contexte).
Génération de texte
Produire une phrase quand on rencontre un nœud FILM:
<xsl:template match="FILM"> Ceci est le texte produit par application de cette règle. </xsl:template>
Introduction à XSLT - B. Amann – p.131/159
Génération d’un arbre XML
Produire un document/fragment/arbre XML quand on
rencontre un nœud FILM:
<xsl:template match="FILM"> <body> <p>Un paragraphe</p> </body </xsl:template> Introduction à XSLT - B. Amann – p.132/159
Génération avec extraction
Produire un document/fragment/arbre XML quand 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 – p.133/159
Structure de base : les règles
Règle = template : élément de base pour produire le résultat
une règle s’applique dans le contexte d’un nœud de l’arbre
l’application de la règle produit un fragment du résultat.
Programme XSLT = ensemble de règles pour construire un résultat
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 – p.135/159
Illustration
FILM TITRE Vertigo AUTEUR Hitchcock ANNEE 1958 GENRE Drame PAYS USA RESUME Scotty... select="TITRE"Contexte d’application de la règle XSLT
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 – p.137/159
Le résultat
On obtient : 1 <html> 2 <head> 3 <title>Film: 4 Vertigo 5 </title> 6 </head> 7 <body>8 Le genre du film, c’est
9 <b>Suspense</b>
10 </body>
11 </html>
Chemins complexes
Dans l’exemple précédent, on accédait aux fils d’un nœud. En fait on peut :
Accéder à tous les descendants
Accéder aux parents, aux frères, aux neveux... Accéder aux attributs
Effectuer des boucles
Le langage d’expression de chemins : XPath.
Introduction à XSLT - B. Amann – p.139/159
Exemple: Document XML
1 <?xml version="1.0" encoding="ISO-8859-1"?> 2
3 <?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 lointaine 13 planète, des Terriens en mission découvrent de bien étranges 14 "oeufs". Ils en ramènent un à bord, ignorant qu’ils viennent 15 d’introduire parmi eux un huitième passager particulièrement 16 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 – p.140/159
Exemple: Traduction de Salle
1 <xsl:template match="SALLE"> 2 <h2>Salle No
3 <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 – p.141/159
Le résultat
Appliqué à Salle1.xml : 1 <h2>Salle No 1 </h2> 2 Film: Alien 3 de Ridley Scott 4 <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 un document complet.
Salles et séances
15:00 18:00 21:00 Réservation conseillée vaisseau spatial... PLACES=320 chemin "FILM/TITRE" "REMARQUE" chemin chemin SEANCES/SEANCE boucle for-each chemin "@NO"Contexte d’application de la règle
AUTEUR ANNEE GENRE PAYS RESUME FILM
SALLE
SEANCES
SEANCE SEANCE SEANCE REMARQUE
USA
Alien Scott Science-Fiction 1979 Près d’un TITRE
NO=2
Introduction à XSLT - B. Amann – p.143/159
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 sur l’ensemble des séances désignées par
select="SEANCES/SEANCE";
L’élément contexte : désigné par le symbole ’.’, comme dans select=".".
Appels de règles
En général on produit un résultat en combinant plusieurs règles :
La règle initiale s’applique à la racine du document traité (’/’)
On produit alors le cadre du document HTML
On appelle d’autres règles pour compléter la création du résultat
Introduction à XSLT - B. Amann – p.145/159
Exemple : L’Épée de bois
« Cadre » HTML, puis appel de la règle CINEMA
<xsl:template match="/"> <html> <head><title>Programme de <xsl:value-of select="CINEMA/NOM"/> </title> </head> <body bgcolor="white"> <xsl:apply-templates select="CINEMA"/> </body> </html> </xsl:template> Introduction à XSLT - B. Amann – p.146/159
Règle
CINEMA
Exploitation de l’élément CINEMA, puis appel à la rè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"/> 10 11 </xsl:template> Introduction à XSLT - B. Amann – p.147/159
Vue d’ensemble
Règle "/" Règle "CINEMA" Règle "SALLE" html head h1 i hr adresse p h2 h3Salle No 2 Film : Vertigo Film: Alien p Salle No 1 h2 h3 body title Epée de bois Introduction à XSLT - B. Amann – p.148/159
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"/> 5
6 <!-- Cartes pour les salles et séances -->
7 <xsl:apply-templates select="CINEMA/SALLE"/> 8
9 <!-- création des cartes pour les films -->
10 <xsl:apply-templates select=".//FILM"/> 11 </wml> 12 </xsl:template> Introduction à XSLT - B. Amann – p.149/159
Arbre XML du site
card card p p a acard card card
p p p wml a a id=index id=S1 href=S1 href=S2
id=S2 id=Alien id=Vertigo
href=Vertigo href=Alien
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 – p.151/159
Résultat
1 <card id="index" title="Programme"> 2 <p align="center">
3 Epée de bois
4 </p> 5 <p>
6 <a href="#S1"> Salle 1: </a>
7 Alien
8 </p> 9 <p>
10 <a href="#S2"> Salle 2: </a>
11 Vertigo
12 </p> 13 </card>
Règle
SALLE
1 <xsl:template match="SALLE"> 2 <card id="S{@NO}"> 3 <p>Séances salle 4 <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 – p.153/159Résultat
1 <card id="S2"> 2 <p> 3 Séances salle 2 4 </p> 5 <p> 6 <a href="#Vertigo"> 7 Film : Vertigo</a> 8 </p> 9 <p> 10 Séance 22:00 11 </p> 12 </card> Introduction à XSLT - B. Amann – p.154/159XSLT 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 – p.155/159
Le document XML
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE MOTEUR [ <!ENTITY EpeeDeBois SYSTEM "http://epee-de-bois.fr/EDB.xml"> <!ENTITY CineMarseille SYSTEM "http://cine-marseille.fr/CM.xml"> ]> <MOTEUR> <CINEMA> &EpeeDeBois; </CINEMA> <CINEMA> &CineMarseille; </CINEMA> </MOTEUR> Introduction à XSLT - B. Amann – p.156/159Traitement des paramètres
<xsl:param name="titre"/> <xsl:param name="seance"/> <xsl:param name="ville"/> <xsl:template match="MOTEUR"> <xsl:for-each select="CINEMA"> <xsl:if test="CINEMA//TITRE = $titre) and
CINEMA//HEURE >= $seance) and CINEMA/VILLE = $ville)"> <xsl:apply-templates select="." /><p/> </xsl:if> </xsl:for-each> </xsl:template> Introduction à XSLT - B. Amann – p.157/159
Conclusion sur XSLT
Un langage totalement adapté au traitement de documents XML
Parcours d’un document, vu comme un arbre Déclenchement de règles sur certains nœuds Association de plusieurs programmes à un même document
Bibliographie sur XSLT
1. Recommendation XSLT sur le site du W3C
2. B. Amann et P. Rigaux, Comprendre XSLT, O’Reilly
http://cortes.cnam.fr:8080/XSLT
3. P. Wadler, A formal semantics of patterns in XSLT