L T I Laboratoire de Téléinformatique 2 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
L T I Laboratoire de Téléinformatique 3 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
L T I Laboratoire de Téléinformatique 4 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 ( 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
L T I Laboratoire de Téléinformatique 5 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é
L T I Laboratoire de Téléinformatique 6 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
L T I Laboratoire de Téléinformatique 7 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
L T I Laboratoire de Téléinformatique 8 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
L T I Laboratoire de Téléinformatique 9 Projet de semestre Création de classes Java –Exemple de problème : –Décision : class _class _class __class
L T I Laboratoire de Téléinformatique 10 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 : Risque de conflit dans le second cas : –_class _class –class __class Inversion logique des attributs !
L T I 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 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
L T I Laboratoire de Téléinformatique 12 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 ?
L T I Laboratoire de Téléinformatique 13 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
L T I Laboratoire de Téléinformatique 14 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
L T I Laboratoire de Téléinformatique 15 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)