Problème - Accueil [xavier.perseguers.ch]

publicité
Projet de semestre
• Parseur XML basé sur la DTD : Buts
– Utiliser la grammaire définissant un type de
fichiers XML pour créer un parseur dédié à
leur traitement
– Utiliser JavaCC dans une application pratique
– Simplifier l’accès aux fichiers XML par rapport
aux méthodes traditionnelles (DOM, SAX)
– Choisir une représentation des données XML
LTI
Laboratoire
de
Téléinformatique
2
Projet de semestre
•
Méthodologie
1. Lecture de la DTD source
2. Génération de classes Java correspondant
aux éléments de la DTD
3. Création d’une grammaire basée sur la DTD
pour le parseur XML
4. Améliorations de l’accessibilité des éléments
XML
LTI
Laboratoire
de
Téléinformatique
3
Projet de semestre
• Lecture de la DTD source
– Création d’une grammaire JavaCC d’après la
description BNF du W3C
– Projet Exolab de A. Totok (www.exolab.org)
• Parseur de recherche et remplacement des entités
paramétrées
• Parseur principal, classique, de représentation de
la DTD sous forme hiérarchique en mémoire
LTI
Laboratoire
de
Téléinformatique
4
Projet de semestre
• Lecture de la DTD source
– Problème : Recherche de l’élément racine de
la DTD
• Pas de déclaration <!DOCTYPE comme dans le
cas de DTD locales dans le cas de DTD externes
• Ordre des déclarations d’éléments libre
– Solution : Utiliser un graphe de dépendances
• Racine = unique élément non référencé
LTI
Laboratoire
de
Téléinformatique
5
Projet de semestre
• Génération de classes Java
– Représentation des éléments XML en
mémoire
• Hiérarchie identique à celle du fichier XML
• Accès facile, idéalement avec des méthodes
get[Élément], set[Élément]
• Cas des éléments à répétition : (E)* ou (E)+
– Gestion dans une liste, un vecteur ou une autre structure
de données conservant l’ordre
– Ajout / Suppression / Modification autorisées
LTI
Laboratoire
de
Téléinformatique
6
Projet de semestre
• Création de classes Java
– Problèmes potentiels avec les méthodes
get[Élément], set[Élément]
• Nom de l’élément = « Class »  getClass()
– Méthode réservée du langage Java
• Stockage du contenu PCDATA d’un élément
– Utilisation de getText() et setText()
– Problème si élément « Text »  getText() et setText()
déjà définis
LTI
Laboratoire
de
Téléinformatique
7
Projet de semestre
• Création de classes Java
– Solution : Utilisation d’une liste de mots
réservés
• Par Java
• Par le projet (cas du contenu PCDATA)
– Implication : Se souvenir des décisions lors
de la génération du parseur / la création d’un
fichier XML basé sur un contenu mémoire
LTI
Laboratoire
de
Téléinformatique
8
Projet de semestre
• Création de classes Java
– Exemple de problème :
<!ELEMENT voiture EMPTY>
<!ATTLIST voiture class CDATA #REQUIRED>
<!ATTLIST voiture _class CDATA #REQUIRED>
– Décision :
• class  _class
• _class  __class
LTI
Laboratoire
de
Téléinformatique
9
Projet de semestre
• Création de classes Java
– Si l’on ne se rappelle pas des décisions :
• Le parseur a le fichier XML suivant :
<voiture class="vehicule" _class="4 roues"/>
<voiture _class="4 roues" class="vehicule"/>
• Risque de conflit dans le second cas :
– _class  _class
– class  __class
• Inversion logique des attributs !
LTI
Laboratoire
de
Téléinformatique
10
Projet de semestre
• Création de classes Java
– Stockage des éléments à choix, multiples :
(Voiture | Avion | Fusée)*
• Une liste par type d’éléments  3 listes
– Avantage : Facile de faire une énumération car on
connaît le type des éléments
– Inconvénient : On perd l’ordre d’entrelacement des
éléments
LTI
Laboratoire
de
Téléinformatique
11
Projet de semestre
• Création de classes Java
– Stockage des éléments à choix, multiples :
(Voiture | Avion | Fusée)*
• Une liste commune
– Avantage : On garde l’ordre, tant à la lecture qu’à la
réécriture d’un fichier XML
– Inconvénient : La liste contient différents types
d’éléments, difficulté à la parcourir, utilité réelle ?
LTI
Laboratoire
de
Téléinformatique
12
Projet de semestre
• Création de la grammaire XML
– D’après la définition du W3C, en se
restreignant à ce qui est nécessaire
– Inconsistances dans la grammaire
LTI
Laboratoire
de
Téléinformatique
13
Projet de semestre
• Techniques à utiliser
– Réflexion pour le stockage des valeurs des
éléments dans le parseur
– Génération de commentaires dans les fichiers
générés  javadoc utilisable pour créer une
documentation automatique
– Création d’un programme d’exemple d’accès
aux fichiers XML pour l’utilisation des classes
générées
LTI
Laboratoire
de
Téléinformatique
14
Projet de semestre
• Points importants
– Privilégier un projet comportant des limitations
par rapport aux possibilités des DTD mais
utilisable, à un projet supportant tous les
détails mais pas utilisable car pas terminé
– Possibilité d’enregistrer les modifications dans
un nouveau fichier XML
– Support des contraintes (valeurs des attributs)
LTI
Laboratoire
de
Téléinformatique
15
Téléchargement