Université Claude
Bernard Lyon 1-
Master CCI - janvier / février 2006
Projet
XML
Introduction
Dans ce projet, vous allez réaliser un petit moteur
d'indexation et de
recherche, capable de trouver toutes les occurrences d'un terme dans un
document XML bien formé. Pour cela, vous
réaliserez deux programmes :
un moteur d'indexation
(ou indexeur), qui parcourt des documents et stocke tous les mots
trouvés dans un fichier
d'index, ainsi qu'un moteur
de recherche, qui parcourt le fichier d'index à
la
recherche des termes correspondant à la requête
utilisateur.
Exemple
Fichier XML à
indexer :
<?xml version="1.0" encoding="ISO-8859-1"?>
<carnet>
<entree>
<nom>Dupond</nom>
<adresse>123, rue de la moustache, Lyon</adresse>
</entree>
<entree>
<nom>Dupont</nom>
<adresse>124, rue de la moustache, Lyon</adresse>
</entree>
</carnet>
Après indexation de ce
fichier, la recherche du terme "Lyon" produit :
- carnet/entree/adresse
:
- 123, rue de la moustache, Lyon
- carnet/entree/adresse
:
- 124, rue de la moustache, Lyon
Travail demandé
Applications
Il vous est tout d'abord demandé de concevoir deux
applications JAVA distinctes :
- un indexeur,
qui
- ouvre et lit un fichier XML dont le nom est
passé
en
paramètre
- analyse chacun des termes du
fichier
(les termes
sont des
séquences de caractères terminées par
un "séparateur" : espace,
virgule, point...)
- enregistre tous ces termes
(ainsi que les
arborescences
XML permettant de retrouver les éléments qui
contiennent chaque
occurrence) de façon ordonnée (aide : utilisez la
classe java.util.TreeMap)
dans un fichier
d'index au format XML,
- un
moteur
de
recherche, qui
- reçoit un
terme
requête en paramètre,
- lit le
fichier d'index pour
y rechercher les
différences
occurrences de ce terme,
- lit le fichier XML
contenant les termes à
rechercher et trouve les éléments correspondant
à ces occurrences,
- compose un document XML indiquant, pour chaque
occurrence, les noms de chaque élément de
l'arborescence et tout le
contenu de l'élément contenant le terme
recherché.
Remarque
: pour chacune de ces applications, et pour chaque
sous-tâche particulière de vos algorithmes, vous
êtes libres d'utiliser
l'API de programmation XML présentée en cours
(DOM ou SAX) qui vous
semble la plus pertinente. Vous justifierez ensuite ces choix dans
votre rapport, en termes de facilité de programmation,
rapidité de
traitement, évolutivité pour les "raffinements"
présentés ci-dessous...
Raffinements
Dans un deuxième temps, vous pourrez
ensuite apporter à vos
programmes l'une, l'autre ou les deux modifications suivantes :
- indexation et recherche dans un corpus de
documents
XML
- redéfinition de la structure du
fichier
d'index pour
lui
permettre
de stocker
le chemin et le nom de plusieurs fichiers XML,
- (ré)initialisation
d'un
fichier d'index vide par l'indexeur,
- ajout /
suppression d'un fichier XML dans le
fichier d'index par l'indexeur,
- ouverture de
plusieurs fichiers XML en fonction des
données lues dans le fichier d'index par le moteur de
recherche ;
- possibilité d'indexer et de rechercher dans un
fichier XML
distant, identifié par une URL (aide : utilisez la classe org.xml.sax.InputSource).
- programmation
côté
serveur
- transformation de ces
applications en classes simples que vous appellerez depuis des servlets
ou JSP,
- réalisation sous
forme de pages XHTML ou XML/XSLT de
l'interface d'indexation,
d'interrogation et de réponse des programmes,
-
mise
en ligne sur un serveur Tomcat.
Remarque : quelques conseils
d'implémentation vous sont proposés pour cette étape.
Modalités
Vous travaillerez par groupes de 2 binômes, chacun
réalisant
l'un des deux programmes. Pour que le second binôme puisse
commencer à
travailler avant que le premier ait fini, il est important que vous
vous mettiez d'accord sur la structure (DTD) du fichier d'index, et que
vous réalisiez un exemple de ce fichier (à la
main), conforme à cette
structure.
Ce projet est à envoyer par mail à Lionel
Médini
pour le lundi 6 février. Pour cette date, vous devrez
envoyer un fichier
zippé
contenant :
- le code source de vos deux programmes,
- la DTD de votre fichier d'index,
- l'exemple
de fichier d'index sur lequel vous avez travaillé,
- un
rapport de projet de 15 pages maximum.
Remarques
:
- l'orthographe, la grammaire et la
présentation du
rapport de projet feront partie de la note finale,
- n'oubliez
pas de mettre dans le rapport et dans le mail les
noms de tous étudiants du groupe, en spécifiant
qui a fait quel
programme,
- si vous avez
réalisé une version
"raffinée" de vos
programmes, insérez les deux versions de votre code dans le
fichier
zip, en leur donnant des noms explicites, et si possible dans des
sous-répertoires distincts.