La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re Anno Accademico 2006-07.

Presentazioni simili


Presentazione sul tema: "SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re Anno Accademico 2006-07."— Transcript della presentazione:

1 SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re Anno Accademico

2 Laboratorio Informatico in Database Turistici Barbara Re2 Il parser Il parser si occupa d 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 Laboratorio Informatico in Database Turistici Barbara Re3 Approccio ad eventi Il parser scandisce lintero file Per ogni elemento informa lapplicazione tramite la tecnica del callback Francesco De Angelis Alberto Polzonetti... XML Parser Applicazione libroautore nome … t

4 Laboratorio Informatico in Database Turistici Barbara Re4 Approccio del modello Il parser costruisce una struttura ad albero che rappresenta il documento Fornisce allapplicazione delle API per navigare lalbero Francesco De Angelis Alberto Polzonetti... XML Parser Applicazione librotitolo=… autore nome cognome attr

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

6 Laboratorio Informatico in Database Turistici Barbara Re6 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 Laboratorio Informatico in Database Turistici Barbara Re7 Anche se si ritenesse DOM come la scelta migliore per la propria applicazione Java, capire SAX è importante per vari motivi Il sistema di gestione degli errori del DOM è ereditato da SAX Essendo SAX la prima API XML per Java, resta alla base anche dellimplementazione DOM Le librerie Java usano SAX per leggere un file XML e creare il DOM corrispondente! SAX e DOM

8 Laboratorio Informatico in Database Turistici Barbara Re8 Simple API for XML

9 Laboratorio Informatico in Database Turistici Barbara Re9 Introduzione a SAX SAX, o Simple API for XML, in origine è stata sviluppata come API per accedere ad XML con Java. La homepage del progetto SAX (SourceForge) è Basa il suo sistema di parsing sugli eventi Inizio di un documento Apertura e chiusura di un elemento Apertura e chiusura di un blocco caratteri Ingresso ed uscita dallo scope di un namespace Caratteri, Process Instruction Fine del documento

10 Laboratorio Informatico in Database Turistici Barbara Re10 Utilità e Limiti di SAX Il parser SAX non costruisce documenti XML, né conserva alcuna struttura in memoria alla fine del parsing. Se il programmatore vuole operare sul documento letto, dovrà scrivere manualmente tutto il codice, basandosi sui dati passati con gli eventi SAX. In generale SAX necessita di molto più codice di DOM, ma è molto più leggero. Il programmatore può implementare solo quello che è strettamente utile, e non è necessario allocare il documento in memoria.

11 Laboratorio Informatico in Database Turistici Barbara Re11 Gestire gli Eventi SAX Per ricevere le notifiche dal parser SAX, il codice deve registrare nel parser una classe org.xml.sax.DefaultHandler che implementa linterfaccia org.xml.sax.ContentHandler I vari metodi di questa interfaccia ricevono tutte le informazioni necessarie per trattare gli eventi. Ad esempio, il metodo startElement riceve il nome dellelemento e del suo namespace, nonché la lista degli attributi associati.

12 Laboratorio Informatico in Database Turistici Barbara Re12 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); } Lhandler di SAX

13 Laboratorio Informatico in Database Turistici Barbara Re13 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 Lhandler di SAX

14 Laboratorio Informatico in Database Turistici Barbara Re14 public class SimpleSax { public static void main(String[] args) { SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); SAXParser sxp; sxp = factory.newSAXParser(); DefaultHandler handler = new SimpleHandler(); sxp.parse(new File("xml/articolo.xml").getAbsolutePath(),handler); } Il client utilizza la classe di Factory per recuperare il parser Al parser viene chiesto di parsare il file come un processo autonomo Utilizzo dellhandler SAX

15 Laboratorio Informatico in Database Turistici Barbara Re15 Gestire gli Errori SAX Gli errori generati dal parser SAX sono incapsulati in eccezioni che però non vengono mai sollevate. Invece, le eccezioni vengono passate a un oggetto con interfaccia ErrorHandler registrato nel parser. Se nessun oggetto di questo tipo viene specificato dal programmatore, gli errori di parsing non vengono segnalati! Anche il DOM usa questo modello di errore!

16 Laboratorio Informatico in Database Turistici Barbara Re16 ErrorHandler Interface ErrorHandler { void error(SAXParseException exception) void fatalError(SAXParseException exception) void warning(SAXParseException exception) } Class SAXParseException { int getColumnNumber() int getLineNumber() String getPublicId() String getSystemId() } üLa classe org.xml.sax.helpers.DefaultHandler fornisce una implementazione di default per ErrorHandler e altre interfacce utili per SAX üE possibile estendere questa classe per implementare più facilmente il proprio ErrorHandler

17 Laboratorio Informatico in Database Turistici Barbara Re17 SAX con JAXP import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; import org.xml.sax.helpers.DefaultHandler; SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); try { SAXParser sxp = factory.newSAXParser(); } catch (javax.xml.parsers.ParserConfigurationException) { } DefaultHandler handler = new DefaultHandler(); try { sxp.parse(filename,handler); } catch (java.io.IOException ioe) { } catch (org.xml.sax.SAXParseException spe) { } catch (org.xml.sax.SAXException se) { }

18 Laboratorio Informatico in Database Turistici Barbara Re18 SAX con Xerces import org.apache.xerces.parsers.SAXParser; import org.xml.sax.helpers.DefaultHandler; SAXParser sxp = new SAXParser(); try { sxp.setFeature( "http://xml.org/sax/features/validation", true ); } catch (org.xml.sax.SAXNotRecognizedException ex ) { } catch (org.xml.sax.SAXNotSupportedException ex ) { } DefaultHandler handler = new DefaultHandler(); sxp.setContentHandler(handler); sxp.setErrorHandler(handler); try { sxp.parse(filename); } catch (java.io.IOException ioe) { } catch (org.xml.sax.SAXParseException spe) { } catch (org.xml.sax.SAXException se) { }

19 Laboratorio Informatico in Database Turistici Barbara Re19 Simple API for XML

20 Laboratorio Informatico in Database Turistici Barbara Re20 Introduzione a SAX SAX, o Simple API for XML, in origine è stata sviluppata come API per accedere ad XML con Java. La homepage del progetto SAX (SourceForge) è Basa il suo sistema di parsing sugli eventi Inizio di un documento Apertura e chiusura di un elemento Apertura e chiusura di un blocco caratteri Ingresso ed uscita dallo scope di un namespace Caratteri, Process Instruction Fine del documento

21 Laboratorio Informatico in Database Turistici Barbara Re21 Utilità e Limiti di SAX Il parser SAX non costruisce documenti XML, né conserva alcuna struttura in memoria alla fine del parsing. Se il programmatore vuole operare sul documento letto, dovrà scrivere manualmente tutto il codice, basandosi sui dati passati con gli eventi SAX. In generale SAX necessita di molto più codice di DOM, ma è molto più leggero. Il programmatore può implementare solo quello che è strettamente utile, e non è necessario allocare il documento in memoria.

22 Laboratorio Informatico in Database Turistici Barbara Re22 Gestire gli Eventi SAX Per ricevere le notifiche dal parser SAX, il codice deve registrare nel parser una classe org.xml.sax.DefaultHandler che implementa linterfaccia org.xml.sax.ContentHandler I vari metodi di questa interfaccia ricevono tutte le informazioni necessarie per trattare gli eventi. Ad esempio, il metodo startElement riceve il nome dellelemento e del suo namespace, nonché la lista degli attributi associati.

23 Laboratorio Informatico in Database Turistici Barbara Re23 Eventi SetDocumentLocator e chiamato quando viene avviato il processo di parsing startDocument è chiamato quando il parser incontra linizio di un documento endDocument è chiamato quando il parser incontra la fine di un documento startElement è chiamato quando il parser incontra il tag iniziale di un Elemento endElement è chiamato quando il parser incontra il tag finale di un Elemento Character è chiamato quando il parser incontra dei testi

24 Laboratorio Informatico in Database Turistici Barbara Re24 public class SimpleSax { public static void main(String[] args) { SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); SAXParser sxp; sxp = factory.newSAXParser(); DefaultHandler handler = new SimpleHandler(); sxp.parse(new File("xml/articolo.xml").getAbsolutePath(),handler); } Il client utilizza la classe di Factory per recuperare il parser Al parser viene chiesto di parsare il file come un processo autonomo Utilizzo dellhandler SAX

25 Laboratorio Informatico in Database Turistici Barbara Re25 Gestire gli Errori SAX Gli errori generati dal parser SAX sono incapsulati in eccezioni che però non vengono mai sollevate. Invece, le eccezioni vengono passate a un oggetto con interfaccia ErrorHandler registrato nel parser. Se nessun oggetto di questo tipo viene specificato dal programmatore, gli errori di parsing non vengono segnalati! Anche il DOM usa questo modello di errore!

26 Laboratorio Informatico in Database Turistici Barbara Re26 ErrorHandler Interface ErrorHandler { void error(SAXParseException exception) void fatalError(SAXParseException exception) void warning(SAXParseException exception) } Class SAXParseException { int getColumnNumber() int getLineNumber() String getPublicId() String getSystemId() } üLa classe org.xml.sax.helpers.DefaultHandler fornisce una implementazione di default per ErrorHandler e altre interfacce utili per SAX üE possibile estendere questa classe per implementare più facilmente il proprio ErrorHandler

27 Laboratorio Informatico in Database Turistici Barbara Re27 SAX con JAXP import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; import org.xml.sax.helpers.DefaultHandler; SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); try { SAXParser sxp = factory.newSAXParser(); } catch (javax.xml.parsers.ParserConfigurationException) { } DefaultHandler handler = new DefaultHandler(); try { sxp.parse(filename,handler); } catch (java.io.IOException ioe) { } catch (org.xml.sax.SAXParseException spe) { } catch (org.xml.sax.SAXException se) { }

28 Laboratorio Informatico in Database Turistici Barbara Re28 Riferimenti Apache XML Project (xalan, xerces) Java JAXP Tutorial SAX Specifiche DOM dal W3C

29 Laboratorio Informatico in Database Turistici Barbara Re29 Ci sono domande?


Scaricare ppt "SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re Anno Accademico 2006-07."

Presentazioni simili


Annunci Google