Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parOnesime Merlin Modifié depuis plus de 10 années
1
Projet de semestre Responsable :Prof. Claude Petitpierre Superviseur :Duy Vo Duc
2
L T I Laboratoire de Téléinformatique 2 Exemple pratique Fichier XML des collaborateurs –Liste des personnes –Prime de 10% Plusieurs fichiers à traiter Rapidité de développement Julie Blanc Jean Toufou Sophie Nalup Claire-Lise De Reck Philippe Brousseur Xavier Reynold Jim Lenz
3
L T I Laboratoire de Téléinformatique 3 Exemple pratique (2) Ouverture du fichier xmlParser = new XMLParser(); FileInputStream inputStream = new FileInputStream(" data.xml "); Personnes personnes = xmlParser.input(inputStream); inputStream.close(); Liste et augmentation for (Enumeration e=personnes.getPersonne(); e.hasMoreElements(); ) { Personne p = (Personne)e.nextElement(); int salaire = Integer.parseInt(p.getSalaire()); int salaire2 = (int)(1.1 * salaire); System.out.println(p.getNom().getText() + " " + p.getPrenom().getText() + " : " + salaire); p.setSalaire(Integer.toString(salaire2)); } Enregistrement du résultat personnes.save(" new-data.xml ");
4
L T I Laboratoire de Téléinformatique 4 Exemple pratique (3) : Résultat Terminal / Ligne de commande : Blanc Julie : 4000 Toufou Jean : 3200 Nalup Sophie : 6500 De Reck Claire-Lise : 7000 Brousseur Philippe : 6800 Reynold Xavier : 2900 Lenz Jim : 5100 Fichier new-data-xml : Julie Blanc Jean Toufou Sophie Nalup Claire-Lise De Reck Philippe Brousseur Xavier Reynold Jim Lenz
5
L T I Laboratoire de Téléinformatique 5 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
6
L T I Laboratoire de Téléinformatique 6 Lecture de la DTD source Création d’une grammaire JavaCC d’après la description BNF du W3C Projet Exolab (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
7
L T I Laboratoire de Téléinformatique 7 Utilisation de DTD2Java Stockage d’information dans un fichier XML Structure du fichier Grammaire DTD Génération d’un parseur spécialisé Classes Java pour la lecture/écriture des fichiers XML
8
L T I Laboratoire de Téléinformatique 8 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, 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
9
L T I Laboratoire de Téléinformatique 9 Personne NomPrenom Fonctionnement interne Contenu texte Prenom Nom Age Liste de personnes Personnes <!ATTLIST Personne Salaire CDATA #REQUIRED>
10
L T I Laboratoire de Téléinformatique 10 Fonctionnement interne (2) <!ATTLIST Personne Salaire CDATA...> /** * Match an element 'Personnes'. */ Personnes matchPersonnes() : { Personnes ret = new Personnes(); } { ( { token_source.SwitchTo(CharDataSect); } ( LOOKAHEAD(2) [ ] { Personne personne; } personne = matchPersonne() { ret.addPersonne(personne); } )* [ ] [ ] [ ] ) { token_source.SwitchTo(CharDataSect); } { return ret; } }
11
L T I Laboratoire de Téléinformatique 11 Gestion des attributs /** * Match an element 'Personne'. */ Personne matchPersonne() : { Personne ret = new Personne(); } { ( LOOKAHEAD(2) ( Attribute(ret) )? )* ( { token_source.SwitchTo(CharDataSect); } // La suite du code a été coupée Utilisation de la réflexion void Attribute(Object obj) : { String attname; String value; String methodName = null; } { attname = QStringName() { token_source.SwitchTo(EqSect); } Eq() { token_source.SwitchTo(AttValueSect); } value = AttValue() { if (obj.getClass().getName().equals("Personne")) { if (attname.equals(“Salaire")) methodName = "setSalaire"; } invokeMethod(obj, methodName, value); return; }
12
L T I Laboratoire de Téléinformatique 12 Gestion des attributs (2) Fonction générique Ne tient pas compte de la liste définie dans la DTD Ne tient pas compte du type d’attribut (required, implied, …) Gestion dans les classes elles-même Intégrité pendant toute la vie de l’objet
13
L T I Laboratoire de Téléinformatique 13 Gestion des listes for (Enumeration e=vehicules.getChildElements(); e.hasMoreElements(); ) { Object obj = e.nextElement(); String className = obj.getClass().getName(); if (className.equals(" Moto ") { Moto moto = (Moto) obj; // Traitement moto } else if (className.equals(" Voiture ") { Voiture voiture = (Voiture) obj; // Traitement voiture } else if (className.equals(" Velo ") { Velo velo = (Velo) obj; // Traitement vélo } }
14
L T I Laboratoire de Téléinformatique 14 Conclusion / Questions DTDs bien structurées Peu d’imbrication dans les déclarations Java 1.4.x http://ic2.epfl.ch/~persegue/dtd2java Démonstration pas-à-pas
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.