REPRÉSENTATION DES DONNÉES. Utilisation de XML et JSON IFT287 (Thème 2 - Laboratoire)

Documents pareils
Programmation des Applications Réparties. Parsers XML DOM et SAX

Approche Contract First

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Environnements de développement (intégrés)

< _155_0>

Flux de données Lecture/Ecriture Fichiers

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Alfstore workflow framework Spécification technique

34. DOM (Document Object Model)

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

TP1 : Initiation à Java et Eclipse

XML et Java Vue Balisée en XML. Programmation avancée NFP 121. XML pourquoi faire? Structuration des données. Titre Auteur Section Paragraphe

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Travaux Pratiques : Lucène - Gestion d un index plein texte

Programme Compte bancaire (code)

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

La base de données XML exist. A. Belaïd

Une introduction à la technologie EJB (2/3)

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Programmation système I Les entrées/sorties

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Plan du cours. Historique du langage Nouveautés de Java 7

Auto-évaluation Programmation en Java

Cours 14 Les fichiers

Remote Method Invocation (RMI)

Java et les bases de données

ACTIVITÉ DE PROGRAMMATION

Cours 1: Java et les objets

Introduction à MapReduce/Hadoop et Spark

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Certificat Big Data - Master MAthématiques

Accès aux bases de données

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java Licence Professionnelle CISII,

SOAP Concepts Application à Glassfish

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

Web Tier : déploiement de servlets

1. Structure d'un programme FORTRAN 95

Développement Logiciel

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Projet gestion d'objets dupliqués

Devenez un véritable développeur web en 3 mois!

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Introduction à JDBC. Accès aux bases de données en Java

GOL502 Industries de services

Java Naming and Directory Interface

TD3: tableaux avancées, première classe et chaînes

Master d Informatique Corrigé du partiel novembre 2010

Architecture Orientée Service, JSON et API REST

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Chapitre I Notions de base et outils de travail

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

INTRODUCTION À PYRAMID Gaël Bearstech. Crédits: Blaise Laflamme

XML, PMML, SOAP. Rapport. EPITA SCIA Promo janvier Julien Lemoine Alexandre Thibault Nicolas Wiest-Million

EXTENSION D UN OUTIL DE VISUALISATION DE TRACES

Exploration des technologies web pour créer une interaction entre Mahara et les plateformes professionnelles et sociales

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Évaluation et implémentation des langages

JavaServer Pages (JSP)

Programmer en JAVA. par Tama

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

1 Lecture de fichiers

Créer et partager des fichiers

Construire des plug-ins pour SAS Management Console SAS 9.1

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Traduction des Langages : Le Compilateur Micro Java

Chapitre 2. Classes et objets

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

Catalogue des formations Edition 2015

Bases Java - Eclipse / Netbeans

IFIPS 5 / Nouvelles Architectures Logicielles Projet : Bus de web services avec «moteur» BPEL

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Chapitre VI- La validation de la composition.

INITIATION AU LANGAGE JAVA

Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.

Faculté de Génie Chaire industrielle en infrastructures de communication. La technologie XML. Wajdi Elleuch

Une introduction à Java

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Les outils actuels permettent-ils d automatiser la production de cartes? De quels outils dispose-t-on?

Le Modèle de Sécurité dans JAVA

Généralités sur le Langage Java et éléments syntaxiques.

Cours de Systèmes d Exploitation

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

INSTALLATION ET CONFIGURATION DE OPENLDAP

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Transcription:

1 REPRÉSENTATION DES DONNÉES Utilisation de XML et JSON IFT287 (Thème 2 - Laboratoire)

2 Introduction La lecture de fichier XML ou JSON peut être faite facilement grâce à des librairies Les librairies fournissent habituellement des analyseurs syntaxiques (parser) qui vérifient Si le document est bien formé Si le document est valide Respecte les schémas (ou le DTD en XML) Les analyseurs permettent d extraire des éléments du fichier pour faire du traitement sur les données

3 XML En java, le JDK fournit une librairie pour faire l analyse syntaxique d un fichier XML javax.xml.parsers La librairie contient deux analyseurs SAXP DOM

4 XML SAXP effectue une lecture séquentielle du fichier Appelle des méthodes définies par l utilisateur pour effectuer le traitement approprié sur chaque élément du fichier Balises Caractères Etc. Pratique pour les grands fichiers qui prendrait trop de place en mémoire

5 XML DOM charge tout le document en mémoire Le fichier est chargé sous forme d arbre Plus simple à utiliser que SAXP Le parcours de l arbre est plus intuitif Moins pratique pour les très gros fichiers

6 XML - SAXP La librairie repose sur trois classes SAXParserFactory SAXParser DefaultHandler

7 XML - SAXP SAXParserFactory Permet de créer des SAXParser Chaque SAXParser utilise une instance d une classe DefaultHandler pour effectuer le traitement approprié sur le fichier XML Il faut définir une classe qui hérite de la classe DefaultHandler

8 XML - SAXP SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setvalidating(true); SAXParser parser = factory.newsaxparser(); DefaultHandler handler = new MonParser(); parser.parse(new File(nomFichierXML), handler); La méthode setvalidating indique que le parser doit valider le fichier XML Donc vérifier la conformité avec un DTD ou un schéma

9 XML - SAXP DefaultHandler La classe qui hérite de DefaultHandler doit implémenter plusieurs méthodes public void startdocument() Appelée au début de la lecture du document public void enddocument() Appelée à la fin de la lecture du document

10 XML - SAXP DefaultHandler La classe qui hérite de DefaultHandler doit implémenter plusieurs méthodes public void startelement(string namespace, String lname, String qname, Attributes attrs) Appelée à la fin de la lecture d une balise de début d élément qname contient le nom de l élément (le nom de la balise) attrs contient la liste des attributs. Les attributs sont indexés à partir de 0 Les autres paramètres ne seront pas utilisés pour le cours.

11 XML - SAXP DefaultHandler La classe qui hérite de DefaultHandler doit implémenter plusieurs méthodes public void endelement(string namespace, String lname, String qname) Appelée à la fin de la lecture d une balise de fin d élément

12 XML - SAXP DefaultHandler La classe qui hérite de DefaultHandler doit implémenter plusieurs méthodes public void warning(saxparseexception e) public void error(saxparseexception e) public void fatalerror(saxparseexception e) Appelées lorsque des erreurs sont détectées dans le document

13 XML - SAXP DefaultHandler La classe Attributes fournit plusieurs méthodes pratiques public int getlength() Retourne le nombre d attributs public String getqname(int i) Retourne le nom du i ème attribut public Object getvalue(int i) public Object getvalue(string nom) Retourne la valeur du i ème attribut (ou de l attribut avec le nom spécifié)

14 XML - SAXP DefaultHandler La classe Attributes contient tous les attributs présents sur un élément Les attributs #IMPLIED qui ne sont pas présents dans l élément du fichier XML ne seront pas dans la liste Si une valeur par défaut est spécifiée pour un attribut et que l attribut n est pas présent dans l élément, l attribut sera dans la liste d attribut avec sa valeur par défaut

15 XML - DOM Le DOM permet de traduire un document XML en une représentation sous forme d arbre La racine de l arbre est un objet de type Document La racine comporte Un nœud enfant par commentaire de même niveau que l élément racine dans le fichier Un nœud enfant qui représente le type du document Un nœud pour l élément racine du document

16 XML - DOM Chaque nœud d élément contient les nœuds suivants Un nœud pour le texte entre la balise de début et le premier sousélément Un nœud pour chaque sous-élément de l élément Un nœud pour chaque texte entre les deux sous-éléments, ou entre le dernier sous-élément et la fin de l élément Cette définition est récursive pour chaque nœud d élément

17 XML - DOM Le DOM est différent du SAXParser Le SAXParser omet tout le texte qui n est pas du #PCDATA tel que défini dans le DTD Tous les caractères et les commentaires peuvent être inclus dans le DOM Il est possible d indiquer au DOM d ignorer Les nœuds de type texte qui ne contiennent que des espaces TEXT_NODE Les nœuds de type commentaire COMMENT_NODE

18 XML - DOM DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setvalidating(true); DocumentBuilder builder = factory.newdocumentbuilder(); Document document = builder.parse(new File(nomFichierXML)); DocumentBuilderFactory Utilisé pour créer un objet de type DocumentBuilder Pour ignorer les nœuds texte ou commentaires factory.setignoringelementcontentwhitespace(true); factory.setignoringcomments(true);

19 XML - DOM DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setvalidating(true); DocumentBuilder builder = factory.newdocumentbuilder(); Document document = builder.parse(new File(nomFichierXML)); DocumentBuilder Utilisé pour faire l analyse syntaxique d un fichier XML Permet de créer un Document

20 XML - DOM Document L objet Document est un arbre C est une classe enfant du type Node On navigue dans l arbre avec les méthodes suivantes public Node getfirstchild() public Node getnextsibling() public String getnodename() public String getnodevalue() public NamedNodeMap getattributes()

21 XML - DOM Document L objet Document est un arbre C est une classe enfant du type Node On navigue dans l arbre avec les méthodes suivantes public int getnodetype() Node.ATTRIBUTE_NODE Node.COMMENT_NODE Node.DOCUMENT_NODE Node.DOCUMENT_TYPE_NODE Node.ELEMENT_NODE Node.TEXT_NODE

22 XML - DOM NamedNodeMap Permet de retrouver des attributs public Node item(int i) public int getlength() public Node getnameditem(string nom) String v = node.getattributes().getnameditem("att").getnodevalue();

23 XML - DOM Element Classe enfant du type Node Permet de raccourcir l accès aux attributs Il faut valider le type du nœud avant d effectuer un cast String v = ((Element)node).getAttribute("att");

24 XML - Écriture Il existe deux façons d écrire un fichier XML à partir d un programme À la main En utilisant un DOM Il faut faire attention aux caractères interdits quand on fait l écriture manuellement

25 XML - Écriture Il est possible d écrire dans un fichier en Java FileOutputStream output = new FileOutputStream(nomFichier); PrintStream out = new PrintStream(output); out.println("<test>"); out.print("allo"); Out.println("</Test>");

26 XML - Écriture Pour écrire en utilisant un DOM, il faut utiliser les transformations du package java javax.xml.transform La gestion des entités et de la syntaxe XML est simplifiée

27 XML - Écriture FileOutputStream output = new FileOutputStream(nomFichier); PrintStream out = new PrintStream(output); TransformerFactory allspark = TransformerFactory.newInstance(); Transformer optimusprime = allspark.newtransformer(); optimusprime.setoutputproperty(outputkeys.doctype_system, dtdname); DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(out); optimusprime.transform(source, result);

28 XML - Écriture Il faut créer un Document vide et le construire DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); Document document = f.newdocumentbuilder().newdocument(); On ajoute les nœuds à l aide des méthodes de l interface Node Node e = document.createelement(nomelement); Node c = document.createcomment(textecommentaire); Node t = document.createnodetext(texte);

29 XML - Écriture Le fait de créer un nœud ne l ajoute pas à l arbre du DOM x.appendchild(e); Pour ajouter un attribut «a» de valeur «v» e.setattribute(a, v); XSLT transforme automatiquement les caractères réservés en entités

30 JSON Comme pour XML, il existe plusieurs façons de lire ou écrire des fichiers JSON Certaines solutions, comme Google GSON et Jackson peuvent être très efficaces Pour un comparatif de plusieurs librairies http://www.developer.com/lang/jscript/top-7-open-source-json-bindingproviders-available-today.html Nous utiliserons l API fourni par le JDK

31 JSON Permet de voir la mécanique sous-jacente Le but du cours est de vous apprendre ce qui se passe sous le capot Vous serez les responsables des prochaines librairies ultras efficaces de demain Mettez-vous les mains à la pâte!

32 JSON Nous utiliserons la librairie javax.jason, fournie avec Java EE 7 Le.jar est disponible sur le site web du cours Tout comme pour XML, il y a deux façons de lire un fichier JSON avec cette librairie À l aide d un stream, semblable à SAXP À l aide d un modèle objet, semblable à DOM La documentation supplémentaire est à l adresse https://jsonp.java.net/

33 JSON - Parser Utilisation d un parser qui contient une liste d événements de lecture JsonParser parser = Json.createParser(new StringReader(jsonData)); while (parser.hasnext()) { JsonParser.Event event = parser.next(); switch(event) { case START_ARRAY: } }

34 JSON - Parser On fait le traitement approprié pour chaque type d événement switch(event) { case START_ARRAY: case END_ARRAY: case START_OBJECT: case END_OBJECT: case VALUE_FALSE: case VALUE_NULL: case VALUE_TRUE: case KEY_NAME: case VALUE_STRING: case VALUE_NUMBER: }

35 JSON - Parser On peut récupérer la valeur du champ courant pour les événements de type KEY_NAME VALUE_STRING VALUE_NUMBER parser.getstring() parser.isintegralnumber() parser.getint() parser.getlong() parser.getbigdecimal()

36 JSON - Generator On peut aussi écrire des données dans un fichier JSON On utilise un JsonGenerator Le JsonGenerator permet de créer les éléments d un fichier JSON

37 JSON - Generator FileWriter writer = new FileWriter("test.json"); JsonGenerator gen = Json.createGenerator(writer); gen.writestartobject().write("firstname", "Duke").write("lastName", "Java").write("age", 18).write("streetAddress", "100 Internet Dr").write("city", "JavaTown").write("state", "JA").write("postalCode", "12345").writeStartArray("phoneNumbers").writeStartObject().write("type", "mobile").write("number", "111-111-1111").writeEnd().writeStartObject().write("type", "home").write("number", "222-222-2222").writeEnd().writeEnd().writeEnd(); gen.close();

38 JSON - Generator Il est possible, tout comme XML, d écrire le fichier de manière lisible Map<String, Object> config = new HashMap<String, Object>(1); config.put(jsongenerator.pretty_printing, true); StringWriter w = new StringWriter(); JsonGeneratorFactory f = Json.createGeneratorFactory(config); JsonGenerator jsongenerator = f.creategenerator(w);

39 JSON Object Model Il est possible de lire un fichier JSON comme un arbre Il faut utiliser les classes qui héritent de JsonStructure JsonReader reader = Json.createReader(new FileReader("jsondata.txt")); JsonStructure jsonst = reader.read(); La structure retournée est l élément racine du fichier JSON On se promène à l intérieur en fonction de l objet

40 JSON Object Model Toutes les classes qui représentent un élément d un fichier JSON héritent de la classe JsonValue JsonObject JsonArray JsonString JsonNumber

41 JSON Object Model JsonObject keyset() Retourne l ensemble des clés get(string name) Retourne la valeur associée à une clé JsonArray Peut être utilisé directement dans une boucle for each JsonString getstring() Retourne la valeur de la string JsonNumber intvalue() Retourne la valeur en entier

42 JSON Object Model Il est aussi possible de créer une représentation en JSON à partir des données Il faut utiliser les objets JsonObjectBuilder JsonArrayBuilder Ainsi que les méthodes builder de l objet Json

43 JSON Object Model JsonObject model = Json.createObjectBuilder().add("firstName", "Duke").add("lastName", "Java").add("age", 18).add("streetAddress", "100 Internet Dr").add("city", "JavaTown").add("state", "JA").add("postalCode", "12345").add("phoneNumbers", Json.createArrayBuilder().add(Json.createObjectBuilder().add("type", "mobile").add("number", "111-111-1111")).add(Json.createObjectBuilder().add("type", "home").add("number", "222-222-2222"))).build();

44 JSON Object Model Il est possible d écrire un ObjectModel dans un fichier StringWriter stwriter = new StringWriter(); Map<String, Object> config = new HashMap<String, Object>(1); config.put(jsongenerator.pretty_printing, true); JsonWriterFactory f = Json.createWriterFactory(config); JsonWriter jsonwriter = f.createwriter(stwriter); jsonwriter.writeobject(model); jsonwriter.close(); String jsondata = stwriter.tostring(); System.out.println(jsonData);

45 JSON La documentation plus complète se trouve sur le site de Java Vous pouvez trouvez des exemples d utilisation ici http://docs.oracle.com/javaee/7/tutorial/jsonp.htm