Représentation et manipulation de données structurées

BE1 - Application XML

Florian CLERC - Gauthier CORNU

Note : Une version en ligne de notre travail est disponible en suivant ce lien. Le compte-rendu qui y est présent n'a rien de plus que cette version, si ce n'est que le lien associé au logo de validation du W3C est cette fois corretement renseigné, et permet d'avoir confirmation, directement sur le site du W3C, que le présent document est valide.

Introduction

Outre les nombreuses applications qu'il peut avoir dans le domaine de transferts de fichiers, XML est, par sa nature même, un outil idéal afin de réaliser une base de données simple aisément consultable et exploitable directement par les humains. Ils est en effet capable de définir des noms de balise très explicites qui permettent à tout un chacun de comprendre son contenu et l'adapter afin de rajouter de nouvelles données. De plus, il est ensuite possible de présenter ces données autrement que sous forme d'arbre, en utilisant un simple navigateur Web et des feuilles de style CSS (même si les manipulations possibles sont parfois limitées).

Ainsi, nous avons dans ce BE réalisé une application XML permettant de modéliser et stocker la structure d'une bibliothèque, que ce soit les livres qu'elle contient, ses membres ou encore les prêts en cours. Nous décrirons dans un premier temps la structure que doit prendre cet ensemble intuitivement, puis nous remplirons la base de données pour produire un document XML complet. Ensuite, il s'agira de mettre en forme les données grâce à CSS. Finalement, nous produirons une DTD (interne) associée au document XML, répondant à la structure que nous aurons définie dans la première partie. A chaque fois qu'un document sera produit (y compris le présent compte-rendu), nous utiliserons les outils de validation proposés par le W3C.

I : Vocabulaire et structure

La racine de notre document est un élément library. Cet élément contient 3 collections d'éléments différentes : books, members et lendings.

L'élément book a pour attributs l'ISBN de l'ouvrage et un id basé sur l'ISBN de l'ouvrage. Cet id permet de différencier deux documents de la bibliothèque ayant le même ISBN (si la bibliothèque possède deux exemplaires d'un même livre par exemple). L'élément book possède également 6 éléments : title, author, genre, country, editor et date. L'élément title contient simplement le titre de l'ouvrage. Ce titre pourrait être un attribut de l'élément book, mais le mettre dans un élément fils permet de l'afficher dans le document XML formaté par le CSS. L'élément author contient le nom de l'auteur de l'ouvrage. Comme un ouvrage peut avoir plusieurs auteurs, l'utilisation d'un élément est ici adaptée. Les éléments genre, country, editor et date contiennent respectivement le genre de l'ouvrage, son pays (le pays de sa langue), son éditeur et enfin sa date de parution. Ces données sur l'ouvrage étant destiénées à être affichées, elles ne sont pas définies en tant qu'attributs de l'élément book.

L'élément member a un unique attribut qui est un id permettant de repérer le membre de manière unique lorsqu'il emprunte un ouvrage de la bilbiothèque. Cet élément contient également les éléments last_name, first_name, birthday, registration et zip_code. Tous ces éléments sont uniques sauf first_name. Les éléments uniques sont enregistrés en tant qu'éléments pour pouvoir les afficher.

Enfin, l'élément lending permet d'enregistrer les prêts d'ouvrages. Pour ce faire, cet élément contient un attribut start enregistrant la date de début de l'emprunt de l'ouvrage, un attribut expected enregistrant la date de retour attendue de l'ouvrage (pour pouvoir de calculer des éventuelles pénalités de retard) et un attribut return optionnel qui n'est rempli que si l'ouvrage a effectivement été retourné à la bibliothèque. L'élément lending contient également les attributs book_id et member_id contenant respectivement l'id de l'ouvrage emprunté et l'id du membre empruntant l'ouvrage.

On peut résumer cette structure grâce au schéma suivant :
structure
Lien vers le SVG (non valide W3C) : diagramme SVG

II : Document XML

Lien vers le document XML correspondant à la description précédente : document. Ce document a été validé par l'outil du W3C, et est donc bien formé.

III : Document XML stylisé

Par défaut, lorsqu'un navigateur ne détecte pas de feuille de style pour un document XML, il se content d'affficher le document lui-même, en lui donnant une structure d'arbre. En effet, puisque les noms des balises ne sont a priori pas connues par le navigateur, il ne peut savoir quel style leur appliquer. En revanche, dès qu'une feuille de style sera trouvée, même vide, seul le contenu des balises sera affiché (c'est la raison pour laquelle nous avons utilisé peu d'attributs dans le cas de cette application : nous avons mis sous forme de balises toutes les informations que nous voulions afficher). Pour donner un style au document, on part donc d'une feuille vide, ce qui correspond dans le navigateur à un affichage de tous les contenus des balises les uns à la suite des autres, sans séparation (soit un display:inline).

Cette apparence est très facilement adaptable pour peu que l'on se souvienne de commandes relativement peu utilisées en CSS/HTML (en tout cas beaucoup moins qu'avec XML) telles que display:block. La principale difficulté vient surtout du fait que, contrairement à un document html, on ne modifie pas la structure d'un document XML pour faciliter le travail de design. Il est très fréquent par exemple, avec un document HTML, d'ajouter des balises div englobantes afin de déplcer plus aisément des ensembles de balise. Ici nous sommes en présence d'un document fixe que l'on ne peut se permettre de changer uniquement pour ces raisons : la priorité du document XML est la structuration de données indépendamment de leur présentation. Il faut donc faire appel à des propriétés et techniques CSS assez peu courantes en HTML, et certains autres désirs ne peuvent pas forcément être réalisés, parmi lesquels :

Lien vers le document XML stylisé grâce à une feuille de style CSS : document stylisé

IV. Ajout d'une DTD interne

Une fois le schéma de structure réalisé (voir plus haut dans ce rapport), il est très facile de réaliser la DTD du document XML, en listant les éléments dans leur ordre d'apparition. Il ne reste globalement qu'à décider des règles d'occurence de certains éléments ou de la nécessité de certains attributs. Voici quelques détails sur certains choix que nous avons faits pour la réalisation de la DTD :

Lien vers le document XML contenant la DTD : Document avec DTD.
Lien vers le texte de la DTD telle qu'elle a été insérée dans le début du document XML : DTD.
La validation par le W3C a également été couronnée de succès pour la DTD et le document XML qui suit, nous avons donc maintenant un document bien formé et valide.

Conclusion

La réalisation de cette application XML permettant de modéliser une bibliothèque nous a tout d'abord permis de vérifier un fait dont nous avions déjà l'intuition : l'utilisation de XML pour modéliser une structure sous forme arborescente est très aisée, ne nécessitant pas de grandes connaissances théoriques. Cela vient avant tout du fait que les noms de balises personnalisables rendent le tout très compréhensible et facilement manipulable par les humains. Avoir un document bien formé est donc très facile, et il est possible de lui appliquer quelques propriétés CSS afin de lui donner une apparence relativement agréable dans un navigateur (quoique la couple XML/CSS mène à certaines limitations que nous avons pu éprouver). Il pourrait être intéressant de transformer notre document à l'aide d'une feuille de style XSLT afin de comparer les résultats.

Pour aller un peu plus loin et réaliser une application XML qui répond à certaines 'normes' dans le cadre étudié, ici celui de la bibliothèque, nous avons réalisé une DTD, et vérifié que le document XML associé était désormais également valide.

Valid XHTML 1.0 Strict