XML & Java XML avec Java • Objec.fs – Traitement des fichiers XML en Java – U.li
XML & Java XML avec Java • Objec.fs – Traitement des fichiers XML en Java – U.lisa.on avec DOM – U.lisa.on avec SAX – U.lisa.on de XPath Contenu • Introduc.on • DOM • SAX • XPath Introduc.on • XML (eXtensible Markup Language) – Standard W3C pour représenter des données dans des documents balisés – Défini.on structurée de l’informa.on (syntaxe + séman.que) – Représenta.on arborescente – Possibilité de définir une grammaire (DTD) Introduc.on • JAXP (Java API for XML Processing) Capacité à lire et valider les documents XML, formé de 3 composants : – DOM (Document Object Model) à Arbre – SAX (Simple API for XML) à Evénement – StAX (Streaming API for XML) à entre DOM et SAX Introduc.on • StAX (Streaming API for XML) – Peu gourmand en mémoire – Accès séquen.el aux données mais contrairement à SAX on indique quel est le prochain élément à traiter – Ecriture de fichiers XML – StAX ne sera pas traité dans ce cours DOM • DOM (Document Object Model) – API permeWant d’accéder au contenu d’un document XML sous la forme d’une structure d’arbre – Chargement complet du document XML – Réservé à de pe.ts fichiers – Lecture linéaire DOM • DOM et Java – Se référer aux package org.w3c.dom – Le parser est issu de javax.xml.parsers.DocumentBuilder – Obtenu depuis javax.xml.parsers.DocumentBuilderFactory DOM • Exemple de document XML Exemple de travail 1 <?xml version="1.0" encoding="UTF-8"?> 2 <persons> 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 <person id="1"> <first-name>Donald</first-name> <last-name>Duck</last-name> <date-of-birth>01-01-1970</date-of-birth> <salary>1000.0</salary> </person> <person id="2"> <first-name>Picsou</first-name> <last-name>Duck</last-name> <date-of-birth>02-01-1960</date-of-birth> <salary>120000.0</salary> </person> <person id="3"> <first-name>Mickey</first-name> <last-name>Mouse</last-name> <date-of-birth>01-01-1980</date-of-birth> <salary>3000.20</salary> </person> 21 </persons> DOM • Créa.on du parser D´ eveloppement Java - XML DOM DOM cr´ eation du parser Exemple 1 // ouverture d’un document XML sous DOM 2 File fXmlFile = new File(fileName); 3 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 4 // use DTD validation 5 dbFactory.setValidating(true); 6 7 DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 8 // report Errors if DTD validation is On 9 // note: ErrorHandler must be defined 10 dBuilder.setErrorHandler(new ErrorHandler()); 11 12 Document doc = dBuilder.parse(fXmlFile); 13 doc.getDocumentElement().normalize(); DOM • Lecture <tag>valeur</tag> => System.out.println(nNode.getTextContent().trim()) D´ eveloppement Java - XML DOM DOM lecture <tag>value</tag> lecture <tag>value</tag> 1 NodeList nList; 2 // Obtain all nodes for last name 3 nList = doc.getElementsByTagName("last-name"); 4 5 // treat each node 6 for (int i = 0; i < nList.getLength(); i++) { 7 Node nNode = nList.item(i); 8 if (nNode.getNodeType() == Node.ELEMENT NODE) { 9 nNode.getTextContent().trim()); 10 } 11 } 12 13 13/ 48 DOM • Lecture <tag aWr=“value” /> AWribut inexistant : chaîne vide ! D´ eveloppement Java - XML DOM DOM lecture <tag attr="value" /> lecture <tag attr="value" /> 1 NodeList nList; 2 // get all nodes person 3 nList = doc.getElementsByTagName("person"); 4 // treat each node 5 for (int i = 0; i < nList.getLength(); i++) { 6 Node nNode = nList.item(i); 7 if (nNode.getNodeType() == Node.ELEMENT NODE) { 8 Element eElement = (Element) nNode; 9 // retrieve attribute id 10 String id=eElement.getAttribute("id").trim(); 11 // note : attribute nationality is not defined in persons.xml 12 // so getAttribute will return an empty String 13 String nationality=eElement.getAttribute("nationality").trim(); 14 if (nationality.isEmpty()) { 15 nationality="french"; 16 } 17 } 18 } attribut inexistant : chaˆ ıne vide ! SAX • SAX (Simple API for XML) – API permeWant d’accéder au contenu d’un document XML de manière événemen.elle – Chargement par.el du document – Réservé à de gros fichiers – Lecture non linéaire SAX • SAX Handler – Définir une classe SAXReader qui hérite de org.xml.sax.helpers.DefaultHandler – Implémenter les méthodes de l’interface ContentHandler SAX • Méthodes de DefaultHandler Ce sont celles de ContentHandler, pour les principales : – startDocument – startElement – endElement – characters – endDocument SAX • Méthode characters Elle permet de lire une chaîne de caractères à l’intérieur d’une balise : <tag>value</tag> Ici on récupèrera : value SAX • Méthode startElement Elle permet de traiter les aWributs : <tag attr=“vattr”>. . .</tag> En vérifiant qu’elle est la valeur de la balise tag SAX • Méthode endElement Elle permet de traiter : <tag>value</tag> En vérifiant qu’elle est la valeur de la balise tag SAX • Lecture <tag attr=“vattr”>value</tag> Il faut combiner les deux méthodes : – startElement pour lire les aWributs et créer une structure de données – Puis endElement pour lire value et l’affecter à la structure de données SAX • Créa.on parser D´ eveloppement Java - XML SAX SAX cr´ eation parser Exemple 1 import javax.xml.parsers.*; 2 import org.xml.sax.*; 3 import org.xml.sax.helpers.*; 4 5 public class SAXReader extends DefaultHandler { 6 7 protected String text; 8 9 public SAXReader() throws Exception { 10 super(); 11 } 12 13 public void read(String fileName) { 14 try { 15 XMLReader parser = XMLReaderFactory.createXMLReader(); 16 parser.setContentHandler(this); 17 parser.setFeature("http://xml.org/sax/features/validation", true); 18 parser.parse(fileName); 19 } catch (Exception e) { 20 System.err.println(e.getMessage()); 21 } 22 } 23 24 public void characters(char[] ch, int start, int length) 25 throws SAXException { 26 text = new String(ch, start, length); 27 } 28 23/ 48 SAX • Lecture <tag>value</tag> D´ eveloppement Java - XML SAX SAX lecture lecture <tag>value</tag> 1 // read <tag>value</tag> 2 public void endElement(String uri, String localName, String qName) 3 throws SAXException { 4 5 if (localName.equals("tag")) { 6 7 String value = text.trim(); 8 9 } 10 } 11 24/ 48 SAX • Lecture <tag aWr=“value” /> D´ eveloppement Java - XML SAX SAX lecture lecture <tag attr="value" /> 1 // read <tag attr=”vattr” /> 2 public void startElement(String uri, String localName, String qName, 3 Attributes atts) throws SAXException { 4 5 if (localName.equals("tag")) { 6 7 String vattr = atts.getValue("attr").trim(); 8 9 // note : be careful because atts.getValue will return null 10 // if attribute is not present 11 if (vattr==null) { 12 vattr=""; 13 } 14 } 15 16 } attribut inexistant : null ! 25/ 48 XPath • XPath (XML Path Language) – Il est à XML ce que SQL est aux SGBD rela.onnels – Langage de sélec.on de balises / aWributs – Packages Java javax.xml.xpath.Xpath javax.xml.xpath.XPathFactory ou javax.xml.xpath.* XPath • Sans Xpath – Avec DOM, u.liser : • getElementByTagName • getElementByid – Avec SAX • startElement • endElement XPath • XPath et DOM Méthodes : getFirstChild, getNodeValue D´ eveloppement Java - XML XPath XPath et DOM Avec DOM 1 // doc is a DOM Document 2 XPathFactory pathFactory=XPathFactory.newInstance(); 3 XPath xpath = pathFactory.newXPath(); 4 XPathExpression expr = xpath.compile("//person"); 5 6 // DOM specific 7 NodeList nList = (NodeList)expr.evaluate(doc,XPathConstants.NODESET); 8 9 for (int i = 0; i < nList.getLength(); i++) { 10 Node nNode = nList.item(i); 11 if (nNode.getNodeType() == Node.ELEMENT NODE) { 12 // your code here 13 } 14 } 37/ 48 XPath • XPath et SAX D´ eveloppement Java - XML XPath XPath et SAX Avec SAX 1 // fileName is a String 2 File file=new File(fileName); 3 InputSource source = new InputSource(new FileInputStream(file)); 4 XPathFactory fabrique = XPathFactory.newInstance(); 5 XPath xpath = fabrique.newXPath(); 6 XPathExpression expr = xpath.compile("//person"); 7 8 // SAX specific 9 NodeList nList = (NodeList)expr.evaluate(source, XPathConstants.NODESET); 10 11 for (int i = 0; i < nList.getLength(); i++) { 12 Node nNode = nList.item(i); 13 if (nNode.getNodeType() == Node.ELEMENT NODE) { 14 // your code here 15 } 16 } 38/ 48 XPath • XPathExpression.evaluate(source,returnType) Evaluer l’expression XPath en fonc.on du contexte – source : InputSource – returnType : QName, un parmi : • NODE, NODESET • NUMBER, BOOLEAN, STRING Sécurité pour XML Abdessamad Imine Université de Lorraine & INRIA-LORIA Grand-Est Abdessamad.Imine@loria.fr Sommaire • Introduction • Signature de XML • Attaques contre XML 2 3 XML et BD • Intégration des données et méta-données • Standard d’échange de données universel • Les BD ne peuvent rester indifférentes – nécessité de stocker les documents XML – nécessité de pouvoir interroger ces documents – évolution ou révolution ? • Des efforts se font pour définir – un modèle de données – langage d'interrogation 4 XML et BD (2) • SGBD Natif XML – conçu pour XML, – stockant les documents en entiers sans les décomposer en éléments, – utilisant des techniques d'indexation d'arbres spécifiques. Forêts d'arbres Stockage XML Recherche XML Requête XML XML Index Noyau SGBD Concurrence, Fiabilité 5 XML et Bureautique • Stockage – Format des fichiers : XML devient possible – Compatibilité avec l'existant • Feuilles de styles – Modèle d'import et d'export • Des jargons spéciaux – Word ML, SpreadsheetML, DataML – Open Document 1.0 de l’Oasis 6 XML et Bureautique (2) Format XML Open- Document Import XSL Modèle Format XML Open- Document Modèle Export XSL 7 Principes de la sécurité • Identification/Authentification Qui êtes-vous, pouvez-vous le prouver ? • Autorisation Pouvez-vous faire cette opération sur cet objet ? • Intégrité Les données sont protégées contre toute modification (accidentelle ou malveillante) • Confidentialité Les données restent privées et elles ne peuvent pas être vues par des utilisateurs non autorisés 8 Principes de la sécurité (2) • Audit un audit et une journalisation sont essentiels pour résoudre les problèmes uploads/s1/ coursappbd-et-xml.pdf
Documents similaires
-
30
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Apv 19, 2021
- Catégorie Administration
- Langue French
- Taille du fichier 1.3996MB