Schémas de données semi-
structurées (XML)
Données et Web / B. Amann et P. Rigaux – p.8/173
Plan
Schémas de données XML
Grammaires d’arbres
DTD et XML Schema
Langages d’interrogation: XQuery
Stockage de données XML
Données et Web / B. Amann et P. Rigaux – p.7/173
Bibliographie: Bases de données et XML
V. Vianu, A Web Odyssey: from Codd to XML,
PODS’2001
S. Abiteboul, P. Buneman, D. Suciu: Data on
the Web - from relations to semi-structured
data and XML
A. Doucet et G. Jomier (eds.), Bases de
données et Internet, Hermes.
R. Bourret,
http://www.rpbourret.com/xml/XMLDBLinks.htm
Ecole d’été EDBT’02, http://www-
lsr.imag.fr/EDBT2002/Other/programme.html
Données et Web / B. Amann et P. Rigaux – p.6/173
La vision “base de données” de XML
XML permet de représenter des données et
des documents (modèle de données
“semi-structurées”).
On veut stocker, gérer et interroger des
grands volumes de données XML:
Langages d’interrogation
Schémas de données XML
Stockage, optimisation et indexation
Données et Web / B. Amann et P. Rigaux – p.5/173
Situations mixtes
Dans un serveur Web la séparation
données/document n’est pas toujours très nette.
Un part de description textuelle est de nature
«document»
Exemple: tout le texte présentant un
cinéma, ses activités, etc
Une part est contenue dans une base de
données
Exemple: les films
Données et Web / B. Amann et P. Rigaux – p.4/173
Données et documents
Les données sont
structurées,
typées,
volumineuses,
avec une granularité fine.
et dans un document,
les structures sont plus souples,
la notion de type est moins forte,
il y beaucoup de texte.
Données et Web / B. Amann et P. Rigaux – p.3/173
Gestion de Données XML
Nous avons deux technologies complémentaires:
Bases de Données:
interrogation
mises-à-jour et transactions
Documents XML:
publication et échange
Données et Web / B. Amann et P. Rigaux – p.2/173
XML et les bases de données
Bernd Amann et Philippe Rigaux
CNAM/Paris XI
Données et Web / B. Amann et P. Rigaux – p.1/173
Interpretation
Une interpretation d’un arbre
vers une grammaire d’arbres est une “mapping”
de chaque noeud , noté , dans vers un
non-terminal tel que:
est un symbole dans , et
pour chaque noeud et ses enfants ,
il existe une règle de production telle
que (1) , (2) le terminal (étiquette) de
est , et (3) est dans .
Grammaires d’arbre/ B. Amann – p.16/173
Grammaire d’arbre: Exemple 2
Grammaire d’arbres :
1
N = {Doc, Para1, Para2, Pcdata}
2
T = {doc, para, pcdata}
3
S = {Doc}
4
Doc -> doc (Para1, Para2*)
5
Para1 -> para (Pcdata)
6
Para2 -> para (Pcdata)
7
Pcdata -> pcdata
Grammaires d’arbre/ B. Amann – p.15/173
Grammaire d’arbre: Exemple 1
Grammaire d’arbres :
1
N = {Doc, Section, Titre, Para, Pcdata}
2
T = {doc, section, titre, para, pcdata}
3
S = {Doc}
4
Doc -> doc (Titre, Section+)
5
Titre -> titre (Pcdata)
6
Section -> section (Titre, Para*)
7
Para -> para (Pcdata)
8
Pcdata -> pcdata
Normalisation: Il n’existe pas deux règles
et .
Grammaires d’arbre/ B. Amann – p.14/173
Grammaires d’arbres
Une grammaire d’arbres (régulière) est un
quadruple , où
est un ensemble fini de non-terminaux,
est un ensemble fini de terminaux,
est un sous-ensemble de ,
est un ensemble fini de règles de
production ou , où ,
et est une expression régulière sur
( est appelé le modèle de contenu de ).
Grammaires d’arbre/ B. Amann – p.13/173
Grammaires d’arbre
Grammaires d’arbre/ B. Amann – p.12/173
Exemple: Stockage d’un document XML dans une Base de Données
DTD:
1
<!ELEMENT Cours (Titre, NomProf, (Etudiant)* >
2
<!ELEMENT Etudiant NomEt >
3
<!ELEMENT Prof (NomProf, Salaire) >
Schéma relationnel:
Cours(titre, nomProf)
Etudiant(nomEt, titre)
Prof(nomProf, salaire)
Grammaires d’arbre/ B. Amann – p.11/173
Exemple: Interrogation et Optimisation
DTD:
1
<!ELEMENT Personnes (Etudiant|Prof)*>
2
<!ELEMENT Etudiant Nom>
3
<!ELEMENT Prof (Nom, Salaire)>
Requête XQuery:
for $a in Personnes/* return $a/Salaire
Version optimisée:
for $a in Personnes/Prof return $a/Salaire
Grammaires d’arbre/ B. Amann – p.10/173
Les besoins de schémas
Dans la gestion de données XML, un schéma est
utile pour
naviguer et interroger,
créer et modifier,
l’optimisation de requêtes, et
le stockage des données.
Dans la gestion de documents XML, un schéma
est utile pour
créer et modifier (éditeurs structurés),
l’échange (vérification)
Grammaires d’arbre/ B. Amann – p.9/173
Parsing et Validation
On distingue entre deux modèles de parsing
(validation):
modèle d’arbre: le parseur crée un arbre
dans la mémoire (DOM).
modèle par évènements: le parseur crée
des évènements qui correspondent à des
entrées et sorties des noeuds dans un
parcours de l’arbre de gauche à droite en
profondeur (SAX). Ce parcours correspond à
une lecture sequentielle d’un fichier XML sans
mémoire.
Grammaires d’arbre/ B. Amann – p.24/173
Clôture
les grammaires d’arbres régulières sont
fermés sous l’union, l’intersection et la
différence.
les grammaires locales, à types uniques et
avec concurrence restreinte sont uniquement
fermées sous l’intersection.
Grammaires d’arbre/ B. Amann – p.23/173
Expressivité
Dans une grammaire
locale,tous les éléments d’un type sont
associés à la même règle de production
à types uniques,tous les fils de type d’un
élément sont associés à la même règle de
production
avec concurrence restreinte, il est possible
d’identifier pour chaque élément une seule
règle de production à partir de son parent et
de ses frères de gauche.
locale type unique concurrence restreinte
Grammaires d’arbre/ B. Amann – p.22/173
Grammaires avec concurrence restreinte
Une grammaire avec concurrence restreinte
est une grammaire régulière telle que
pour chaque règle de production, le modèle
de contenu restreint la concurrence entre ses
non-terminaux et
les non-terminaux dans ne sont pas
concurrents.
La grammaire précédente est une grammaire
avec concurrence restreinte.
Grammaires d’arbre/ B. Amann – p.21/173
Non-terminaux concurrents
Un modèle de contenu restreint la
concurrence entre deux non-terminaux et
concurrents s’il n’existe pas de séquences de
non-terminaux , , et telles que génère
et .
Exemple: Le modèle de contenu de
Doc -> doc (Para1* Para2*) ne restreint
pas la concurrence entre Para1 et Para2.
Grammaires d’arbre/ B. Amann – p.20/173
Grammaires à types uniques
Une grammaire à types uniques est une
grammaire régulière telle que
pour chaque règle de production, les
non-terminaux dans son modèle de
contenu ne sont pas concurrents et
les symboles dans ne sont pas
concurrents.
La grammaire précédente n’est pas une
grammaire à types uniques.
Grammaires d’arbre/ B. Amann – p.19/173
Grammaires locales
Deux non-terminaux et différents sont
concurrents entre eux s’il existe deux règles
de production et .
Une grammaire locale est une grammaire
régulière sans non-terminaux concurrents.
La grammaire précédente n’est pas une
grammaire locale.
Grammaires d’arbre/ B. Amann – p.18/173
Géneration d’arbres et langages
Un arbre est généré par une grammaire
d’arbres s’il existe une interprétation de
dans .
Un langage d’arbres régulier est l’ensemble
des arbres générés par une grammaire
d’arbres régulièrs.
Grammaires d’arbre/ B. Amann – p.17/173
Exemple de type
Type XML Schema:
<xsd:complexType name=’CinemaType’>
<xsd:sequence>
<xsd:element name=’nom’ type=’xsd:string’/>
<xsd:element name=’adresse’ type=’AdresseType’/>
<xsd:element name=’séance’ type=’SéanceType’
minOccurs=’0’
maxOccurs=’unbounded’/>
</xsd:sequence>
</xsd:complexType>
Expression d’arbre:
CinemaType -> Nom Adresse (Séance)*
Nom -> nom String
Adresse -> adresse AdresseType
Séance -> séance SéanceType
Grammaires d’arbre/ B. Amann – p.32/173
Constructeurs de type
Le type (complexe) CinemaType est une séquence
d’éléments (constructeur de type séquence):
nom de type string
adresse de type AdresseType
séances de type SéanceType
Grammaires d’arbre/ B. Amann – p.31/173
XML Schéma versus DTD
Un schéma XML est lui même un document
XML.
Les types des éléménts (OfficielType) peuvent
être déclarés indépendamment des éléments
(officiel) : plusieurs éléments peuvent
partager le même type.
types complexes, abstraits et anonymes
sous-typage par extension et restriction
contraintes d’intégrité (clés, clés étrangères)
Grammaires d’arbre/ B. Amann – p.30/173
XML: Syntaxe pour Transfert de Données
Problème: DTD sont trop “pauvres” pour
représenter des modèles de données plus
riches :
la relation élément/sous-élément n’a pas
de sémantique précise (part-of,
instance-of, subclass-of, ...)
un ensemble limité de types atomiques
une DTD n’est pas un document XML
Grammaires d’arbre/ B. Amann – p.29/173
XML Schema
Grammaires d’arbre/ B. Amann – p.28/173
DTD comme grammaire d’arbre : Exemple
DTD: officiel.dtd
<!ELEMENT officiel (#PCDATA | cinéma | film)*>
<!ELEMENT cinéma (nom, adresse, (séance)*)>
Grammaire d’arbres:
Officiel -> officiel OfficielType
OfficielType -> (Cinema|Film|Pcdata)*
Cinema -> cinema CinemaType
Film -> film CinemaType
Grammaires d’arbre/ B. Amann – p.27/173
Langage de typage XML
DTD: grammaire locale
XML Schéma: grammaire à types uniques
DSD, XDuce, Relax Core, Trex: grammaire
régulière sans restriction
Grammaires d’arbre/ B. Amann – p.26/173
Validation
Les grammaires d’arbres régulières permettent la
validation par évènement.
Exemple: Grammaires à types uniques
1. entrée d’un noeud de type on cherche
une règle :
(a) noeud = racine: il existe au maximum une
règle de production
(b) noeud <> racine: soit la règle de
production du parent de ; on cherche la
règle tel que apparaît dans
2. sortie d’un noeud : on compare la séquence
des étiquettes des enfants de avec .
Grammaires d’arbre/ B. Amann – p.25/173
Eléments
Déclaration d’éléments:
<xsd:element name type contraintes [value]/>
ou
<xsd:element ref contraintes/>
Contraintes: minOccurs, maxOccurs, fixed
Exemple:
<xsd:element name=’nom’
type=’xsd:string’
minOccurs=’0’
maxOccurs=’2’/>
Grammaires d’arbre/ B. Amann – p.40/173
Union de Types Simples
Grammaire:
euroNumTél -> francTél | gerTél | belTél | ...
Schéma:
<xsd:simpleType name=’euroNumTél’>
<xsd:union memberTypes=’francTél
gerTél
belTél
...’/>
</xsd:simpleType>
Grammaires d’arbre/ B. Amann – p.39/173
Liste avec 5 numéros de téléphone
Grammaire:
cinqNumTél -> (numTél, numTél, numTél,
numTél, numTél)
Schéma:
<xsd:simpleType name=’cinqNumTél’>
<xsd:restriction base=’listNumTél’>
<xsd:length value=’5’/>
</xsd:restriction>
</xsd:simpleType>
Grammaires d’arbre/ B. Amann – p.38/173
Listes de Valeurs de Type Simple
Grammaire:
listeNumTél -> (numTél)*
Schéma:
<xsd:simpleType name=’listeNumTél’>
<xsd:list itemType=’numTél’/>
</xsd:simpleType>
Grammaires d’arbre/ B. Amann – p.37/173
Restriction de Types Simples par Motifs
Numéro de téléphone: +33-(0)-1-34-45-67-89
DTD: #PCDATA
Schéma XML: Similaire aux expressions
régulières de Perl
<xsd:simpleType name=’numTél’>
<xsd:restriction base=’xsd:string’>
<xsd:pattern value=’+33-(0)-\d(-\d{2}){3}’/>
</xsd:restriction>
</xsd:simpleType>
Grammaires d’arbre/ B. Amann – p.36/173
Restrictions de Types Simples
On peut restreindre les types simples
par leur longueur (length, minLength,
maxLength) (chaînes de caractères ou listes)
par des motifs (chaînes de caractères),
par énumération,
par des intervalles (maxInclusive,
maxExclusive, minInclusive,
minExclusive) et
autres (precision, scale, encoding,
period, duration).
Grammaires d’arbre/ B. Amann – p.35/173
Restriction de Types Simples
L’année d’un film est un entier entre 1900 et 2002.
DTD: #PCDATA
XML schéma : Restriction de type
<xsd:simpleType name=’annéeFilm’>
<xsd:restriction base=’xsd:integer’>
<xsd:minInclusive value=’1900’/>
<xsd:maxInclusive value=’2002’/>
</xsd:restriction>
</xsd:simpleType>
Grammaires d’arbre/ B. Amann – p.34/173
Types Simples
DTD: un seul type simple (#PCDATA) et 10
types d’attributs
Schéma XML: 43 types simples
xsd:string,xsd:byte, ...
xsd:integer,xsd:long,xsd:float,
xsd:double, ...
xsd:boolean
xsd:time,xsd:timeDuration,
xsd:Date,xsd:year,xsd:month, ...
xsd:language,xsd:uriReference
xsd:ID,xsd:IDREF,xsd:NMTOKEN, ...
Grammaires d’arbre/ B. Amann – p.33/173
1 / 22 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !