Documente Academic
Documente Profesional
Documente Cultură
Bernd Amann
amann@cnam.fr
Cnam
Objectifs du Cours
Mieux comprendre lutilisation de la technologie XML pour la gestion des donnes sur le Web : Reprsentation de donnes avec XML Interrogation avec XPath Transformation avec XSLT Stockage de documents/donnes XML
Introduction XML
Pourquoi XML?
Une prsentation, base sur une tude de cas, des apports de XML :
diffuser leur programme (salles, sances) sur le Web, sur le WAP, sur des tracts et des afches...
inclure des informations sur des lms provenant dune base de donnes MySQL,
approvisionner un moteur de recherche pour chercher des sances, des lms, des horaires...
Echange
Moteur de recherche
Publication
Larchitecture du site
Requtes HTTP 80 Apache 8080 Transfert requtes Servlets Cocoon Programmes CGI Scripts PHP Pages HTML Doc. XML Pages JSP Tomcat Servlet A
La che du lm Gladiator
La che du lm peut tre publie
dans un moteur de recherche SallesEnLigne.com cest la mme, sous des formes diffrentes
Format universel : reprsentation en chane de caractres dun contenu structur indpendant de toute application
changer et intgrer linformation assembler des contenus XML, ou au contraire en extraire des informations
HTML est un langage pour prsenter des informations lcran. il ne permet pas dchanger des donnes il ne permet pas un traitement des donnes autre que lafchage
NOM
ADRESSE
METRO
pe de bois
Censier-Daubenton
METRO Censier
SALLE
NO=1 PLACES=320
SALLE
NO=2 PLACES=120
TITRE Alien
SEANCES
TITRE Vertigo
SEANCES
SEANCE 15:00
SEANCE 18:00
SEANCE 21:00
SEANCE 22:00
Documents XML
Un document XML est
de donnes (semi-)structures
provenant dun ou de plusieurs chiers et/ou dun message et/ou dune base de donnes...
dun chier...
Exemple dIntgration
<?xml version="1.0" encoding="ISO-8859-1"?> <SALLE NO=2 PLACES=120> <FILM> <TITRE>Vertigo</TITRE> <AUTEUR>Alfred Hitchcock</AUTEUR> <ANNEE>1958</ANNEE> <GENRE>Drame</GENRE> <PAYS>Etats Unis</PAYS> <RESUME>Scottie Ferguson, ancien inspecteur de police, est sujet au vertige depuis quil a vu mourir son collgue.... </RESUME> </FILM> <SEANCES> <SEANCE>22:00</SEANCE> </SEANCES> </SALLE>
SALLE
FILM
SEANCES
TITRE
AUTEUR
ANNEE
GENRE
PAYS
RESUME SEANCE
Vertigo
Hitchcock
1958
1958
USA
Scotty... 22:00
Premier bilan
Disposer dune et une seule reprsentation
Je stocke dans une base de donnes ? idem Ne pas utiliser HTML, ddi la prsentation dans un navigateur
Application
Nous avons dcrit notre cinma avec notre propre langage (DTD). On peut traduire ce langage vers dautres langages XML :
Version HTML
HTML revisit :
Marquage HTML
body
...
h1 i i
Elments XML
<TITRE>
<GENRE> <PAYS>
Transformation XSLT
Un programme de transformation XSLT doit nous permettre :
wml
Elements principaux : des balises simples de mise en forme ( b , i ) des ancres pour passer dune carte une autre
SMIL
Langage pour la cration de documents multimdia avec XML.
On indique une fentre dafchage avec diffrentes rgions pour lafchage des composants.
reg_texte
name="title" content="Version SMIL" /> <meta name="author" content=" c 2001 Sallesenligne.com" /> <layout> <root-layout width="450" height="600" /> <region id="reg_img_grand" width="400" height="300" left="25" top="25" fit="meet" /> <region id="reg_img_petit" width="200" height="125" left="125" top="75" fit="meet" /> <region id="reg_texte" width="350" height="325" left="50" top="250" z-index="1"/> </layout> </head>
<head> <meta
450 pixels
600 pixels
Vertigo
Scottie Ferguson, ancien inspecteur de police est sujet au vertige depuis quil a vu mourir son collgue. Elster, son ami
<body> <seq> <par endsync="first" id="page1" > <audio src="Sound.wav" /> <a href="#page2" > <img src="Vertigo.png" region="reg_img_grand" /> </a> </par> <par id="page2" dur="30s" > <text src="Vertigo-Resume.txt" region="reg_texte" /> <img src="Vertigo.png" region="reg_img_petit" /> </par> </seq> </body>
450 pixels
Dmo !
600 pixels
XSL-FO
Langage de description de documents avec XML.
On place le contenu entre des balises de formatage un processeur se charge de produire le document
Quelques ides
Jai mes donnes
Je peux les transmettre quelquun dautre (tout ou partie) un service externe mapporte une valeur ajoute
Quel format ?
Mon problme :
Il faut :
Les DTD
Document Type Denition
Exemple : un lment constitu dun titre, dun cinma, dune ville, dune URL (optionnelle) et dune squence dheures. <!ELEMENT FILM (TITRE, CINEMA, VILLE, URL?, HEURE+)>
( ( ( ( ( (
TITRE, CINEMA, VILLE, URL?, HEURE+ ) > #PCDATA ) > #PCDATA ) > #PCDATA ) > #PCDATA ) > #PCDATA ) >
Architecture ( Dmo )
DTD 1 XSLT Documents XML XSLT SQL DTD 2 BD Moteur de recherche Client web Client web Client web
Flux XML
Intgration
Recherche
Le document intgrateur
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE MOTEUR [ <!ENTITY EpeeDeBois SYSTEM "http://epee-de-bois.fr/EDB.xml"> <!ENTITY CineMarseille SYSTEM "http://cine-marseille.fr/CM.xml"> ]> <MOTEUR> <CINEMA> &EpeeDeBois; </CINEMA> <CINEMA> &CineMarseille; </CINEMA> </MOTEUR>
Fichiers
Base de donnes
Rsultat Application
Message XML
XSLT
Transformation XSLT
Document XML
XSLT
XSLT
XSLT
XSLT
prsentation
Page XHTML
Page WML
Document XML
application web
application WAP
application XML
Rcapitulons !
XML = format dchange de donnes entre application
De nombreux outils danalyse, parsing, interrogation, transformation, ... Bien adapt au web.
SaX (Simple API for XML), bas sur des dclencheurs (vnements/action)
Adapte aux applications qui modient ou traitent dans leur globalit un document. Dnit des triggers qui se dclenchent sur certaines balises.
LAPI SaX :
DOM et SaX
Toutes les applications XML passent par une phase pralable danalyse
Processeur XSLT Parseur DOM Document XML Editeur XML ... Base de donnes Dclenchement doprations
Parseur SaX
flux de donnes
des oprations sur ces objets permettent de crer de nouveaux nuds, ou de naviguer dans le document diteurs XML, processeurs XSLT
Attribute
TreeNode
Leaf
Container
Notation
Character Data
Processing Instruction
Entity
Document
Entity Reference
Element
Document Type
Comment
Text
CData Section
childNodes[] childNodes[]
Leaf
Container
Larbre DOM
Document -
Element COURS Element SUJET Texte Structures de donnes Texte Carrez Attr CODE 19599 Element NOM Attr RESPONSABLE 0 Element ENSEIGNANTS Element NOM Attr RESPONSABLE 1 Texte Akoka
LAPI SAX
Architecture SAX
Associer des vnements aux balises :
Document XML Parseur SAX Evnements <ELT1> </ELT1> <ELT2> ... Accumulateur Donnes
Fonctions
le dbut et la n de document,
un commentaire, ...
Les fonctions sexcutent indpendamment = il faut leur faire partager une zone mmoire ( accumulateur )
Suite...
// balise douverture public void startElement(String uri, String localName, String qName, Attributes attributes) { System.out.println("starting element: " + qName); } // balise de fermeture public void endElement(String uri, String localName, String qName) { System.out.println("end element: " + qName); }
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); }
Suite...
// texte public void characters(char[] ch, int start, int length){ System.out.println("character data, length " + length); } // procdure principale public static void main(String[] args) { Trace t = new Trace(); SAXParser p = new SAXParser(); p.setContentHandler(t); try { p.parse(args[0]); } catch (Exception e) {e.printStackTrace();} }
Les vnements
Balise
Balise
Balise
etc..
Balise base
Balise
FILM
TITRE
AUTEUR
ANNEE
RESUME
Vertigo
Hitchcock
1958
Scotty...
* i h1 * i * p p Rsum: h3 *
Exemple: Rsultat
Fragment HTML:
p
h1
h3
1958
Hitchcock
Rsum:
Scotty...
Vertigo
XPath est fond sur une reprsentation arborescente (DOM) du document XML
Objectif : rfrencer nuds (lments, attributs, commentaires, ...) dans un document XML
/FILM FILM
/FILM/RESUME RESUME
XPath: Utilisation
Le langage permet de dsigner un ou plusieurs nuds dans un document XML, laide dexpressions de chemin. XPath est utilis par
Document
Element
Text
Attribut ProcessingInstruction
Comment
Element EXEMPLE
Text et un text
Element EXEMPLE
Expressions XPath
Une expression XPath :
Chemins XPath
Un chemin XPath est une suite dtapes : [/]tape /tape /.../tape Deux variantes : Un chemin peut tre
ou relatif : RESUME/text() Le nud contexte est un nud dans le document (pas forcment la racine).
tapes XPath
Une tape : trois composants [axe::]filtre[prdicat1][prdicat2]
Exemple de rfrence
Document -
Element A
Comment CommFin
Element B
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
Element A
Comment CommFin
Element B
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
child::D ou D
Document -
Element A
Comment CommFin
Nud contexte
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
attribute::att1 ou @att1
Document -
Element A
Comment CommFin
Nud contexte
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
parent::A
Document -
Element A
Comment CommFin
Nud contexte
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
descendant::node()
Document -
Element A
Comment CommFin
Nud contexte
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
ancestor::node()
Document -
Element A
Comment CommFin
Nud contexte
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
self::node()
il dsigne le nud contexte lui-mme. Doit tre complt par un ltre. Exemples : notre nud contexte : self::B mais self::A renvoie un ensemble vide
Notation abrge : .
preceding-sibling::node()
Document -
Element A
Comment CommFin
Nud contexte
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
following::node()
Document -
Element A
Comment CommFin
Nud contexte
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
Axes: Rsum
Filtres
Deux manires de ltrer les nuds :
par leur nom : possible pour les types de nuds qui ont un nom : Element, ProcessingInstruction et Attr
Element A
Comment CommFin
Element B
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
/descendant::node()/@att2
Document -
Element A
Comment CommFin
Element B
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
Element A
Comment CommFin
Element B
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
/A/B//text()
Document -
Element A
Comment CommFin
Element B
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
/comment()
Document -
Element A
Comment CommFin
Element B
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
Prdicats
Prdicat : expression boolenne constitue dun ou plusieurs tests, composs avec les connecteurs logiques habituels and et or
Test : toute expression XPath, dont le rsultat est convertie en boolen; une comparaison, un appel de fonction.
Quelques exemples
/A/B[@att1] : Les nuds /A/B qui ont un attribut @att1 /A/B[@att1=a1] : Les nuds /A/B qui ont un attribut @att1 valant a1 /A/B/descendant::text()[position()=1] : Le premier nud de type Text descendant dun /A/B. /A/B/descendant::text()[1] : idem
Parmi ces nuds on ne prend que ceux pour lesquels le prdicat [@att1] svalue true
[@att1] vaut true ssi @att1 renvoie un ensemble de nuds non vide
Contexte dvaluation
Une tape svalue en tenant compte dun contexte constitu de
ce nud fait lui-mme partie dun ensemble obtenu par valuation de ltape prcdente on connat la taille de cet ensemble (fonction last ()) on connat la position du nud contexte dans cet ensemble (fonction position())
/A/B/descendant::text()[1]
Document -
Element A
Comment CommFin
Element B
Element C
Attr att1 a1
Element D
Element D
Attr att1 a2
Element D
Attr att2 a3
Attr att3 15
Text Texte1
Text Texte2
Text Texte3
les numriques
Numriques
Notation dcimale habituelle
Conversions
Deux conversions sont toujours possibles.
Vers une chane de caractres. utile pour la production de texte en XSLT (balise xsl:value-of)
Vers un boolen utile pour les tests effectus dans XSLT (xsl:if, xsl:when)
Conversions boolennes
Pour les numriques : 0 ou NaN sont false, tout le reste est true
Pour les chanes : une chane vide est false, tout le reste est true
Pour les ensembles de nuds : un ensemble vide est false, tout le reste est true
Fonctions XPath
Quelques fonctions utiles dans les prdicats :
not(expression) : ngation
Prdicats: Exemples
Axes davancement :
child::*[3]: le 3e enfant
child::*[position()=3]: idem
preceding-sibling::*[last()]: le dernier frre qui prcde le nud contexte (premier dans lordre du document).
Prdicats: Exemples
Test du nombre doccurrences :
FILM[ACTEUR[NOM=Willis]]: idem
Prdicats: Exemples
Test sur la structure : chemins imbriqus avec connecteurs logiques (qualiers)
ACTEUR[NOM and DATENAISSANCE] ou ACTEUR[NOM][DATENAISSANCE]: les acteurs avec un nom et une date de naissance
FILM[position()=1][ACTEUR]
FILM[ACTEUR][position()=1]
Element A
Text #xA#20
Element B
Text #xA#20
Element C
Text #xA#20
Element D
Text #xA#20
Text #20
Text #20texte#20
Instruction xsl:strip-space
Document -
Element A
Element B
Element C
Element D
Text #20texte#20
XPath : Rsum
XPath est un langage pour extraire des noeuds dans un arbre XML :
Introduction XSLT
Sommaire
Une introduction XSLT, destine comprendre les mcanismes du langage.
Rgles XSLT
Appels de rgles
Application : XML
HTML et XML
WML
Passage de paramtres
texte simple
extraction de donnes
gnration de texte
trier
Exemple
/ FILM TITRE Vertigo AUTEUR Hitchcock ANNEE 1958 RESUME Scotty...
* i h1 * i * p p Rsum: h3 *
<xsl:template match="FILM"> <p> <h1> <i> <xsl:value-of select="TITRE"/> </i> </p> <i> <xsl:value-of select="ANNEE"/> </i> <p> <xsl:value-of select="AUTEUR"/> </p> <h3>Rsum: <xsl:value-of select="RESUME"/> </h3> </p> </xsl:template>
Extraction de donnes
xsl:value-of select="TITRE"/
Plus gnralement : on donne un chemin daccs XPath un nud partir du nud courant (noeud contexte).
Gnration de texte
Produire une phrase quand on rencontre un nud FILM : <xsl:template match="FILM"> Ceci est le texte produit par application de cette rgle. </xsl:template>
<xsl:template match="FILM"> <body> <p> <xsl:text>Titre: </xsl:text> <xsl:value-of select="TITRE"/> </p> </body> </xsl:template>
Un exemple
1 2 3 4 5 6 7 8 9 10 11 12
<xsl:template match="FILM"> <p> <h1> <i><xsl:value-of select="TITRE"/></i> </h1> <i><xsl:value-of select="ANNEE"/></i> <p><xsl:value-of select="AUTEUR"/></p> <h3> Rsum: <xsl:value-of select="RESUME"/> </h3> </p> </xsl:template>
Illustration
Contexte dapplication de la rgle XSLT select="TITRE" FILM
TITRE
AUTEUR
ANNEE
GENRE
PAYS
RESUME
Vertigo
Hitchcock
1958
Drame
USA
Scotty...
<xsl:template match="FILM"> <html> <head> <title>Film: <xsl:value-of select="TITRE"/> </title> </head> <body> Le genre du film, cest <b><xsl:value-of select="GENRE"/></b> </body> </html> </xsl:template>
Le rsultat
On obtient :
1 2 3 4 5 6 7 8 9 10 11
<html> <head> <title>Film: Vertigo </title> </head> <body> Le genre du film, cest <b>Suspense</b> </body> </html>
Chemins complexes
Dans lexemple prcdent, on accdait aux ls dun nud. En fait on peut :
<xsl:template match="SALLE"> <h2>Salle No <xsl:value-of select="@NO"/></h2> Film: <xsl:value-of select="FILM/TITRE"/> de <xsl:value-of select="FILM/AUTEUR"/> <ol> <xsl:for-each select="SEANCES/SEANCE"> <li><xsl:value-of select="."/></li> </xsl:for-each> </ol> </xsl:template>
Le rsultat
Appliqu Salle1.xml :
1 2 3 4 5 6 7 8
<h2>Salle No 1 </h2> Film: Alien de Ridley Scott <ol> <li> 15:00</li> <li> 18:00</li> <li> 21:00</li> </ol> NB : cest un fragment HTML, intgrer dans un document complet.
Salles et sances
Contexte dapplication de la rgle SALLE chemin "FILM/TITRE" NO=2 PLACES=320 chemin SEANCES/SEANCE FILM chemin "REMARQUE" TITRE AUTEUR ANNEE GENRE PAYS RESUME REMARQUE SEANCES chemin "@NO"
Alien
Scott Science-Fiction
1979
USA
boucle for-each
SEANCE
SEANCE
SEANCE
15:00
18:00
21:00
Chemins complexes
Boucles : avec xsl:for-each sur lensemble des sances dsignes par select="SEANCES/SEANCE" ;
Appels de rgles
En gnral on produit un rsultat en combinant plusieurs rgles :
Rgle CINEMA
Exploitation de llment CINEMA, puis appel la rgle SALLE
1 2 3 4 5 6 7 8 9 10 11
<xsl:template match="CINEMA"> <h1><i> <xsl:value-of select="NOM"/> </i></h1><hr/> <xsl:value-of select="ADRESSE"/>, <i>Mtro: </i> <xsl:value-of select="METRO"/> <hr/> <xsl:apply-templates select="SALLE"/> </xsl:template>
Vue densemble
html
head
body
h1
hr
adresse
i h2 Epe de bois Salle No 1 Rgle "CINEMA" Rgle "SALLE" Film: Alien Salle No 2 Film : Vertigo h3 h2 h3
<xsl:template match="/"> <wml> <!-- Carte daccueil --> <xsl:apply-templates select="CINEMA"/> <!-- Cartes pour les salles et sances --> <xsl:apply-templates select="CINEMA/SALLE"/> <!-- cration des cartes pour les films --> <xsl:apply-templates select=".//FILM"/> </wml> </xsl:template>
card
id=index
card
id=S1
card
id=S2
card
id=Alien
card
id=Vertigo
p href=S1
p href=Alien a href=S2
p href=Vertigo a
Rgle CINEMA
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<xsl:template match="CINEMA"> <card id="index" title="Programme"> <p align="center"> <xsl:value-of select="NOM"/> </p> <xsl:for-each select="SALLE"> <p> <a href="#S{@NO}"> Salle <xsl:value-of select="@NO"/>: </a> <xsl:value-of select="FILM/TITRE"/> </p> </xsl:for-each> </card> </xsl:template>
Rsultat
1 2 3 4 5 6 7 8 9 10 11 12 13
<card id="index" title="Programme"> <p align="center"> Epée de bois </p> <p> <a href="#S1"> Salle 1: </a> Alien </p> <p> <a href="#S2"> Salle 2: </a> Vertigo </p> </card>
Rgle SALLE
1 2 3 4 5 6 7 8 9 10 11 12 13
<xsl:template match="SALLE"> <card id="S{@NO}"> <p>Sances salle <xsl:value-of select="@NO"/></p> <p> <a href="#{FILM/TITRE}"> Film : <xsl:value-of select="FILM/TITRE"/> </a> </p> <xsl:apply-templates select="SEANCES"/> </card> </xsl:template>
Rsultat
1 2 3 4 5 6 7 8 9 10 11 12
<card id="S2"> <p> Séances salle 2 </p> <p> <a href="#Vertigo"> Film : Vertigo</a> </p> <p> Séance 22:00 </p> </card>
<html> <head> <title>Formulaire de Recherche</title> </head> <body bgcolor="white"> <h1>Formulaire de Recherche</h1> <form method=get action=Moteur.xml name=Form> Film: <input type=text name=titre> <br> Sance: <input type=text NAME=seance > (hh:mm)<br> Ville: <input type=text name=ville><br> <input type=submit name=chercher value="Chercher"/> </form> </body> </html>
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>