XML Cours
XML Cours
XML Cours
Dr Bassirou NGOM
[email protected]
1
Au commencement…
• SGML
• Standard Generalized Markup Language
• Langage à balises pour représenter des documents structurés
• Complexe, difficile à apprendre
• Réservé aux professionnels de la documentation
• Difficilement extensible au Web
• HTML ! (dérive de SGML)
• Conçu dans l’optique d’afficher des « pages webs »
• C’est ce qui a fait son succès
• Problème de ces langages
– Un document peut se définir par le fond et par la forme.
• Forme = structure + présentation
• Fond = structure + sémantique
2
SGML
3
SGML
Qu'est-ce que SGML ?
• Une norme internationale :
– Standard Generalized Markup Language
– ISO 8879 - 1989
• Un métalangage de balisage de documents
– lisible par l’être humain et traitable par une machine
– permet de définir des langages de balisage
• Les documents sont balisés conformément à une grammaire (la DTD
Document Type Definition)
– permet un balisage sémantique du fond.
• Implique la notion de validité d'un document
4
SGML
SGML : objectifs
5
SGML
SGML : critiques
6
SGML
HTML : présentation
7
HTML
HTML : inconvénients
9
HTML
XML : objectifs
10
Origines
les 10 objectifs d ’XML
11
Origines
les 10 objectifs D ’XML
12
Origines
Introduction au langage XML
13
XML
Introduction au langage
• XML: eXtensible Markup Language
• Défini par le consortium W3C
• A l’origine, proposé comme langage d’annotation (en remplacement
ou en complément à HTML, SGML, …) pas en tant que langage pour
BD
– Les documents contiennent des tags qui décrivent le contenu
<Cours>
<Titre_cours>XML</Titre_cours>
<Section>
<Titre>Introduction</Titre>
<Texte> XML: eXtensible …</Texte>
</Section>
…
</Cours>
14
Introduction au langage
• Contrairement à HTML
15
Introduction au langage
• Actuellement, XML est plutôt utilisé comme langage d’échange de données
entre applications
• XML autorise l’ajout de nouveaux tags, mais ceux-ci sont contraints par les
DTD
18
L’imbrication d’éléments (2)
L’imbrication est prohibée ou découragée dans les bases de données
relationnelles
20
Les attributs
23
Document bien formé
24
Les espaces de noms : Namspaces
25
Espace de nom : (exemple)
<société xmlns="http://abcd.com/societes"
xmlns:per="http://abcd.com/personnes">
<nom> abcde </nom>
<employés>
<employé>
<per:nom> Jean Dupont</nom>
</employé>
</employés>
</société>
• Le tag <nom> est utilisé avec deux sens, une première fois pour désigner le
nom d’une société et une deuxième fois pour désigner le nom d’une
personne.
• Le Namespace par défaut est http://abcd.com/societes. L’autre a un alias
" per "
26
Définition du schéma
• Le schéma d’une BD fixe l’organisation logique des données qu’on peut
stocker ainsi que leurs types
27
Les DTD
• Elles spécifient
– Quels éléments peuvent apparaître dans le document
– Quels attributs peuvent/doivent apparaître dans le document
– Quels sous-éléments peuvent/doivent apparaître dans le
document
• Les DTD ne contraignent pas le type de données
– Tout est chaîne de caractères
• Syntaxe
– <!ELEMENT élément (spécification_des-sous-éléments)>
– <!ATTLIST élément(attributs)>
28
Spécification des éléments dans une DTD
• Les sous-éléments peuvent être spécifiés comme
– Noms d’éléments
– #PCDATA (chaînes de caractère)
– EMPTY (pas de sous-éléments)
– ANY (n’importe quoi)
• Exemple
<!ELEMENT livre(titre, année, auteur+, mot_clé*)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT année (#PCDATA)>
<!ELEMENT auteur(nom, prénom)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prénom (#PCADATA)>
<!ELEMENT mot_clé (#PCDATA)>
29
Spécification des attributs dans une DTD
• Pour chaque attribut
– Son nom
– Son type
• CDATA (chaîne)
• ID (identificateur ~clé)
• IDREF (fait référence à un ID ~ clé étrangère)
• IDREFS (ensemble de références)
– Si
• Il est obligatoire (#REQUIRED)
• Il a une valeur par défaut (valeur)
• Sinon (#IMPLIED)
• Exemple:
<!ATTLIST compte( type CDATA "chèque"
Num ID #REQUIRED)>
<!ATTLIST client( idCli ID #REQUIRED
comptes IDREFS #REQUIRED)>
30
ID et IDREF
31
Critique des DTD
• Pas de typage
– Pas possible d’exiger que l’élément <age> doit contenir un entier.
Le seul type c’est PCDATA (ou CDATA pour les attributs)
Exemple :
<!ATTLIST compte( type CDATA "chèque"
Num ID #REQUIRED)>
<!ATTLIST client( idCli ID #REQUIRED
comptes IDREFS #REQUIRED)>
33
XML Schema
• C’est un outil plus sophistiqué que les DTD. Permet de spécifier
– Les types
– Contraintes sur les valeurs min/max
– De nouveaux types utilisateur
36
Modèle arborescent (1)
125 No CINEMA
• Les nœuds éléments ont des éléments fils qui peuvent être
soit des éléments, soit des attributs soit des chaînes
• Les fils d’un élément sont triés dans l’ordre de leur
apparition dans le document XML
• Tous les nœuds ont un et un seul parent sauf la racine
• Les nœuds attributs ont obligatoirement un fils de type
chaîne mais pas de petit-fils
39
XPATH
40
XPATH(2)
• Exemple • /a/b/c retourne l’ensemble
<a>
<b> <c> c1 </c>
<c> c1 </c> <c> c2 </c>
</b>
<b>
•/a/b retourne
<c> c2 </c> <b><c>c1</c></b>
</b>
</a>
<b><c>c2</c></b>
•/a/b/c/text() retourne
c1 c2
41
XPATH (3)
42
XPATH(4)
43
XPATH(5)
45
XSLT
Fich.xml Browse
Processeur Fich.html r
XSLT
Fich.xsl
Fich.xml Browse
r
Fich.xsl
46
XSLT
47
Structure de base: les règles
FILM
49
Un exemple
50
Extraction de données
51
Illustration
FILM
select=‘TITRE’ Match=‘FILM’
52
Une règle complète
<xsl:template match=“FILM”>
<html>
<head>
<title> Film:
<xsl:value-of select =“TITRE”/>
</title>
</head>
<body>
l’année de sortie du film est
<b><xsl:value-of select=“Année”/></b>
</body>
</html>
</xsl:template> 53
Le résultat
• Appliquée au fichier précédent, on obtient
<html>
<head>
<title>Film:
Vertigo
</title>
</head>
<body>
l’année de sortie du film est
<b>1958</b>
</body>
</html>
54
Production d’un document XML
<xsl:template match="/banque/client">
<xsl:element Name="client">
<xsl:value-of select="nom"/>
</xsl:element>
</xsl:template>
55
Création d’attributs
• Pour ajouter des attributs, il faut utiliser la construction xsl:attribute
• Ex:
<xsl:template match = "/banque">
<client>
<xsl:attribute Name="num">
<xsl:value-of select="Client/numero"/>
</xsl:attribute>
<nom>
<xsl:value-of select="Client/nom"/>
</nom>
</client>
</xsl:template>
56
Autre exemple
<xsl:template match="a">
<a>
<xsl:value-of select ="b"/>
<b>1</b>
</xsl:template>
<b>2</b>
Retourne : 1
<b>3</b>
En fait, value-of retourne le premier b
</a> trouvé. Que faut-il faire pour retourner tous
les <b> ?
Pour cela il faut utiliser la construction
xsl:apply-template
<xsl:template match="/a">
<xsl:apply-templates select="b"/>
</xsl:template> 57
template et apply-templates
• Avec template, l’attribut match prend une valeur XPATH
• Avec apply-templates, l’attribut select prend une valeur XPATH
<?xml version="1.0" encoding="ISO-8859-1"?>
<COURS CODE="TC234">
<SUJET>Publication XSLT</SUJET>
<ENSEIGNANTS>
<!-- Enseignant responsable -->
<NOM>Amann</NOM>
<NOM>Rigaux</NOM>
</ENSEIGNANTS>
<PROGRAMME>
<SEANCE ID="1">Documents XML</SEANCE>
<SEANCE ID="2">Programmation XSLT</SEANCE>
<ANNEE>2002</ANNEE>
</PROGRAMME>
</COURS> 58
Exemple (suite)
• On veut récupérer les noms, l’identificateur de la séance et le texte
associé à la séance
<xsl:template match="/">
<xsl:apply-templates select="//NOM"/>
<xsl:apply-templates select="//SEANCE/@ID"/>
<xsl:apply-templates select="//SEANCE"/>
</xsl:template>
• L’expression XPATH dans apply-templates sert à désigner (ou
sélectionner) un ensemble de nœuds
• L’expression XPATH dans template exprime une condition sur les
nœuds
• Cette règle peut être lue: pour tout nœud satisfaisant /, exécuter les
3 actions de la règle
– Cette règle est toujours déclenchée car il y a au moins (exactement) un
élément racine
59
Exemple (suite)
60
Exemple (suite)
<xsl:template match="PROGRAMME/SEANCE">
<SEANCE><xsl:value-of select="."/></SEANCE>
</xsl:template>
61
XQuery
• Inspiré de SQL
• Aussi puissant que XSLT mais beaucoup plus
simple
• XQuery 1.0 standard fin 2002
62
XQuery : Introduction
• structure générale :
FOR déclarations des variables
WHERE condition expression
RETURN document FLWR
63
Inscrit.xml
<Inscrits>
<Inscrit>
<Etudiant EtuId=“111111111” Nom=“Jon Doe” />
<CrsChoisi CodeCours=“CS308” Semestre =“H1997” Note=“B” />
<CrsChoisi CodeCours =“MAT123” Semestre =“H1997” Note =“B” />
<CrsChoisi CodeCours =“EE101” Semestre =“H1997” Note =“A” />
<CrsChoisi CodeCours=“CS305” Semestre =“H1995” Note =“A” />
</Inscrit>
<Inscrit>
<Etudiant EtuId=“987654321” Nom=“Bart Simpson” />
<CrsChoisi CodeCours =“CS305” Semestre=“H1995” Note =“C” />
<CrsChoisi CodeCours =“CS308” Semestre=“H1994” Note =“B” />
</Inscritt>
…/…
64
Inscrit.xml (suite)
<Inscrit>
<Etudiant EtuID=“123454321” Nom=“Joe Blow” />
<CrsChoisi CodeCours=“CS315” Semestre=“P1997” Note=“A” />
<CrsChoisi CodeCours=“CS305” Semestre=“P1996” Note=“A” />
<CrsChoisi CodeCours=“MAT123” Semestre=“P1996” Note=“C” />
</Inscrit>
<Inscrit>
<Etudiant EtuID=“023456789” Nom=“Homer Simpson” />
<CrsChoisi CodeCours=“EE101” Semestre=“H1995” Note=“B” />
<CrsChoisi CodeCours=“CS305” Semestre=“P1996” Note=“A” />
</Inscrit>
</Inscrits>
65
Xquery: Exemple
• Exemple:
FOR $t IN document(“Inscrits.xml”)//Inscrit
WHERE $t/CrsChoisi/@CodeCours = “MAT123”
RETURN $t/Etudiant
• Résultat:
<Etudiant EtuId=“111111111” Nom=“Jon Doe” />
<Etudiant EtuId=“123454321” Nom=“Joe Blow” />
66
XQuery : Exemple
67
Restructuration de documents
68
Restructuration de documents
69
Sémantique de XQuery
70
Sémantique de XQuery
Exemple:
– Supposons que la clause FOR déclare $A et $B
– $A est associé aux noeuds {v,w}; $B à {x,y,z}
– Alors FOR produit la liste des associations
suivantes:
• $A/v, $B/x
• $A/v, $B/y
• $A/v, $B/z
• $A/w, $B/x
• $A/w, $B/y
• $A/w, $B/z
71
Sémantique de XQuery
72
Sémantique de XQuery
73
Fonctions et XQuery : Exemple
Signature
• Compter le nombre de sous-éléments récursivement: de la
DEFINE FUNCTION countNodes(element $e) RETURNS integer { Fonction
RETURN
IF empty($e/*) THEN 0
ELSE
sum(FOR $n IN $e/* RETURN countNodes($n)) expression
XQuery
+ count($e/*)
}
fonctions
prédéfinies sum,
count et empty
74
Restructuration en utilisant les fonctions
75
Aggregation: Exemple
76
Quantification et XQuery
77