1
XML
ENST - BDA - Option XML Bernd Amann
2003/04
Objectifs du cours
Apprendre XML et le(s) modèle(s) sous-jacent(s).
Comprendre l’utilisation XML dans le contexte d’une application Web.
Etudier et mettre en oeuvre quelques outils (langages) pour la manipulation (programmation) de XML.
3
Plan du cours
XML: syntaxe, modèles DOM et SAX, DTD (cours: 27 février) Le rôle de XML dans les applications Web (cours: 27 février) XPath : extraction de fragments XML (cours + TP: 12 mars) XSLT: transformation de documents XML (cours + TP: 19 mars)
XQuery: interrogation de documents XML (cours: 17 mars)
XML (eXtensible Markup Language)
5
W3C et XML
Le World Wide Web Consortium (W3C) – http://www.w3.org
– 400 partenaires industriels, parmi lesquels les plus grands comme Oracle, IBM, Compaq, Xerox, Microsoft
– Laboratoires de recherche: MIT pour les États Unis, INRIA pour l’Europe, université Keio (Japon) pour l’Asie
XML : recommendation W3C pour
– les documents Web (généralisation de HTML),
– mais aussi pour l’échange, la transformation, l’intégration et l’interrogation des données sur le Web.
Notion de balisage structurel
Principe clé de XML :
séparer la structure d’un document de sa présentation documents structurés
structurer l’information données (semi-)structurées Avantages:
transformation : indépendance entre les outils de présentation (clients) et les outils de gestion de l’information (serveurs);
différentes présentations sont possibles pour le même document
interrogation : requêtes plein-texte et (semi-)structurées
7
Document XML (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 facilite l’échange de l’information.
Document XML (forme arborescente)
Un arbre :
/
CINEMA
NOM
Épée de bois
ADRESSE
100, rue Mouffetard
METRO
Censier-Daubenton
9
Document XML (arbre DOM)
Les noeuds dans un document XML sont typés. Le modèle DOM distingue entre la racine du documents, les éléments, le text, les commentaires, ... :
Document -
Element CINEMA
Element NOM
Texte - Epée de Bois
Element ADRESSE
Texte -
100, rue Mouffetard
Element METRO
Texte -
Censier-Daubenton
La syntaxe XML
La syntaxe XML définit la représentation sérialisée d’un arbre DOM :
représentation des noeuds (document, élements, texte, commentaires, attributs, ...)
représentation de la structure (eg. imbrication des balises)
11
La déclaration XML
Tout document XML peut être précédé par une déclaration XML :
<?xml version="1.0" encoding="ISO-8859-1"?>
l’attribut encoding indique le jeu de caractères utilisé dans le document
l’attribut optionnel standalone indique si le document est composé de plusieurs entités.
Éléments
Dans la forme sérialisée, un élément est une balise ouvrante avec un nom, puis un contenu, puis une balise fermante
Dans la forme arborescente, un élément est un noeud qui a un nom et
qui est la racine de l’arbre représentant son contenu.
13
Exemple
<?xml version="1.0" encoding="ISO-8859-1"?>
<A>Le texte de A
<B>Le texte de B</B>
</A>
Element A
Text - Le texte de A
Element B
Text - Le texte de B
Text -
Quelques remarques sur les éléments
Un nom d’élément ne contient pas de blanc, ni de caractère accentué
On distingue les majuscules et les minuscules (pas comme dans HTML)
Il existe une forme abrégée pour les éléments sans contenu :
<C></C> peut s’écrire <C/>.
Tout document comprend un seul élément racine
15
Attributs
Les attributs constituent un autre moyen de repré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ée par des quotes simples ou double-quotes (différent de HTML)
il ne peut pas y avoir deux attributs avec le même nom dans un élément.
Attribut ou element?
Souvent on a le choix entre l’utilisation d’un attribut ou d’un élément pour représenter une information.
Il est conseillé d’utiliser des éléments quand l’information est structurée (un arbre)
répétitive (une séquence d’éléments)
grande (eg. une chaîne de caractères de plusieurs KO)
“affichable”
Il est conseillé d’utiliser des attributs comme identificateurs ou références
“paramètres” (eg. pour l’affichage)
17
Commentaires et instructions de traitement
Les commentaires :
<!-- Ceci est un commentaire -->
Instructions de traitement :
<?xml-stylesheet href="prog.xslt"
type="text/xslt">
Les sections littérales CDATA
On veut placer dans le contenu d’un document XML des caractères comme ’<’, ’>’, ou ’&’.
Incorrecte :
<?xml version=’1.0’?>
<PROGRAMME>
if ((i < 5) && (j > 6)) printf("error");
</PROGRAMME>
Correcte : utilisation d’une section CDATA
<?xml version=’1.0’?>
<PROGRAMME>
<![CDATA[if ((i < 5) && (j > 6)) printf("error"); ]]>
</PROGRAMME>
CDATASection -
if ((i < 5) && (j > 6)) printf("error");
19
Résumé : structure d’un document XML
Un document XML comprend trois parties :
le prologue, avec la déclaration XML, la DTD, des
commentaires, des instructions de traitements (optionnels) un élément racine avec son contenu
un épilogue avec des commentaires, ou des instructions de traitements (optionnels)
Le contenu du document proprement dit est le contenu de l’élément racine.
Déclaration du Type de Document (DTD)
Déclaration du Type de Document (DTD) 21
Documents XML valides et bien-formés
Document XML bien-formé:
la structure est imbriquée (arborescence) Document XML valide:
le document respecte une DTD qui décrit pour chaque élément la structure de son contenu et ses attributs
intégrité référentielle :
– toutes les valeurs d’attributs de type ID sont distinctes – toutes les références sont valides
Exemples
Un cinéma a
un nom, une adresse optionnelle et une suite de séances.
<!ELEMENT cinéma (nom,adresse?,(séance)*)>
Une personne a
un nom, plusieurs numéros de téléphone et au moins une adresse email
<!ELEMENT personne (nom,tel*,email+)>
Déclaration du Type de Document (DTD) 23
DTD: Exemple
1 <!ELEMENT Officiel (#PCDATA | cinéma | film)*>
2 <!ELEMENT cinéma (nom, adresse, (séance)*)>
3 <!ELEMENT nom (#PCDATA) >
4 <!ELEMENT adresse (ville, rue, (numéro)?)>
5 <!ELEMENT séance EMPTY>
6 <!ATTLIST séance heure NMTOKEN #REQUIRED
7 ref_film IDREF #REQUIRED>
8 <!ELEMENT film (titre, année>
9 <!ATTLIST film film_id ID #REQUIRED>
10 acteurs IDREFS #IMPLIED>
DTD: Utilisation
On ajoute au début du document XML la clause DOCTYPE.
Définition locale:
<!DOCTYPE Officiel [
<!ELEMENT Officiel (#PCDATA|cinéma|film)*>
<!ELEMENT cinéma (nom, adresse, (séance)*)>
...]>
Définition externe :
<!DOCTYPE Officiel SYSTEM "officiel.dtd">
Définition mixte :
<!DOCTYPE Officiel SYSTEM "officiel.dtd" [
<!ELEMENT Officiel (#PCDATA|cinéma|film)*> ]>
Déclaration du Type de Document (DTD) 25
DTD: Pourquoi Validation?
Une DTD est une description de l’interface entre le producteurs et les consommateurs des données/documents XML :
le producteur peut contrôler la qualité des données/documents produits
le consommateur peut séparer la vérification syntaxique des données/documents (parseur) de la logique de l’application
ELEMENT : Déclaration du Type de Élément
Un élément est défini par un nom et un modèle de contenu : Expression régulière sur l’alphabet des noms d’éléments;
EMPTY = élément vide;
ANY = toute combinaison de tous les éléments;
#PCDATA = texte
Contenu mixte : (#PCDATA | A | B ...)*
Déclaration du Type de Document (DTD) 27
Expressions régulières (rappel)
Expressions régulières sur un alphabet :
Chaque symbol est une expression régulière (e.r.);
Si est une expression régulière, alors
,
et
sont des expressions régulières;
Si et sont des expressions régulières, alors et
sont des expressions régulières;
Langages réguliers (1)
Chaque expression régulière sur un alphabet définit un ensemble de mots (langages)
sur :
pour tous les dans ;
: désigne le mot vide;
: tous les mots composés d’un mot dans
suivi d’un mot dans
: tous les mots dans
et dans
(union)
Déclaration du Type de Document (DTD) 29
Langages réguliers (2)
: tous les mots composés de mots dans
;
; Exemples :
,
ATTLIST : Déclaration des Attributs
<!ATTLIST élément nom type mode [defaut]>
Les éléments de type séance ont un attribut heure et un attribut ref_film :
<!ATTLIST séance heure NMTOKEN #REQUIRED ref_film IDREF #REQUIRED>
Les éléments de type film ont un attribut film_id et un attribut acteurs:
<!ATTLIST film film_id ID #REQUIRED
acteurs IDREFS #IMPLIED>
Déclaration du Type de Document (DTD) 31
Types d’attributs
Chaînes de caractères : CDATA
Énumérations : séquences de valeurs alternatives séparées par
ID, IDREF, IDREFS : identifiants et références ENTITY/ENTITIES : entité(s)
NMTOKEN/NMTOKENS : chaîne(s) de caractères sans blancs NOTATION : notation
ATTLIST : Mode
Modes d’attributs:
#REQUIRED : la valeur doit être définie
#IMPLIED : la valeur est optionnelle
#FIXED : la valeur est constante
<!ATTLIST séance heure NMTOKEN #REQUIRED ref_film IDREF #REQUIRED>
<!ATTLIST film film_id ID #REQUIRED acteurs IDREFS #IMPLIED
langue (AN|FR|AL|ES|IT) #IMPLIED>
<!ATTLIST adresse ville CDATA #IMPLIED ’Paris’>
Déclaration du Type de Document (DTD) 33
Entités
<!DOCTYPE Officiel [
<!ENTITY copyright ’Copyright B. Amann’>
<!ELEMENT Officiel (p, année) >
<!ELEMENT p (#PCDATA) >
<!ENTITY % text ’#PCDATA’>
<!ELEMENT année (%text;) >
]>
<Officiel>
<p> ©right; </p>
<année>2000</année>
</Officiel>
Entités externes
Segmentation du document en plusieurs sous-documents Réutilisation de DTDs et de déclarations
Références vers données non-XML (NOTATION) Adressage:
URL : <!ENTITY pariscope SYSTEM ’http://pariscope.fr/ext.xml’ >
FPI (formal public identifier) :
<!ENTITY planning PUBLIC ’-//CNAM//Texte libre//FR’>
Déclaration du Type de Document (DTD) 35
Entités caractères
Déclaration entité Référence Car.
<!ENTITY lt "<"> < <
<!ENTITY gt ">"> > >
<!ENTITY amp "&"> & &
<!ENTITY apos "'"> ' ’
<!ENTITY quot """> " "
Table 1:
Résumé sur les DTDs
Une DTD décrit la structure d’un ensemble de documents XML valides ;
Tous les parseurs XML permettent de valider un document XML par rapport à une DTD ;
Une DTD n’est pas un document XML ;
Il existent des langages plus riches pour la description d’un document XML : XML Schema, Relax NG grammaires d’arbres régulières
Document Object Model (DOM) 37
Document Object Model (DOM)
Le modèle DOM
DOM est décomposé en plusieurs niveaux ; Le niveau 1 fournit
– une définition de la structure logique d’un document sous forme d’une arborescence
– des interfaces, méthodes, attributs et objets pour la création et modification de documents XML (DOM core) et HTML (DOM HTML)
Il ne fournit pas de notions d’événement, de persistance, d’interrogation etc. niveaux 2 ou plus
Document Object Model (DOM) 39
Passage de la forme sérialisée à la représentation DOM
Le document sérialisé est analysé pour créer une représentation arborescente :
le nœud racine est de type Document
les catégories syntaxiques (commentaires, balises, texte) se traduisent par différents types de nœuds (Comment, Element, Text)
les nœuds constituent un arbre qui reflète l’imbrication des éléments dans la forme sérialisée
Le modèle 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) 41
Les types de noeuds DOM
Leaf
Processing Instruction
Text
CData Comment
Entity
Reference Element Document Document Type
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 2: Types de nœuds DOM
Document Object Model (DOM) 43
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
Propriétés d’un noeud
Propriété Type
nodeType unsigned short nodeName DOMString
nodeValue DOMString
attributes NamedNodeMap
Table 4: Propriétés du type Node
Document Object Model (DOM) 45
Propriétés d’un node (structure)
Propriété Type parentNode Node firstChild Node
lastChild Node
childNodes NodeList previousSibling Node
nextSibling Node
Table 5: Propriétés du type Node
Programmation XML avec les APIs DOM et SAX
Programmation XML avec les APIs DOM et SAX 47
Programmer avec XML
Les deux principales interfaces de programmation XML :
DOM (Document Object Model), basé sur une représentation arborescente
SaX (Simple API for XML), basé sur des déclencheurs
“événement/action”
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
Programmation XML avec les APIs DOM et SAX 49
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
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));
Programmation XML avec les APIs DOM et SAX 51
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
Architecture SAX
Associer des événements aux balises : Document
XML
Fonctions
<ELT1> </ELT1> <ELT2> ...
Parseur SAX Evénements
Accumulateur Données
Programmation XML avec les APIs DOM et SAX 53
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");
}
Programmation XML avec les APIs DOM et SAX 55
Exemple programmation SAX
// 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);
}
Exemple programmation SAX
// 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);
}
Programmation XML avec les APIs DOM et SAX 57
Exemple programmation SAX
// 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>
Programmation XML avec les APIs DOM et SAX 59
Les événements
Début de document : connexion à la base et début de transaction
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, destruction de Film
Le rôle de XML dans les applications Web
Programmation XML avec les APIs DOM et SAX 61
Applications Web
Commerce électronique : catalogue/achat en-ligne (B2C), échanges commerciales (B2B)
Éducation : formation/enseignement à distance
Recherche : organisation de conférences, journaux électroniques
Médias : information en directe, archivage
Archivage, veille technologique (entrepôts thématiques)
Problème commun : Comment échanger et gérer des informations sur le Web ?
Architecture générale d’une application Web
Contenu
Mise−à−jour
Gestion
Transactions Sessions
Web
Integration
Acquisition
Souscription Exploration Transformation
Distribution
Publication
Entrepot
Recherche Formulaires Services
IInteraction
Requetes
Programmation XML avec les APIs DOM et SAX 63
XML comme modèle de données pour les applications Web
Un document XML
peut être échangé facilement (format ASCII) ;
permet de représenter pratiquement toute information structurée ;
n’est pas lié à un mode d’utilisation : chacun peut se définir ses propres « structures » ;
peut être stocké, transformé, interrogé “facilement”
XML = le modèle de données pour le Web
La technologie XML peut contribuer à tous les niveaux d’une application Web :
Modèle de données : entrepôts/BD XML, XML Schéma, XQuery
Pogrammation d’applications : XPath/XQuery (interrogation), DOM/SAX (programmation), XSLT (transformation)
Format d’échange entre applications : services Web (SOAP) Format de publication de données : XHTML, SMIL, SVG, RDF...
Programmation XML avec les APIs DOM et SAX 65
Première etude de cas : Site web cinématographiques
Un cinéma veut diffuser sa programmation sur le Web : informations sur les films, salles et horaires
différentes formats de diffusion : navigateur Web, téléphone portable, RealPlayer, papier
Le cinéma
Cinema.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE CINEMA SYSTEM "Cinema.dtd" [
<!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>
Programmation XML avec les APIs DOM et SAX 67
Une salle de cinéma
Salle1.xml :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE SALLE SYSTEM "Salle.dtd" [
<!ENTITY gladiator SYSTEM "Gladiator.xml">
]>
<SALLE NO=’2’ PLACES=’120’>
&gladiator;
<SEANCES>
<SEANCE>22:00</SEANCE>
</SEANCES>
</SALLE>
Un film
Gladiator.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<FILM FILMID=’4’>
<TITRE>Gladiator</TITRE>
<AUTEUR>Ridley Scott</AUTEUR>
<ANNEE>2000</ANNEE>
<GENRE>Aventure</GENRE>
<PAYS>Etats Unis</PAYS>
<RESUME>
Un gladiateur romain se tient au centre de l’immense Colisée, le regard tourné vers l’empreur, suspendu à sa décision. Détenant le pouvoir de vie et de mort le césar tient son pouce levé, une expression implacable sur le visage. Il semble prêt à donner au gladiateur l’ordre d’achever son adversaire vaincu.
Cette scène, représentée par le peintre Jean-Léon Gérôme dans son tableau Pollice verso au 19eme siècle a emflammé l’imagination du réalisateur Ridley Scott et l’a incité à diriger le péplum Gladiator.
</RESUME>
</FILM>
Programmation XML avec les APIs DOM et SAX 69
Publication : 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
L’information est la même sous des formes différentes: il faut pouvoir transformer le document Gladiator.xml XSLT
Deuxième etude de cas : Moteur de recherche cinématographique
On veut créer un moteur de recherche pour chercher des séances, des films, des horaires proposés par les sites de cinéma
Démonstration: SallesEnLigne.com
Programmation XML avec les APIs DOM et SAX 71
Architecture de l’application
réponse
requête
www.sallesenligne.fr www.cine−marseille.fr
www.epee−de−bois.fr
Moteur de recherche relationnel
XSLT
XSLT
Client web
Client web Client Flux XML web
Documents XML DTD 1
DTD 2
Intégration
BD Moteur de recherche
Recherche
import SQL
Programmation XML avec les APIs DOM et SAX 73
Moteur de recherche XML
( Démo )
XSLT
XSLT
Client web
Client web Client Flux XML web
Documents XML DTD 1
DTD 2
Intégration Moteur de recherche
Recherche
XQuery
BD XML
Intégration
Pour interroger les informations, ils doivent d’abord être transformées dans un format unique :
On définit une DTD pour le moteur de recherche
<!ELEMENT FILM ( TITRE, CINEMA, VILLE, URL?, HEURE+ ) >
<!ELEMENT TITRE ( #PCDATA ) >
<!ELEMENT CINEMA ( #PCDATA ) >
<!ELEMENT VILLE ( #PCDATA ) >
<!ELEMENT URL ( #PCDATA ) >
<!ELEMENT HEURE ( #PCDATA ) >
Les cinémas fournissent leurs informations dans ce format (transformation XSLT)
Programmation XML avec les APIs DOM et SAX 75
Le document intégrateur
Le moteur de recherche interroge un document XML (XQuery) :
<?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>
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 »)
De nombreux outils d’analyse, parsing, transformation, interrogation, ...
Transformation d’un langage à un autre avec XSLT
= Bien adapté au web.