TC1 : Données et Connaissances pour le web
Présentation de l'article "XML to Relational Conversion using Theory of Regular Tree Grammar" dans le cadre du contrôle continu pour le module.
XML to Relational Conversion using Theory of Regular Tree Grammar
1. XML to Relational Conversion
using Theory of Regular Tree Grammar
Murali Mani, Dongwon Lee
VLDB Conference 2002
Vincent Berthier
23 octobre 2012
Vincent Berthier XML to Relational Conversion 23 octobre 2012 1 / 15
2. Sommaire
1 Introduction
Motivation & Contexte
Le Problème
2 Travail réalisé
Des grammaires régulières
Algorithme
Création des tables
Quelques plus
3 Conclusion
Des problèmes
Questions
Vincent Berthier XML to Relational Conversion 23 octobre 2012 2 / 15
3. Introduction Motivation & Contexte
Avec l’arrivée d’XPath et de XQuery en 1999, les bases de données
XML se développent.
Une question légitime apparaît alors : peut-on passer d’une base XML
à une base relationnelle ?
Certaines choses faites en XML ne peuvent pas forcément l’être en
relationnel...
Vincent Berthier XML to Relational Conversion 23 octobre 2012 3 / 15
4. Introduction Le Problème
Les Unions XML dans du relationnel
En XML : Élèves → Étudiants | AuditeurLibre
En relationnel ?
Table : Élèves
id Étudiant ou AuditeurLibre
1 21 256 728
2 Patrick Dupont
Vincent Berthier XML to Relational Conversion 23 octobre 2012 4 / 15
5. Travail réalisé Des grammaires régulières
Une grammaire de base
N = {Formation, Nom, Note, Eval, Etudiant, Personne
AuditeurLibre, NumEtudiant, Prenom, Niveau, Coeff , Email, Tel}
T = {formation, nom, note, eval, etudiant, personne
auditeurLibre, numEtudiant, prenom, Niveau, Coeff , email, tel}
S = {Formation}
P: Formation → formation(Nom, Formation∗, AuditeurLibre∗)
Formation → formation(Nom, Formation∗, Etudiant∗, Note|Eval)
Etudiant → etudiant(NumEtudiant, Personne)
AuditeurLibre → auditeurLibre(Personne)
Personne → personne(Nom, (Email|Tel))
Note → note(Niveau, Coeff )
Eval → eval( ); Nom → nom( )
Niveau → niveau( ); Coeff → coeff ( )
Email → email( ); Tel → tel( )
Vincent Berthier XML to Relational Conversion 23 octobre 2012 5 / 15
6. Travail réalisé Des grammaires régulières
Un exemple de graphe
formation
nom formation etudiant note
nom auditeurLibre num personne niveau credits
nom tel nom email
Vincent Berthier XML to Relational Conversion 23 octobre 2012 6 / 15
7. Travail réalisé Des grammaires régulières
Normal Form 1 (NF1)
Respecte la première restriction
{X → aX2 ; Y → aY2 } ∈ P ⇒ X = Y
Vincent Berthier XML to Relational Conversion 23 octobre 2012 7 / 15
8. Travail réalisé Des grammaires régulières
Normal Form 1 (NF1)
Respecte la première restriction
{X → aX2 ; Y → aY2 } ∈ P ⇒ X = Y
P: Formation → formation((Nom, Formation∗, AuditeurLibre∗)
|(Nom, Formation∗, Etudiant∗, Note|Eval))
Etudiant → etudiant(NumEtudiant, Personne)
AuditeurLibre → auditeurLibre(Personne)
Personne → personne(Nom, (Email|Tel))
Note → note(Niveau, Coeff )
Eval → eval( ); Nom → nom( )
Niveau → niveau( ); Credits → coeff ( )
Email → email( ); Tel → tel( )
Utilisée pour vérifier par exemple la validité d’un document par rapport à
un schéma.
Vincent Berthier XML to Relational Conversion 23 octobre 2012 7 / 15
9. Travail réalisé Des grammaires régulières
Normal Form 2 (NF2)
Enfreint la première restriction...mais fait disparaître les unions.
Avant
P: Formation → formation((Nom, Formation∗, AuditeurLibre∗)
|(Nom, Formation∗, Etudiant∗, Note|Eval))
Personne → personne(Nom, (Email|Tel))
Après
P: Formation → formation(Nom, AuditeurLibre∗, Formation∗)
Formation → formation(Nom, Formation∗, Etudiant∗, Note)
Formation → formation(Nom, Formation∗, Etudiant∗, Eval )
Personne → personne(Nom, Email )
Personne → personne(Nom, Tel )
Vincent Berthier XML to Relational Conversion 23 octobre 2012 8 / 15
10. Travail réalisé Algorithme
Inlining
Un principe simple : représenter un élément par l’ensemble des feuilles de
son sous-graphe, en omettant les collections.
Exemple : Formation → formation(Nom, Formation∗, Etudiant∗, Note)
Formation
Nom Formation Etudiant Note
Niveau Credits
Formation = {}
Vincent Berthier XML to Relational Conversion 23 octobre 2012 9 / 15
11. Travail réalisé Algorithme
Inlining
Un principe simple : représenter un élément par l’ensemble des feuilles de
son sous-graphe, en omettant les collections.
Exemple : Formation → formation(Nom, Formation∗, Etudiant∗, Note)
Formation
Nom Formation Etudiant Note
Niveau Credits
Formation = {}
Vincent Berthier XML to Relational Conversion 23 octobre 2012 9 / 15
12. Travail réalisé Algorithme
Inlining
Un principe simple : représenter un élément par l’ensemble des feuilles de
son sous-graphe, en omettant les collections.
Exemple : Formation → formation(Nom, Formation∗, Etudiant∗, Note)
Formation
Nom Formation Etudiant Note
Niveau Credits
Formation = {Nom}
Vincent Berthier XML to Relational Conversion 23 octobre 2012 9 / 15
13. Travail réalisé Algorithme
Inlining
Un principe simple : représenter un élément par l’ensemble des feuilles de
son sous-graphe, en omettant les collections.
Exemple : Formation → formation(Nom, Formation∗, Etudiant∗, Note)
Formation
Nom Formation Etudiant Note
Niveau Credits
Formation = {Nom}
Vincent Berthier XML to Relational Conversion 23 octobre 2012 9 / 15
14. Travail réalisé Algorithme
Inlining
Un principe simple : représenter un élément par l’ensemble des feuilles de
son sous-graphe, en omettant les collections.
Exemple : Formation → formation(Nom, Formation∗, Etudiant∗, Note)
Formation
Nom Formation Etudiant Note
Niveau Credits
Formation = {Nom}
Vincent Berthier XML to Relational Conversion 23 octobre 2012 9 / 15
15. Travail réalisé Algorithme
Inlining
Un principe simple : représenter un élément par l’ensemble des feuilles de
son sous-graphe, en omettant les collections.
Exemple : Formation → formation(Nom, Formation∗, Etudiant∗, Note)
Formation
Nom Formation Etudiant Note
Niveau Credits
Formation = {Nom, Note.Niveau}
Vincent Berthier XML to Relational Conversion 23 octobre 2012 9 / 15
16. Travail réalisé Algorithme
Inlining
Un principe simple : représenter un élément par l’ensemble des feuilles de
son sous-graphe, en omettant les collections.
Exemple : Formation → formation(Nom, Formation∗, Etudiant∗, Note)
Formation
Nom Formation Etudiant Note
Niveau Credits
Formation = {Nom, Note.Niveau, Note.Credits}
Vincent Berthier XML to Relational Conversion 23 octobre 2012 9 / 15
17. Travail réalisé Création des tables
Résultat d’inlining
On obtient :
A partir des règles de la grammaire : formation1(Nom)
formation2(Nom, Note.Niveau,
Formation →formation(Nom, Formation∗, AuditeurLibre∗)
Note.Credits)
Formation →formation(Nom, Formation∗, Etudiant∗, Note)
formation3(Nom, Note.Eval)
Formation →formation(Nom, Formation∗, Etudiant∗, Eval)
etudiant1(NumEtudiant, Nom,
Etudiant →etudiant(NumEtudiant, Personne) Email)
AuditeurLibre →auditeurLibre(Personne) etudiant2(NumEtudiant, Nom,
Personne →personne(Nom, Email) Tel)
Personne →personne(Nom, Tel) auditeurLibre1(Nom, Email)
auditeurLibre2(Nom, Tel)
Mais il manque...le mapping des collections...
Vincent Berthier XML to Relational Conversion 23 octobre 2012 10 / 15
18. Travail réalisé Création des tables
Introduction des collections
Des formations d’un côté, des élèves de l’autre...
formation1(Nom) etudiant1(NumEtudiant, P.Nom, P.Email)
formation2(Nom, N.Niveau, N.Credits) etudiant2(NumEtudiant, P.Nom, P.Tel)
formation3(Nom, Eval) auditeurLibre1(P.Nom, P.Email)
auditeurLibre2(P.Nom, P.Tel)
Vincent Berthier XML to Relational Conversion 23 octobre 2012 11 / 15
19. Travail réalisé Création des tables
Introduction des collections
Des formations d’un côté, des élèves de l’autre...
formation1(Nom) etudiant1(NumEtudiant, P.Nom, P.Email)
formation2(Nom, N.Niveau, N.Credits) × etudiant2(NumEtudiant, P.Nom, P.Tel)
formation3(Nom, Eval) auditeurLibre1(P.Nom, P.Email)
auditeurLibre2(P.Nom, P.Tel)
Une seule solution : un “produit cartésien”
En respectant les règles de la grammaire bien sûr.
Vincent Berthier XML to Relational Conversion 23 octobre 2012 11 / 15
20. Travail réalisé Création des tables
Introduction des collections
Avec des clés étrangères
formation1auditeurLibre1formation1(nom, auditeurLibre1,
formation1auditeurLibre1formation1)
formation1auditeurLibre1formation2(nom, auditeurLibre1,
formation1auditeurLibre1formation2)
formation1auditeurLibre1formation3(nom, auditeurLibre1,
formation1auditeurLibre1formation3)
formation1auditeurLibre2formation1(nom, auditeurLibre2,
formation1auditeurLibre1formation1)
etc.
Vincent Berthier XML to Relational Conversion 23 octobre 2012 11 / 15
21. Travail réalisé Création des tables
Un problème de taille
Qui dit produit cartésien, dit explosion du nombre de tables. On peut
essayer de factoriser... mais au prix du “nullable”. Par exemple :
Table : Étudiant + AuditeurLibre → Élèves
Nom NumEtudiant P.Email P.Tel
null null null
Table : Formation
Nom Formation N.Niveau N.Credits Eval Élèves
null null null null null
Vincent Berthier XML to Relational Conversion 23 octobre 2012 12 / 15
22. Travail réalisé Quelques plus
Ils ont aussi fait...
Les attributs
IDREF, IDREFS
Les récursions
Contraintes sémantiques
Vincent Berthier XML to Relational Conversion 23 octobre 2012 13 / 15
23. Conclusion Des problèmes
Quelques “problèmes”
Passage rapide sur la création des tables
Des règles précises sont données pour les contraintes sémantiques
Mais tout est laissé à l’imagination du lecteur lorsqu’il s’agit de choisir
comment organiser les tables...
Analyse légère
On convertit une base de données en XML
On reconvertit le fichier XML avec ce que nous proposons
On vérifie qu’on retrouve bien ce qu’on avait
Conclusion : ça marche !
Vincent Berthier XML to Relational Conversion 23 octobre 2012 14 / 15
24. Conclusion Questions
A vous ?
Des questions ?
Vincent Berthier XML to Relational Conversion 23 octobre 2012 15 / 15
25. Algorithme d’inlining
inline : currEl , currSet, attSet ⇒ ResultSet
Assign the set of attributes in A(currEl ) except IDREF and IDREFS
attributes to attSet. Let the element type definition of currEl be given
by M(currEl ) = (r1 |r2 |...|rn ). Set ResultSet = φ
For each ri , we do the following
Set currSet = attSet
Let the elements which occur in ri with occurence constraints [1, 1]
after simplification be {e1 , e2 , ..., en }. For each ei do the following.
If M(ei ) ∈ τ then currSet = currSet × ei
ˆ
Else currSet = currSet × inline(ei , φ, φ)
If currSet = φ, currSet = currEl
ResultSet = ResultSet ∪ currSet.
Return ResultSet
Vincent Berthier XML to Relational Conversion 23 octobre 2012 16 / 15