Faculté Polytechnique de Mons Génération d'un site Web automatiquement à partir d'une base de données relationnelle : Utilisation de XML Projet de 3 e Informatique et Gestion Année académique 2007-2008 Lhôte Sébastien Sebastien.Lhote@student.fpms.ac.be Santarelli Sébastien Sebastien.Santarelli@student.fpms.ac.be Van Sevenant Mathieu Mathieu.VanSevenant@student.fpms.ac.be Benjelloun Mohammed Promoteurs : Mahmoudi Saïd
1 1 Introduction 1 Introduction Ce projet s'inscrit dans le cadre de la 3 Bachelier orientation Informatique et Gestion. Le e but de celui-ci est de permettre à diérents groupes d'étudiants de résoudre un problème important et d'y trouver des solutions interactives. Ce travail se passe en trois phases : 1. la recherche, 2. la conception et la réalisation, 3. la validation. L'interactivité des programmes doit être assurée par une interface graphique, développée dans un langage au choix. Le résultat doit atteindre les objectifs de abilité, d'évolutivité et de maintenabilité. Notre groupe a été désigné pour le sujet : Génération d'un site Web automatiquement à partir d'une base de données relationnelle : Utilisation de XML. Dans ce pré-rapport, nous allons décrire plus précisément le cahier des charges que nous nous sommes xés, à savoir la gestion de locations d'immeubles et la base de données relationnelle associée à cette aplication. Nous détaillerons aussi le choix de l'implémentation de ce problème ainsi que des solutions déjà abordées. Par contre, nous n'épiloguerons pas sur le sujet XML à proprement parler, nous garderons le soin de le faire dans le rapport nal. Nous présenterons donc les documents XML par l'intermédiaire de nos résultats. Enn, nous dévoilerons le partage du travail au sein de l'équipe. Nous nous xerons un planning de travail qui pourra être, par la suite, modié suivant l'avancement de celui-ci.
2 2 Description du projet 2 Description du projet Le but de ce travail est de créer un site Web complètement autonome à partir d'une base de données relationnelle. Nous utiliserons des documents XML comme mode d'échange des données. Le projet se composera, donc, des trois parties suivantes : 1. description d'une base de données SQL dans un document XML, 2. extraction d'un chier HTML à partir des données XML, 3. extraction d'un chier PDF à partir des résultats de quelques requêtes. Le projet ne prévoyant pas d'application particulière, nous avons choisi de traiter de la location d'immeubles, inspiré du sujet du projet de base de données du groupe d'agnès Leroy, Sébastien Santarelli et Benjamin Silvert. Nous présenterons donc dans cette section le cahier des charges que nous nous sommes xés. Nous décrirons la base de données relationnelle à partir de laquelle nous extrairons des chiers XML ainsi que la présentation du site Web. 2.1 Cahier des charges Une agence immobilière dispose d'un ensemble de données que nous devons organiser an de pouvoir les traiter ecacement. Celle-ci possède donc un ensemble d'immeubles identifés par un Nom. Chacun est situé à une adresse déterminée et est décrit dans un champ Description. Celui-ci pourrait, d'ailleurs, être étudié an de rendre plus automatique la présentation de ces biens immobiliers. L'agence tient un carnet de Locataires identifés par leur Nom et leur Prénom. Elle possède, ainsi, leurs coordonnées complètes. De plus, un ensemble de Responsables concluent les diérents Contrats de location. L'agence détient aussi les coordonnées de ses employés. Elle garde, par ailleurs l'historique des Payements eectués par les locataires ainsi que celui des Charges liées aux diérentes habitations. Nous pouvons donc, à partir de ceci, créer une base de données modélisant les diérentes situations.
3 2 Description du projet 2.2 Présentation de la base de données Très rapidement, après avoir déni le cahier des charges, nous pouvons dessiner le schéma conceptuel de la base voir gure 1. À partir de celle-ci, nous pourrons décrire complètement les tables à implémenter dans le système de gestion de base de données SGBD. Fig. 1 Schéma conceptuel Dans ce pré-rapport, nous ne détaillerons pas la phase conceptuelle de la base de données mais bien l'implémentation de celle-ci.
4 3 Implémentation 3 Implémentation Dans cette section, nous allons décrire l'implémentation et justier les choix de conception déjà pris. 3.1 Implémentation de la base de donnée Nous avons choisi de travailler avec le serveur MySQL pour éditer la base de données. Ce choix nous a permis de découvrir un nouveau SGBD ainsi que de nouvelles fonctionnalités attachées à ce système. Présentons la conception de la base. Nous avons donc, dans un premier temps, décrit les attributs de chaque table. Avant de déterminer les clés primaires, nous avons déni le type InnoDB pour toutes les tables an de pouvoir bénécier de l'intégrité référentielle. Nous avons, ensuite, déni les clés primaires des diérentes tables sauf celle de la table Contrats. Ce choix sera expliqué lors de la création des clés secondaires. La création d'un index semblait judicieux pour les futures clés étrangères car cela permet d'augmenter la vitesse de recherche dans les tables. Nous avons déni les clés secondaires suivant les règles de la conception d'une base de données relationnelle. Une fois la base construite, nous avons pu générer un document XML décrivant celle-ci. C'est à partir de ce chier que nous allons traiter les informations utiles. 3.2 Manipulation document XML Pour commencer, nous avions chaque table du modèle logique dans un chier xml différent. Ce n'est pas ce qui nous est demandé mais cela permettait de tester et de faire nos premiers pas dans l'achage du xml dans une page html. À l'aide d'un Javascript, nous avons pu acher sous forme de tableau les diérentes tables. Nous avons essayé d'appliquer cette méthode à un seul document xml comprenant toute la base de données mais nous avions des problèmes lorsqu'un élément revenait à plusieurs endroits dans le XML.
5 3 Implémentation Par exemple, une table comprenant une base de données de locations avec l'ensemble des biens et des locataires. Le tag <locataire> s'ache une premiere fois là ou l'ensemble des locataires sont entrés et aussi lorsqu'ils sont liés à un contrat. Notre script se basant sur un repérage du tag demandé, il ne nous était pas possible de gérer le xml unique avec cette métode. Nous sommes donc partis à la recherche d'une autre méthode... L'idée étant de gérer l'achage du XML par une feuille de style en xsl et de sélectionner ainsi au travers de la feuille de style, les éléments que nous désirons acher. Cette méthode fonctionnait quand nous changions à la main dans le code XML la ligne appelant la feuille de style mais ne fonctionne pas lorsque nous nous servions d'un script dans la page html qui, sur clic de l'utilisateur, applique le xsl désiré par l'utilisateur, pour acher les données souhaitées et non les autres. En fait, lorsque nous passions par le html, l'ensemble des données était aché, avec celles sélectionnées qui apparaissaient dans le tableau et les autres, à la volée, dans la page. Nous avons pu résoudre ce problème avec l'aide de M. Sébastien Noël, que nous remercions au passage. Ce problème est dû au fait que le parser XSLTProcessor de Javascript recopie dans le ux html les données du chier XML qui ne correspondent à aucun template. Nous avions donc deux solutions. Soit spécier dans le xsl, plus précisément ce sur quoi il devait être appliqué et donc faire que les données dans le ux html soient uniquement celles voulues ; soit spécier celles que nous ne voulons pas voir dans le chier html. Nous pensons que le mieux est de spécier uniquement dans le xsl ce qui doit être aché. Cela permet de garder les mêmes xsl si des nouveaux champs de données sont créés dans la base de données. Cette solution marche sur un exemple dont les balises sont, par exemple, <nom></nom>. Or MySQL sort un XML qui comporte des balises comme celle-ci : <field name="nom"></field>. L'adaptation de notre solution nous paraît possible mais nous n'avons pas à l'heure actuelle réussi à la mettre en oeuvre. Nous nous y atellerons durant Pâques.
6 4 Organisation du travail 4 Organisation du travail Cette section décrira le partage du travail entre les diérents équipiers ainsi que son état d'avancement. Un planning des tâches à accomplir sera aussi présenté. La projet se compose de trois parties : 1. sérialisation de la base de donnée en chier XML ; 2. implémentation d'un site internet achant les données utiles, 3. création de PDF. Lhôte Sébastien s'occupe du premier point, Santarelli Sébastien du second et Van Sevenant Mathieu du troisième. Chacun décrit dans les sous-sections suivantes son travail. 4.1 Création d'un document XML à partir d'une base de données Dans cette partie, le travail eéctué et les diérentes pistes explorées seront détaillés et un planning sera dressé. 4.1.1 Travail eectué Aprés des recherche sur le sujet de XML, il est apparu que ces documents possèdent une architecture arborescente. À partir de ce constat, il était intéressant de rechercher des enseignements sur la transformation d'une base de données relationnelle en une base de type hiérarchique. En eet, la structure d'un tel document étant décrit par un arbre, il semblait aisé d'implémenter le passage d'une telle base de données à un document XML. Par ailleurs, un travail émanant de Christine Delcroix de l'université Notre-Dame de la Paix à Namur, traite le sujet de la transformation d'un schéma conceptuel en un schéma XML. Il renseigne sur l'utilisation de scripts créés à cet eet. N'y en ayant pas l'accès et suite à des recherches parallèles sur le sujet des bases de données, il a été choisi de construire une base sur un serveur MySQL. En eet une simple commande permet de créer un chier 1 XML décrivant complètement celle-ci et surtout de transmettre à mes équipiers un document sur lequel travailler. 1 mysqldump xml <nom_base_de_données> -r <chemin/nom_fichier.xml> à taper dans un terminal linux
7 4 Organisation du travail Avant la création de ce document, des chiers exportés de Access ont été traités an de faire ses premières expériences en la matière. Ils étaient une simple représentation des données de chaque table de la base. Le document généré par mysqldump, quant à lui, est une description complète de la base de données MySQL. Par ailleurs, d'autres solutions sont possibles, comme par exemple : Hibernate qui est un projet visant à passer d'une base relationnelle à un ensembles de classes, utiliser l'ensemble des documents générés par Access et créer une base de données XML native à traver un ETL 2,... Les documents extraits par mysqldump décrivent chaque table par ses attributs, leur type de donnée ainsi que les contraintes associées et l'ensemble des données contenues dans cette base. À partir de ceci, il est possible d'utiliser un XSLT pour transformer le document et le rendre compatible aux attentes de Sébastien Santarelli qui s'occupe de la création du site Web. 4.1.2 Planning Avant toutes choses, il faut s'atteler au référencement des diérentes sources consultées an de compléter dénitivement la bibliographie. Durant les vacances de Pâques, le travail sur la dénition d'un XSLT sur le XML généré semble opportun pour dénir un document XML plus concis et plus facile d'utilisation. À l'échéance d'un mois, il serait bien d'avoir ni le travail sur l'interactivité de la création du XML à partir de mysqldump an de pouvoir se consacrer au rapport et aider mes équipiers en cas de besoin. 4.2 Création d'un site Web Après des recherches ciblées sur l'achage d'une page HTML à partir d'un XML, le travail a pu commencer directement par des tests à partir de simples documents XML exportés d'access. 2 Processus d'extraction, Transformation et Load dans un entrepôt de données XML cfr. travail de n d'étude de Johnny Tsheke Shele, année académique 2006-2007
8 4 Organisation du travail Les étapes importantes de ce travail furent : l'achage par îlots de données sous IE, la création du nom de domaine et de l'hébergement web, an de pouvoir tester nos travaux en ligne quand cela est nécessaire, l'achage d'un XML en javascript, chaque table dans un XML l'achage en html à partir d'un document XML unique par l'application de XSL avec l'aide de Mr Noël, la recherche d'une solution de secours pour les PDF 3. Il reste à gérer l'achage depuis le XML qui sort de MySQL. Le problème se situe au niveau des balises qui ne sont pas identiques à celles utilisées dans les exemples de test. Il y a deux solutions : 1. passer un script qui arrangerait le XML pour le mettre sous le standard utilisé dans l'exemple 2. gérer diéremment les XSL pour qu'ils puissent traiter les XML qui sortent de MySQL. Cet objectif atteint, les pages du site seront retravaillées an des les rendre plus présentables. 4.3 Génération de PDF Après une documentation sur le XML, une recherche sur des solutions pour passer d'un tel document en un PDF a été eectuée. Après investigations sur le sujet, la découverte de scripts a permis d'y répondre dans un premier temps. An de parfaire ce sujet, une recherche sur des enseignements sur les langages de programmation tels que Java, JavaScript, PHP a été eectuée. Parallèlement, deux programmes permettant de passer d'un chier XML à un PDF ont été trouvés : 1. FOP : Formating Object Processor, 2. OpenJade : permet de traduire un chier XML en un document TeX. Après des tests infructueux avec le premier, la deuxième solution semble, désormais, incontournable. Il reste donc à tester OpenJade, c'est à dire essayer grâce à cela de générer un chier PDF à partir de chiers XML, de comprendre comment tout cela fonctionne, puis de trouver un moyen d'implémenter ce système via une interface utilisateur facile d'accès, tout en faisant en sorte que ce dit système puisse fonctionner conjointement au reste du travail. 3 via un programme tournant en ligne
9 5 Conclusion 5 Conclusion L'étude théorique du projet et la phase conceptuelle étant presque terminées, il reste à manipuler les documents XML déjà générés. Par ailleurs, nous devons rendre automatique la génération de ces documents et nous pouvons aussi créer une interface qui rend plus interactif l'installation du serveur MySQL et la création de la base. Nous allons aussi travailler sur l'apparence du site internet et la génération de documents PDF à partir de requêtes.