XML richiede un certo rigore sintattico. Abbiamo visto nella lezione precedente che un tag vuoto deve necessariamente prevedere il tag di chiusura o in alternativa la versione abbreviata del tag.
Questo non è altro che uno degli aspetti di un principio fondamentale a cui tutti i documenti XML devono sottostare: tutti i documenti XML devono essere ben formati (well formed). Questo concetto è assimilabile in qualche modo alla correttezza ortografica di una lingua ed è un principio a cui i documenti XML non possono sottrarsi.
Perché un documento XML sia ben formato deve rispettare le seguenti regole:
- Ogni documento XML deve contenere un unico elemento di massimo livello (root) che contenga tutti gli altri elementi del documento. Le sole parti di XML che possono stare all'esterno di questo elemento sono i commenti e le direttive di elaborazione (per esempio, la dichiarazione della versione di XML)
- Ogni elemento deve avere un tag di chiusura o, se vuoti, possono prevedere la forma abbreviata (
/>
) - Gli elementi devono essere opportunamente nidificati, cioè i tag di chiusura devono seguire l'ordine inverso dei rispettivi tag di apertura
- XML fa distinzione tra maiuscole e minuscole, per cui i nomi dei tag e degli attributi devono coincidere nei tag di apertura e chiusura anche in relazione a questo aspetto
- I valori degli attributi devono sempre essere racchiusi tra singoli o doppi apici
La violazione di una qualsiasi di queste regole fa in modo che il documento risultante non venga considerato ben formato. Anche se queste regole possono sembrare semplici, occorre prestarvi molta attenzione se si usa un semplice editor di testo. Soprattutto se si è abituati a lavorare con HTML. Codice come questo:
<articolo titolo=test>
<!-- ... -->
</Articolo>
darà qualche problema, e lo stesso dicasi per situazioni analoghe alla seguente:
<paragrafo>
<testo>abcdefghi...
</paragrafo>
</testo>
Anche la scelta dei nomi dei tag deve seguire alcune regole. Un tag può iniziare con un lettera o un underscore (_
) e può contenere lettere, numeri, il punto, l'underscore (_
) o il trattino (-
). Non sono ammessi spazi o altri caratteri. XML è sensibile all'uso di maiuscolo e minuscolo, quindi i tag <prova>
e <Prova>
sono considerati diversi.
Per quanto riguarda il contenuto, un documento XML può contenere potenzialmente qualsiasi carattere dell'alfabeto latino, cifre e punteggiatura. Normalmente vengono accettati come caratteri validi in un documento XML i primi 128 caratteri della codifica ASCII (lettere dell'alfabeto latino minuscole e maiuscole, cifre, segni di punteggiatura, etc.).
Se un documento contiene caratteri che non rientrano tra questi (es.: lettere accentate, simboli di valuta, ecc.) è necessario specificare lo schema di codifica utilizzato. Lo schema di codifica ed altre informazioni dirette al software incaricato di elaborare il documento XML sono indicate tramite elementi speciali detti direttive di elaborazione o processing instruction.
Ad esempio, la seguente direttiva di elaborazione:
<?xml version="1.0" encoding="iso-8859-1"?>
abilita l'uso del set di caratteri noto come Latin 1 contenente le lettere accentate ed altri simboli.
Le specifiche di XML prevedono esplicitamente la possibilità di utilizzare la codifica Unicode per rappresentare anche caratteri non latini, come ad esempio i caratteri greci, cirillici, gli ideogrammi cinesi e giapponesi.
Oltre alle direttive di elaborazione, in un documento XML possiamo trovare i commenti, cioè informazioni rivolte agli esseri umani ed ignorate dai software che lo elaborano. I commenti XML seguono la stessa sintassi dell'HTML, sono cioè racchiusi tra le sequenze di caratteri <!--
e -->
e possono trovarsi in qualsiasi punto del documento.
Potrebbe essere necessario inserire in un documento XML dei caratteri particolari che potrebbero renderlo non ben formato. Ad esempio, se dobbiamo inserire del testo che contiene il simbolo <
, corriamo il rischio che possa venire interpretato come l'inizio di un nuovo tag, come nel seguente esempio:
<testo>
il simbolo < indica minore di
</testo>
Per evitare situazioni di questo tipo, XML prevede degli oggetti speciali detti entità che consentono di sostituire altri caratteri. Cinque entità sono predefinite e consentono l'uso di altrettanti caratteri riservati all'interno di un documento:
Entità | Carattere corrispondente |
---|---|
& |
& |
< |
< |
> |
> |
" |
" |
' |
' |
Sfruttando le entità, l'esempio precedente diventa:
<testo>
il simbolo < indica minore di
</testo>
CDATA
In determinate situazioni gli elementi da sostituire con le entità possono essere molti, il che rischia di rendere illeggibile il testo ad essere umano. Si consideri il caso in cui un blocco di testo illustri proprio del codice XML:
<codice>
<libro>
<capitolo>
</capitolo>
</libro>
</codice>
In questo caso, al posto di sostituire tutte le occorrenze dei simboli speciali con le corrispondenti entità è possibile utilizzare una sezione CDATA.
Una sezione CDATA (Character DATA) è un blocco di testo che viene considerato sempre come testo, anche se contiene codice XML o altri caratteri speciali. Per indicare una sezione CDATA è sufficiente racchiuderla tra le sequenze di caratteri <![CDATA[
e ]]>
. Il nostro esempio diventerà come segue:
<codice>
<![CDATA[
<libro>
<capitolo>
</capitolo>
</libro>
]]>
</codice>
In certe situazioni non si conosce a priori il contenuto che può essere inserito in un blocco di testo e pertanto l'utilizzo delle sezioni CDATA risulta obbligatorio.