In questo paragrafo viene usata la notazione standard per i linguaggi ad oggetti:
nomeoggetto.metodo(parametri del metodo)
nomeoggetto.attributo
La notazione usata è anche "case sensitive", cioè è sensibile alla differenza fra caratteri maiuscoli o minuscoli.
Gli esempi pratici in Javascript si possono trovare nel capitolo 2, ordinati per tipo di operazione.
La struttura dell'interfaccia DOM si basa su classi a più livelli (riportiamo solo i componenti più utili). I nomi sono quelli originali del W3C, ma la traduzione è abbastanza semplice:
La classe più importante è quella di nodo (Node), che comprende qualsiasi elemento dell'albero XML: radice, ramo, foglia. Allo stesso livello della classe Node, ma senza figli, troviamo le classi NodeList e NodeNamedMap. Si tratta di oggetti temporanei che vengono generati durante la lettura dell'albero XML, per memorizzare dei gruppi di fratelli (ad esempio tutti i figli o tutti gli attributi di un elemento): li analizzeremo più avanti. Intanto descriviamo attributi e metodi principali posseduti da tutti gli oggetti della classe Node:
- Attributi della classe Node che danno informazioni sul nodo:
- nodeName: restituisce il nome del nodo, quello indicato fra i "tag": <nome>..</nome>. Se si tratta del documento stesso il nome sarà "#document", per un nodo di testo invece "#text".
- nodeType: DOM assegna un valore numerico ai diversi tipi di nodo esistenti. Potrebbe servirvi per fare alcuni controlli. Per i nodi più importanti:
elemento = 1, attributo = 2, testo = 3, documento = 9.
- nodeValue: restituisce il valore del nodo corrente. Serve soprattutto per i nodi di testo, per la maggiorparte degli altri darà risultato "null". - Attributi della classe Node per muoversi nell'albero XML. Quando creiamo un oggetto XML possiamo usare una o più variabili come "cursori" per memorizzare posizioni nell'albero. Ogni spostamento da una posizione nota si può effettuare con uno degli attributi che seguono.
- ownerDocument: ci permette di saltare, ovunque ci troviamo, alla radice del nostro albero.
- parentNode: restituisce il nodo genitore dell'attuale.
- childNodes: restituisce i nodi figli del nodo attuale, racchiusi in un oggetto NodeList.
- firstChild, lastChild: restituiscono rispettivamente il primo e ultimo nodo figli dell'attuale.
- previousSibling, nextSibling: restituiscono rispettivamente il fratello precedente e seguente del nodo attuale. Precedente e seguente fanno riferimento all'ordine con cui i nodi si trovano nel testo del file XML.
- attributes: restituisce gli attributi del nodo corrente, racchiusi in un oggetto NodeNamedMap. - Metodi della classe Node: la maggiorparte di questi metodi serve per creare nuovi nodi dell'albero XML e sarà descritta nel prossimo paragrafo.
- hasChildNodes(): restituisce un valore booleano (true o false) in risposta alla domanda se il nodo ha dei nodi figli (compresi i nodi di testo).
La sottoclasse di nodi chiamata "Document" indica proprio il documento XML e contiene un unico (obbligatoriamente unico) oggetto, la radice dell'albero. Vediamo attributi e metodi:
- Metodi della classe Document: la maggiorparte di questi metodi serve per creare nuovi nodi dell'albero XML e sarà descritta nel prossimo paragrafo.
- getElementsByTagName(tag): permette di cercare tutti gli elementi con un certo nome al di sotto della radice. Gli elementi vengono messi in un oggetto NodeList. Il carattere " * " funziona come jolly per individuare tutti gli elementi.
La sottoclasse di nodi "Element" è la più popolosa e contiene tutti i rami dell'albero XML, in pratica ogni elemento al di sotto della radice che sia stato dichiarato con una coppia di "tag": <elemento></elemento>.
- Metodi della classe Element: la maggiorparte di questi metodi serve per creare nuovi nodi dell'albero XML e sarà descritta nel prossimo paragrafo.
- getElementsByTagName(tag): equivalente all'omonimo per Document.
- getAttribute (attributo): restituisce il valore, per l'elemento attuale, dell'attributo indicato.
- getAttributeNode(attributo): restituisce l'attributo specificato come nodo.
La sottoclasse di nodi "Attribute" indica gli attributi degli elementi. Gli attributi ereditano solo una parte delle proprietà dei nodi, perché non possono essere innestati gli uni dentro agli altri. Non vale quindi per essi la maggiorparte dei metodi per muovere il cursore entro l'albero: nextSibling, previousSibling, firstChild etc... Per scorrere gli attributi occorre usare l'oggetto NamedNodeMap generato dal comando "attributes".
Vediamo alcune proprietà caratteristiche solo degli attributi:
- Attributi della classe Attribute:
- name: restituisce il nome dell'attributo.
- specified: restituisce un valore booleano (true o false) che indica se all'attributo è stato assegnato un valore.
La sottoclasse CharacterData è la "mamma" di testi e commenti del file XML. Nell'albero parserizzato il testo diventa un nodo di nome "#text". I metodi della classe servono per modificare il testo e saranno descritti nel prossimo paragrafo. Vediamo qui invece due attributi molto importanti:
- Attributi della classe CharacterData:
- data: restituisce il testo vero e proprio contenuto nel nodo #text.
- length: restituisce il numero di caratteri che formano il testo.
Veniamo ora alle due classi NodeList e NamedNodeMap. Quando l'esito di un metodo può essere composto di più parti, viene creato automaticamente un oggetto di una di queste due classi per contenere i risultati. Un oggetto Nodelist è un vettore di elementi con un indice numerico, NamedNodeMap possiede le stesse proprietà di Nodelist ed in più permette di individuare gli elementi con dei nomi oltre che con l'indice. Vediamo prima attributi e metodi di NodeList:
- Attributi della classe NodeList:
- length: restituisce il numero di elementi del vettore. - Metodi della classe NodeList:
- item(n): restituisce l'elemento nella posizione n. L'elemento può essere un oggetto della classe Node, con le relative proprietà. L'indice progressivo delle posizioni del vettore non parte da 1, bensì da 0: 0,1,2... Perciò la lunghezza del vettore è uguale all'ultima posizione + 1.
La classe NamedNodeMap possiede le stesse proprietà di Nodelist più la seguente:
- Metodi della classe NamedNodeMap:
- getNamedItem(nome): restituisce l'elemento che corrisponde al nome indicato.
Con queste due ultime classi dovrebbe ora risultare chiaro il funzionamento di tutti gli attributi e metodi visti. Per ora si è trattato di proprietà di sola lettura: nel prossimo paragrafo descriveremo come l'interfaccia DOM ci permetta anche di apportare modifiche agli oggetti dell'albero XML.