• Non ci sono risultati.

Come abbiamo già detto, esistono fondamentalmente due tipi di processori XML, ovvero validating e non-validating. In genere un processore di tipo validating viene chiamato parser15. Sia i processori validating che quelli non-validating,

15 I dati XML della libreria digitale vengono analizzati sintatticamente e convalidati da un parser incapsulato all’interno del flash player, tecnologia della quale si parlerà nel secondo capitolo.

devono riportare le violazioni delle regole di buona formattazione incontrate nell’entità documento ed in generale in una qualsiasi entità parsed.

Un processore validating deve anche riportare le violazioni dei vincoli espressi attraverso le dichiarazioni nel DTD; per far questo deve poter leggere e processare l’intera DTD (un esempio è IE). Un processore non-validating (quali MSXML, XMLSpy) deve poter accedere all’intera entità documento, incluso l’eventuale DTD interna (ma solo per verificare che anche questa parte del documento sia ben formattata); quest’ultimo fornisce vantaggi nelle prestazioni dato che non deve leggere ed elaborare la DTD.

Il parser ha il compito di caricare il documento XML e di rendere le informazioni

da esso contenute disponibili all'applicazione. Può essere un componente esterno, una libreria o un insieme di classi. La struttura può essere descritta attraverso DTD oppure attraverso XML Schema.

Un parser XML può esporre i propri servizi attraverso due tipi di interfacce: 1. DOM ( Documento Object Model ), basato su una rappresentazione astratta in memoria.

2. SAX ( Simple API for XML ) ad eventi. L'interfaccia basata sullo standard DOM permette di vedere il documento XML come se fosse un albero e permette di navigare i vari nodi (elementi). L'interfaccia basata sullo standard SAX non mantiene il documento in memoria, ma, mentre lo carica, invoca i metodi dell'applicazione che si devono occupare di trattare gli elementi che gli sono stati passati.

1.10.1 Elaborazione SAX

SAX , Simple API16 for XML ,è l’interfaccia standard per il parsing XML basato

su eventi. Inizialmente nasce come API alternativa a DOM in ambiente Java , ma

16

Application Programming Interface sono ogni insieme di procedure disponibili alprogrammatore, di solito raggruppate a formare un set di strumenti specifici per un determinato

in seguito viene poi utilizzata e adottata anche al di fuori del mondo Java, come ad esempio Microsoft.

L’architettura SAX si basa su una sorta di cooperazione fra parser e applicazione al fine di rappresentare il documento nella maniera più consona ad un problema specifico. In termini pratici, durante l’analisi, l’applicazione riceve dal parser

SAX degli eventi opportuni che descrivono il riconoscimento di un particolare elemento del documento; in questo modo l’applicativo può eventualmente scartare quelle informazioni alle quali non è interessato, rendendo l’operazione molto più veloce e meno onerosa in termini di occupazioni di risorse.

Un parser SAX funziona in un modo molto semplice: legge, carattere dopo carattere, tutto il documento XML dato in input e genera una serie di eventi (callback) ogni volta che riconosce la presenza di particolari informazioni. Tali informazioni sono solo notificate ai vari handler che poi le utilizzeranno nel modo opportuno. La sequenzialità con cui opera un parser SAX, dovendo rileggere più volte il documento, rende però dispendioso l’utilizzo delle risorse e di tempo. Per ovviare a tale problema è stato sviluppato il parser DOM.

Qui di seguito vediamo un esempio di elaborazione SAX:

Dato il documento : Il parser SAX registrerà gli eventi:

<?xml version="1.0"?> <book> <chapter> <title>Capitolo 1</title> <p>Una frase</p> ... </chapter> </book> startDocument() startElement(book) startElement(chapter) startElement(title) characters(Capitolo1) endElement(title) startElement(p) character(Una frase) endElement(p) ... endElement(chapter) endElement(book) endDocument()

compito. È un metodo per ottenere un'astrazione, di solito tra l'hardwaree il programmatore, o trasoftwarea basso ed alto livello. Le API permettono di evitare ai programmatori di scrivere tutte le funzioni dal nulla.

Vantaggi:

SAX richiede pochissima memoria d'uso: il documento non è mai tutto in memoria contemporaneamente. E' ideale per documenti MOLTO grandi.

SAX è velocissimo: non ha praticamente overhead di parsing.

SAX è ideale per cercare velocemente un'informazione specifica all'interno di un documento XML, poiché lo si può fermare appena l'ha trovata.

Svantaggi:

• SAX non può essere usato per cercare e ricercare informazioni su un documento XML (navigare sulla struttura del documento).

• SAX non può essere usato per modificare o aggiornare la struttura del documento XML (aggiungere o togliere nodi).

• SAX non è implementato dai browser, ma solo come libreria di linguaggi server-side (o in Java anche come applet).

In base a ciò, è consigliabile usare dei parser SAX in caso di documenti XML di grandi dimensioni, non soggetti a modifiche e sui quali si devono eseguire operazioni di conteggio (o simili).

1.10.2 Elaborazione DOM

Il DOM, a differenza di SAX, è una specifica del W3C (come XML) e le versioni si indicano per livelli. Per ogni elemento all’interno del documento XML, è prevista la definizione di un’interfaccia.

Il DOM permette di disporre - in memoria - la totalità delle informazioni contenute nel documento XML e di un meccanismo per elaborarle. Conservare in memoria tutte le informazioni è molto vantaggioso nel caso di modifica dei dati estrapolati; ciò sarebbe ancora più evidente nel caso in cui la modifica di alcune informazioni dipendesse dalla loro globalità.

In caso della mancata validità del documento, il parser si interromperà e visualizzerà un messaggio d’errore. Ma anche il parser DOM ha i suoi svantaggi, concernenti l’uso della memoria, specie quando i file XML esaminati hanno dimensioni di alcuni MB.

Il parser DOM costruisce una strutura ad albero che rappresenta il documento e fornisce all’applicazione delle API per navigare l’albero.

I parser DOM, invece, sono consigliati in caso di documenti XML strutturati in modo complesso, di dimensioni ridotte, soggetti a modifiche e la cui elaborazione dipende dalle informazioni contenute in tutto il documento. Comunque SAX e DOM non sono completamente slegati: la maggior parte dei parser DOM, utilizzano, infatti, la libreria SAX