gototopgototop
 
Sei in: Home Page Corso XSLT Selezione dei dati: l'albero dei documenti XML

Selezione dei dati: l'albero dei documenti XML

Ogni elemento può avere più elementi figlio, o nessuno, i quali, a loro volta, hanno l´identica proprietà. Inoltre ogni elemento può avere un attributo, più di uno o nessuno. Quanto appena scritto non aggiunge nulla di nuovo a ciò che sapevamo ma è molto importante che il documento sia strutturato in questo modo perchè non si potrebbe attribuirgli l´aggettivo di documento "ben formato".

Ogni elemento ed ogni attributo ha una posizione univoca e facilmente identificabile nell´albero del documento. Siccome tutti gli elementi ed attributi sono facilmente raggiungibili, si può "puntare" un singolo elemento, o attributo, ed acquisirne il valore. La figura qui di seguito ci aiuta a capire meglio quello che abbiamo appena letto e, soprattutto, quello che vedremo nel prosieguo.

Struttura dei nodi di un documento XML

Ogni elemento dell´albero è raffigurato da un cerchio. Possiamo notare i diversi figli di un elemento in quanto è stata assegnata una lettera diversa. Alcuni elementi, inoltre, hanno figli con lo stesso nome (lettere). Questo vuol dire che non possiamo "puntare" all´elemento "C" perchè può essere o figlio dell´elemento "B" oppure di "F". Di contro non possiamo neanche affermare che non si possa accedere all´elemento "C"; dobbiamo essere molto più precisi. Dobbiamo , cioè chiedere: "Il valore di C, figlio di B che, a sua volta, è figlio di A". Oppure, per l´altro lato: "Il valore di C, figlio di F che, a sua volta, è figlio di A". Quando "puntiamo" un elemento in questo modo, usiamo l´indirizzamento assoluto; vale a dire che si specifica l´esatta posizione di un elemento all´interno di un albero.

Un altro metodo per puntare un elemento è metterlo in relazione con un altro elemento. Immaginiamo che il punto di partenza sia l´elemento E. Se volessimo selezionare lo stesso elemento di prima (C), dobbiamo specificare: "Seleziona il valore di C, elemento fratello (cioè D), del genitore di E". Abbiamo ripercorso l´albero al contrario, partendo dalla base ma il risultato non cambia. Questo tipo di selezione prende il nome di indirizzamento relativo. Quindi possiamo stabilire che per indirizzamento relativo si intende specificare la posizione di un elemento in un albero (documento XML), a partire dalla posizione in cui ci si trova.

Cosa è un nodo

Spesso abbiamo letto, in queste pagine, due termini: "elementi" ed "attributi". La differenza più importante è che un elemento può avere elementi "figlio", mentre gli attributi no. Il valore di un attributo sarà sempre un valore di testo; il valore di un elemento comprende qualsiasi elemento (compresi gli attributi) discendente. Siccome non c´è molta differenza tra questi due tipi di oggetti, possiamo raffigurarli con lo stesso simbolo, come l´immagine in alto. L´elemento E possiamo definirlo un attributo in quanto non ha nessun elemento figlio. Un elemento può contenere più elementi con lo stesso nome (si pensi al file amici.xml di qualche lezione fa). Un attributo no. Ogni suo valore deve essere diverso dall´altro.

Il nodo corrente

In qualche lezione precedente si è visto che quando un foglio di stile XSLT elabora un documento XML, gli elementi del documento XML sorgente sono messi in corrispondenza con i modelli del foglio di stile. Non abbiamo ancora visto, però, la corrispondenza che si può creare tra un modello ed un attributo. Ogni volta che si verifica una corrispondenza, e che viene "chiamato" un modello, il nodo che ha puntato il modello diventa il nodo corrente; in sostanza è un puntatore ad un nodo nell´albero XML. Un modello non si limita ad accedere al solo valore di un elemento. Con un modello si può avere sia l´indirizzamento assoluto e sia l´indirizzamento relativo per poter estrarre il valore di qualsiasi nodo. Se un elemento ha attributi ed elementi discendenti, anche essi fanno parte di quel valore. Il nome che prende questo valore è frammento di albero che è parte di un albero del sorgente XML, a partire da un determinato nodo. Un frammento di albero è a tutti gli effetti una struttura di un documento XML ben formato. Abbiamo avuto modo di trattare i frammenti di albero quando, in qualche esempio precedente, abbiamo usato la funzione text(). Se specifichiamo solo il valore di un elemento, il testo di questo e dei suoi figli, viene scritto nell´output. Stiamo parlando del valore di testo del frammento di albero.

Insieme di nodi

Quando eseguiamo una selezione, la corrispondenza potrebbe non produrre un solo nodo. Se i nodi sono più di uno, formano un insieme di nodi. Un insieme di nodi molto comune, che abbiamo già incontrato, è una serie di nodi figli di un elemento. Creare una espressione che produca un insieme di nodi, in un albero XML, è molto semplice. La figura in alto contiene un insieme di nodi che verrebbe prodotta se dicessimo: "Vogliamo selezionare tutti i nodi distinti dalla lettera C o D". La posizione nell´albero non è importante. Se nella query che si va a dichiarare esiste una corrispondenza, otterremo un insieme di nodi. Questi sono molto importanti in XSLT. Attraverso essi si può creare, per esempio, un sommario di un ipotetico libro scritto con un documento XML.

© www.extrowebsite.com - Grafica, layout, articoli e guide sono di esclusiva proprietà del webmaster - Tutti i diritti riservati