Facult´ e Polytechnique de Mons
Johnny TSHEKE SHELE
Le processus d’Extraction, Transformation et Load (ETL) dans des entrepˆ ots de donn´ ees XML
Travail de fin d’´etudes pr´esent´e en vue de l’obtention du grade d’Ing´enieur Civil en Informatique et Gestion
Ann´ee acad´emique 2006-2007
Promoteurs:
Prof. Pierre Manneback (FPMs) et Prof. Esteban Zim´anyi (ULB)
`a Brian
1
Table des mati` eres
1 Introduction 8
1.1 Description du sujet . . . 8
1.2 Autres int´erˆets de l’ETL de donn´ees XML . . . 8
1.3 Structure de ce document . . . 10
2 XML en bref 12 2.1 XML : Rappel . . . 12
2.1.1 Quelques r`egles ´el´ementaires en XML . . . 12
2.1.2 Syntaxe d’un document XML . . . 13
2.1.3 D´eclaration d’un document XML . . . 13
2.1.4 Exemple d’un document XML . . . 13
2.2 Types et sch´emas des documents en XML . . . 14
2.2.1 Document Type Definition - DTD . . . 14
2.2.2 XML Schema . . . 14
2.3 Document XML bien form´e etvalide . . . 15
2.3.1 Document bien form´e . . . 15
2.3.2 Document valide . . . 15
2.4 Arborescence d’un document XML - DOM . . . 15
2.5 Parcours d’un arbre XML . . . 16
2.6 Remarque importante sur l’utilisation de l’API DOM. . . 16
2.7 Transformation d’un document XML - XSLT . . . 17
3 Les entrepˆots de donn´ees XML 19 3.1 Base de donn´ees XML . . . 19
3.2 Stockage des donn´ees XML . . . 19
3.3 Classification des bases de donn´ees XML . . . 19
3.3.1 Base de donn´ees avec support XML . . . 19
3.3.2 Base de donn´ees XML Native . . . 20
3.4 Entrepˆot de donn´ees . . . 20
3.4.1 Source des donn´ees de l’entrepˆot . . . 20
3.4.2 Structure de donn´ees d’un entrepˆot de donn´ees . . . 20
3.4.3 Interrogation de l’entrepˆot de donn´ees . . . 20
3.5 Entrepˆot de donn´ees XML . . . 21
3.6 Entrepˆot de donn´ees XML et ´echange d’informations . . . 22
3.7 Entrepˆot de donn´ees vs entrepˆot de donn´ees XML . . . 22
2
TABLE DES MATI `ERES 3
4 ETL : ´Etat de l’art 24
4.1 Ex´ecution parall`ele . . . 24
4.1.1 Un gros fichier source . . . 24
4.1.2 Pipeline . . . 24
4.1.3 Plusieurs sources . . . 25
4.2 Evolution avec le temps . . . 25
4.3 Compatibilit´e avec les syst`emes d’exploitation . . . 25
4.4 ETL spatial . . . 25
4.5 Quelques logiciels ETL . . . 26
4.5.1 ETLs propri´etaires . . . 26
4.5.2 ETLs open source . . . 27
5 Sch´ema XML canonique pour un processus ETL 28 5.1 Motivations . . . 28
5.2 Difficult´e d’extraire une structure d´efinie dans un sch´ema . . . 29
5.3 Eviter les redondances dans les sch´emas . . . 30
5.4 R`egles g´enerales d’´ecriture d’un XSD . . . 31
5.4.1 Un ´el´ement de type simple . . . 31
5.4.2 Un ´el´ement de type complexe . . . 32
5.5 R`egles canoniques . . . 33
5.6 Comment parcourir un sch´ema canonique . . . 34
6 G´en´erateur automatique de fichier XSLT 35 6.1 XPath . . . 35
6.2 XQuery . . . 35
6.2.1 Ouverture des fichiers . . . 36
6.2.2 Expressions FLWOR . . . 36
6.3 XSLT . . . 36
6.3.1 D´eclaration d’un document XSLT . . . 36
6.3.2 Quelques notions de base . . . 36
6.4 Pourquoi XSLT et pas XQuery ? . . . 37
6.5 Comment g´en´erer un fichier XSLT automatiquement . . . 38
6.5.1 Programme principal . . . 38
6.5.2 Code XSLT selon la transformation demand´ee . . . 39
6.5.3 Transformation des attributs de l’´el´ement courant . . . 40
6.5.4 Comment trouver l’´el´ement ou l’attribut correspondant ?. . . 40
6.6 Autres op´erations possibles . . . 41
6.6.1 Op´erateur de fusion . . . 42
6.6.2 Op´erateur de s´eparation . . . 42
6.6.3 Op´erateur de transformation d’un ´el´ement en attribut . . . 42
6.6.4 Op´erateur de v´erification de compatibilit´e . . . 42
6.6.5 Op´erateurs arithm´etiques . . . 42
6.6.6 Op´erateur de manipulation desinstructions de traitement . . . 43
6.6.7 Op´erateurs d’ex´ecution paral`elle d’un processus ETL . . . 43
TABLE DES MATI `ERES 4
7 R´ealisation de l’ETL 44
7.1 Quelques algorithmes du processus ETL des donn´ees XML. . . 44
7.1.1 V´erifier si un type est pr´ed´efini en XSD . . . 44
7.1.2 V´erifier si un tag de XSD d´efinit un ´el´ement. . . 45
7.1.3 V´erifier si un tag de XSD d´efinit un attribut . . . 45
7.1.4 Extraction du nom d’un ´el´ement, attribut ou type d´efini . . . 45
7.1.5 Extraction du type de l’´el´ement ou de l’attribut d´efini . . . 46
7.1.6 Traitement d’un ´el´ement et de ses fils directs . . . 46
7.1.7 Chargement des sch´emas . . . 47
7.1.8 Extraction des ´el´ements et attributs d´efinis dans un XSD . . . 47
7.1.9 Parsing d’un noeud et de ses fils ´eventuels . . . 48
7.1.10 Parsing de la structure d´efinie dans un fichier XSD . . . 49
7.1.11 Cr´eation de l’interface des correspondances . . . 49
7.1.12 Compilation d’un processus ETL . . . 49
7.2 Prototype ETL d´evelopp´e . . . 50
8 Exemple d’application 51 8.1 Chargement des fichiers dans l’ETL . . . 51
8.2 Visualisation des sch´emas charg´es. . . 53
8.3 Un choix de correspondances . . . 53
8.4 Un autre choix de correspondances . . . 55
9 Conclusions et perspectives 58 9.1 Conclusions . . . 58
9.2 Perspectives . . . 59
Bibliographie 60 A Code PHP5 du prototype ETL d´evelopp´e 61 A.1 Fichier index.php . . . 61
A.2 Fichier viewsrc.php . . . 63
A.3 Fichier viewdst.php. . . 63
A.4 Fichier mapping.php . . . 64
B Code source de la classe XmlTransform 65
Table des figures
1.1 Le processus ETL dans un entrepˆot de donn´ees XML. . . 9
1.2 Exportation/importation de donn´ees d’un SGBD `a un autre . . . 10
1.3 Transformation d’un document GML en SVG . . . 10
2.1 Exemple d’une arborescence XML . . . 16
2.2 Parcours d’un arbre XML . . . 17
2.3 Illustration des noeuds r´eellement obtenus avec l’API DOM . . . 18
3.1 Exemple de l’entrepˆot de donn´ees d’Arizona State University [14] . . . 21
3.2 Exemple d’un entrepˆot de donn´ees XML : DAWAX [3] . . . 22
6.1 Interface des correspondances . . . 41
8.1 Page d’accueil de XML ETL. . . 52
8.2 Visualisation des arborescences d´efinies dans les sch´emas. . . 53
8.3 Un choix d’une transformation . . . 54
8.4 Un autre choix de transformation . . . 57
5
Listings
2.1 Exemple d’un document XML. . . 13
2.2 Exemple d’une DTD . . . 14
2.3 Exemple d’un XML Schema -XSD . . . 15
5.1 Visualisation de la structure d´efinie dans le listing 2.3 . . . 28
5.2 Autre fa¸con d’´ecrire le sch´ema du listing 2.3 . . . 29
5.3 Encore une autre mani`ere d’´ecrire le sch´ema du listing 2.3 . . . 29
5.4 Illustration des redondances dans un XSD . . . 30
5.5 Exemple de d´efinition d’un ´el´ement de type complexe . . . 33
5.6 Exemple d’un sch´ema canonique . . . 33
6.1 La fonction qui g´en`ere le fichier XSLT . . . 38
6.2 Production du code XSLT selon le type de transformation choisie . . . 39
6.3 Production du code XSLT pour transformer les attributs de l’´el´ement courant 40 7.1 Algorithme testant si un type est pr´ed´efini . . . 44
7.2 Algorithme testant si un tag XSD d´efinit un ´el´ement . . . 45
7.3 Algorithme testant si un tag XSD d´efinit un attribut . . . 45
7.4 Algorithme d’extraction du nom de l’´el´ement/attribut/type complexe d´efini . 45 7.5 Extraction du type de l’´el´ement ou attribut d´efini. . . 46
7.6 Traitement de l’´el´ement d´efini et de ses fils . . . 46
7.7 Traitement de l’´el´ement d´efini et de ses fils . . . 47
7.8 Parsing d’une branche d’un arbre d´efini dans un XSD . . . 48
7.9 Parsing d’une structure d´efinie dans un fichier XSD. . . 49
7.10 Compilation d’un processus ETL . . . 50
8.1 Schema XSD d’une source . . . 51
8.2 Donn´ees XML d’une source . . . 52
8.3 XSLT g´en´er´e suite aux choix du paragraphe 8.3 . . . 53
8.4 R´esultat du processus ETL du paragraphe 8.3 sur les donn´ees du listing 8.2 . 55 8.5 Sch´ema de destination du processus ETL du paragraphe 8.4 . . . 55
8.6 XSLT g´en´er´e suite aux choix du paragraphe 8.4 . . . 56
8.7 R´esultats de l’ETL ´ex´ecut´e au paragraphe 8.4 . . . 56
A.1 Fichier Index.php . . . 61
A.2 Fichier viewsrc.php . . . 63
A.3 Fichier viewdst.php. . . 63
A.4 Fichier mapping.php . . . 64
B.1 Fichier xmletl2.php. . . 65
6
Remerciements
J’aimerais tout d’abord remercier mes promoteurs Pierre Manneback et Esteban Zim´anyi, tous les deux professeurs, respectivement, `a la Facult´e Polytechnique de Mons (FPMs) et `a l’Universit´e Libre de Bruxelles (ULB). Leurs encouragements, conseils, suggestions, relectures et corrections ont vraiment ´et´e une aide pr´ecieuse pour la r´ealisation du pr´esent m´emoire.
Je remercie ´egalement monsieur le professeur Philippe Fortemps, pr´esident de la section In- formatique et Gestion, de m’avoir sugg´er´e monsieur Manneback pour superviser ce travail propos´e par monsieur Zim`anyi.
J’aimerais exprimer toute ma gratitute `a ma famille et plus particuli`erement `a Jeannine et `a Brian. Que cette oeuvre soit pour eux, le fruit des sacrifices qu’ils ont consenti pour me soutenir durant ces ´etudes qui s’achevent.
Pour finir, je tiens `a remercier tous mes collegues, amis et connaissances qui m’ont soutenu et aid´e d’une mani`ere ou d’une autre pour la r´ealisation de ce travail. Parmi eux, je peux citer monsieur Marc Okoko pour la relecture et les corrections ainsi que les membres du laboratoire Informatique et R´eseaux de l’´ecole polytechnique de l’ULB.
7
Chapitre 1
Introduction
Ce chapitre positionne le sujet dans son contexte. Il montre d’une mani`ere non exhaus- tive, quelques domaines confront´es aux probl`emes pouvant ˆetre r´esolus par l’outil que nous proposons.
1.1 Description du sujet
Les entrepˆots de donn´ees1 constituent de nos jours l’infrastructure de base des syst`emes d’aide `a la d´ecision. Ils permettent de garder des grands volumes d’informations historiques permettant ainsi de d´ecouvrir des tendances et des informations similaires qui sont indispen- sables aux organisations.
Les entrepˆots de donn´ees obtiennent leurs informations des bases de donn´ees op´erationnelles, c’est-`a-dire, des bases de donn´ees qui supportent les op´erations journali`eres des organisations.
Pour amener ces informations `a l’entrepˆot, un processus commun´ement appel´eExtraction, Transformation et Load (ETL) est n´ecessaire. Celui-ci extrait les informations des syst`emes op´erationnels divers, les transforme de telle sorte qu’elles puissent respecter aussi bien les r`egles que les formats de l’entrepˆot et les charge finalement dans ce dernier.
Actuellement, le processus de ETL ainsi que les outils logiciels qui facilitent ce processus travaillent sur des bases de donn´ees relationnelles. Le but du m´emoire est la d´efinition d’un processus ETL (voir la figure 1.1) et le d´eveloppement d’un prototype d’outil associ´e qui permet d’interroger des sources de donn´ees XML en vue d’alimenter un entrepˆot de donn´ees
´egalement en XML.
1.2 Autres int´ erˆ ets de l’ETL de donn´ ees XML
En dehors des entrepˆots de donn´ees, le besoin de l’ETL de donn´ees XML peut se faire sentir dans plusieurs domaines dont
Exportation/Importation de donn´ees : Lorsqu’on exporte les informations d’une base de donn´ees (BD) `a une autre (voir la figure 1.2), on est souvent confront´e `a plusieurs probl`emes tels que :
– la diff´erence des sch´emas ;
1Data Warehouses
8
CHAPITRE 1. INTRODUCTION 9
XML
Source 1 (Schema 1)
XML
Data Warehouse (Schema of DW)
ETL XML
Source 2 (Schema 2)
XML
Source X (Schema X)
Fig. 1.1 – Le processus ETL dans un entrepˆot de donn´ees XML
– le Syst`eme de Gestion de Base de Donn´ees (SGBD) source n’est pas toujours le mˆeme que celui de destination ;
– le type ou le format de donn´ees peut ˆetre diff´erent. Exemple : d’un cˆot´e une date est cod´ee dans une chaˆıne de caract`eres (05-07-2007) de l’autre, on code la date sur 3 nombres entiers (jours, mois, ann´ee) ;
– etc.
Dans les bases de donn´ees relationnelles par exemple, il faut connaˆıtre la structure des tables pour bien ´ecrire les requˆetes permettant d’extraire les informations. Si pour une raison ou une autre, le sch´ema de la base de donn´ees ou les formats des informations d´esir´ees change, il faut modifier ou adapter une `a une les requˆetes utilis´ees.
Comme la plupart des SGBD actuels sont dot´es d’un outil permettant d’exporter/im- porter les donn´ees en XML, un outil ETL pourrait se charger du passage automatique d’un sch´ema/format `a un autre. Ce qui permettrait une automatisation de l’ensemble du processus.
Traitement de donn´ees g´eographiques : Le langage GML (Geography Markup Language) permet d’encoder des informations g´eographiques. Malheureusement, pour visualiser ces donn´ees de mani`ere graphique (cartes, ...), on a souvent besoin de les mettre sous un autre format comme SVG (Scalable Vector Graphics), X3D (eXtensible 3D)2 , etc. Ces langages (GML, SVG, X3D) utilisant le formalisme XML, on effectue souvent cette transformation au moyen d’un fichier XSLT qu’il faut ´ecrire soi-mˆeme.
2 X3D est un format de fichier graphique et multim´edia orient´e 3D. Il peut ˆetre exprim´e `a l’aide d’une syntaxe bas´ee sur XML [16]. Voir http ://www.web3d.org pour plus d’informations sur X3D
CHAPITRE 1. INTRODUCTION 10
XML
source
XML
Destination
SGBD1 SGBD2
ETL
Fig. 1.2 – Exportation/importation de donn´ees d’un SGBD `a un autre
GML
source
SVG
Destination
ETL
Fig.1.3 – Transformation d’un document GML en SVG
D’un fichier de type XML vers un autre fichier de type XML, on peut utiliser un outil ETL qui aura comme source, le document GML et pour destination, un document SVG ou X3D (voir la figure1.3).
etc.
1.3 Structure de ce document
Outre ce premier chapitre introductif, le pr´esent ouvrage est structur´e de la mani`ere suivante.
– Un survol du langage XML sera donn´e au chapitre 2,
– Le chapitre3 introduira ensuite, les entrepˆots de donn´ees XML.
– L’´etat de l’art du processus ETL sera donn´e au chapitre 4.
– Au chapitre5, nous expliquons une fa¸con d’´ecrire un sch´ema XML (XML Schema) pour simplifier le parcours de son arborescence dans le cadre d’un processus ETL.
– La conception d’un g´en´erateur automatique de fichier XSLT `a partir des sch´emas XML source et destination sera abord´ee au chapitre6.
– Le chapitre 7 couvrira la r´ealisation d’un processus ETL `a partir d’un fichier XSLT g´en´er´e au chaipitre 6.
– Une illustration du prototype ETL d´evelopp´e sera donn´ee au chapitre8sous forme d’un
CHAPITRE 1. INTRODUCTION 11 exemple d’application.
– Au chapitre9, nous tirerons des conclusions et proposerons quelques pistes de recherche pour le futur.
Compte tenu de la limitation du nombre3 de pages dans un travail de fin d’´etudes impos´ee par la facult´e, le pr´esent ouvrage est r´edig´e de mani`ere `a se focaliser essentiellement sur le processus ETL que nous proposons.
3+/- 50 pages
Chapitre 2
XML en bref
Vous trouverez dans ce chapitre, un petit rappel sur le XML. Le but n’est pas de nous
´etendre sur ce sujet tr`es vaste et que nous supposerons connu mais, de rappeler quelques notions fondamentales n´ecessaires `a la compr´ehension de la suite du pr´esent travail.
2.1 XML : Rappel
XML (eXtendedMarkup Language) est – un langage de balisage extensible, – un langage du style HTML,
– un descendant de SGML (Standard Generalized Markup Language)
– un langage qui d´efinit un cadre de repr´esentation g´en´erique de donn´ees (semi-)structur´ees [19],
– une famille de technologies qui peut tout faire depuis le formatage de document jusqu’au filtrage de donn´ees [13],
– un ensemble de r`egles permettant de cr´eer ses propres balises [13]
et qui facile l’´echange automatis´e des informations entre syst`emes (d’informations) h´et´erog`enes (sur Internet).
2.1.1 Quelques r`egles ´el´ementaires en XML
Un document XML est essentiellement compos´e de tags1. Ces derniers forment les ´el´ements.
Exemple d’un tag ouvrant :<person>. Le tag fermant correspondant est</person>.
Un ´el´ement est constitu´e d’un tag ouvrant, du tag fermant correspondant et d’un contenu
´eventuel. Le contenu d’un ´el´ement peut ˆetre d’autres ´el´ements, de donn´ees ou du texte [9].
Dans ce cas, une balise fermante est obligatoire. Exemple<person>Brian</person>.
Lorsqu’un ´el´ement est vide (c’est-`a-dire, n’a pas de contenu), on peut l’´ecrire – sous la forme d’une annotation d’ouverture et d’une de fermeture
(exemple : <person></person>)
– ou sous la forme contract´ee (exemple : <person/>).
En XML, les Tags (annotations) respectent les r`egles suivantes [9, 13]
– sensibilit´e `a la casse. C’est-`a-dire que les majuscules sont diff´erenci´ees des minuscules.
Le tag <person>est diff´erent de<Person>, lui-mˆeme diff´erent de<PERSON>, etc.
1annotations ou balises
12
CHAPITRE 2. XML EN BREF 13 – Le premier caract`ere du nom d’un tag doit ˆetre une lettre ou un soulignement ( ) – Le caract`ere blanc n’est pas permis au d´ebut du tag mais `a la fin.
– Le nom peut ˆetre compos´e des caract`eres alphanum´eriques,-,.,_.
2.1.2 Syntaxe d’un document XML
Un document XML doit respecter les r`egles suivantes.
– Avoir un et un seul ´el´ement racine (Root Element). Cet ´element est aussi appel´eDocu- ment element [9]. C’est l’´element qui contient tout le contenu du document.
– Les annotations d’ouverture et de fermeture doivent se correspondre [9, 19]. Si un tag est ouvert `a l’int´erieur d’un ´element, il doit ˆetre ferm´e `a l’int´erieur de ce mˆeme ´el´ement.
– Tout tag doit ˆetre ferm´e comme il faut (<person>...</person>ou<person/>).
– Les attributs sont des propri´et´es contenues dans l’annotation d’ouverture.
– Dans un tag, deux attributs ne peuvent pas porter un mˆeme nom [9, 13].
– Il y a une valeurunique par attribut.
– Un ´el´ement peut avoir plusieurs attributs [13].
2.1.3 D´eclaration d’un document XML
Un document XML est un fichier text dont la premi`ere ligne, appel´ee D´eclaration XML (XML Declaration)[9] est de la forme
<?xml version="1.0" ?>
o`uversion pr´ecise le standard XML utilis´e dans le document.
On peut ´egalement sp´ecifier le codage des caract`eres avec l’attributencodingpour permettre une lecture correcte du document [13]. A ce qui concerne les langues de l’europe occidentale, on ´ecrira :
<?xml version="1.0"encoding="ISO-8859-1" ?>
2.1.4 Exemple d’un document XML
Listing 2.1 – Exemple d’un document XML
<? xml version =" 1.0 " encoding = " ISO -8859 -1 "? >
< personslist >
< person >
< firstname > Johnny </ firstname >
< middlename > Shele </ middlename >
< lastname > Tsheke </ lastname >
</ person >
< person >
< firstname > Pierre </ firstname >
< middlename / >
< lastname > Manneback </ lastname >
</ person >
< person >
< firstname > Esteban </ firstname >
< middlename > Borrageiros </ middlename >
< lastname > Zimanyi </ lastname >
</ person >
</ personslist >
CHAPITRE 2. XML EN BREF 14
2.2 Types et sch´ emas des documents en XML
XML permet de cr´eer ses propres balises et de d´efinir un mod`ele (une structure) auquel les documents doivent se conformer. On peut cr´eer un mod`ele de document XML parDocument Type Definition (DTD) ou par XML schema.
2.2.1 Document Type Definition - DTD
Une DTD est un mod`ele qui repr´esente une classe de document [10] ou qui d´ecrit les exigences structurales d’un document XML [9]. Il peut d´efinir :
– les ´el´ements et attributs ´eventuels,
– les ´el´ements fils, leurs nombres et l’ordre dans lequel ils peuvent apparaˆıtre,
– les valeurs possibles et ´eventuellement, par d´efaut prises par les ´el´ements et/ou les attributs,
– etc.
Pour le document XML du listing2.1, une DTD correspondant pourrait ˆetre celui du listing 2.2
Listing 2.2 – Exemple d’une DTD
<? xml version ="1.0" encoding =" UTF -8"? >
<! ELEMENT personslist ( person +) >
<! ELEMENT person ( firstname , middlename , lastname )>
<! ATTLIST person birthdate CDATA # IMPLIED >
<! ELEMENT firstname (# PCDATA ) >
<! ELEMENT middlename (# PCDATA ) >
<! ELEMENT lastname (# PCDATA ) >
Le lecteur int´eress´e par les DTDs pourrait consulter [9, 10, 13] o`u il trouvera plus de d´etails.
2.2.2 XML Schema
XML Schema est une alternative aux DTDs, bas´ee sur XML [13, 15]. Il d´efinit un mod`ele de contenu pour une classe de documents XML et pr´esente plusieurs avantages par rapport aux DTDs :
– il est ´ecrit en XML [4, 9, 13, 15],
– il permet de sp´ecifier le type de donn´ees [4, 15], – il est extensible,
– il supporte les espaces de noms, – etc.
On parle deXML Schema Definition (XSD)pour d´esigner la grammaire de XML Schema.
Devenu une recommandation2 du W3C depuis le 2 Mai 2001 et ´etant plus riche et plus puissant, on admet actuellement que XML Schema sera le successeur des DTDs [15].
C’est pour cette raison que nous n’utiliserons pas de DTD dans le cadre de ce travail de fin d’´etudes. Nous ne consid´ererons que les sch´emas donn´es enXML schema.
Le lecteur trouvera quelques r`egles d’´ecriture des sch´emas XSD au chaiptre 5, p.28. Dans l’imm´ediat nous nous contentons de donner dans le listing2.3, un exemple d’un XML Schema qui peut d´efinir le document XML du listing2.1.
2XML Schema est un standard W3C
CHAPITRE 2. XML EN BREF 15
Listing 2.3 – Exemple d’un XML Schema -XSD
<? xml version =" 1.0 " encoding = " ISO -8859 -1 "? >
<! -- Une liste de personnes -- >
< xs:schema xmlns:xs = " http: // www . w3 . org /2001/ XMLSchema " >
< xs:element name = " personslist " type = " personsListType "/ >
< xs:complexType name = " personsListType " >
< xs:element name = " person " type = " personType "/ >
</ xs:complexType >
< xs:complexType name = " personType " >
< xs:element name = " firstname " type = " xs:string "/ >
< xs:element name = " middlename " type = " xs:string "/ >
< xs:element name = " lastname " type = " xs:string " use =" require "/ >
< xs:attribute name = " birthdate " type = " xs:date "/ >
</ xs:complexType >
</ xs:schema >
2.3 Document XML bien form´ e et valide
2.3.1 Document bien form´e
Un document XML est dit bien form´e3 s’il est syntaxiquement correct [1, 2, 9, 15, 19] ; c’est-`a-dire qu’il respecte les r`egles ´enonc´ees au paragraphe2.1.2(p.13). Il est exig´e que tout document XML `a traiter soitbien form´e.
2.3.2 Document valide
Un document XML sera ditvalide s’il estbien form´e etconforme `a la DTD ou au sch´ema XML (XML schema) qui d´efinit sa structure. Cette condition est capitale dans la conception et l’impl´ementation de l’ETL parce qu’il faut veuiller `a ce que les informations import´ees dans l’entrepˆot de donn´ees XML soient stock´ees en conformit´e avec les exigences du sch´ema de ce dernier. Dans la suite du pr´esent travail, nous supposerons que le document XML de donn´ees estvalide `a la source (Base de donn´ees op´erationnelle).
2.4 Arborescence d’un document XML - DOM
Les deux API (Application Programming Interface) les plus utilis´ees pour acc´eder aux donn´ees et aux structures des documents XML sont le DOM (Document Object Model) et le SAX (Simple API for XML). Dans ce travail, nous utiliserons le DOM qui pr´esente un document XML dans une structure arborescente o`u les ´el´ements, les attributs et les textes sont d´efinis comme des noeuds [15]. Cette structure est facile `a manipuler et offre une certaine aisance `a acc´eder `a n’importe quelle partie du document. Ceci nous sera particuli`erement important pour l’impl´ementation de l’interface graphique4 `a partir de laquelle l’utilisateur
3En Anglais, on ditWell formed
4Le fichier XSLT sera g´en´er´e en fonction des choix faits sur cette interface
CHAPITRE 2. XML EN BREF 16 choisira les types d’informations `a importer dans l’entrepˆot de donn´ees.
Nous n’avons pas l’intention de nous attarder sur le DOM. Nous voulons tout simplement donner `a la figure2.1une illustration de l’arborescence correspondant au document XML du listing2.1(p.13)
(Root Element) personslist
(Element) person
(Element) firstname
(Element) lastname
(Text) Shele
(Text) Tsheke
(Element) person
(Element) lastname
(Text) Pierre
(Text) Manneback
(Element) person
(Element) lastname
(Text) Esteban
(Text) Borrageiros
(Text) Zimanyi (Element)
middlename
(Element) firstname
(Text) Johnny
(Element) middlename
(Element) firstname
(Element) middlename
Fig. 2.1 – Exemple d’une arborescence XML
2.5 Parcours d’un arbre XML
Dans un arbre de repr´esentation d’un document XML [15] :
– Le noeud sup´erieur (le premier noeud) est appel´e Racine (Root), – Un noeud ascendant est appel´e parent,
– Un noeud descendant est appel´eenfant (child),
– A part la racine, chaque noeud a un et un seul parent direct (p`ere), – Un noeud peut avoir 0 ou plusieurs enfants,
– Unefeuille est un noeud qui n’a pas d’enfant,
– Les noeuds d´escendants d’un mˆeme p`ere (direct) sont dits fr`eres (siblings).
A partir d’un noeud, on peut parcourir l’arbre d’une des mani`eres suivantes.
– En allant vers un descendant (child). Ceci n’est pas possible pour unefeuille.
– En allant vers un fr`ere (next,previous) si possible.
– En remontant vers le noeud p`ere (parent) si on n’est pas `a la racine.
La figure2.2illustre le parcours d’une partie de l’arbre de la figure 2.1.
2.6 Remarque importante sur l’utilisation de l’API DOM
Nous attirons l’attention du lecteur et plus pr´ecisement du programmeur sur le fait qu’ind´ependamment de la validit´e du document (voir paragraphe 2.3.2), la manipulation de l’arbre XML avec l’API DOM retourne (en PHP, JAVA, ...) des noeuds Text de part et d’autre d’un noeud Element. Sauf l’´el´ement racine (Root Element) qui apparaˆıt comme un fils du noeuddocument (Document) [11, 12].
Il sera particuli`erement utile de tenir compte de cette r´ealit´e lors du processing des sch´emas XSD en vue de g´en´erer un fichier XSLT automatiquement. Pour l’arbre de la figure2.2, on obtiendrait en r´ealit´e celui de la figure 2.3. Il faut donc ˆetre attentif dans la s´election des
CHAPITRE 2. XML EN BREF 17
(Root Element) personslist
(Element) person (Element)
person
(Element) lastname
(Text) Pierre
(Text) Manneback (Element)
person
(Element) firstname
(Element) middlename firstChild
lastChild
parent
parent
parent children
Fig.2.2 – Parcours d’un arbre XML noeuds utiles pour ´eviter des surprises.
Les algorithmes propos´es dans la suite permettront de r´esoudre ce probl`eme dans le cadre de l’ETL. De mani`ere plus g´en´erale, on peut tester le type du noeud pr´esent puis effectuer un traitement appropri´e. Les personnes confront´ees `a ce probl`eme pourront consulter [12].
2.7 Transformation d’un document XML - XSLT
La transformation est l’op´eration par laquelle on convertit un document XML (source) dans un autre format (destination) : HTML, XML,etc. Le langage de programmation le plus utilis´e `a cet effet est leXSL Transformation (XSLT).
XSL (Extensible Stylesheet Language) est la composition des trois langages : – XSLT,
– XPath qui permet de parcourir l’arbre du document et – XSL-FO qui permet le formatage.
Dans le cadre de cette conception de l’ETL de donn´ees XML, nous ne nous int´eresserons qu’`a XSLT et XPath dont nous donnerons un petit rappel au chapitre6. Notre pr´eoccupation est de transformer `a l’aide de XSLT, un arbre XML valide par rapport au sch´ema source, en un arbre XML respectant le XSD de l’entrepˆot de donn´ees XML (destination). Les expressions XPath seront utilis´ees pour naviguer dans le document.
CHAPITRE 2. XML EN BREF 18
(Root Element) personslist
(Element) person (Element)
person
(Text) (Element)
person firstChild
lastChild
(Text) (Text)
(Text) (Document)
Fig. 2.3 – Illustration des noeuds r´eellement obtenus avec l’API DOM
Chapitre 3
Les entrepˆ ots de donn´ ees XML
3.1 Base de donn´ ees XML
On appelle base de donn´ees XML, un logiciel capable de stocker, importer, exporter et rendre accessible lesdonn´ees XML [18]. Le paragraphe3.2 survole les mani`eres de conserver ces types d’informations.
3.2 Stockage des donn´ ees XML
Il y a plusieurs fa¸cons de stocker les donn´ees XML. Les techniques les plus utilis´ees sont les suivantes [3].
– Dans des fichiers de type text : Les informations sont conserv´ees dans les fichiers XML par exemple. La gestion de ces fichiers peut se faire ´eventuellement dans descollections structur´ees elles-mˆemes en hierarchie comme dans un syst`eme de fichier (Linux, Unix).
– Dans une base de donn´ees traditionnelle : Ici, on extrait les donn´ees et on les garde au format du SGBD. On utilisera des tables, par exemple, si on a affaire `a une base de donn´ees relationnelle. On veuillera `a disposer d’un mod`ele de donn´ees pour permettre la restitution en XML au moment d’extraire les informations.
– Dans un syst`eme hybride : Cette technique fait le mixage des deux approches pr´ec´edentes.
3.3 Classification des bases de donn´ ees XML
On classifie habituellement les bases de donn´ees XML en deux grands groupes : cellesavec support XMLet celles qu’on qualifie de natives.
3.3.1 Base de donn´ees avec support XML
Dans ce groupe, on trouve les bases de donn´ees traditionnelles (relationnelle, objet, ...) – avec une couche ou interface permettant l’importation et/ou l’exportation des donn´ees
en XML,
– et stockent ces informations au format du SGBD.
En se basant sur le mod`ele DOM o`u un document XML peut ˆetre vu comme un arbre (un objet), on peut stocker ce dernier comme un objet dans unebase de donn´ees objet. Dans le
19
CHAPITRE 3. LES ENTREP ˆOTS DE DONN ´EES XML 20 mˆeme ordre d’id´ees, en d´efinissant une certaine correspondance entre le document XML et certaines tables, on peut enregistrer les donn´ees XML dans une BD relationnelle.
3.3.2 Base de donn´ees XML Native
Dans ce groupe, on d´efinit un mod`ele logique du document en fonction de XML et on utilise un document XML comme unit´e fondamentale de stockage. Dans une base de donn´ees relationnelle, on a une ligne de table comme unit´e de stockage. Mais, dans une base de donn´ee XML Native (Native XML Database - NXD), c’est un document XML qui est l’unit´e de stockage [18]. Actuellement il existe plusieurs SGBD XML natifs : eXist, Apache XIndice, Tamino, ...
3.4 Entrepˆ ot de donn´ ees
Dans une organisation, un entr´epˆot de donn´ees (Data Warehouse) est une base de donn´ees int´egrant des informations [19] :
– issues des sources h´et´erog`enes, – dat´ees (historis´ees),
– non modifiables (lecture seule),
– et organis´ees de mani`ere `a permettre des analyses statistiques et une exploitation en gestion strat´egique.
La figure3.1illustre l’impl´ementation d’un entrepˆot de donn´ees `a l’universit´e d’´etat d’Arizona aux USA (Arizona State University - ASU).
3.4.1 Source des donn´ees de l’entrepˆot
Les donn´ees sont issues des BD op´erationnelles qui ont, en g´en´eral, des sch´emas diff´erents.
La mise `a jour ne se fait pas toujours p´eriodiquement mais parfois sporadiquement. Ces donn´ees seront agr´eg´ees pour ´eviter les redondances et permettre la facilit´e d’acc`es et d’ana- lyse.
3.4.2 Structure de donn´ees d’un entrepˆot de donn´ees
Dans un entrepˆot de donn´ees, les informations sont en g´eneral repr´esent´ees dans un mod`ele de donn´ees en´etoile ou encube.
3.4.3 Interrogation de l’entrepˆot de donn´ees Les deux approches les plus utilis´ees sont
– R-OLAP (Relational On-Line Analytical Porcessing) : lorsqu’on a des requˆetes SQL et – M-OLAP (Multidimensional On-Line Analytical Porcessing) : si on a un mod`ele encube
de plusieurs dimensions.
De mani`ere plus g´en´erale, on parle de OLAP qui englobe aussi d’autres approches (H-OLAP1, S-OLAP2 et D-OLAP3)4
1Hybrid OLAP
2Spatial OLAP
3Dynamic ou Desktop OLAP
4Voir http ://fr.wikipedia.org/wiki/OLAP
CHAPITRE 3. LES ENTREP ˆOTS DE DONN ´EES XML 21
Fig. 3.1 – Exemple de l’entrepˆot de donn´ees d’Arizona State University [14]
3.5 Entrepˆ ot de donn´ ees XML
Un entrepˆot de donn´ees XML est un entrepˆot de donn´ees capable de – accepter des sources de donn´ees XML,
– fournir les donn´ees ou document XML en output,
– supporter les techniques de manipulation habituelle des documents XML (XSLT, XPATH, ...) et,
– agr´eger les donn´ees issues des diff´erentes sources de sorte qu’elles soient valides par rapport aux sch´emas de stockage.
La figure FIG.3.2 illustre l’entrepˆot de donn´ees XML propos´e dans [3]. Comme nous l’avons dit au paragraphe 3.2 (p.19), il y a plusieurs fa¸cons de stocker les documents XML. Cette r´ealit´e implique une diversit´e de mani`eres d’impl´ementer un entrepˆot de donn´ees XML. Dans ce chapitre, le but n’est pas d’expliquer la conception ou l’impl´ementation d’un entrepˆot de donn´ees XML dans sa globalit´e mais de donner un aper¸cu g´en´eral.
CHAPITRE 3. LES ENTREP ˆOTS DE DONN ´EES XML 22
Fig. 3.2 – Exemple d’un entrepˆot de donn´ees XML : DAWAX [3]
3.6 Entrepˆ ot de donn´ ees XML et ´ echange d’informations
Un des avantages que peut offrir un entrepˆot de donn´ees XML est notament la possibilit´e d’´echanger les informations par http en intranet ou Internet. Grˆace `a la technologie XML, on peut utiliser des standards. Ce qui ne n´ecessite pas d’avoir une APIpropri´etaire quelconque.
Cette solution est particuli`erement int´eressante pour une organisation (societ´e mutinationale, grosse administration, ...) r´epartie sur plusieurs sites ou qui inter-agit avec des sous-traitants par exemple.
On notera que la plupart des SGBD actuels pr´evoient au moins la possibilt´e d’int´egrer les donn´ees XML. DansSQL Server 2005, Integration Service[8] par exemple, malgr´e le stockage des informations dans une base de donn´ees relationnelles (SQL Server), on pr´evoit tout de mˆeme la possibilit´e d’importer les donn´ees `a partir d’une source XML. Cette source peut ˆetre locale (un fichier) ou distante (accessible par http). Nous verrons plus tard que cette strat´egie s’int`egre parfaitement dans l’outil ETL que nous proposons.
3.7 Entrepˆ ot de donn´ ees vs entrepˆ ot de donn´ ees XML
Dans la table3.1nous reprenons une synth`ese d’´el´ements distinguant, de mani`ere g´en´erale, unEntrepˆot de donn´eesd’unentrepˆot de donn´ees XML[1]. Rappelons que dans la pratique, la diff´erence est un peu nuanc´ee parce que de nos jours, les syst`emes mis r´eellement en production sont souvent hybrides. c’est-`a-dire, qu’on essaie de combiner les diff´erentes approches pour tirer au mieux les avantages de chacune. Apr`es tout, chacun construit son entrepˆot de donn´ees (XML) selon ses besoins. Bill Inmon5 n’aurait-il pas dit : “Un Data Warehouse ne s’ach`ete
5On le consid`ere g´en´eralement comme le p`ere du conceptData Warehouse
CHAPITRE 3. LES ENTREP ˆOTS DE DONN ´EES XML 23
Entrepˆot de donn´ees Entrpˆot de donn´ees XML Donn´ees Donn´ees relationnelles XML
Valeurs num´eriques texte
Approvisionnement filtrage filtrage
classification, semantique ...,
Integration et vue relations XML
cube
Interrogation SQL XQuery, XSLT
Exploitation OLAP lecture
outils statistiques production des rapports production des rapports
Tab. 3.1 – Diff´erence entre entrepˆot de donn´ees et entrepˆot de donn´ees XML [1]
pas, il se construit”6. On peut donc utiliser telle ou telle autre technique pour mieux exploiter les donn´ees.
6http ://fr.wikipedia.org/wiki/Entrepˆot de donn´ees
Chapitre 4
ETL : ´ Etat de l’art
Dans ce chapitre, nous survolons l’´etat de l’art du processus ETL. Nous examinerons les possibilit´es offertes actuellement par l’´evolution technologique. Ceci permettra de mieux comprendre par la suite la contribution qu’apporte la technique que nous proposons.
4.1 Ex´ ecution parall` ele
Compte tenu du d´eveloppement des technologies de l’information et de la communication, on est de plus en plus confront´e `a un volume de donn´ees important. Ceci n´essecite d’adapter les techniques d’extraction et/ou de filtrage pour que l’outil ETL ne prenne pas trop de temps.
Actuellement, on utilise de plus en plus le parall´elisme [17]. Ce dernier peut s’appliquer lorsqu’il faut traiter :
– un gros fichier source, – les donn´ees en pipeline ou – plusieurs sources de donn´ees.
4.1.1 Un gros fichier source
Lorsque les donn´ees de la source se trouvent dans un fichier s´equentiel par exemple, la taille de ce dernier peut avoir un impact non n´egligeable sur les applications qui doivent le manipuler. Dans le cas d’un fichier XML, si on utilise une API DOM, on risque de rencontrer des difficult´es en voulant charger l’enti`eret´e de l’arbre en m´emoire.
Les bases de donn´eeseXist par exemple, fonctionnent moins bien lorsque le nombre d’entr´ees devient relativement important.
Une solution consiste `a d´ecouper (split) le fichier en des morceaux de tailles plus facilement manipulables. De cette mani`ere, on peut acc´eder `a plusieurs parties simultan´ement.
4.1.2 Pipeline
La technique de pipeline permet de traiter plusieurs composants d’un mˆeme fichier simul- tan´ement. Pendant que l’on fait une op´eration ou une manipulation sur un ´el´ement on peut en mˆeme temps faire un autre traitement sur l’´el´ement suivant.
24
CHAPITRE 4. ETL : ´ETAT DE L’ART 25
4.1.3 Plusieurs sources
Lorsqu’on est en pr´esence de plusieurs sources (fichiers), on peut envisager de traiter un certain nombre en parall`ele. Si un processus est occup´e `a trier un fichier par exemple, on peut demander `a un autre processus de supprimer les doublons d’un autre fichier.
De cette mani`ere on gagne en temps parce que le traitement du 2e fichier commence plus tˆot que si on devait attendre de finir le tri du 1er.
Signalons tout de mˆeme que leMulti-processing/Multi-threadingn’est pleinement op´erationnel que sur des syst`emes multi-processeurs ! Heureusement qu’aujourd’hui la plupart des machines supportant les entrepˆots de donn´ees sont multiprocesseurs.
4.2 Evolution avec le temps
Comme pour les autres logiciels, il est indispensable que l’outil ETL puisse ´evoluer avec le temps. On doit donc pouvoir le mettre `a jour facilement et si possible garder la compatibilit´e avec les versions ou les applications ant´erieures. On doit par exemple pouvoir se connecter `a des nouveaux SGBD capables de fournir des donn´ees au format support´e par l’ETL. Il faut
´egalement pouvoir supporter une mise `a jour ´eventuelle du/des SGBD constituant l’entrepˆot.
Il convient de noter que les bases de donn´ees op´erationnelles ´evoluent et qu’on pourrait vouloir garder dans l’entrepˆot des informations auxquelles on n’avait pas song´e au moment de l’impl´ementation de l’entrepˆot de donn´ees. A titre d’exemple, `a un moment, on peut vouloir conserver une liste de personnes (clientes) de l’´etranger. Malheureusement, la structure d’adresse est diff´erente de ce qu’on a pr´evu initialement (certains champs en plus ou en moins, ...). Il faut que l’ETL puisse s’adapter tr`es facilement dans ces genres de probl`emes.
4.3 Compatibilit´ e avec les syst` emes d’exploitation
A part les ETL incorpor´es dans les produits Microsoft comme SQL Server Integration Service qui ne fonctionnent essentiellement que sous Windows, la plupart des fabricants es- saient de rendre compatibles leurs produits avec un grand nombre de syst`emes d’exploitation (Windows, Linux/Unix, Mac-OS, ...).
Notre prototype a ´et´e d´evelopp´e en PHP. Ce qui permet de l’int´egrer facilement dans n’im- porte quel serveur web supportant ce langage. On pourrait utiliser le serveur web Apache1 que l’on peut t´el´echarger gratuitement sur le sitehttp://httpd.apache.org.
4.4 ETL spatial
L’ETL spatial est pouss´e par le geographic information system (GIS) pour permettre l’interop´erabilit´e entre les divers formats des donn´ees g´eographiques [17]. Malgr´e le fait que plusieurs fabricants des logiciels ETL commencent `a incorporer les sp´ecifications de l’ETL spatial, le probl`eme est encore loin d’ˆetre r´esolu.
Nous pensons tout de mˆeme que le noyau de notre ETL pourrait s’adapter aux besoins de GIS. En effet, comme nous l’avons dit pr´ec´edemment, plusieurs technologies actuelles supportent l’importation et l’exportation de donn´ees en XML. Le fait que notre ETL effectue
1Open source
CHAPITRE 4. ETL : ´ETAT DE L’ART 26 une transformation de XML vers XML fait qu’on peut avoir une interop´erabilit´e en allant s´equentiellemment de la mani`ere suivante.
– exporter les donn´ees en XML (`a partir de la source), – passer les donn´ees source XML dans l’ETL,
– obtenir les donn´ees destination XML conformes au sch´ema accept´e par le syst`eme ex- ploitant les donn´ees,
– importer les donn´ees XML dans le syst`eme de destination.
On obtient ainsi les donn´ees dans l’autre format. Les figures1.2et 1.3illustrent cette possi- bilit´e.
4.5 Quelques logiciels ETL
Dans cette section nous pr´esentons quelques principaux logiciels ETL que l’on peut trou- ver actuellement sur le march´e. La liste est loin d’ˆetre exhaustive mais elle donne une id´ee g´en´erale des tendances actuelles.
Dans cette liste, nous distinguons les ETLsopen source des ETLs propri´etaires. Habituelle- ment les pr´emiers sont t´el´echargeables gratuitement mais pour les autres, seule une version d´evalution peut ˆetre t´el´echarg´ee et install´ee de mani`ere gratuite.
4.5.1 ETLs propri´etaires
4.5.1.1 SQL Server Integration Services
Le SQL Server 2005 Integration Services (SSIS) comporte un outil ETL permettant d’int´egrer les donn´ees en provenance des diverses sources h´et´erog`enes2. Comme SQL server 2005 prend en charge les donn´ees XML en mode natif, on peut manipuler ces types d’infor- mations.
Le probl`eme est que cet outil ETL ne fonctionne que dans un SSIS qui ne peut lui mˆeme ˆetre install´e que sous Windows. Ce qui ne permet pas de l’installer dans un autre environnement.
4.5.1.2 Oracle Data Integrator
Il s’agit d’un ETL de Oracle3 pouvant tourner sur plusieurs syst`emes d’exploitation. Il peut se connecter sur plusieurs plateformes d’entrepˆot de donn´ees (Teradata, IBM DB, Oracle, ...) ainsi qu’`a des technologies ERP, LDAP, XML, etc. A l’origine, ce produit appartenait `a la soci´et´eSunopsis4 qui a ´et´e rachet´ee parOracle en 2006.
4.5.1.3 Oxio Data Integration
La soci´et´e fran¸caise Oxio (http://www.oxio.fr) d´eveloppe un ETL 100% web. Cette solution, comme dans notre prototype, a l’avantage de ne pas n´ecessiter des applications clientes. Il suffit de disposer d’un navigateur web et d’un acc`es r´eseau pour pourvoir utiliser l’application selon les autorisations accord´ees. Le fait qu’il soit d´evelopp´e en SQL server et .Netnous semble limiter les possibilit´es de son installation sur d’autres syst`emes d’exploitation comme Linux, Mac-Os, etc.
2voirhttp://www.microsoft.com/france/sql/sql2005/decouvrez/presentation.mspx
3 voirhttp://www.oracle.com
4voirhttp://www.oracle.com/sunopsis
CHAPITRE 4. ETL : ´ETAT DE L’ART 27
4.5.2 ETLs open source 4.5.2.1 Talend open studio
Talend Open Studioest un ETL graphique et open source d´evelopp´e en Java/Eclipse. Pour un fichier XML se pr´esentant en entr´ee, il le lit ligne par ligne pour le scinder en champs et envoie ces derniers tels que d´efinis dans le sch´ema au composant suivant du job, via un lien Row.
L’approche peut paraˆıtre relativement lente pour l’acc`es aux ´el´ements mais si on tient compte de la lourdeur des applications java, il ne serait peut-ˆetre pas optimal d’envisager le char- gement d’un grand-t-arbre XML en m´emoire. Le lecteur trouvera plus d’informations sur http://www.talend.com.
4.5.2.2 Scriptella
Scriptella (http://scriptella.javaforge.com) est un ETL open source d´evelopp´e en java. Il nous a sembl´e relativement moins appropri´e pour une production r´eelle. En effet, il utilise essentiellement le SQL pour les transformations. Ce qui n’est pas sp´ecialement adapt´e pour les donn´ees XML. Il faut de toutes les fa¸cons aller ´editer un fichier XML pour pr´eciser les informations de connexion (host, login, ...) et les requˆetes ´eventuelles `a ex´ecuter.
Chapitre 5
Sch´ ema XML canonique pour un processus ETL
Dans ce chapitre, nous expliquerons comment ´ecrire un sch´ema XML en vue de simplifier le parcours automatique de son arborescence dans un processus ETL. Avant d’y arriver, nous donnerons d’abord un petit rappel sur les XSD.
5.1 Motivations
Nous voulons permettre `a l’utilisateur de faire un mapping entre les sch´emas source et destination. Il nous faut donc lui pr´esenter ces sch´emas graphiquement sur l’´ecran. Notons
´egalement que nous souhaitons une application web la plus l´eg`ere possible. Tenant compte du fait que les browsers web actuels sont presque tous capables d’afficher (faire duParsing) un fichier XML, une id´ee serait de passer tout simplement le sch´ema XSD au navigateur web pour affichage.
Afficher un document XSD comme tel pourrait ˆetre extrˆemement incorfortable pour un uti- lisateur d´epourvu des notions solides de XML schema. Notre strat´egie est donc de cr´eer un fichier XML ne contenant que la structure (de l’arbre) repr´esent´e dans le fichier XSD. Dans le cas du sch´ema du listing2.3 (p.15), nous voulons quelque chose comme ce qui est dans le listing5.1.
Listing 5.1 – Visualisation de la structure d´efinie dans le listing 2.3
<? xml version =" 1.0 " encoding = " ISO -8859 -1 "? >
< personslist >
< person birthdate = " xs:date " >
< firstname / >
< middlename / >
< lastname / >
</ person >
</ personslist >
De cette mani`ere l’utilisateur voit directement et de fa¸con plus claire l’imbrication et la s´equence des ´el´ements. Chaque ´el´ement porte les attributs ´eventuels d´efinis dans le fichier XSD.
La difficult´e c’est de pouvoir parcourir automatiquement tout sch´ema XML d’une source ou 28
CHAPITRE 5. SCH ´EMA XML CANONIQUE POUR UN PROCESSUS ETL 29 de la destination en vue d’extraire non pas l’arborescence du sch´ema XSD comme telle mais celle du type de document qu’il d´efinit. Arrˆetons-nous un instant sur cette probl´ematique et regardons dans la section suivante, d’o`u proviendrait le probl`eme.
5.2 Difficult´ e d’extraire une structure d´ efinie dans un sch´ ema
Un sch´ema XSD ´etant un fichier XML, on peut l’´ecrire de plusieurs mani`eres. A chaque pr´esentation du sch´ema, correspond une arborescence diff´erente mais l’arbre d´efini lui-mˆeme garde la mˆeme structure. LeXML schema du listing2.3(p.2.3) par exemple, pourrait encore s’´ecrire comme dans le listing5.2.
Listing 5.2 – Autre fa¸con d’´ecrire le sch´ema du listing2.3
<? xml version =" 1.0 " encoding = " ISO -8859 -1 "? >
<! -- Sch´ema d une liste des personnes -- >
< xs:schema xmlns:xs = " http: // www . w3 . org /2001/ XMLSchema " >
< xs:element name = " personslist " >
< xs:complexType >
< xs:element name = " person " type = " personType "/ >
</ xs:complexType >
</ xs:element >
< xs:complexType name = " personType " >
< xs:element name = " firstname " type = " xs:string "/ >
< xs:element name = " middlename " type = " xs:string "/ >
< xs:element name = " lastname " type = " xs:string " use =" require "/ >
< xs:attribute name = " birthdate " type = " xs:date "/ >
</ xs:complexType >
</ xs:schema >
Dans le code du listing 5.2, l’´el´ement person est d´eclar´e directement `a l’int´erieur de la d´efinition de l’´el´ementpersonslist. Le fait de d´eclarerpersonavec un attributtype=”personType”
permet de donner sa d´efinition `a l’ext´erieur (dans un xs :complexType). Remarquez que ce mˆeme sch´ema peut encore s’´ecrire comme dans le listing5.3.
Listing 5.3 – Encore une autre mani`ere d’´ecrire le sch´ema du listing2.3
<? xml version =" 1.0 " encoding = " ISO -8859 -1 "? >
<! -- Sch´ema d une liste des personnes -- >
< xs:schema xmlns:xs = " http: // www . w3 . org /2001/ XMLSchema " >
< xs:element name = " personslist " >
< xs:complexType >
< xs:element name = " person " >
< xs:complexType >
< xs:element name = " firstname " type =" xs:string "/ >
< xs:element name = " middlename " type =" xs:string "/ >
< xs:element name = " lastname " type =" xs:string " use =" require "/ >
< xs:attribute name = " birthdate " type =" xs:date "/ >
</ xs:complexType >
</ xs:element >
</ xs:conplexType >
</ xs:element >
</ xs:schema >
CHAPITRE 5. SCH ´EMA XML CANONIQUE POUR UN PROCESSUS ETL 30 Dans la m´ethode du listing 5.3, les ´el´ements fils sont toujours d´efinis `a l’int´erieur de la d´eclaration de l’´el´ement p`ere. Si nous devrions dessiner les arbres des sch´emas des listings 2.3, 5.2 et 5.3, nous verrions sans doute que les branches ont des structures diff´erentes. Et pourtant, ils d´efinissent exactement le mˆeme type de document.
En parcourant l’arborescence du sch´ema pour extraire le type de document qui y est d´efini, on se rend compte que la d´efinition des ´el´ements fils peut ˆetre dans les sous-arbres descendants de la branche courante ou carr´ement dans une autre branche (de l’arbre du sch´ema). D’o`u la difficult´e de trouver la d´efinition des ´el´ements fils et des attributs ´eventuels dans un parcours automatique.
Une question qui nous revient `a l’esprit est de savoir si toutes ces m´ethodes d’´ecriture des sch´emas sont adapt´ees pour les entrepˆots de donn´ees. Si dans un entrepˆot de donn´ees (XML) on ´evite la r´ep´etition inutile des informations, pourquoi ne pas avoir la mˆeme exigence dans la d´efinition des sch´emas ?
5.3 Eviter les redondances dans les sch´ emas
Comme nous venons de le voir au paragraphe 5.2, un sch´ema peut s’´ecrire de plusieurs methodes. Malheureusement, il arrive que dans certains cas, on trouve des parties enti`eres de code qui se r´ep`etent.
Consid´erons le sch´ema du listing2.3, si nous voulons d´efinir une liste de personnes subdivis´ee en une sous-liste de femmes et une sous-liste d’hommes, la m´ethode utilis´ee dans le listing5.3 risque de produire des redondances parce que chacune des deux sous-listes pourra contenir la d´efinition des mˆemes informations d´efinissant les identit´es d’une personne (firstname,name, ...). Ce qui donnerait le code du listing5.4, par exemple.
Listing 5.4 – Illustration des redondances dans un XSD
<? xml version =" 1.0 " encoding = " ISO -8859 -1 "? >
<! -- Une liste de personnes -- >
< xs:schema xmlns:xs = " http: // www . w3 . org /2001/ XMLSchema " >
< xs:element name = " personslist " >
< xs:complexType >
<! -- sous liste d hommes -- >
< xs:element name = " menlist " >
< xs:complexType >
< xs:element name = " man " >
< xs:complexType >
< xs:element name = " firstname " type =" xs:string "/ >
< xs:element name = " middlename " type =" xs:string "/ >
< xs:element name = " lastname " type =" xs:string " use =" require "/ >
< xs:attribute name = " birthdate " type =" xs:date "/ >
</ xs:complexType >
</ xs:element >
</ xs:complexType >
</ xs:element >
<! -- sous liste de femmes -- >
< xs:element name = " womenlist " >
< xs:complexType >
< xs:element name = " woman " >
< xs:complexType >
CHAPITRE 5. SCH ´EMA XML CANONIQUE POUR UN PROCESSUS ETL 31
< xs:element name =" firstname " type =" xs:string "/ >
< xs:element name =" middlename " type =" xs:string "/ >
< xs:element name =" lastname " type =" xs:string " use =" require "/ >
< xs:attribute name = " birthdate " type =" xs:date " / >
</ xs:complexType >
</ xs:element >
</ xs:complexType >
</ xs:element >
</ xs:complexType >
</ xs:element >
</ xs:schema >
Le sch´ema du listing 5.4 est plus lourd `a manipuler. On voit que les ´el´ements man et woman sont de mˆeme type mais la mani`ere dont ils sont d´efinis agrandit inutilement l’arbre du sch´ema.
Dans un entrepˆot de donn´ees XML, on peut faire face `a des sch´emas relativement grands. Il faut donc ´eviter des r´ep´etions inutiles pour ne pas perdre trop de temps dans le traitement de XSD. Nous savons aussi qu’une erreur sur le traitement de sch´ema peut avoir des cons´equences sur :
– l’interface utilisateur : l’interface permettant de faire le mapping entre le sch´ema source et destination
– l’extraction des donn´ees `a la source et – le chargement de donn´ees `a la destination.
Il nous faut donc proposer quelques r`egles claires permettant d’´ecrire un XSD de fa¸con plus appropri´ee au processus ETL et aux entrepˆots de donn´ees XML. Voyons d’abord, en g´en´eral, comment ´ecrire un XSD.
5.4 R` egles g´ enerales d’´ ecriture d’un XSD
Dans cette section, nous survolons quelques r`egles d’´ecriture d’un XSD. Nous ne reprenons que les points importants dont le rappel nous semble indispensable `a la bonne compr´ehension des r`egles d’´ecriture d’un sch´ema canonique. Le lecteur trouvera plus d’informations dans [4, 15].
Notons d’abord que l’´el´ement sp´ecialschema (<xs:schema>) est la racine (Root Element) de l’arbre XSD. Pour d´efinir les ´el´ements et/ou les attributs on proc`ede de la mani`ere suivante.
– La d´efinition d’un attribut se fait en sp´ecifiant son nom dans l’attributname de l’´el´ement attribute (<xs:attribute>).
– La d´efinition d’un ´el´ement se fait en sp´ecifiant son nom dans l’attributname de l’´el´ement element (<xs:element>).
On distingue deux types d’´el´ements : le typesimple et le typecomplexe.
5.4.1 Un ´el´ement de type simple
Un ´el´ement de type simple ne peut contenir ni autre ´el´ement, ni attribut. Il ne peut contenir que du texte.
L’´el´ementfirstname d´efini dans le listing2.3 (p.15) par exemple, est de type simple :
<xs:element name="firstname" type="xs:string"/>
De mani`ere g´en´erale, on d´efinit un ´el´ement de type simple comme suit.
CHAPITRE 5. SCH ´EMA XML CANONIQUE POUR UN PROCESSUS ETL 32
<xs:element name="elemname" type="elemtype"/>
o`uelemname est le nom de l’´el´ement que l’on veut d´efinir etelemtype un type simple. Parmi les types simples, on peut citer :
xs:string une chaˆıne de caract`eres
xs:decimal une valeur num´erique sign´ee ou non sign´ee compos´ee de 18 chiffres tout au plus xs:integer une valeur enti`ere
xs:boolean une valeur bool´eenne qui peut ˆetretrue (vrai) ou false (faux). Les valeurs 1 et 0 indiquent respectivement true etfalse.
xs:date la date qui doit s’encoder au format AAAA-MM-JJ o`uAAAA est l’ann´ee, MM le mois et JJ le jour du mois.
xs:time l’heure au format HH : M M : SS o`u HH, MM et SS d´esignent respectivement l’heure, les minutes et les secondes.
5.4.2 Un ´el´ement de type complexe
Un ´el´ement de type complexe peut contenir d’autres ´el´ements et/ou des attributs. Il y deux fa¸cons de d´efinir un ´el´ement de type complexe :
1. en d´efinissant les ´el´ements fils et les attributs ´eventuels `a l’int´erieur de la d´efinition de l’´el´ement de type complexe ;
2. en d´efinissant les ´el´ements fils et les attributs ´eventuels `a l’ext´erieur.
5.4.2.1 D´efinitions des fils `a l’int´erieur
La d´efinition des ´el´ements descendants `a l’int´erieur se fait de la mani`ere suivante
<xs:element name="elemname">
<xs:complexType>
<!--mettre les enfants ici -->
</xs:complexType>
</xs:element>
Les ´el´ementsmanetwomandu listing5.4(p.30) par exemple, sont d´efinis selon cette m´ethode.
5.4.2.2 D´efinitions des fils `a l’ext´erieur
Dans cette m´ethode, on d´efinit un type complexe qui contiendra les fils et les attributs
´eventuels. Les ´el´ements de type complexe correspondants sont d´efinis en pr´ecisant le nom de ce type dans l’attribut sp´ecialtype. On aura donc les codes suivants dans le fichier XSD.
<xs:element name="elemname" type="complexTypeName"/>
<xs:complexType name="complexTypeName">
<!--mettre les enfants ici -->
</xs:complexType>
o`u elemname est le nom de l’el´ement de type complexe que l’on d´efinit et complexType- Name, le nom du type complexe. Le listing 5.5 montre un exemple de d´efinition utilisant cette m´ethode.
CHAPITRE 5. SCH ´EMA XML CANONIQUE POUR UN PROCESSUS ETL 33
Listing 5.5 – Exemple de d´efinition d’un ´el´ement de type complexe
< xs:element name =" man " type = " personType " / >
< xs:complexType name = " personType " >
< xs:element name = " firstname " type = " xs:string "/ >
< xs:element name = " middlename " type = " xs:string "/ >
< xs:element name = " lastname " type = " xs:string " use =" require "/ >
< xs:attribute name = " birthdate " type = " xs:date "/ >
</ xs:complexType >
5.5 R` egles canoniques
Dans cette section, nous pr´esentons quelques r`egles permettant d’´ecrire un sch´ema XSD canonique dans le cadre d’un processus ETL. Comme nous venons de le voir pr´ec´edemment, la d´efinition d’un ´el´ement de type complexe peut avoir un impact important sur le nombre de noeuds de l’arbre du sch´ema. Il nous faut ´etablir quelques r`egles permettant de d´efinir ce type d’´el´ements sans augmenter inutilement le contenu du fichier XSD. Le sch´ema obtenu doit ´egalement respecter les normes du W3C.
Les r`egles propos´ees dans le cadre de ce travail sont les suivantes :
– Seul l’´el´ement racine ne peut ˆetre d´efini comme fils direct de l’´el´ementschema(<xs:schema>).
– Tout autre ´el´ement ne peut ˆetre d´efini que dans un type complexe.
– Le nom d’un type complexe ne peut en aucun cas avoir pour pr´efixe, celui d´efini dans l’espace de nom1 suivi du caract`ere ” :”.
– Un ´el´ement complexe est toujours d´efini comme au paragraphe 5.4.2.2 (p.32).
– Les ´el´ements de type complexe qui ont des d´efinitions identiques doivent se d´eclarer comme ´etant de mˆeme type complexe.
En appliquant ces r`egles, on ´evite de gonfler le code inutilement comme dans le listing 5.4.
L’´elementman etwoman sont de mˆeme type. Il faut d´efinir le type complexe une seule fois.
Le listing 5.6 montre un exemple de sch´ema canonique ´eliminant les redondances du listing 5.4.
Listing 5.6 – Exemple d’un sch´ema canonique
<? xml version =" 1.0 " encoding = " ISO -8859 -1 "? >
<! -- Une liste de personnes -- >
< xs:schema xmlns:xs = " http: // www . w3 . org /2001/ XMLSchema " >
< xs:element name = " personslist " type = " personslistType "/ >
< xs:complexType name = " personslistType " >
< xs:element name = " menlist " type = " menlistType "/ >
< xs:element name = " womenlist " type = " womenlistType " / >
</ xs:complexType >
< xs:complexType name = " menlistType " >
< xs:element name = " man " type = " personType "/ >
</ xs:complexType >
< xs:complexType name = " womenlistType " >
< xs:element name = " woman " type = " personType "/ >
</ xs:complexType >
1 voir [4, 10, 15]
CHAPITRE 5. SCH ´EMA XML CANONIQUE POUR UN PROCESSUS ETL 34
< xs:complexType name = " personType " >
< xs:element name = " firstname " type = " xs:string "/ >
< xs:element name = " middlename " type = " xs:string "/ >
< xs:element name = " lastname " type = " xs:string " use =" require "/ >
< xs:attribute name = " birthdate " type = " xs:date "/ >
</ xs:complexType >
</ xs:schema >
Un sch´ema canonique est plus compact et plus facile `a parcourir. On peut `a pr´esent trouver une strat´egie de parcourir syst´ematiquement tout sch´ema canonique de la source ou de la destination pour extraire facilement la structure qui y est d´efinie.
5.6 Comment parcourir un sch´ ema canonique
Le point cl´e du parcours d’un sch´ema canonique XSD consiste `a tester le type de l’´el´ement d´efini :
– Si c’est un attribut, alors terminer pour cette branche,
– Si c’est un ´el´ement de type pr´ed´efini dans le langage XSD (type Simple), alors on a fini pour cette branche,
– Sinon,
– prendre le nom du type (complexe ou d´efini par l’utilisateur) dans l’attributtype, – chercher la branche qui d´efinit le type dont on vient de prendre le nom,
– effectuer un appel r´ecursif sur chacun des fils ´eventuels d´eclar´es dans ce type, – terminer et remonter pour passer `a l’´el´ement suivant si c’est possible.
Comme nous pouvons le constater dans ce parcours et dans les algorithmes qui vont suivre, les techniques de r´ecursion sont abondament utilis´ees dans ce travail.