SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX,...
Transcript of SAX e DOM - polito.itcorsiadistanza.polito.it/corsi/pdf/07EKEDC/SAX_DOM.pdf · Analogamente a SAX,...
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, …
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
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
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
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
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;
}
}
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
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
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
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();
…
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
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
…