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