SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX,...

12
1 © M. Badella G. Malnati, 2003-04 Programmazione in Ambienti Distribuiti A.A. 2003-04 SAX e DOM 2 © M. Badella G. Malnati, 2003-04 Programmazione in Ambienti Distribuiti Analisi di un documento Il parser è uno modulo software utilizzato per l’analisi di un documento Eseguire il parsing di un documento significa costruire l’albero sintattico ad esso associato eventualmente, verificandone la rispondenza con lo schema del documento L’albero ottenuto costituisce la base di ulteriori elaborazioni Traduzioni verso altri formati, interpretazione, …

Transcript of SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX,...

Page 1: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

1

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

A.A. 2003-04

SAX e DOM

2

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Analisi di un documento

Il parser è uno modulo software utilizzato per l’analisi di un documentoEseguire il parsing di un documento significa costruire l’albero sintattico ad esso associato

eventualmente, verificandone la rispondenza con lo schema del documento

L’albero ottenuto costituisce la base di ulteriori elaborazioni

Traduzioni verso altri formati, interpretazione, …

Page 2: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

2

3

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Analisi di documenti XML

L’analisi del documento avvienescandendo la sequenza dei simboli terminali …… aggregandoli in entità più complesse sulla base dei tag…… in base alle semplici regole del XML

L’interpretazione si crea associando ai nodi così costruiti un significato

4

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Parser XML

Esistono due approcci differenti per la realizzazione di un parser:

Costruzione esplicita dell’albero sintatticoo Il documento XML viene rappresentato in modo esplicito, ad

ogni nodo corrisponde un elementoo Il parser naviga la struttura ad albero così realizzata

assegnandole un’interpretazioneModello ad eventi:

o Si scandisce il documento in ingresso generando eventi ogni qualvolta viene identificato un contenuto significativo (inizio elemento, fine elemento, testo racchiuso, errori, …)

o Il parser reagisce agli eventi assegnando un’interpretazione alla struttura ad albero implicitamente definita

Page 3: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

3

5

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

XML e Java

Le specifiche di Java definiscono due interfacce per l’analisi di documenti XML

Simple API for XML (SAX) o parser basato sul modello ad eventi

Document Object Model (DOM) o parser che traduce il documeto XML in una gerarchia di

oggetti Java

Entrambe utilizzano un motore di analisi generico

6

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Validazione

È possibile costruire un parser Non validante

o Non si occupa di verificare le regole del DTDo Analizza solo il contenuto dei tago Efficiente e veloce, ma poco sicuro

Validanteo Verificare regole specifiche espresse nel DTDo Meno efficiente ma sicuro

Page 4: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

4

7

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

SAX

Simple API for XMLParser basato su un modello ad eventi

Implementazione in vari linguaggi (Java, C++, …)Il documento viene visto come un flusso di dati

I singoli elementi vengono analizzati e gestiti man mano che si presentano

Sito ufficialehttp://sax.sourceforge.net/

8

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

SAX

Eventi segnalati:Inizio e fine del documentoInizio e fine degli elementiErrori…

SAX implementa un parser generico:L’applicazione, quando richieda un’analisi, specifica l’oggetto/le funzioni da richiamare a fronte dei singoli eventi

Page 5: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

5

9

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Java e SAX

Le API sono contenute nei package javax.xml.parserorg.xml.saxorg.xml.sax.ext org.xml.sax.helpers

Contengono le classi e le interfacce necessarie alla creazione e alla gestione di un parser SAX

10

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Java e SAX

javax.xml.parser Contiene SAXParserFactory che definisce una classe factory per configurare e costruire un parser SAX

org.xml.sax contiene le interfacce che il gestore degli eventi deve implementare

ContentHandler, DTDHandler, EntityResolver,ErrorHandler

Per semplicità conviene estendere la classeorg.xml.sax.helpers.DefaultHandler

Page 6: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

6

11

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Creazione di un parserI parser XML sono creati utilizzando il Factory Design Pattern

Si crea un oggetto parser a partire da un oggetto factoryFactory permette di specificare le caratteristiche/opzioni del parser che deve essere costruito

12

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Esempio (1)

class MyHandler extends DefaultHandler {

int errorCounter=0;

public void error(SAXParseException e)

throws SAXException {

errorCounter++;

}

public int getErrorCounter() {

return errorCounter;

}

}

Page 7: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

7

13

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Esempio (2)

SAXParserFactory spf=SAXParserFactory.newInstance();

spf.setValidating(true);

SAXParser p= spf.newSAXParser();

MyHandler h= new MyHandler(…);

FileInputStream fis = new FileInputStream(“c:\test.xml”);

p.parse(fis,h);

System.out.println(h.getErrorCounter());

14

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Applicazioni di SAX

Dovrebbe essere utilizzato:Documenti XML di dimensioni consistenti

o Dispositivi con memoria limitataElaborazioni veloci

Non adatto perModifica del documentoricordare eventi precedenti

o codice ad hoc

Page 8: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

8

15

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

DOM

Document Object ModelParser basato sulla costruzione esplicita dell’albero sintattico

L’albero gerarchico rappresenta il documentoSupporta la navigazione e la modifica del documento

Le specifiche sono indipendenti dal linguaggioJava, C++, CORBA, JavaScript,…

Sito ufficialehttp://www.w3c.org/DOM

16

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

L’albero sintatticoDocument

Document type

Element

Comment

Element

Element Attribute Text

Attribute Attribute Text

Page 9: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

9

17

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Java e DOM

Le API sono contenute nei package javax.xml.parserorg.w3c.dom

Contengono le classi e le interfacce necessarie per

creazione di un parser DOMgestione e modifica dell’albero generato dal parsing

18

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Java e DOM

javax.xml.parser:DocumentBuilderFactory definisce la factory che consente all’applicazione di ottenere il parser DOMDocumentBuilder è la classe che permette di ottenere una istanza dell’albero relativo al documento XML

org.w3c.dom contiene le interfacce che consentono la rappresentazione del documento XML come alberoAttr, CDATASection, CharacterData, Comment, Document, DocumentFragment , DocumentType, DOMImplementation, Element , Entity , EntityReference, NamedNodeMap, Node, NodeList, Notation, ProcessingInstruction, Text

Page 10: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

10

19

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Creazione di un parser

Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern

Si crea un oggetto parser partendo da un oggetto factory (DocumentBuilderFactory)Successivamente si ottiene un oggetto DocumentBuilderche consente il parsing del documento e l’estrapolazione dell’albero

20

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Esempio

String filename=“c:\test.xml”;

DocumentBuilderFactory buildFactory=DocumentBuiderFactory.newInstance();

DocumentBuider builder=buildFactory.newDocumentBuilder();

buidFactory.setValidating(true);

Document doc=builder.parse(filename);

doc.getDocumentElement().normalize();

Page 11: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

11

21

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Navigazione dell’alberoElemento radice:Element root=doc.getDocumentElement();

Element è una sottoclasse di Node e rappresenta un elemento XMLÈ possibile ottenere:

Il nome (getNodeName)Il tipo (getNodeType)Gli attributi (getAttributes)…

Modificare la struttura del documentoAssegnazione di testo ad un elemento (setNodeValue)Nuovo nodo figlio (appendChild)Eliminazione nodo figlio (removeChild)…

22

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Vantaggi e Svantaggi

VantaggiAPI robustaSemplicità nella modifica della struttura e nell’estrazione delle informazioni

SvantaggiAPI complessaConsiderevole quantità di memoria occupata per la memorizzazione dell’albero

Page 12: SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX, il parser DOM è creato utilizzando il Factory Design Pattern ¾Si crea un oggetto

12

23

©M

. Bad

ella

G. M

alna

ti, 2

003-

04

Programmazione in Ambienti Distribuiti

Altre implementazioni

Apache XML Project Xerces Java Parser http://xml.apache.org/xerces-j/index.html

IBM’s XML for Java (XML4J) http://www.alphaworks.ibm.com/formula/xml