![]() |
![]() |
Programmare il Web con DOM
Webmaster e programmatori professionisti, ma anche i semplici appassionati, fanno sempre più spesso ricorso agli script per rendere più efficace l'interazione dei visitatori con le loro pagine Web. Tuttavia, la loro gestione non è immune da problemi, primo su tutti quello relativo all'assenza di uno standard. Il World Wide Web Consortium ha deciso di affrontare la questione con DOM (Document Object Model), l'interfaccia di programmazione standard per i documenti HTML e XML
|
Livello 1 | Livello 2 | Livello 3 | Livello 4 |
Node (Root) | DocumentFragment | ||
Document | |||
Attr | |||
Element | |||
DocumentType | |||
Notation | |||
Entity | |||
EntryReference | |||
ProcessingInstruction | |||
CharacterData | Comment | ||
Text | CDATA section |
Tabella 1 - La gerarchia DOM Level 1 per XML
Come si può vedere, si tratta di una semplice gerarchia di classi che definisce i tipi di oggetti che fanno parte di un documento XML. Per ciascuno di questi sono disponibili una serie di funzioni di manipolazione standard che ne costituiscono l'interfaccia DOM, richiamabili da programmi Java e ECMAScript (la versione standard di
JavaScript)
http://www.ecma.ch/stand/ecma-262.htm
Le classi più usate di questa gerarchia sono
Node, Document, Element, Attr e Text.
Node è la classe più importante, poiché corrisponde a un componente generico di un documento XML e specifica le funzioni base che servono per cancellare, inserire e sostituire nodi nei documenti. Queste funzioni, per ereditarietà, sono così rese disponibili anche a tutte le altre classi della gerarchia.
Oltre a queste funzionalità di base, Node specifica alcune funzioni di navigazione all'interno degli alberi sintattici dei documenti XML. Alcune di queste, come parentNode, firstChild e nextSibling, consentono al programmatore Java e JavaScript di accedere ai marcatori contenuti nel tag corrente e comunque di percorrere il documento XML seguendo il contenimento testuale dei marcatori stessi.
Per aumentare l'efficienza degli script, lo standard prevede anche una funzione NodeList che restituisce un vettore che contiene tutti i figli del nodo corrente, consentendo un accesso veloce a indici al documento.
Per i più esperti, la specificazione completa dell'interfaccia della classe Node, scritta nell'Interface Definition Language di OMG (lo stesso usato per i componenti CORBA), è riportata di seguito:
Le classi figlie di Node, che ne ereditano le funzioni base, corrispondono alle parti che siamo ormai abituati a vedere nei documenti XML. Ogni oggetto Element rappresenta infatti un tag XML del documento, mentre Attr rappresenta gli attributi associati agli elementi. Si noti però una precisa scelta dei progettisti del W3C: Attr non è figlio di Element, e per questa classe le funzioni di navigazione parentNode, previousSibling e nextSibling non sono definite. Questo fa sì che uno script, per accedere a un attributo, non debba per forza navigare fino a raggiungere l'elemento corrispondente.
Text rappresenta il contenuto testuale del documento, che in XML viene spesso chiamato character data o CDATA. Quando un documento XML viene convertito nella struttura a oggetti DOM, viene creato un oggetto Text per ogni blocco di testo.
Via via che uno script manipola il documento, inserendo magari nuovi marcatori, possono venire creati nuovi oggetti di questo tipo; per evitare al programmatore di doverne stabilire i punti di separazione, la funzione normalize() dell'interfaccia riporta automaticamente il documento XML in uno stato "corretto" in cui non vi sono elementi di testo adiacenti.
Infine, la classe Document rappresenta il legame della struttura a oggetti DOM con il documento testuale da cui proviene. La sua proprietà ownerDocument precisa infatti il documento XML da cui la struttura DOM è stata ricavata eseguendo il parsing.
A questo punto il modello di funzionamento dello standard DOM dovrebbe essere chiaro: un'applicazione host, posta sul server Web oppure sul browser dell'utente, carica un documento XML e lo converte in una gerarchia di oggetti DOM eseguendone il parsing. Si noti che per svolgere quest'operazione non è assolutamente necessario scrivere codice: sono infatti disponibili ottimi parser di pubblico dominio scritti in Java, compresi quelli di Microsoft, Lotus e IBM, liberamente scaricabili dai rispettivi siti. Una volta che il parser ha creato la struttura DOM, lo script Java o JavaScript definito dal programmatore (che può trovarsi, ancora, sul server Web o sul client, per esempio sotto forma di applet) inizia a chiamare i metodi dell'interfaccia DOM per navigare o modificare il documento, interagendo se necessario con l'utente. Infine, se richiesto, il documento manipolato può essere riconvertito in testo dal parser (mediante un operazione di unparsing) e memorizzato sul server o sul client.
Per chiarire ulteriormente questo scenario, si consideri il semplice documento XML riportato di seguito:
Per navigare in JavaScript nella struttura DOM di questo documento, ovviamente dopo aver eseguito il parsing del documento XML, basterà scrivere un codice più o meno come il seguente:
Questo codice non tiene conto delle eventuali chiamate di inizializzazione richieste dallo specifico parser XML, ma risulta comunque abbastanza autoesplicativo. Dopo essersi posizionato all'inizio del documento, lo script ne naviga la struttura sintattica con un ciclo breadth first, ovvero passando da un fratello all'altro del nodo article nell'albero del documento con la funzione nextSibling(). Per ciascun nodo article esaminato nel ciclo, lo script accede con la funzione firstChild()al corrispondente nodo figlio author e al relativo contenuto, leggendo il nome dell'autore e separando i titoli di un autore da quelli di un altro.
Si noti che lo standard DOM non definisce le modalità di accesso ai database; per questo vi sono già appositi standard, come ODBC, di cui ci siamo occupati in altri articoli.
Lo standard DOM ha acquisito, fin dall'Ottobre del 1998, lo stato di raccomandazione del W3C, il che significa che si tratta ormai di uno standard stabile e che non sarà soggetto a cambiamenti improvvisi. Vari produttori hanno realizzato o stanno realizzando API standard per Java o JavaScript (per ulteriori informazioni, consultate gli Url)
http://www.oasis-open.org/cover/dom.html
e
http://www.xmlsoftware.com
inoltre DOM è alla base delle nuove capacità di gestione di documenti XML che saranno incorporate nei più diffusi pacchetti di elaborazione testi.
Il lavoro di standardizzazione del W3C proseguirà ora verso la definizione di DOM level 2, che permetterà l'accesso da parte degli script anche ai DTD e ai fogli di stile che accompagnano i documenti XML. Con tutta probabilità, DOM sarà alla base anche dei meccanismi esecutivi dei linguaggi di interrogazione per XML, su cui un apposito sottocomitato del W3C è attualmente al lavoro. Per tutti questi motivi è indispensabile che webmaster e programmatori comincino a interessarsene già da oggi.
Internet News è un mensile della Casa Editrice Tecniche Nuove S.p.A.
© 1995/99. Tutti i diritti sono riservati.
Internet News non risponde di eventuali errori e omissioni.
Commenti a: inews@tecnet.it