Beruflich Dokumente
Kultur Dokumente
MASTER 2 ID
(Informatique et Document)
RAPPORT-MMOIRE DE STAGE
Mission effectue du 18 fvrier 2008 au 18 aot 2008
au
CT Nord Picardie
2 rue de Bruxelles, 59000 Lille.
Je tiens remercier:
Fabien Torre pour ses enseignements, sa disponibilit et ses encouragements,
Andr Davignon pour sa disponibilit et ses conseils,
enfin toutes les personnes du PANDoc pour leur accueil.
Sommaire
Introduction:.........................................................................................................................................4
1 Prsentation....................................................................................................................................5
1.1 Environnement du stage..........................................................................................................5
1.1.1 Le Point d'appui national documentaire (PANDoc)........................................................5
1.1.2 Notix, une solution de gestion des notices bibliographiques..........................................5
1.1.3 La gestion des documents XML avec eXist....................................................................7
1.1.4 La communication entre Notix et eXist........................................................................10
1.1.5 XML:db initiative, une tentative de normalisation des bases XML.............................13
1.2 Droulement de la mission...................................................................................................15
1.2.1 Les volutions de la mission.........................................................................................15
1.2.2 La gestion de projet.......................................................................................................16
1.3 Mthodologie........................................................................................................................18
1.3.1 La recherche d'informations et l'valuation..................................................................18
1.3.2 Les cycles de dveloppement........................................................................................19
2 L'tude des systmes de stockage XML.......................................................................................21
2.1 Les types de solution.............................................................................................................21
2.1.1 Les bases de donnes XML..........................................................................................21
2.1.2 Les bases de donnes relationnelles..............................................................................21
2.2 Une pluralit de formats, standards et protocoles.................................................................24
2.2.1 Les API java..................................................................................................................24
2.2.2 Les formats de communication.....................................................................................24
2.2.3 Les dialectes XQuery....................................................................................................25
2.2.3 Organisation des ressources..........................................................................................26
3 Besoins et critique de l'existant....................................................................................................27
3.1 Un avenir incertain pour l'API XMLDB..............................................................................27
3.2 Une dpendance de Notix avec eXist...................................................................................27
3.3 Mlange des logiques de traitement et de stockage..............................................................28
3.4 - Rptitions des algorithmes dans l'application......................................................................29
4 Prconisations et ralisations........................................................................................................31
4.1 Diagnostic.............................................................................................................................31
4.1.1 - Masquer le systme de stockage utilis pour rduire les dpendances..........................31
4.1.2 Augmenter la lisibilit du dispositif d'accs aux ressources XML...............................34
4.1.3 Factoriser les oprations redondantes...........................................................................37
4.1.4 Implmentation de HTTP/REST...................................................................................38
4.2 L'API xdb..............................................................................................................................39
4.2.1 Le patron de conception "stratgie", pour l'implmentation de nouveaux pilotes........39
4.2.2 Une hirarchie de classes qui favorise l'utilisation des standards.................................39
4.2.3 Le dispositif de configuration et de chargement des pilotes.........................................41
4.2.4 Le mcanisme de composition des URL.......................................................................42
4.3 Intgration Cocoon.............................................................................................................44
4.3.1 L'utilisation d'un pilote unique, la classe XDBSource..................................................44
4.3.2 La mise en place d'un systme de cache.......................................................................45
4.4 Les tests unitaires..................................................................................................................47
4.5 Limites du dveloppement de l'API xdb...............................................................................48
Conclusion:.........................................................................................................................................49
Bibliographie:.....................................................................................................................................50
Annexes..............................................................................................................................................51
Introduction:
Le stockage et l'interrogation des documents XML constitue un domaine d'activit qui
connat des volutions. Les outils de stockage et les langages disponibles pour l'interrogation d'un
corpus de documents XML sont dj nombreux, et des processus de normalisation sont en cours.
La base de donnes XML eXist comme les autres solutions de stockage des documents XML
volue au gr des standards, en raction aux solutions concurrentes, et selon des dynamiques
internes.
Le Point d'Appui National Documentaire dveloppe Notix, une application de gestion des
notices bibliographiques dont le stockage des documents XML repose sur eXist.
L'objectif de mon stage consistait dterminer quelles taient les alternatives envisageables
au systme de stockage des documents XML actuel de Notix, qui permettrait d'amliorer les
performances gnrales de l'application.
Au del des aspects d'valuation des solutions et de comparaison de leurs performances, les
questions lies l'volution de Notix et la modularit de l'application ont progressivement merg.
Dans un contexte de forte volution de l'offre de logiciels, et d'une normalisation progressive
mais encore en devenir des outils d'interrogation des corpus XML et des systmes de stockage
XML, quelles stratgies peut-on adopter pour garantir la capacit d'volution et de rutilisation des
composants d'une solution, lors de l'intgration d'un systme de stockage XML ?
1 Prsentation
1.1 Environnement du stage
1.1.1 Le Point d'appui national documentaire (PANDoc)
Notix est une application de gestion des notices bibliographiques publie sous licence libre.
La solution a t dveloppe par la socit AJLSM , suite un appel d'offre du PANDoc.
Notix permet d'administrer des bases documentaires composes de notices au format XML.
Les principales fonctionnalits de Notix sont les suivantes:
Moteur de recherche
1 http://urbamet.documentation.developpement-durable.gouv.fr
2 http://temis.documentation.equipement.gouv.fr
Fonctionnalits transversales
Panier de notices
Administration
Notix est une application web java qui fonctionne sur le serveur d'application Tomcat. Trois
applications libres ont t utilises pour sa ralisation, Cocoon, SDX et eXist4.
La plate-forme de publication Cocoon constitue le squelette de Notix. Elle fournit un
systme de "pipelines" permettant une gestion simplifie de l'application travers des patrons
d'URL situs dans des sitemaps. Chaque pipeline de l'application dlivre un contenu, la plupart du
temps aprs une srie de transformations XSLT. Cocoon fournit par ailleurs un systme de cache
performant et une gestion avance des formulaires avec les formulaires Cocoon (CFORMS).
La plate-forme SDX permet la gestion de toutes les oprations lies la recherche et
l'indexation en offrant une interaction facilite avec le moteur de recherche Lucene. Elle est base
sur Cocoon et fournit une "taglib5" qui permet des dveloppements rapides et fins. Les documents
pris en charge par SDX sont au format XML.
La base de donne XML native6 eXist est utilise pour la gestion des documents XML et
3
4
5
6
http://admisource.gouv.fr/
cf. annexe 1: Architecture de Notix
Littralement, une bilbiothque de balises.
Ronald Bourret, 2005. XML and Databases[En ligne]. [Consult en aot 2008].
http://www.rpbourret.com/xml/XMLAndDatabases.htm
l'excution de requtes XQuery sur les corpus de notices. Elle permet le stockage des documents
dans une hirarchie de collections, et fonctionne en instances multiples. EXist fonctionne dans
Notix en mode embarqu sous forme d'archives java, ou en mode distant dans un serveur
d'application.
Une des principales caractristiques de Notix est de reposer sur le format et les technologies
XML. Dans son fonctionnement l'application exploite XSLT, DOM, SAX, Xpath et XQuery.
EXist est une base de donnes XML native. Elle permet le stockage de documents et de
portions de documents XML. Les documents peuvent tre rcuprs ou interrogs travers les
langages de requte XML XPath et XQuery.
L'organisation d'une base eXist peut exploiter un ensemble de collections, similaire des
dossiers dans un systme de fichier pour stocker les documents XML. Une ressource dans une base
de donne XML peut tre reprsente par un chemin. Dans la base eXist la racine de chaque
ressource est la collection "/db".
1.1.3.2 Les bases documentaires
Pour constituer une base de donne documentaire, Notix cre une collection la racine d'une
base eXist, et cre un gabarit de notice sous la forme d'un fichier RDFS7 plac dans la collection.
Pour Notix, une base documentaire existe si ces deux conditions sont vraies. Par exemple la
prsence d'une collection "/db/Unebase" et son gabarit "/db/Unebase/_Unebase.rdfs" produira une
reprsentation de la base documentaire "Unebase" dans Notix.
1.1.3.3 L'alimentation en notices
L'ajout de notices une base documentaire se fait dans des sous-collections contenant 1000
notices. Ce nombre de notices a t choisi pour permettre d'optimiser les index lors des requtes
XQuery vers la base.
Chaque notice prend pour nom et identifiant le nom de la base laquelle elle appartient suivi
d'un nombre de 7 chiffres. Les 4 premiers chiffres sont utiliss pour rpartir les notices dans les
sous-collections. Ainsi pour une base "/db/Unebase", on a une sous-collection "/db/Unebase/0001"
7 Ressource Description Framework Schema
Lors des oprations d'importation automatique de notices, Notix examine le contenu d'un
dossier et enregistre les notices prsentes dans une base documentaire dsigne. Lors de cette
opration Notix gnre un rapport d'alimentation de la base. Ce rapport est stock dans une sous
collection "rapport" situe elle-mme dans une sous collection "_alix", du nom de l'application
grant les conversions de notices: "/db/Unebase/_alix/rapports/Unebase-date.xml".
Les notices trouves lors de l'importation sont examines pour dterminer si elles
correspondent bien au gabarit de la base cible et si les documents ne constituent pas des doublons.
En cas d'erreur, les notices importes sont stockes pour pouvoir tre modifies par la suite,
respectivement dans "/db/Unebase/_alix/notice rejetees/non valides/" et "/db/Unebase/_alix/notice
rejetees/doublons/".
1.1.3.5 Les bases "Groupe" et "Utilisateur"
La gestion des groupes et des utilisateurs dans Notix est identique au dispositif de gestion
des bases documentaires. Les documents qui dcrivent les groupes et utilisateurs sont, comme pour
les notices, dcrits par un gabarit RDFS, et regroups dans une base documentaire. Nanmoins les
documents "groupe" et "utilisateur" obissent une organisation diffrente en tant stock
directement la racine de la collection. Leur nom et identifiant est celui du groupe ou de
l'utilisateur dcrit par le fichier XML. Par exemple "/db/Utilisateur/utilisateur1.xml".
1.1.3.6 La gestion des listes
Les listes sont disponibles pour toutes les bases documentaires de Notix. Elle reprsentent
un ensemble de termes qui pourront tre utiliss comme champ liste dans les formulaires de
cration de notices. Les listes sont constitues dans une interface spare dans Notix et sont
stockes dans eXist dans une collection "Liste" qui n'est pas associe une base documentaire, c'est
dire sans gabarit RDFS. Les documents de la collection liste sont au format RNG8. Ils sont
enregistrs la racine de la sous collection , et ils sont identifis et nomms par la dsignation
donne dans l'application. Par exemple "/db/Liste/uneliste.rng".
8 RNG pour Relax NG (REgular LAnguage for XML Next Generation) qui est un langage de schma XML
Notix peut utiliser plusieurs instances d'une mme base eXist. Par dfaut, Notix utilise une
instance eXist nomme "notix", dans laquelle elle cre systmatiquement, si elles n'existent pas, les
bases "Groupe" et "Utilisateur", et la collection Liste. Par la suite, Notix permet la cration de bases
documentaires sur une instance choisie, pourvu qu'elle soit dclare dans la configuration de Notix.
La base eXist qui fournira les instances Notix peut tre disponible sous la forme d'une base
embarque (stocke comme archive java dans les bibliothques de Cocoon) ou sous la forme d'un
serveur d'application distant disposant de eXist.
1.1.3.8 Les URL d'accs aux ressources
Pour accder aux ressources d'eXist depuis Cocoon, Notix emploie l'API XMLDB qui
permet de dsigner les ressources par des URL. L'ensemble des accs aux documents XML est
assur par la dsignation des emplacements dans eXist. Les URL sont constitues selon deux
formats, selon que la base est embarque ou distante. Les patrons des URL sont les suivants:
Pour pouvoir disposer de plusieurs instances d'une base eXist dans Notix, une dclaration
pralable est ncessaire dans le fichier de configuration de Cocoon cocoon.xconf. Les instances sont
dclares avec un certain nombre de paramtres de configuration ncessaires leur initialisation.
<component-instance class="org.exist.cocoon.XMLDBSourceFactory"
name="xmldb">
<driver type="notix" class="org.exist.xmldb.DatabaseImpl"
user="admin" password="admin">
<database-id>notix</database-id>
<create-database>true</create-database>
10
<configuration>xmldb/notix.xml</configuration>
</driver>
<driver type="instance2" class="org.exist.xmldb.DatabaseImpl"
user="admin" password="admin">
<database-id>instance2</database-id>
<create-database>true</create-database>
<configuration>xmldb/instance2.xml</configuration>
</driver>
</component-instance>
Les instances de eXist sont dclares comme pilotes de base de donne, et associes au
pseudo-protocole "xmldb:". Cette dclaration des instances autorise plusieurs manipulations dans
Cocoon:
La configuration d'un serveur eXist distant se traduit par la dclaration d'une variable
globale dans un sitemap Cocoon. Au dmarrage de Notix, la prsence du paramtre est dtecte, et
une variable globale prend pour valeur l'adresse du serveur distant. Lors du fonctionnement de
l'application, l'ensemble des requtes sera adress au serveur distant grce au dispositif de
composition des URL de Notix.
<global-variables>
<exist-url>172.16.41.5:8088</exist-url>
</global-variables>
<map:generate src="xmldb:notix:///db/Listes/"/>
<map:match pattern="*/*.xml">
<map:act type="xsp" src="context:/exist/xsp/xmldbURL.xsp">
<map:parameter name="base" value="{1}"/>
<map:parameter name="notice" value="{2}"/>
<map:generate src="{collection}{resource}"/>
12
</map:generate>
<map:act type="xsp" src="xsp/xmldbURL.xsp">
((XMLDBSource)notice).delete();
XML:db initiative est un groupe d'intrt autour des technologies XML qui a pour objectif le
dveloppement de technologies standardises dans le domaine des bases de donnes XML, et plus
gnralement la promotion des bases de donnes XML. L'association, active de 2000 2004, avait
pour vocation de proposer des standards sous licence "open source" dans le domaine des bases de
donnes XML. La motivation de cette dmarche tait d'viter la multiplication des technologies
concurrentes, et l'apport rapide de technologies attendues telle que l'extension de XQuery pour les
oprations de mise jour. Le groupe a finalement produit deux recommandations, l'API XMLDB, et
l'extension XQuery XUpdate.
L'API XMLDB est un ensemble d'interfaces java qui prescrit des mthodes d'accs, de
configuration et d'interrogation d'une base de donne XML. Elle permet la manipulation des
collections et documents, et fournit un service d'interrogation XQuery d'un document ou d'une
collection. L'API a t implmente dans eXist et constitue le mode de communication actuel de
Notix avec la base de donne.
Xupdate est une extension au langage de requte XQuery dont le but est d'ajouter la
9 Pour un exemple plus complet de la manipulation des sources cocoon voir annexe 2: Traitement d'un document
XML dans une xsp.
13
possibilit d'diter des documents XML existants en s'intgrant la syntaxe de XQuery. Le langage
est apparu en 2003 sous la forme d'une recommandation inacheve (un "brouillon"), mais a
nanmoins t implment par eXist puisqu'il constituait alors la seule tentative de normalisation
des oprations d'criture en XQuery. Notix utilise ces oprations d'criture pour la correction des
notices par lots, l'dition des listes et des documents utilisateurs.
14
La mise en place d'un dispositif de veille et d'valuation des solutions de stockage XML.
La conception d'une srie de tests de performance adapts aux usages dans Notix.
Les bnfices attendus de la mission taient une meilleure connaissance de l'offre pour les
systmes de stockage de documents XML, une valuation critique de la solution actuelle, et
potentiellement de meilleures performances pour Notix.
A l'issue de la veille, plusieurs constats ont t raliss qui ont orient davantage la mission
vers la recherche d'une implmentation prenne et gnrique du systme de stockage XML. Une
meilleure connaissance de la constitution des principales solutions de stockage des documents XML
m'a amen considrer les limites qu'impliquaient la conception actuelle des communications avec
le systme de stockage.
Cette seconde phase du projet s'est traduite par une prolongation de l'tude de Notix, et la
mise en place de cycles de dveloppement. L'tude a port sur la communication entre Notix et
eXist et la recherche d'optimisations pour la gestion des documents XML, en vue de disposer d'une
implmentation la plus gnrique possible au regard des diffrentes solutions de stockage des
documents XML existantes.
Cette phase du projet s'est droule en trois tapes:
Un recueil des principales variations qui existaient entre les diffrents systmes de
stockage XML.
15
Dmarche exploratoire
tude comparative/veille sur les solutions libres de stockage des documents XML
diagnostique et prconisations
Implmentation de REST
fvrier
mars
avril
Dmarche
exploratoire
mai
juin
juillet
aot
Optimisation de l'implmentation
16
fvrier
Dmarche
exploratoire
mars
avril
mai
juin
juillet
aot
Conception API
xdb
valuation des
solutions et bilan
de l'tude
Prco
nisati
ons
tude des besoins:
seconde analyse de Notix, dveloppement
interface REST
Dveloppement
API xdb
Implmentation dans
Notix
17
1.3 Mthodologie
1.3.1 La recherche d'informations et l'valuation
Pour mener bien la comparaison des solutions, une premire tude des fonctionnalits
d'eXist utilises dans Notix a t ralise10. L'objectif tait d'tablir un talon pour l'valuation des
fonctionnalits des autres solutions. Cette description des besoins a permis de dcouvrir
progressivement les variations existantes entre les diffrentes solutions, et les amnagements qui
seraient ncessaires dans la conception de Notix pour pouvoir considrer ces solutions comme des
alternatives possibles eXist.
Trois critres dfinissaient le primtre de la recherche. Les solutions devaient tre
utilisables sur les systmes d'exploitation Windows et Mandriva, et les sources disponibles sous
licence open-source. Enfin si les solutions ncessitaient l'usage d'une base de donnes relationnelle,
celles-ci devaient tre utilisables avec PostgreSQL qui constitue le standard au PANDoc. Par
ailleurs, des essais avaient dj t effectus par le PANDoc et l'AJLSM sur un stockage direct des
documents XML sur systme de fichier. La solution tait donc exclue de la recherche d'information.
La prise en compte de l'volution des standards au niveau des API et des technologies
XML par les solutions values.
La mthode d'valuation des logiciels "open source" employe est un arrangement partir
des barmes de la mthode de qualification et de slection de logiciels open source11
(QSOS), et de la mthodologie de cration du guide bull de l'open source12. La barme tait
le suivant:
Barme
Utilisateurs
*
Pas d'utilisateurs
identifis
**
***
Utilisateurs
Communaut
dtectables via internet d'utilisateurs identifis /
Rfrences
11 http://www.qsos.org/methode.php?lang=fr
12 http://www.novaforge.org/novaforge/fr-partager/methodologie
18
Barme
**
***
Communaut
Fonctionnement en
communaut et outils
associs
Documentation
Basique
Utilisateurs et
dveloppeurs
Systmatis, avec
contributions
Activit
0 3 dveloppeurs
4 7 dveloppeurs, ou + de 7 dveloppeurs
fort turn-over
Maturit
Encore en
dveloppement, pas de
version stable
Version(s) stable(s),
utilisable.
Actualit
Le projet semble
l'abandon
Version prouve.
Roadmap.
19
stockage.
La deuxime tape s'est davantage amorce comme une revue critique de l'implmentation,
nourrie par l'tude des systmes de stockage existants. Il s'agissait de concevoir des critres de
gnricit, et d'valuer quelles technologies dans Notix pouvaient tre considres comme prennes.
Le travail consistait donc distinguer les lments changeants et adopter une organisation
permettant de faire face ces changements.
La dernire tape, reste de peu inacheve, a t un mlange des deux logiques de
dveloppement prcdentes : l'implmentation du nouveau dispositif, l'ajout de fonctionnalits
omises, la rectification d'algorithmes, et la recherche d'optimisations des performances appelaient
une vision pragmatique et un souci du dtail.
20
elles prservent la structure physique des documents (lments, attributs, entits, ...)
elles permettent de stocker des documents sans dclaration pralable du schma des
documents.
elles permettent d'accder aux documents partir des API spcifiques XML (Xpath,
XQuery).
Par ailleurs les bases de donnes XML natives permettent la cration de collections
( assimilables des dossiers dans un systme de fichier)
Les principales bases de donnes XML actives "open source" sont les suivantes :
21
Au niveau du type XML, seul PostgreSQL propose une solution optimise avec une
structure de donnes (des arbres binaires) et des index adapts. En termes de fonctions XML, on
retrouve peu prs les mmes fonctionnalits dans MySQL et PostgreSQL: gnration, importation
et accs en XPath au XML. MySQL se distingue nanmoins par l'apport d'un mcanisme de mise
jour des donnes en XPath. Pour les deux solutions, il n'existe pas de support de XQuery, et le
langage d'interrogation demeure SQL. Pour l'accs aux donnes depuis java, les pilotes JDBC sont
utilisables mais ils ne sont pas optimiss pour le traitement d'un modle de document XML.
De manire gnrale, la gestion de documents XML par l'intermdiaire d'une base de
donnes relationnelle n'est pas adapte l'utilisation des API XML.
2.1.2.2 - Les middlewares
Les middlewares ou applications intermdiaires sont utiliss pour le stockage des documents
XML dans les bases de donnes relationnelles, ou pour la manipulation du XML sous forme
22
23
BDB XML
Xindice BaseX
Sedna
MonetDB/X
QUERY
- xml:db API
oui
non
Oui
Non
Oui
Non
- XQJ (JSR
225)
(en
non
dveloppem
ent)
Non
Non
non
Non
- autres
Non
Non
API
Java.
C, Php,
XRPC(java/j
python, .net, avascript),
Scheme.
CGI binding
(.xq), MAPI
Illustration 4: Revue des API utilises dans les bases de donnes XML
BDB
XML
Xindice
BaseX
Sedna
MonetDB/
XQUERY
- Mode de
Mode
Mode
Mode embarqu Mode Mode
fonctionnement embarqu, mode embarqu et client-Serveur Serveur Serveur
serveur.
Mode
Serveur
"socket-based"
Non
Non
Oui
Oui
Non
XML-RPC
Oui (via
XMLDB)
Oui
Non
Non
Non
SOAP
Oui
Non
Non
Non
Oui
REST
Oui
Non
Non
Non
Non
APP
Oui
Non
Non
Non
Non
Webdav
Oui
Non
Non
Non
Non
XRPC/XqueryD Non
Non
Non
Non
Oui
25
L'implmentation de XQuery dans les bases de donnes XML est test par la XQuery Test
Suite (XQTS) du W3C.
eXist
BDB XML
- XUPDATE Oui
(xml:db)
Non
- XQUERY
99.4%
(XQTS)
- XPath
Oui(1,2)
- XQUF
- XQUERY
FT
Xindice
Sedna
MonetDB/X
QUERY
Non
Oui
Non
99.3%
(XQTS)
98.8%
(XQTS )
En partie
Oui (1,2)
Oui(1)
Oui (1,2)
En partie
Non (autre)
oui
Partiel
Non
Non
Oui
BaseX
Oui (1)
Non
Non (autre)
eXist
BDB XML
Xindice
BaseX
Sedna
- Hirarchie Oui
de
collections
Non
Oui
(Prsence de
"containers":
1 niveau de
hirarchie.)
Non
- Instances Oui
multiples de
bases de
donnes
Non
Oui, mais
Non
une bdd = 1
document.
Oui
Non (1
niveau)
MonetDB/X
QUERY
Non, 1
niveau
Non
26
La faible prsence de l'API parmi les solutions tudies ne permet plus de garantir les
ambitions de ralisation d'une interface standardise pour les diffrentes bases de
donnes XML.
La mise en place d'une API concurrente XQJ, appele devenir une rfrence pour
l'excution du XQuery dans les applications java, semble constituer une alternative plus
consensuelle car elle favorise davantage l'utilisation des technologies XML.
L'arrt des activits de l'XML:db initiative a entran un arrt des volutions de l'API, et
a mis en faillite l'avenir de la recommandation comme standard du point de vue des
principales solutions de stockage.
L'API XMLDB permet la manipulation des documents et des collections, alors que cette
dernire caractristique n'est pas trs rpandue dans les bases de donnes XML natives.
La mention de la racine commune aux bases eXist "/db", qui dans les autres bases de
donnes correspond un simple "/" ou au nom d'un conteneur.
La rpartition des notices par collection de 1000 units est une organisation des
documents qui vise optimiser les performances d'eXist. Ce type d'organisation n'est pas
ncessaire, ni parfois mme conseill, dans les autres bases de donnes.
L'utilisation de chemins pour accder aux ressources XML stockes dans eXist produit une
dpendance de Notix vis vis du systme de stockage XML eXist. Alors que l'ensemble des
oprations prisent en charge par Notix permet le traitement de documents dans le cadre d'une base
documentaire (ou d'un dossier dans le cas de la collection "Liste"), les communications avec le
systme de stockage ncessitent de manipuler explicitement l'arborescence des collections propres
un systme.
Le mcanisme gnral de composition des URL ncessite de dclarer de nombreux
endroits dans Notix les patrons d'URL tablissant la conversion entre les requtes de l'utilisateur et
l'accs un document dans eXist en vue de son traitement. La multiplication de ces oprations
constitue un frein important aux projets d'volution de la solution du systme de stockage des
documents XML.
Cette dmarche est insatisfaisante car elle produit des scripts complexes et difficiles
apprhender. La gestion des URL dans l'application s'ajoute aux oprations de traitements ce qui
rduit la lisibilit des scripts.
Par ailleurs, le dispositif de composition des URL est globalement dispers, et rend difficile
le projet d'implmentation d'un autre systme de stockage que eXist. L'usage du fichier
cocoon.xconf d'une part, et de la variable globale de sitemap d'autre part, gnre une multiplication
des oprations ncessaires la composition des URL vers les ressources XML, et rend ncessaire
ces oprations avant chaque traitement, ce qui entrane un manque de lisibilit et une fermeture aux
volutions.
java.util.Map baseMap=null;
if (base != null) {
baseMap=(java.util.Map)baseList.get(base);
String url=(String)baseMap.get("url");
source = (XMLDBSource)resolver.resolveURI(url + "/_" + base +
".rdfs");
Le choix du patron d'URL appropri selon que la base est locale ou distante.
String existUrlString=(String)context.getAttribute("existUrl");
String uri;
if (("///".equals(existUrlString)) || ("local".equals(existUrlString))
|| ("".equals(existUrlString)) || existUrlString==null) uri="xmldb:" +
instance + ":///db/";
else uri="xmldb:" + instance + "://" +
existUrlString+"/"+instance+"/xmlrpc/db/";
source = (XMLDBSource)resolver.resolveURI(uri);
29
function dom2string(document) {
var writer = new Packages.java.io.StringWriter();
var format = new
Packages.org.apache.xml.serialize.OutputFormat("XML","utf-8",true);
var serializer = new
Packages.org.apache.xml.serialize.XMLSerializer(writer,format);
serializer.asDOMSerializer();
serializer.serialize(document);
return writer.toString();
}
Etc.
Ces oprations sont excutes dans les scripts de l'application, et ne font dans le meilleur des
cas l'objet d'une factorisation qu' l'chelle du script, par l'intermdiaire de la dfinition de
fonctions. Cette organisation produit une rptition des algorithmes qui rend la maintenance
difficile, favorise les risques d'erreur et rend difficile l'harmonisation gnrale des stratgies de
l'application.
Notix ayant t dvelopp par plusieurs personnes, et dans des priodes de temps
successives, on rencontre aussi des algorithmes ralisant des tches similaires avec des stratgies
diffrentes, notamment pour les oprations de conversion des donnes.
30
4 Prconisations et ralisations
4.1 Diagnostic
4.1.1 - Masquer le systme de stockage utilis pour rduire les
dpendances
4.1.1.1 Cration d'un pilote intermdiaire: l'API xdb
La cration d'URL gnriques rpond au besoin d'accder aux documents XML selon une
organisation logique des ressources sans pour autant rester dpendant du systme de stockage
utilis.
Le principe adopt pour la constitution de chemins gnriques est de distinguer des adresses
logiques correspondant des ressources dfinies, et d'encapsuler la logique de composition des
chemins rels en fonction du systme de stockage utilis.
Les URL gnriques d'accs aux documents XML ont t conu pour faciliter les accs par
31
Afin d'accder aux ressources ne figurant pas dans une base documentaire, la mention de la
base peut tre omise dans l'URL. Le chemin crit parcourt alors la structure relle de la base partir
de la racine de l'instance par dfaut. Par exemple: "xdb:/Listes/Uneliste.rng".
La logique d'encapsulation des processus de composition de l'URL concrte d'accs aux
ressources permet une grande souplesse dans la varit des chemins. De nouveaux patrons d'URI
peuvent facilement tre implments, sur la base de nouvelles conventions d'URI gnriques.
4.1.1.3 Un dispositif central de configuration
33
<xdb-parameter name="configuration">/home/notix/WEBINF/xmldb/instance3.xml</xdb-parameter>
<xdb-parameter name="database-id">instance3</xdbparameter>
</xdb-instance>
<xdb-instance name="instance4" user="admin" pass="admin">
<xdb-parameter name="create-database">true</xdbparameter>
<xdb-parameter name="configuration">/home/notix/WEBINF/xmldb/instance4.xml</xdb-parameter>
<xdb-parameter name="database-id">instance4</xdbparameter>
</xdb-instance>
</xdb-system>
</xdb-config>
La mise en place d'un processus plus simple de gestion des URL des ressources XML
rpond aux besoins de simplification du mcanisme de composition des URL, d'amlioration de la
lisibilit de l'application, et d'une sparation claire entre les logiques de communication avec le
systme de stockage et les logiques de traitement de Notix.
La simplification de l'utilisation des URL des ressources est permise par l'utilisation de l'API
xdb. L'emploi des chemins gnriques pour accder aux ressources permet d'encapsuler la logique
concrte de composition des chemins, et permet dans le mme temps d'encapsuler la gestion des
instances et le stockage de la liste des bases de donnes documentaires de Notix.
L'accs aux ressources ne ncessite que le nom de la base, l'identifiant du document, et un
contexte, qui permettent de dduire sans traitements supplmentaires les URI gnriques de l'API
xdb, rendant inutiles l'usage de l'action Cocoon XMLDBURL.
Par exemple, le pipeline suivant:
<map:match pattern="*/schema*">
<map:act type="xsp" src="xsp/xmldbURL.xsp">
<map:parameter name="base" value="{1}"/>
<map:generate src="{collection}_{base}.rdfs"/>
34
De la mme manire:
<map:match pattern="Utilisateur/*.xml">
<map:select type="simple">
<map:parameter name="value" value="{global:exist-url}"/>
<map:when test="">
<map:generate src="xmldb:notix:///db/Utilisateur/
{1}.xml"/>
</map:when>
<map:otherwise>
<map:generate src="xmldb:notix://{global:exist-url}/
notix/xmlrpc/db/Utilisateur/{1}.xml"/>
</map:otherwise>
</map:select>
s'crit dsormais:
<map:match pattern="Utilisateur/*.xml">
<map:generate src="xdb:Utilisateur/{1}.xml"/>
La disponibilit d'une syntaxe java (alternative l'utilisation d'une source Cocoon) pour les
communications avec le systme de stockage des notices rpond aux besoins de raliser des
oprations complexes, d'accrotre la lisibilit gnrale des scripts de Notix, et d'encapsuler certains
traitements de Notix pour faciliter l'implmentation des volutions du standard XQuery.
La syntaxe java d'accs une ressource XML suit le mme schma que les patrons d'URL
gnriques, en distinguant l'accs par base documentaire de l'accs sur l'instance par dfaut. La
syntaxe est la suivante:
XdbManager xdbm = new XdbManager("Unebase");
Document doc = xdbm.getXml("Unebase-0000001.xml");
Le format d'change de l'API xdb est DOM, car la majorit des besoins d'accder des
documents XML dans les scripts correspond la ncessit de raliser des traitements dans ce
format. Nanmoins, des mthodes permettent de disposer du contenu d'un document en SAX, sous
35
L'implmentation d'un dispositif simplifi de gestion des bases documentaires rpond aux
besoins de simplifier les scripts de Notix, et d'encapsuler les variations entre les diffrents systmes
36
de stockage.
Le dispositif simplifi de gestion des bases documentaires est un ensemble de mthodes
permettant la cration de bases partir de la syntaxe java. Les principales mthodes sont les
suivantes:
Une mthode de cration de base documentaire. Cette mthode est disponible sans
cration d'instance de l'objet XdbManager.
Une mthode de suppression d'une base documentaire. Cette mthode n'efface pas les
index de la base cible, mais supprime simplement le fichier RDFS, conformment au
comportement actuel de Notix.
new XdbManger(Nombase).removeDb()
Un ensemble de mthodes globales permettant d'obtenir des informations sur les bases et
les instances:
L'utilisation de mthodes globales java pour accder aux mthodes de conversion permet
leur emploi indistinctement dans l'API xdb, dans les scripts serverpages et les flowscript de Notix.
La mise en place de la bibliothque java pour les oprations de conversion constitue une initiative
d'optimisation des algorithmes dans Notix. A ce titre, la bibliothque constitue un prcdent qui
pourra tre potentiellement reproduit pour d'autres algorithmes de l'application.
38
Eric Freeman, Elisabeth Freeman, 2005. Design Patterns Tte la premire. Paris : Editions O'Reilly. 644p.
(page 24)
39
l'implmentation des pilotes une logique d'hritage a t adopte qui permet de favoriser la
rutilisation des mthodes des interfaces de communication indpendamment du systme de
stockage qui les implmente.
Cette hirarchie de classes a pour objectif de favoriser au maximum la rutilisation du code
en exploitant la gnricit des API et des dispositifs de communication.
Pour l'implmentation de HTTP/REST, l'excution des mthodes gnriques du client HTTP
est implmente dans une classe XdbRest hritant de la classe Xdb. A un niveau infrieur, la classe
XdbRestExist hrite de la classe XdbRest et implmente toutes les mthodes spcifiques eXist,
comme par exemple la composition des requtes XQuery, et la composition des chemins d'accs
concrets aux ressources.
Pour l'implmentation de l'API XMLDB, le mme dispositif a t mis en place avec une
premire classe d'hritage XdbXmldb qui se limite l'excution des oprations standards de l'API,
recommandes par la XML:db initiative. Pour l'API XMLDB, un troisime niveau a cependant t
ajout sous la classe XdbXmldbExist (qui hrite de XdbXmldb). Il s'agit de l'implmentation des
deux pilotes pour accder un eXist distant et un eXist embarqu. Les deux pilotes ne se
distinguent que par leurs mcanismes de composition des URL d'accs aux documents. Les deux
classes hritent donc des mmes classes parentes, et se contentent de redfinir la composition des
URL.
40
Xdb xdbImpl=null;
/* L'utilisation de Class.forName() permet d'utiliser directement le
nom des classes dans le fichier de configuration*/
try{
Class classe = Class.forName
("fr.gouv.equipement.documentation.xdb.databases."+nomClasse);
java.lang.reflect.Constructor constructeur =
classe.getConstructor(new Class [] {Class.forName("java.lang.String"),
Class.forName("java.lang.String"), Class.forName ("java.lang.String"),
Class.forName("java.lang.String")});
xdbImpl = (Xdb)constructeur.newInstance (new Object []
{instance, url, user, pass});
}catch (Exception e) {
System.out.println("Erreur lors de la tentative de
charger la classe \""+nomClasse+"\" (implmentation de Xdb)");
}
NodeList xdbInstanceParameters =
xdbInstance.getElementsByTagName("xdb-parameter");
// On recueil les paramtres de configuration de l'instance
for
41
Element xdbInstanceParameter =
((Element)xdbInstanceParameters.item(k));
properties.setProperty(
xdbInstanceParameter.getAttribute( "name"),
xdbInstanceParameter.getFirstChild().getNodeValue() );
}
// On initialise les bases
xdbImpl = getXdb(xdbClass, instName, xdbUrl, instUser, instPass);
// On dmarre les instances avec leurs paramtres
xdbImpl.initInstance(properties);
Une instruction est envoye au pilote pour obtenir la liste des bases
documentaires prsentes dans l'instance. Chaque base renvoye est stocke dans
la liste des bases documentaires notixBaseList avec ses donnes d'identification,
l'instance laquelle elle appartient, et le pilote ncessaire son accs.
Une fois les informations en sa possession, le pilote concret transforme la requte envoye
42
selon les patrons d'URL qui lui conviennent en appelant des mthodes internes. Ci-dessous le
mcanisme employ par le pilote HTTP/REST pour construire les chemins :
protected String composePath(String instance, String base, String chemin) {
String collection="/rest/db/";
if (base == null || base.equals("")) {
//ne fait rien
} else {
collection = collection + base + "/";
}
// Si on cherche accder une resource
if (chemin.endsWith(".xml")||chemin.endsWith(".rng")||chemin.endsWith(".rdfs")){
// Si on cherche accder une notice
if (chemin.matches(base+"-[0-9]{7}?\\.xml")){
//On ajoute les sous-collections spcifiques eXist +la
resource
collection = collection + chemin.substring(base.length()
+1,base.length()+5) + "/" + chemin;
}else if (chemin.startsWith("non-valides")) {
collection = collection + "_alix/notices-rejetees/nonvalides" +
"/" + chemin.substring(12);
} else if (chemin.startsWith("doublons")) {
collection = collection + "_alix/notices-
rejetees/doublons" + "/"
+ chemin.substring(9);
} else if (chemin.startsWith("rapports")) {
collection = collection + "_alix/rapports" + "/" +
chemin.substring(9);
}else {
//Pour les autres documents on recopie les sous-collections et la
resource.
collection = collection + chemin;
}
}else{
//Sinon on accde une collection: on recopie le chemin
if ( chemin !=null && !chemin.equals("") ){
collection = collection + chemin + "/";
//Sauf si il est vide
} else {
//Ne fait rien
}
}
return "http://"+serveur+ "/" + instance + collection;
}
L'intrt de dvelopper une source Cocoon, en dehors des commodits apportes par les
URL d'accs aux ressources, est la possibilit d'exploiter le systme de mise en cache Cocoon. Pour
exploiter le mcanisme de mise en cache d'une source Cocoon, celle-ci doit implmenter la mthode
getValidity() qui renvoie la date de dernire modification d'un document.
public SourceValidity getValidity() {
return new TimeStampValidity((this.getLastModified()));
}
public long getLastModified() {
long result=0;
xdbm.getLastModificationTime(path).getTime();
return result;
}
Le systme de mise en cache des sources Cocoon ne fonctionne cependant que lorsque la source est
appele depuis un composant de sitemap (par exemple FileGenerator).
44
45
if(notixBaseRdfs.get(this.base)!=null &&
notixBaseRdfsLastMod.get(this.base).equals(this.getLastModificationTime(chemin).getTime(
))){
// L'enregistrement des documents en cache est ralis chaque
appel d'un document rdfs en base.
return notixBaseRdfs.get(this.base);
}else{
doc= xdb.getDoc(this.instance, this.base, chemin);
if (doc != null){
notixBaseRdfsLastMod.put(this.base,
this.getLastModificationTime(chemin).getTime());
notixBaseRdfs.put(this.base, doc);
}
return doc;
}
} else {
return xdb.getDoc(this.instance, this.base, chemin);
}
}
46
@Test
public void testCreateDb() {
XdbManager.createDb("notix", "Testbaserest2", domrdfsTestbaserest2);
XdbManager.createDb("instancenotix", "Testbaserest3", domrdfsTestbaserest3);
XdbManager.createDb("testinstance", "Testbasexmldb", domrdfsTestbasexmldb);
XdbManager xdbm = new XdbManager("Testbaserest2");
assertTrue("rdfs isDocument", xdbm.getXml("_Testbaserest2.rdfs") instanceof
Document);
XdbManager xdbm2 = new XdbManager("Testbasexmldb");
assertTrue("rdfs isDocument", xdbm2.getXml("_Testbasexmldb.rdfs") instanceof
Document);
XdbManager xdbm3 = new XdbManager("Testbaserest3");
assertTrue("rdfs isDocument", xdbm3.getXml("_Testbaserest3.rdfs") instanceof
Document);
}
@Test
public void testGetXml() {
XdbManager xdbm = new XdbManager("Testbaserest2");
assertTrue("rdfs isDocument", xdbm.getXml("_Testbaserest2.rdfs") instanceof
Document);
XdbManager xdbm2 = new XdbManager("Testbasexmldb");
assertTrue("rdfs isDocument", xdbm2.getXml("_Testbasexmldb.rdfs") instanceof
Document);
}
47
48
Conclusion:
La mission que j'ai effectue au PANDoc consistait tudier les alternatives envisageables
au systme de stockage XML de Notix. En vue d'amliorer potentiellement les performances
gnrales de l'application.
L'tude de l'offre dans le domaine des solutions de stockage des documents XML d'une part,
et l'analyse de l'utilisation de la base de donnes eXist d'autre part, m'ont progressivement amen
raliser l'valuation des capacits d'volution de Notix dans son mode de gestion des documents
XML.
Le manque de certitudes sur la prennit de l'API XMLDB, et la dpendance existante entre
la base de donnes XML eXist et le reste des composants de Notix, ont justifi le lancement d'un
processus de conception dans Notix d'un dispositif de gestion des documents XML plus gnrique,
et capable d'voluer.
49
Bibliographie:
Ronald Bourret, 2005. XML and Databases[En ligne]. [Consult en aot 2008].
http://www.rpbourret.com/xml/XMLAndDatabases.htm
Eric Freeman, Elisabeth Freeman, 2005. Design Patterns Tte la premire. Paris : Editions
O'Reilly. 644p.
50
Annexes
ANNEXE 1 : Architecture de Notix...................................................................................................52
ANNEXE 2: Traitement d'un document XML dans un script serverpages........................................53
ANNEXE 3: tude des systmes de stockage XML..........................................................................56
ANNEXE 4: tude des besoins..........................................................................................................69
51
52
<xsp:structure>
<xsp:include>org.exist.cocoon.XMLDBSource</xsp:include>
<xsp:include>org.w3c.dom.Document</xsp:include>
<xsp:include>org.w3c.dom.Element</xsp:include>
<xsp:include>org.w3c.dom.NodeList</xsp:include>
</xsp:structure>
<xsp:logic>
db = dbf.newDocumentBuilder();
<html>
53
<xsp:logic>
// Le nom de la liste
String name=parameters.getParameter("name", null);
// la source cocoon de laquelle tirer un doc
String url=parameters.getParameter("url", null);
XMLDBSource source=null;
// du DOM
Document doc=null;
Element el=null;
NodeList nl=null;
// si a plante ici, c'est que le paramtre est mal pass ct
sitemap
source=(XMLDBSource)resolver.resolveURI(url);
</xsp:logic>
<head>
<title>
<i18n:text i18n:catalogue="notix" key="listesedit.titre">Notix, Listes</i18n:text>
<xsp:expr>name</xsp:expr>
</title>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8"/>
<script type="text/javascript"
src="../theme/js/suggest.js">//</script>
</head>
<body>
<a href="."><i18n:text>Listes</i18n:text></a> / <a
href=""><xsp:expr>name</xsp:expr></a>
<h1 id="title">
<small><i18n:text>Liste</i18n:text></small>
: <xsp:expr>name</xsp:expr>
</h1>
<xsp:logic>
try {
doc=org.apache.cocoon.components.source.SourceUtil.toDOM(source);
// l'implmentation DOM Exist pose problme dans
certains cas sur getElements
// doc=source.getContentAsDOM().getOwnerDocument();
} catch (Exception e) {
<div class="erreur">Erreur au chargement de la
liste <xsp:expr>name</xsp:expr></div>
toSAX(e);
}
<!-- S'il y a des modifications -->
if (request.getParameter("value") != null) {
String[]
values=request.getParameterValues("value");
String xml="";
54
xml +="<rng:choice
xmlns:rng=\"http://relaxng.org/ns/structure/1.0\">";
for (int i=0; i < values.length ; i++) {
xml +="\n\t<rng:value>" + values[i] +
"</rng:value>";
}
xml +="\n</rng:choice>";
try {
doc=string2dom(xml);
source.setContentAsDOM(doc);
} catch (Exception e) {
<div class="erreur">Problme dans
l'criture de la liste</div>
toSAX(e);
}
}
</xsp:logic>
etc.
</xsp:page>
55
API Java
Concernant les bases de donnes XML natives, un effort de normalisation a t fait sous la
forme d'une API Java xmldb , par la XML:DB Initiative . Actuellement le groupe de travail
sur ce pseudo protocole ne donne plus aucun signe de vie.
Les discussions autour de la JSR 225 XQJ, XQUERY API for Java semble constituer une
alternatives pour les concepteurs de bases de donnes XML native. Nanmoins l'implmentation
dans les solutions est loin d'tre gnralise ni aboutie.
Standard XML d'accs aux donnes
Pour la consultation des ressources stockes dans les bases de donnes XML natives, les
diffrentes solutions implmentent des standards W3C diffrents niveaux de conformit, ainsi que
des technologies d'accs propres. Les standards les plus couramment implments sont Xpath 1.0 et
XQUERY 1.0, suivis de Xpath 2.0, XQUF (XQUERY Update Facility, pour la mise jour des
donnes), XQFT (XQUERY FullText, pour la recherche en plein texte), et plus rarement
XQUERYD (D pour Distributed: interrogation de plusieurs bases distantes au sein de requtes
XQUERY).
L'implmentation de XQUERY dans les bases de donnes XML est test par la XQUERY
Test Suite (XQTS) du W3C.
14 http://www.rpbourret.com
56
Protocoles de communication
En termes d'intgration, des bases de donnes XML natives, il existe deux modes: les bases
de donnes embarques, et les bases de donnes fonctionnant sur le mode client-serveur; certaines
bases supportant les deux modes de fonctionnement. Pour les bases fonctionnant sur le mode clientserveur, diffrents protocoles de communication sont implments selon les bases de donnes, du
protocole binaire bas via la manipulation de socket, jusqu'aux protocoles orients services web:
SOAP, REST, XML-RPC, ... . noter l'engouement naissant pour le protocole de publication Atom
(APP), quivalent WebDav mais bas sur une architecture REST.
Organisation des ressources
La possibilit d'organiser les documents dans les bases de donnes XML natives varie selon
les solutions: on trouve la notion de base de donnes (unique ou multiple), de collection (unique,
multiple, emboitable), de document (comme unit, ou sous-arbre d'un unique document). Mme
un niveau logique, la cration de collections imbriques n'est pas toujours possible.
1.1.2 Solutions existantes:
Les bases de donnes XML natives cartes:
OrientX (Dveloppe uniquement pour Windows)
Xbird (Solutions non disponible)
Les principales bases de donnes XML natives actives open sources sont les suivantes:
eXist ( http://exist.sourceforge.net/ )
Berkeley DB XML (http://www.oracle.com/technology/products/berkeley-db/xml/index.html )
Xindice ( http://xml.apache.org/xindice/ )
ressources: http://www.ibm.com/developerworks/web/library/wa-xindice.html
BaseX ( http://www.inf.uni-konstanz.de/dbis/basex/ )
Sedna ( http://modis.ispras.ru/sedna/index.htm )
MonetDB/XQUERY ( http://monetdb.cwi.nl/projects/monetdb/XQUERY/index.html )
1.2 Description des solutions:
1.2.1 Exist
Exist a t cr en 2000 par Wolfgang Meier, sur la base d'articles scientifiques dcrivant
des algorithmes performants d'accs aux donnes. Exist est crit en Java. D'abord conu pour l'accs
aux documents( Documentcentric ) la base de donnes XML native se spcialise progressivement
dans l'accs aux donnes ( Data centric ). Actuellement eXist est en version 1.2, et est distribu
sous licence LGPL.
La solution implmente l'API Java XML:DB, et dveloppe actuellement le support de l'API
XQJ.
La solution implmente les standards XML XQUERY 1.0, Xpath 1.0 et 2.0, et XQUERYFT.
Pour la ralisation des mises jour, eXist fait appel XUPDATE, et une extension d'XQUERY en
cours de mise en conformit avec XQUF.
57
Un des point forts d'eXist rside dans la forte activit de sa communaut. La liste de
diffusion est trs active, au moins huit dveloppeurs travaillent rgulirement sur le projet, et la
documentation est exhaustive, et croissante.
eXist fonctionne aussi bien en mode serveur qu'en mode embarqu. Il dispose par ailleurs de
trois modes d'administration, un client java, une administration en ligne de commande, et une
interface web.
1.2.2 Berkeley DB XML
Berkeley DB XML est une base de donnes XML native crite en C. Elle est distribue sous
2 licenses, une libre et une commerciale. Le Produit Berkeley DB XML dvelopp par SleepyCat
t acquis en mme temps que la socit par Oracle en 2006. Le produit est bas sur Berkeley DB,
une base de donne entit-valeur embarque. La version actuelle datant de janvier 2007 est la
2.3.10. La version 2.4 en version bta devrait sortir bientt.
Plusieurs API ont t dveloppes pour permettre l'accs Berkeley DB XML: PHP,
Ruby, .NET, Java, TCL, Ruby, Perl, Python, module apache.
Pour l'accs aux donnes XML, BDBXML implmente xpath 2.0 et XQUERY 1.0, ainsi
qu'un protocole propre de mise jour des donnes dbxml. Pour la version 2.4 venir, la solution
implmentera XQUF, et plus tard sans doute XQJ. Cependant Xml:db API ne sera pas implment
car ne prenant pas en compte la gestion des transactions.
L'activit de la communaut se manifeste par le dveloppement d'APIs et les discussions sur
le Forum, mais le dveloppement de l'application n'est pas ouvert la communaut.
Il existe une version client-serveur de la solution, dveloppe par la communaut sous le
nom de NXQD (Native XMLDB Query Daemon), qui permet d'accder la base via SOAP. Le
projet semble nanmoins peu actif, puisque la dernire version date du 02-09-2006 (
http://sourceforge.net/projects/nxqd ).
1.2.3 Xindice
Xindice est un projet Apache crit en java. Le projet est la reprise de DbXML dont le code
source a t donn la fondation Apache en 2001. Actuellement la solution est en version 1.1.
Xindice est optimis pour la gestion des petits et moyens documents (pour une taille
maximale de 6Mo). La solution permet de grer des hirarchies de collections.
La solution met disposition deux API: XML:DB et Xindice XML-RPC API.
L'implmentation des standards XML pour l'accs aux donnes fait partie des points noirs de
Xindice. La solution implmente Xpath, mais pas XQUERY.
Xindice fonctionne aussi bien en mode embarqu qu'en mode serveur (sous la forme d'une
application web). En mode serveur, les communications client-serveurs sont vhicules par XMLRPC.
La communaut de Xindice semble avoir t importante mais les signes de vie du projet sont
58
rares (la dernire publication sur le site date de aot 2007). La documentation est nanmoins
utilisable et dtaill.
1.2.4 BaseX
BaseX est dvelopp par le Database and Information System Group de l'Universit de
Konstanz en Allemagne. La base de donne xml native est dveloppe en Java. Rcemment, BaseX
a t tudi comme base pour la cration d'un systme de fichier XML, par l'quipe de recherche
DISGUK. BaseX est mis disposition sous licence BSD.
La spcificit de BaseX repose sur son stockage des collections et documents dans un
unique document XML. L'accs aux collections est possible via XQUERY 1.0 et Xpath 1.0, ou par
des fonctions XQUERY de la solution.
En termes de performance, BaseX a optimis Xpath pour tirer au mieux parti des index de la
base de donne. En revanche, XQUERY ne bnficie pas de ces optimisation, et le seul objectif de
l'quipe pour le moment est la conformit au modle du langage de requte (XQTS). XQUERY
n'est donc pas conseill en production.
BaseX dispose d'un outil d'administration graphique des donnes, dont le principal atout est
la multitudes de modes de visualisation. Un outil d'administration en ligne de commande existe
aussi.
1.2.5 Sedna
Sedna est une base de donne XML native conue par une quipe de recherche Russe, le
MODIS (Management Of Data & Information Systems ), du dpartement de l' ISP RAS (Institute
for System Programming of the Russian Academy of Sciences). La solution a t dvelopp partir
de 2003. La dernire version date d'octobre 2007(v 2.2).
La solution Sedna est dveloppe en C/C++, mais des API ont t crites pour Java, Python,
PHP, C, .NET, Scheme. On compte aussi un module apache et l'implmentation de xmldb de
XML:DB Initiative. Par ailleurs 2 modules d'administration graphiques existent.
La solution est organise en une srie de fichiers binaires, dont des fichiers pour la cration
et pour la suppression d'une base de donnes, ce qui semble problmatique pour certains usages.
L'accs aux donnes XML est possible via XQUERY. La base de donne implmente son
propre systme de mise jour des documents XML.
Le projet est gr entirement par l'quipe d'origine, et il n'y a pas de contributeurs
extrieurs pour le coeur de la solution. Par contre, les API sont produites par la communaut. Il
existe une liste de diffusion active mais peu fournie.
Il n'y a aucune information sur les perspectives du projet, mais l'quipe continue d'exploiter
Sedna pour un projet de Content and Knowledge Management Framework15 .
1.2.6 MonetDB/XQUERY
15 http://modis.ispras.ru/projects.html
59
MonetDB est une base de donnes relationnelle. Une version de la base de donnes intgrant
les middlewares path-finder (Traducteur de requte XQUERY vers SQL) et pf/Tijah (moteur de
recherche Plein texte), a t cre pour obtenir une base de donne XML Native, nomme
MonetDB/XQUERY. MonetDB/XQUERY est dvelopp en C et en python. La solution est
distribue sous licence MonetDB Public licence Version 1.1 qui est drive de la licence
Mozilla.
MonetDB/XQUERY implmente les collections, mais pas les hirarchies de collection.
L''implmentation des collections est limite un mode read-only, ou updatable (avec rservation
d'espace la cration). On peut intrroger les ressources via Xpath et XQUERY (en partie
implment), raliser les mises jour via XQUF, et raliser des recherches en plein textes via un
driv de XQFT.
Pour la communication entre le client et le serveur, MonetDB/XQUERY dispose d'un client
en ligne de commande et d'une interface web. Les requtes XQUERY vers le serveur peuvent tre
faites via la ligne de commande, ou via le protocole d'accs SOAP. Dans les enveloppes SOAP, un
protocole xrpc permet de faire des requtes XQUERY distribues (cf. XQUERYD).
eXist
BDB
Xindice
BaseX
Sedna
MonetDB/
XML
XQUERY
Informations
gnrales:
- version
1.2
2.3
- License
GNU
LGPL
- Origine du
projet
- Langage de Java
dveloppeme
nt
- Systme
Oracle
libre
(certifi
OSI)
C/C++
MultiUNIX,
Platformes Win32
1.1
4.0
2.2
Monet4/X
QUERY
0.22
Apache
2.0
MonetDB
Public
licence
Version
1.1 (driv
Mozilla)
Apache
2.0
BSD
Projet
dbXML
donn la
fondation
Apache en
2001
DISG
http://mod MonetDB
(Universit is.ispras.ru
y of
/
http://ww
Konstanz )
w.cwi.nl/
Java
Java
C/C++
C, Python
MultiMultiLinux,
Linux,
Platformes Platformes Windows, Windows,
mod_Apac (32/64)
he
Logiciel
Libre:
- Utilisateurs
***
***
**
**
**
60
eXist
BDB
XML
Xindice
BaseX
Sedna
MonetDB/
XQUERY
Communaut
***
**
***
***
Documentati
on
***
***
***
**
**
- Activit
***
***
**
***
***
- Maturit
***
***
***
**
**
***
- Actualit
***
***
**
**
**
***
Communaut
:
APIs :
- xml:db API oui
non
Oui
Non
Oui
Non
- XQJ (JSR
225)
(en
non
dveloppe
ment)
Non
Non
non
Non
- autres
Non
- XUPDATE Oui
(xml:db)
Oui
XRPC(jav
a/javascrip
t), CGI
binding
(.xq),
MAPI
99.3%
(XQTS)
98.8%
(XQTS )
En partie
Oui (1,2)
En partie
Non
(autre)
Oui
Requtes:
- XQUERY
99.4%
(XQTS)
99.5%
(XQTS)
Non
- XPath
Oui(1,2)
Oui (1,2)
Oui
Oui(1)
(Librairie
Xalan) (1,
[2?])
- XQUF
(partiel,
vers un
support
complet)
Non(autre) Non
[ 2.4 :
oui ]
Non
(autre)
61
eXist
- XQUERY
FT
BDB
XML
Xindice
oui
Non
- Hirarchie Oui
de collections
Non
Oui
(Prsence
de
containers:
1 niveau
de
hirarchie.
)
BaseX
Sedna
MonetDB/
XQUERY
Partiel
(ftcont
ains )
Non
(autre)
Non, 1
niveau
Hirarchie
BDD:
- Instances
multiples de
bases de
donnes
Oui
Oui (cf.
Oui, mais ?
server.xml une bdd =
)
1
document.
Non
Divers:
- Gestion des Non
Transactions
Oui
Non
Non
Oui
- Mode de
Mode
fonctionneme embarqu,
nt
mode
serveur.
(SOAP,
REST,
XMLRPC,
WebDav,
APP)
Embarqu.
Projet
Parallle
(nxqd)
pour le
mode
serveur
Mode
embarqu
et clientServeur
Mode
Serveur:
Socket
Based
Mode
Server:
binary
based
Network
protocol,
http et ftp
via API
- Interface
Oui (Ligne
d'Administrat
de
ion
commande
, Client
Java,
Interface
Web)
Non
Oui (XML
Updates)
- Dispositif
d'indexation
Dispositif
d'indexatio
n
modulaire:
Structural,
Full text,
Range,
Oui
(Client
Java)
Oui (2
clients
java)
SOAP
(XRPC
[XQUER
YD])
Oui
(Interface
Web/javas
cript et
ligne de
commande
)
eXist
BDB
XML
Xindice
Ngram,
Spatial
- Facilit
d'utilisation
***
BaseX
Sedna
MonetDB/
XQUERY
**
***
full
text .
Utilisation
des index
pour
Xpath, pas
pour
XQUERY
***
**
PostgreSQL16 qui implmente un type XML, ainsi qu'une partie des normes SQL/XML
MySQL17 qui implmente des fonctions d'import et d'export XML sur la base d'un type chane
de caractres.
1.2.3 - PostgreSQL
La version 8.3 de PostgreSQL intgre nativement un type XML et des fonctions XML
16 http://docs.postgresqlfr.org/8.3/datatype-xml.html ; http://docs.postgresqlfr.org/8.3/functions-xml.html
17 http://dev.mysql.com/doc/refman/6.0/en/xml-functions.html ; http://dev.mysql.com/tech-resources/articles/xml-inmysql5.1-6.0.html
63
conformes certaines des spcification SQL/XML. Les fonctions XML taient dj prsentent sous
la forme d'un module depuis la version 8.1.
Le type XML implment dans PostgreSQL permet l'import et l'export de documents XML
ou de fraction de documents XML. Il permet par ailleurs une meilleure indexation des contenus
XML, grce des Generalized Search Trees et des B-Trees .
Les fonctions implmentes par PostgreSQL permettent la gnration de XML partir de
tables SQL (xmlcomment, xmlpi, xmlelement, xmlattributes, xmlroot, xmlconcat, xmlforrest), les
requtes xpath sur un arbre ou un type xml (xpath(query, xml)), les exports xml de structures
(table_to_xml, query_to_xml, cursor_to_xml), et le teste d'un arbre (IS DOCUMENT).
Le stockage du XML est rendu possible par la fonction XMLPARSE qui prend une chane
de caractre en argument. L'opration inverse est rendue possible par l'opration XMLSERIALIZE.
L'accs via une API java la base de donne est rendu possible par le pilote JDBC
PostgreSQL. Nanmoins, les optimisations existantes dans la base de donnes sont perdues
l'import des donnes qui sont srialise en chanes de caractres, et non directement traduites en
SAX ou en DOM.
1.2.4 - MySQL
A partir de la version 5.1 MySQL intgre quelques fonctions permettant l'import, l'export et
le traitement du XML. Il n'existe pas de type XML, des Chanes de caractre ou des BLOB (Binary
Long OBjects) sont utiliss pour le stockage du XML.
Trois types de fonctions XML existent:
Sorties XML: il est possible de composer un document partir du contenu des tables via des
instructions de composition d'un document XML (grce l'extension lib_mysqludf_xql).
Chargement d'un fichier: Accs au contenu d'un fichier via LOAD_XML, avec la possiblit de
charger directement le contenus des lments XML dans des colonnes de la base de donne.
Interrogation du XML: Possibilit d'interroger un contenu XML en Xpath ( ExtractValue() ), et
de raliser des mises jour sur un fragment xml ( UpdateXML() ).
MySQL n'est pas entirement conforme Xpath 1.0: certains axes ne sont pas supports
(following, following-sibling, preceding, preceding-sibling), les espaces de nom ne sont pas grs,
mais une recherche exact sur prefix:nom est possible, enfin un certains nombre de fonctions sont
absentes, dont name() et substring-after(), substring-before(), translate().
Un pilote JDBC est utilis pour accder MySQL en Java.
1.2.5 Bilan
Au niveau du type XML, seul PostgreSQL propose une solution optimise avec des arbres
binaires et des index adapts. En termes de fonctions XML, on retrouve peu prs les mmes
fonctionnalits: gnration, import et accs en XPATH au XML. MySQL se distingue tout de mme
par l'apport d'un mcanisme de mise jour des donnes en XPATH.
Pour les deux solutions, il n'existe pas de support de XQUERY, et le langage d'interrogation
demeure SQL.
Pour l'accs aux donnes en mode serveur depuis java, les pilotes JDBC sont utilisables mais
64
ils ne sont pas optimis pour le traitement d'un modle de document XML.
1.3 MiddleWare
1.3.1 Caractristiques gnrales
Dans le domaine du stockage des donnes XML, les middleWares ou applications
intermdiaires sont utiliss pour le stockage des documents XML dans les bases de donnes
relationnelles, ou pour la manipulation du XML sous forme d'objets. Nous nous intressons ici au
premier type uniquement.
Les applications intermdiaires permettent de manipuler les SGBDR de la mme faon que
les bases de donnes XML natives. Les solutions prennent en charges deux aspects: le stockage du
XML dans les tables du SGBDR, et la traduction des requtes en langage XML vers le SQL.
Parmi les solutions existantes on distingue celles qui ne ncessitent pas la dclaration
pralable d'un schma pour le stockage de documents /collections XML, et celles implmentant les
standards XML d'accs aux donnes (XPATH, XQUERY).
1.3.2 Solutions existantes:
Parmi les solutions, la plupart ne sont plus maintenus, et aucune ne bnficie d'une
communaut dveloppe. Les tableaux suivants prsentent les solutions de middlewares en
distinguant les solutions de mapping objet, les solutions qui semblent abandonnes, et la solution
qui semble active et adapte. Malheureusement pour cette dernire, les sources ne sont disponibles
que par l'intermdiaire du projet MonetDB/XQUERY dans lequel elle est implmente.
Mapping Objet (inadapt):
Produit
URL
Dernire activit
XML-DBMS
http://www.rpbourret.com/xmldbms/index.htm
2002
JaxMe
http://ws.apache.org/jaxme/
Octobre 2006
HyperJaxB3
https://hyperjaxb3.dev.java.net/
Mars 2008
Faible activit:
Produit
URL
Dernire activit
Minx
http://sourceforge.net/projects/minx/
Octobre 2002
LegoDB
http://www-db-out.bell-labs.com/legodb/
Juin 2002
XTAS
http://xtas.sourceforge.net/
Fvrier 2003
Xquare
http://xquare.objectweb.org/
Septembre 2005
En lice:
Produit
URL
Dernire activit
Pf/Tijah
http://dbappl.cs.utwente.nl/pftijah/
Fvrier 2008
65
1.3.3 Pf/Tijah
La solution intgre le middleware PathFinder qui permet le stockage en base de donnes de
documents XML, et la traduction de requtes XQUERY et XPath en requtes SQL. Pf/Tijah quand
lui intgre la gestion de la recherche plein texte en XQUERY.
Les fonctionnalits de Pf/Tijah sont actuellement implmente dans MonetDB/XQUERY
(cf. 1.2.6), et aucune facilit n'est faite pour permettre l'intgration dans un autre SGBDR. Seul un
article sur l'intgration dans PostgreSQL paru en 2004, voque la possiblit de le faire; les sources
du middleware ne sont cependant pas accessibles.
1.3.4 Bilan
Pas d'intrt.
2 - Diagnostic
2.1 Observations sur Notix
Performances:
forte utilisation du pseudo protocole cocoon:/ pour le stockage des
donnes: coteux en termes de performance.
systme de stockage en java, pas optimal pour les performances.
Implmentation du systme de stockage:
couplage fort de l'application au systme de stockage:
classes java eXist implmentant le protocole xml:db
design des URI spcifique eXist et diffrent selon le
fonctionnement en mode serveur ou embarqu
prennit douteuse du protocole xml:db:
l'implmentation d'eXIst est une implmentation augment de
l'API
le groupe de travail sur le protocole n'existe plus, et n'a laiss
qu'un brouillon de travail pour spcifications.
En termes d'API, dveloppement en cours de XQJ comme
quivalent JDBC pour XQUERY et alternative XML:DB.
volution de XQUERY avec un langage de mises jour
(XQUF), remise en cause de XUPDATE.
2.2 Bilan sur les solutions observes
Parmi les middleWare, seul Pj/Tijah offre un service intressant en termes de performances
66
Conserver eXist et implmenter une interface plus gnrique vers le systme de stockage
pour favoriser les volutions venir:
Les motivations pour conserver eXist tiennent essentiellement la qualit de la
solution, en termes d'volution, de communaut d'implmentation des standards,
et d'activit. Il s'agit par ailleurs de la solution en place actuellement pour
laquelle il existe donc dj des comptences. En outre la version 1.2 apporte le
support de APP, un mcanisme d'indexation plus souple et potentiellement plus
performant (modulaire).
L'implmentation d'une interface plus gnrique rpond deux problmes
actuels de l'implmentation du systme de persitance: le couplage fort existant
entre l'application et le systme de persitance, et l'exploitation du protocole
XML:DB. Comme interface possible de remplacement, plusieurs technologies
sont envisageables: l'implmentation de REST d'eXist, de SOAP, de Atom
Publishing Protocol.
2 - Comparatif:
xmldb, XRDBMS, middleWare
-> performance, communication/requtes, rfrences (stade de dvpt, communaut, documentation*)
3 valuation des solutions:
http://dbs.uni-leipzig.de/en/projekte/XML/XmlBenchmarking.html
Annexe:
Mthodologie d'valuation des logiciels libres:
Les critres sont drivs de la mthodologie de Bull (http://www.novaforge.org/novaforge/frpartager/methodologie), et de la Mthode de Qualification et de Slection de logiciels Open Source
(QSOS http://www.qsos.org/methode.php?lang=fr ).
67
Barme
**
***
Utilisateurs
Pas d'utilisateurs
identifis
Communaut
Fonctionnement en
communaut et outils
associs
Documentation
Basique
Utilisateurs et
dveloppeurs
Systmatis, avec
contributions
Activit
0 3 dveloppeurs
4 7 dveloppeurs, ou
fort turn-over
+ de 7 dveloppeurs
Maturit
Encore en
Version(s) stable(s),
dveloppement, pas de utilisable.
version stable
Actualit
Le projet semble
l'abandon
Version prouve.
Roadmap.
68
2 - Qualification des besoins pour le stockage des documents XML dans Notix
De manire gnrale, l'tude du systme de stockage de Notix est motiv par les besoins suivants:
Prendre connaissance des solutions alternatives de stockage des donnes XML qui existent ou
mergent, afin de rester avis des volutions en cours dans le domaine.
valuer les solutions alternatives et notamment les gains en terme de performance dans Notix.
valuer la prennit et la performance des technologies et protocoles utiliss dans Notix.
2.1 - Accs au systme de stockage:
Fonctionnement en mode embarqu.
Fonctionnement en mode serveur.
Possibilit d'utiliser une API Java pour accder la base et grer les donnes.
Possibilit de raliser des tches d'administration partir d'un client extrieur Notix pour:
l'indexation
l'excution de requtes sur les bases
la planification/ralisation de sauvegardes des bases de donnes.
Prfrence pour l'adoption d'un protocole standard pour la communication entre Notix et une ou
plusieurs bases distantes:
actuellement XML-RPC
intrt pour REST
2.2 - Accs aux documents et aux donnes:
Fonctionnalits d'ajout, de suppression, de mise jour et de lecture des documents:
via l' API Java.
via un client autonome.
Prfrence pour l'utilisation de standards pour l'accs aux donnes XML:
XQuery (XQuery FullText, XQuery Update Facility)
Xpath 2
Conformit maximale au XQuery 1.0 and XPath 2.0 Data Model (XDM)
Possibilit de mettre en cache les rponses du systme de stockage:
soit une implmentation existe
soit les dispositif de stockage permettnet l'accs aux mtadonnes pour la cration d'un
systme de mise en cache.
2.3 - Stockage des documents:
Pour le stockage des documents, une hirarchie similaire l'existant doit pouvoir tre reproduite sur
la base des mmes outils ou non (instances de bases de donnes, collections, sous collections,
contenus mixtes des collections). Au minimum l'organisation des documents devra contenir:
Plusieurs bases documentaires (bases par site, et base d'utilisateurs)
Plusieurs collections documentaires (distinctions des notices, des auteurs moraux, des listes)
70
Un ensemble de sous collections documentaires pour le stockage des notices. Cet aspect est
moins fondamental, mais correspond l'existant.
2.4 Environnement:
La recherche d'une solution de stockage des donnes XML devra tenir compte de l'environnement
actuel, et de la compatibilit des licences. La porte de l'tude se limitera donc:
Aux solutions libres mettant disposition les sources de l'application
Aux solutions dveloppes au moins pour Windows et Linux
71