Sei sulla pagina 1di 12

© M. Badella G.

Malnati, 2003-04

SAX e DOM

Programmazione in
Ambienti Distribuiti
A.A. 2003-04

Analisi di un documento

‰Il parser è uno modulo software utilizzato per


l’analisi di un documento
© M. Badella G. Malnati, 2003-04

‰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, …

Programmazione in Ambienti Distribuiti 2

w1
Analisi di documenti XML

‰L’analisi del documento avviene


¾ scandendo la sequenza dei simboli terminali …
© M. Badella G. Malnati, 2003-04

¾ … 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

Programmazione in Ambienti Distribuiti 3

Parser XML
‰ Esistono due approcci differenti per la realizzazione
di un parser:
© M. Badella G. Malnati, 2003-04

¾ Costruzione esplicita dell’albero sintattico


o Il documento XML viene rappresentato in modo esplicito, ad
ogni nodo corrisponde un elemento
o Il parser naviga la struttura ad albero così realizzata
assegnandole un’interpretazione
¾ Modello 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

Programmazione in Ambienti Distribuiti 4

w2
XML e Java

‰Le specifiche di Java definiscono due


interfacce per l’analisi di documenti XML
© M. Badella G. Malnati, 2003-04

¾ 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

Programmazione in Ambienti Distribuiti 5

Validazione

‰È possibile costruire un parser


¾ Non validante
© M. Badella G. Malnati, 2003-04

o Non si occupa di verificare le regole del DTD


o Analizza solo il contenuto dei tag
o Efficiente e veloce, ma poco sicuro
¾ Validante
o Verificare regole specifiche espresse nel DTD
o Meno efficiente ma sicuro

Programmazione in Ambienti Distribuiti 6

w3
SAX

‰Simple API for XML


‰Parser basato su un modello ad eventi
© M. Badella G. Malnati, 2003-04

¾ 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 ufficiale
¾ http://sax.sourceforge.net/

Programmazione in Ambienti Distribuiti 7

SAX

‰Eventi segnalati:
¾ Inizio e fine del documento
© M. Badella G. Malnati, 2003-04

¾ Inizio e fine degli elementi


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

Programmazione in Ambienti Distribuiti 8

w4
Java e SAX

‰Le API sono contenute nei package


¾ javax.xml.parser
© M. Badella G. Malnati, 2003-04

¾ org.xml.sax
¾ org.xml.sax.ext
¾ org.xml.sax.helpers
‰Contengono le classi e le interfacce
necessarie alla creazione e alla gestione di
un parser SAX

Programmazione in Ambienti Distribuiti 9

Java e SAX

‰javax.xml.parser
¾ Contiene SAXParserFactory che definisce
© M. Badella G. Malnati, 2003-04

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 classe
¾ org.xml.sax.helpers.DefaultHandler

Programmazione in Ambienti Distribuiti 10

w5
Creazione di un parser
‰ I parser XML sono creati utilizzando il Factory Design
Pattern
¾ Si crea un oggetto parser a partire da un oggetto factory
© M. Badella G. Malnati, 2003-04

¾ Factory permette di specificare le caratteristiche/opzioni del


parser che deve essere costruito

Programmazione in Ambienti Distribuiti 11

Esempio (1)
class MyHandler extends DefaultHandler {
int errorCounter=0;
© M. Badella G. Malnati, 2003-04

public void error(SAXParseException e)


throws SAXException {
errorCounter++;
}
public int getErrorCounter() {
return errorCounter;
}
}

Programmazione in Ambienti Distribuiti 12

w6
Esempio (2)
SAXParserFactory spf=
SAXParserFactory.newInstance();
spf.setValidating(true);
© M. Badella G. Malnati, 2003-04

SAXParser p= spf.newSAXParser();
MyHandler h= new MyHandler(…);
FileInputStream fis = new
FileInputStream(“c:\test.xml”);

p.parse(fis,h);

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

Programmazione in Ambienti Distribuiti 13

Applicazioni di SAX

‰Dovrebbe essere utilizzato:


¾ Documenti XML di dimensioni consistenti
© M. Badella G. Malnati, 2003-04

o Dispositivi con memoria limitata


¾ Elaborazioni veloci
‰Non adatto per
¾ Modifica del documento
¾ ricordare eventi precedenti
o codice ad hoc

Programmazione in Ambienti Distribuiti 14

w7
DOM

‰ Document Object Model


‰ Parser basato sulla costruzione esplicita dell’albero
© M. Badella G. Malnati, 2003-04

sintattico
¾ L’albero gerarchico rappresenta il documento
¾ Supporta la navigazione e la modifica del documento
‰ Le specifiche sono indipendenti dal linguaggio
¾ Java, C++, CORBA, JavaScript,…
‰ Sito ufficiale
¾ http://www.w3c.org/DOM

Programmazione in Ambienti Distribuiti 15

L’albero sintattico
Document
© M. Badella G. Malnati, 2003-04

Document type Element

Element Element Attribute Text

Comment Attribute Attribute Text

Programmazione in Ambienti Distribuiti 16

w8
Java e DOM

‰Le API sono contenute nei package


¾ javax.xml.parser
© M. Badella G. Malnati, 2003-04

¾ org.w3c.dom
‰Contengono le classi e le interfacce
necessarie per
¾ creazione di un parser DOM
¾ gestione e modifica dell’albero generato dal
parsing

Programmazione in Ambienti Distribuiti 17

Java e DOM
‰ javax.xml.parser:
¾ DocumentBuilderFactory definisce la factory che
consente all’applicazione di ottenere il parser DOM
© M. Badella G. Malnati, 2003-04

¾ DocumentBuilder è 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 albero
¾ Attr, CDATASection, CharacterData, Comment, Document,
DocumentFragment , DocumentType,
DOMImplementation, Element , Entity , EntityReference,
NamedNodeMap, Node, NodeList, Notation,
ProcessingInstruction, Text

Programmazione in Ambienti Distribuiti 18

w9
Creazione di un parser
‰ Analogamente a SAX, il parser DOM è creato
utilizzando il Factory Design Pattern
© M. Badella G. Malnati, 2003-04

¾ Si crea un oggetto parser partendo da un oggetto factory


(DocumentBuilderFactory)
¾ Successivamente si ottiene un oggetto DocumentBuilder
che consente il parsing del documento e l’estrapolazione
dell’albero

Programmazione in Ambienti Distribuiti 19

Esempio

String filename=“c:\test.xml”;
© M. Badella G. Malnati, 2003-04

DocumentBuilderFactory buildFactory=
DocumentBuiderFactory.newInstance();
DocumentBuider builder=
buildFactory.newDocumentBuilder();
buidFactory.setValidating(true);
Document doc=builder.parse(filename);
doc.getDocumentElement().normalize();

Programmazione in Ambienti Distribuiti 20

w10
Navigazione dell’albero
‰ Elemento radice:
Element root=doc.getDocumentElement();
‰ Element è una sottoclasse di Node e rappresenta
© M. Badella G. Malnati, 2003-04

un elemento XML
‰ È possibile ottenere:
¾ Il nome (getNodeName)
¾ Il tipo (getNodeType)
¾ Gli attributi (getAttributes)
¾ …
‰ Modificare la struttura del documento
¾ Assegnazione di testo ad un elemento (setNodeValue)
¾ Nuovo nodo figlio (appendChild)
¾ Eliminazione nodo figlio (removeChild)
¾ … 21
Programmazione in Ambienti Distribuiti

Vantaggi e Svantaggi

‰Vantaggi
¾ API robusta
© M. Badella G. Malnati, 2003-04

¾ Semplicità nella modifica della struttura e


nell’estrazione delle informazioni
‰Svantaggi
¾ API complessa
¾ Considerevole quantità di memoria occupata per
la memorizzazione dell’albero

Programmazione in Ambienti Distribuiti 22

w11
Altre implementazioni

‰Apache XML Project Xerces Java Parser


¾ http://xml.apache.org/xerces-j/index.html
© M. Badella G. Malnati, 2003-04

‰IBM’s XML for Java (XML4J)


¾ http://www.alphaworks.ibm.com/formula/xml
‰…

Programmazione in Ambienti Distribuiti 23

w12

Potrebbero piacerti anche