Simple API for XML Processing (SAX) Document Object Model (DOM) Mario Arrigoni Neri.

Slides:



Advertisements
Presentazioni simili
1 Le s-espressioni. 2 Un nuovo esempio completo: le s-espressioni Sexpr 4 alberi binari (possibilmente vuoti) che hanno sulle foglie atomi (stringhe)
Advertisements

1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
Open Document Format for Office Applications Organization for the Advancement of Structured Information Standards Sergio Capone ITP.
Interfacce Java.
SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re Anno Accademico
SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re Anno Accademico
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
SAX & DOM Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis
Capitolo 2 Nozioni fondamentali su Java Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill.
Capitolo 7 Programmazione con metodi e classi Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004.
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
Alcune Classi Standard Object, Vettori. Esercizio dellultima volta Superclasse Persona Sottoclasse Libro.
EJB Enterprise Java Beans B. Pernici. Approccio Java.
Domenico Presenza Stato implementazione prototipo Engineering Milano – 20 Luglio 2005.
Pierluigi Plebani - Politecnico di Milano MAIS Registry URBE (Uddi Registry By Example) WP2 Roma - 25 Novembre 2005.
Layouts and Graphics. component - container - layout Un Container contiene [0 o +] Components Il Layout specifica come i Components sono disposti nel.
Model – View - Controller
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti Java Threads & Sincronizzazione.
Modificatori: static Variabili e metodi associati ad una Classe anziche ad un Oggetto sono definiti static. Le variabili statiche servono come singola.
Richiami di Java Multithreading. Threads (subclassing) public class A { public void a_method { C t = new C(); //C t = new C(String name); t.start(); …
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
HDM Information Design notation v.4. HDM Information Design.
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
JAVA C import java.util.*; #include <stdio.h>
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
Università La Sapienza Ingegneria del Software I 1 Ingegneria del software I Seminario 2: Microsoft.NET.
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
© CEFRIEL Cenni su XML in Java Docente: Gabriele Lombardi
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
FONDAMENTI DI INFORMATICA III WfMC-1. FONDAMENTI DI INFORMATICA III WfMC-2 WFMC Cose WfMC Workflow Management Coalition (WfMC), Brussels, è unorganizzazione.
Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.
Programmazione distribuita in Java
Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.
Componenti dell’architettura Oracle
Ricerca di una chiave: Search(x, k) if x == nil or k == x.key return x
realizzazione app per Google Android OS
Università degli studi di Modena e Reggio Emilia Facoltà di Ingegneria di Modena Corso di Laurea Specialistica in Ingegneria Informatica Analisi e valutazione.
22 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ore 10:00.
Un esempio: Registrazione e lettura di dati in un file
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
PROGETTO DI STRUMENTI PER LA CONFIGURAZIONE DI APPLICAZIONI JAVA ENTERPRISE Anno Accademico 2006 / 2007 Sessione III FACOLTÀ DI INGEGNERIA CORSO DI LAUREA.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
Scoprirete che su Office non si può solo contare ma anche sviluppare.
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
/ Elementi di C++ Introduzione a ROOT , Laboratorio Informatico ROOT warm up , Laboratorio Informatico Introduzione a.
Multiset. Progettare (specifica con identificazione delle eventuali astrazioni necessarie, incluse eccezioni, e implementazione) del tipo di dato Multiset,
VB.NET Sviluppo Applicazioni Desktop
Visual Studio Tools for Office: Developer Solutions Platform Fulvio Giaccari MCSD.NET / MCT Responsabile Usergroup ShareOffice Blog:
Test con JUnit. zJUnit è un ambiente di test per programmi Java ySviluppato da Kent Beck É possibile usare JUnit allinterno di Eclipse per eseguire i.
1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Corso di Web Services A A Domenico Rosaci Patterns di E-Business D. RosaciPatterns per l'e-Business.
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
Collection & Generics in Java
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
Nuove funzionalitA’ e caratteristiche del linguaggio
lun mar mer gio ven SAB DOM FEBBRAIO.
1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.
Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.
Java World Introduzione.
Corso Java Introduzione.
Java Introduzione.
Transcript della presentazione:

Simple API for XML Processing (SAX) Document Object Model (DOM) Mario Arrigoni Neri

2 Il parser Il parser si occupa di: – Recuperare il documento XML – Caricare i dati in memoria – Presentare allapplicazione uninterfaccia di alto livello – (opzionalmente) fornire servizi di validazione – (opzionalmente) fornire servizi di ricerca XMLDTD XML parser Applicazione XSD

3 Approccio ad eventi Il parser scandisce lintero file Per ogni elemento informa lapplicazione tramite la tecnica del Callback Mario Arrigoni Neri Marco Colombetti... XML Parser Applicazione libroautore nome … t

4 Approccio del modello Il parser costruisce una strutura ad albero che rappresenta il documento Fornisce allapplicazione delle API per navigare lalbero Mario Arrigoni Neri Marco Colombetti... XML Parser Applicazione librotitolo=… autore nome cognome attr

5 Confronto tra gli approcci richiede una occupazione di memoria per tutto il documento Interfaccia troppo semplice = si richiede più codice nellapplicazione Nessun supporto per operare sul documento Contro fornisce allapplicazione un modello ricco del documento mantiene una rappresentazione completa e durevole in memoria (nodifiche?) E molto leggero Il programmatore può implementare solo le funzionalità necessarie Pro Approccio del modelloApproccio ad eventi

6 JAXP Java API for XML Processing (JAXP) Supporto standard di SUN per lelaborazione di XML Propone due standard per le due impostazioni: – SAX (Simple API for XML) ad eventi – DOM (Document Object Model) basato su una rappresentazione astratta in memoria

7 SAX Simple API for XML Nasce come API alternativa a DOM per lambiente Java Successivamente adottato anche al di fuori del mondo Java (Microsoft) Basa il suo sistema di parsing sugli eventi – Inizio di un documento – Apertura e chiusura di un elemento – Apertura e chiusura di un blocco CDATA – Ingresso ed uscita dallo scope di un namespace – Caratteri, Pocess Instruction – Fine del documento

8 Architettura SAX Applicazione Listener Handler > Parser Registra Listener (1) Inizia Scansione (2) XML Iniziodoc, inizioelem,.. (3)

9 LHandler di SAX – 1 Lapplicazione deve implementare linterfaccia org.xml.sax.helpers.ContentHandler Interface ContentHandler { void setDocumentLocator(Locator locator); void startDocument(); void startElement(String namespaceURI,String localName, String qName, Attributes atts); void startPrefixMapping(String prefix, String uri); void characters(char[] ch, int start, int length); void endDocument(); void endElement(String namespaceURI,String localName, String qName); void endPrefixMapping(String prefix); void ignorableWhitespace(char[] ch, int start, int length); void processingInstruction(String target, String data); void skippedEntity(String name); }

10 LHandler di SAX – 2 public class MyHandler extends DefaultHandler { public void startElement(String namespaceURI, String localName, String qualifiedName, Attributes att) throws SAXException { System.out.println("startElement: " + qualifiedName); } public void characters(char ch[], int start, int length) throws SAXException { System.out.println("characters " + start + " to " + (start + length - 1) + ": " + new String(ch, start, length)); } public void endElement(String namespaceURI, String localName, String qualifiedName) throws SAXException { System.out.println(endElement: /" + qualifiedName); } La classe DefaultHandler implementa linterfaccia permettendo allapplicazione di ridefinire (override) solo i metodi desiderati

11 Utilizzo dellhandler public class Ex1 { public static void main(String args[]) throws Exception { // create a parser SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser saxParser = spf.newSAXParser(); XMLReader parser = saxParser.getXMLReader(); // create a handler ContentHandler handler = new MyHandler(); // assign the handler to the parser parser.setContentHandler(handler); // parse the document parser.parse(test.xml"); } Il client utilizza la classe di Factory per recuperare il parser Al parser viene chiesto di parsare il file come un processo autonomo Hello World! startElement: display characters 32 to 31: characters 0 to 0: characters 34 to 49: Hello World! characters 0 to 0: endElement: /display

12 DOM E unAPI (Application Programming Interface) per documenti XML Definisce una modalità di rappresentazione di doumenti XML Utilizza strutture dati accessibili dallapplicazione Definisce le operazioni necessarie per operare sulla rappresentazione intermedia – Parsing di un file = caricamento della struttura – Costruzione di un nuovo documento – Browsing e navigazione – Aggiungere, eliminare, modificare e spostare le componenti Specifica le operazioni indipendentemente dal linguaggio, esistono implementazioni di DOM in linguaggi differenti: – Linguaggi server-side : java, C++, C# – Linguaggi di script: VB-Script, JavaScript

13 I livelli del DOM LIVELLO 0 : – Funzionalità originali di Netscape / IE – NON è una raccomandazione W3C LIVELLO 1 – Settembre 2000: – Oggetti fondamentali per il modello DOM – Non completamente compatibile con il livello 0 LIVELLO 2 – Novembre 2000: – Fogli di stile – Namespace e validazione – Incorpora un modello ad eventi per il controllo dei processi LIVELLO 3 - Working Draft Febbraio 2004 – Validazione on-line delle modifiche – …

14 La struttura di DOM DOM vede i documenti come una struttura gerarchica ad albero, composta da oggetti di tipo Node – Ogni nodo può avere uno o più figli – In realtà in generale si lavora con una foresta di alberi DOM definisce solo la vista logica e non dice nulla sulleffettiva struttura in memoria Come modello ad oggetti si specificano: – Gli oggetti utilizzati per rappresentare il documento ed i suoi costituenti – Le interfacce pubblicate dagli oggetti per poter essere utilizzati dal livello applicativo – Le relazioni tra gli oggetti e tra le interfacce – La semantica associata ad ogni classe

15 Esempio di DOM The &projectName; project ]]> is important. + ELEMENT: sentence + TEXT: The + ENTITY REF: projectName + COMMENT: The latest name we're using + TEXT: Eagle + CDATA: project + TEXT: is + PI: editor: red + ELEMENT: bold + TEXT: important + PI: editor: normal

16 Caricamento di un DOM import org.w3c.dom.*; import javax.xml.parsers.*; import org.xml.sax.*; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("libro.xml"); Definizione DOM standard Implementazione di JAXP DOM usa SAX Il DOM di JAXP è definito nel package org.w3c.dom – Fornisce uninterfaccia standard che si appoggia su implementazioni differenti Sono disponibili implementazioni differenti (SUN, Apache, Oracle) Limplementazione di SUN è in javax.xml.parsers

17 Navigazione Element root = doc.getDocumentElement(); System.out.println(root.getNodeName()); Estrazione del nodo radice e stampa del nome del nodo Nodi figli Attributi NodeList children = root.getChildNodes(); for (int i = 0; i < children.getLength(); i++) System.out.println(children.item(i).getNodeName); NamedNodeMap map = root.getAttributes(); for (int i = 0; i < map.getLength(); i++) System.out.println(map.item(i).getNodeName());

18 Tipizzazione – 1 n.getNodeType() == n.ELEMENT_NODE Tipizzazione tramite attributi di descrizione null Nome della NOTATIONNotation null #document-fragmentDocumentFragment null Nome del tipo di documentoDocumentType null #documentDocument nullTesto associato#commentComment nullContenuto escluso lattributo targetValore dellattributo targetProcessingInstruction null Nome dellentitàEntity null Nome dellentitàEntityReference nullTesto associato#cdata-sectionCDATASection nullTesto associato#textText nullValore dellattributoNome dellattributoAttr NamedNodeMapnullNome del tagElement attributesnodeValuenodeNameTipo di nodo

19 JDOM definisce una gerarchia di classi che corrisponde alla tassonomia dei nodi XML (Element, Attribute, ecc..) E possibile combinare: – Polimorfismo: le librerie ritornano unistanza della sottoclasse corretta, anche se viene eseguito un casting dinamico al tipo del prototipo – Reflection: il client può recuperare il tipo dinamico dellistanza Le due soluzioni si combinano. Grazie alla gerarchia ogni classe assegna lattributo nel costruttore Tipizzazione – 2 If (n instanceof Element) { … }

20 Per default DOM è non validante Una volta abilitata la validazione, questa avviene tramite il DTD Tuttavia è possibile utilizzare XSD associando il corrispettivo namespace alla proprietà In maniera analoga è possibile abilitare la gestione dei namespace Validazione e namespace factory.setValidating(true); factory.setAttribute(" " factory.setNamespaceAware(true);

21 Eredita la gestione degli errori di SAX lapplicazione si registra come listener per li eventi che segnalano un errore Tre tipi di errori: fatali, errori semplici, warning Error handling class Handler implements ErrorHandler { public void fatalError(SAXParseException ex) throws SAXException { ex.printStackTrace(); } public void error(SAXParseException ex) throws SAXParseException { ex.printStackTrace(); throw ex; } public void warning(SAXParseException err) throws SAXParseException { System.out.println("** Warning" + err.getLineNumber() + err.getMessage()); } builder.setErrorHandler(new Handler());

22 Browsing e stampa public static void print(Node n, String spaces) { if (n == null) return; if (n instanceof Element) { String s = spaces + n.getNodeName() + " ("; NamedNodeMap map = n.getAttributes(); if (map != null) for (int i = 0; i < map.getLength(); i++) s += map.item(i).getNodeName() + "=" + map.item(i).getNodeValue(); s += ")"; System.out.println(s); } else if (n instanceof Text) System.out.println(spaces + n.getNodeValue()); NodeList children = n.getChildNodes(); for (int i = 0; i < children.getLength(); i++) print(children.item(i), spaces + – ); } Element root = doc.getDocumentElement(); print(root, );

23 Esempio – 1 <librotitolo="Introduzione ad XML" xmlns:xsi=" xmlns=" xsi:schemaLocation=" Mario Arrigoni Neri Marco Colombetti... XML in ingresso

24 Esempio – 2 libro ( titolo=Introduzione ad XML xmlns= xmlns:xsi= xsi:schemaLocation= libro3b.xsd) - autore () - - nome () Mario - - cognome () Arrigoni Neri - autore () - - nome () Marco - - cognome () Colombetti - capitolo ( titolo=CAP 1. XML e DTD) Output

25 Modifica dellalbero Element root = doc.getDocumentElement(); Element cap = doc.createElement("capitolo"); cap.setAttribute("titolo", "Introduzione"); cap.appendChild(doc.createTextNode("... testo...")); Node capitolo = doc.getElementsByTagNameNS(" "capitolo").item(0); root.insertBefore(cap, capitolo); doc.normalize(); DOM permette di inserire nuovi elementi nellalbero Creazione del nodo Creazione dellattributo Ricerca del primo capitolo presente Inserimento normalizzazione. Es: unisce nodi di testo consecutivi