TP XML
ENSIIE - 2018/2019
Structuration des documents XML
Exercice 1 - Correction de documents XML
Récupérez les fichiers exemple1.xml et exemple2.xml qui sont dans le répertoire /pub/pw/xml.
Attention, ces fichiers ne sont pas bien formés, donc ouvrez-les avec un éditeur de texte et non un
navigateur web.
Corrigez ces documents afin qu’ils soient bien formés. Pour tester qu’un document est bien formé, vous
pourrez utiliser la commande
xmllint −−noout fichier.xml
Si le document est bien formé, cette commande n’affichera rien ; sinon elle affichera les erreurs de struc-
turation.
Exercice 2 - Création d’un document XML
Le texte suivant contient de l’information en vrac.
Mettez en évidence sa structure logique en créant un document XML bouteilles.xml regroupant
cette information. Vous testerez que ce document est bien formé avec la commande xmllint −−noout
bouteilles.xml.
Votre modélisation doit tenir compte des contraintes suivantes :
— les balises doivent correspondre à de la structuration du contenu ;
— les informations de contenu doivent être dans le contenu des balises et non pas dans les balises
ellese-mêmes ;
— on utilisera plutôt les attributs pour des informations permettant de traiter le document ou les
données du document que pour du contenu sémantique.
Veillez également à ce que votre modélisation soit générique : si un nouvel élément est présent dans une
nouvelle bouteille, il ne doit pas être nécessaire d’ajouter une balise.
Une bouteille d’eau Cristaline de 150 cl contient par litre 71 mg d’ions positifs calcium, et 5,5
mg d’ions positifs magnésium. On y trouve également des ions négatifs comme des chlorures à
20 mg par litre et des nitrates avec 1 mg par litre. Elle est recueillie à St-Cyr la Source, dans
le département du Loiret. Comme la bouteille est sale, quelques autres matériaux comme du
fer s’y trouvent en suspension.
Une autre bouteille est de contenance 50 cl, de marque Volvic, et a été puisée à... Volvic, dans
le Puy-de-Dôme. Elle comprend 11,5 mg/l d’ions calcium, 8,0 mg/l d’ions magnésium, 13,5
mg/l d’ions chlorures et 6,3 mg/l d’ions nitrates. Elle contient également des particules de
silice.
Description des documents XML
Exercice 3 - Description d’un fichier d’analyse de questions et réponses
Le fichier XML 1 contient un ensemble de questions analysées morpho-syntaxiquement avec leurs réponses.
Il est disponible dans /pub/pw/xml. Recopiez ce fichier dans le répertoire de votre TP.
1
1. Proposez une DTD (dans un fichier questions.dtd) permettant de définir les documents XML
représentant un ensemble de questions.
Vérifiez que votre fichier est bien formé et valide en utilisant la commande
xmllint −−noout −−dtdvalid questions.dtd fichier questions exo.xml
(comme précédemment, cette commande n’affiche rien si le fichier est bien formé et valide et affiche
les erreurs sinon).
2. Créez un schéma XML (schema questions.xsd) pour ce fichier XML et validez le fichier XML
en utilisant la commande
xmllint −−noout −−schema schema questions.xsd fichier question exo.xml.
Listing 1 – fichier questions exo.xml
<q u e s t i o n s>
<q u e s t i o n i d=” q1 ”>
<t e x t e q u e s t i o n l a n g=” f r ”>
Quand f u t c r é é PHP ?
</ t e x t e q u e s t i o n>
<f o r m e s>
<forme i d=” f 1 . 1 ” pos=”KON” lemme=” quand ”>Quand</ forme>
<forme i d=” f 1 . 2 ” pos=”VER:simp” lemme=” ê t r e ”>f u t</ forme>
<forme i d=” f 1 . 3 ” pos=”VER:pper” lemme=” c r é e r ”>c r é é</ forme>
<forme i d=” f 1 . 4 ” pos=”NAM” lemme=”PHP”>PHP</ forme>
<forme i d=” f 1 . 5 ” pos=”SENT” lemme=” ? ”>?</ forme>
</ f o r m e s>
</ q u e s t i o n>
<q u e s t i o n i d=” q2 ”>
<t e x t e q u e s t i o n l a n g=” f r ”>
Qui é t a i t p r é s i d e n t de l a r é p u b l i q u e en France en 1954 ?
</ t e x t e q u e s t i o n>
<f o r m e s>
<forme i d=” f 2 . 1 ” pos=”PRO” lemme=” q u i ”>Qui</ forme>
<forme i d=” f 2 . 2 ” pos=”VER:impf” lemme=” ê t r e ”>é t a i t</ forme>
<forme i d=” f 2 . 3 ” pos=”NOM” lemme=” p r é s i d e n t ”>p r é s i d e n t</ forme>
<forme i d=” f 2 . 4 ” pos=”PRP” lemme=” de ”>de</ forme>
<forme i d=” f 2 . 5 ” pos=” DET:art ” lemme=” l e ”>l a</ forme>
<forme i d=” f 2 . 6 ” pos=”NOM” lemme=” r é p u b l i q u e ”>r é p u b l i q u e</ forme>
<forme i d=” f 2 . 7 ” pos=”PRP” lemme=” en ”>en</ forme>
<forme i d=” f 2 . 8 ” pos=”NAM” lemme=” France ”>France</ forme>
<forme i d=” f 2 . 9 ” pos=”PRP” lemme=” en ”>en</ forme>
<forme i d=” f 2 . 1 0 ” pos=”NUM” lemme=”@card@”>1954</ forme>
<forme i d=” f 2 . 1 1 ” pos=”SENT” lemme=” ? ”>?</ forme>
</ f o r m e s>
</ q u e s t i o n>
</ q u e s t i o n s>
Traitement des documents XML
Exercice 4 - Programmation avec DOM et SAX
DBLP est un site web qui recense les publications scientifiques en informatique. Il est possible de parcourir
les publications ou de faire une recherche sur ces publications en fonction des auteurs, des revues ou des
conférences (voir figure 1).
Les publications affichées par DBLP sont stockées dans un fichier XML dont un extrait est présenté
figure 2 ; vous pouvez consulter la page http://dblp.uni-trier.de/faq/What+do+I+find+in+dblp+
xml.html pour plus d’informations sur ce format.
Vous avez à votre disposition dans /pub/pw/xml/ deux parsers, un SAX et un DOM, qui parcourent un
fichier au format DBLP et affichent la liste des auteurs du fichier. Dans ce répertoire, vous trouverez :
— les fichiers ParserSax.java et ParserDom.java qui correspondent aux parsers ;
2
— les fichiers Person.java et Publication.java qui correspondent aux classes dans lesquelles sont
stockées les informations sur les publications ;
— les fichiers dblp extract.xml et dblp.xml qui contiennent respectivement une partie et la totalité
des publications de DBLP.
1 - Comparez les temps d’exécution des deux parsers (SAX et DOM) avec la commande time, d’abord
sur le fichier dblp extract.xml, puis sur dblp.xml.
2 - Modifiez ensuite les parsers pour afficher la liste des publications d’un auteur particulier passé en
paramètre.
3 - Ajoutez une fonction utilisant xpath permettant d’afficher la liste des publications (auteurs et
titre) de la conférence LREC 2014.
Figure 1 – Affichage des publications sur DBLP
3
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE dblp SYSTEM "dblp.dtd">
<dblp>
[...]
<article key="journals/cacm/Gentry10" mdate="2010-04-26">
<author>Craig Gentry</author>
<title>Computing arbitrary functions of encrypted data.</title>
<pages>97-105</pages>
<year>2010</year>
<volume>53</volume>
<journal>Commun. ACM</journal>
<number>3</number>
<ee>http://doi.acm.org/10.1145/1666420.1666444</ee>
<url>db/journals/cacm/cacm53.html#Gentry10</url>
</article>
[...]
<inproceedings key="conf/focs/Yao82a" mdate="2011-10-19">
<title>Theory and Applications of Trapdoor Functions (Extended Abstract)</title>
<author>Andrew Chi-Chih Yao</author>
<pages>80-91</pages>
<crossref>conf/focs/FOCS23</crossref>
<year>1982</year>
<booktitle>FOCS</booktitle>
<url>db/conf/focs/focs82.html#Yao82a</url>
<ee>http://doi.ieeecomputersociety.org/10.1109/SFCS.1982.45</ee>
</inproceedings>
[...]
<www mdate="2004-03-23" key="homepages/g/OdedGoldreich">
<author>Oded Goldreich</author>
<title>Home Page</title>
<url>http://www.wisdom.weizmann.ac.il/~oded/</url>
</www>
[...]
</dblp>
Figure 2 – Extrait du fichier XML de DBLP