eXtensible Markup Language
L'XML (eXtensible Markup Language) è un linguaggio di markup nato dallo sviluppo di SGML (progenitore di HTML) e che è ormai diventato uno standard per la creazione della struttura di documenti nei più disparati campi: dal Web alla gestione di documenti, passando per i files di configurazione di numerosi applicativi. Si noti bene che si è parlato di struttura, perchè XML è soltanto questo; singolarmente, XML non permette nessun tipo di visualizzazione o output.
XML è un insieme di tag personalizzati dall'utente, per cui lo si dovrebbe definire un linguaggio di meta-markup, perchè non ha un set di tag predefiniti. Chi utilizza XML può creare una struttura di layout che più si addice al problema da risolvere, definendo tag specifici. In pratica, qualunque dato può essere definito tramite XML.
<?xml version="1.0"?>
<testo>
<capitolo>
<paragrafo>Primo paragrafo</paragrafo>
<paragrafo>Secondo paragrafo</paragrafo>
</capitolo>
<nota>Nota</nota>
</testo>
Ogni tag presente indica abbastanza chiaramente quali parti del documento si vogliono descrivere e come deve essere strutturato. Ecco perchè XML può essere utilizzato in qualunque settore per definire una formattazione standard di documenti, che può essere facilmente condivisa fra piattaforme garantendo quindi una elevata portabilità.
All'inizio di un sorgente XML si utilizza l'istruzione:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
L'attributo version indica la versione in uso di XML. L'attributo opzionale encoding indica quale codifica e set di caratteri viene utilizzato; di default XML utilizza UTF-8. L'attributo opzionale standalone indica se il sorgente e' collegato ad una DTD esterna (standalone="no") o interna. Infatti la DTD può essere indicata in un file esterno o inserita nel sorgente stesso dopo la dichiarazione iniziale. In seguito si vedrà come gestire le due situazioni.
Ogni tag definito in XML rappresenta un elemento, con una sintassi simile all'HTML: esiste un tag di apertura <tag> e uno di chiusura </tag>, ed il testo contenuto all'interno rappresenta il valore di quell'elemento.
Esistono anche elementi con valore nullo, e possono essere con tag singoli nella forma <tag />.
A differenza dell'HTML, XML è case-sensitive, per cui bisogna essere consistenti quando si definiscono i tag.
Come è facile intuire, la struttura di un sorgente XML è vista come un albero: vi è sempre un elemento root, primo elemento del sorgente; gli elementi contenuti al suo interno sono figli;
L'XML permette di utilizzare anche gli attributi, che sono delle coppie nome-valore all'interno del tag di apertura di un elemento. Ad esempio, è possibile scrivere:
<testo data="20/02/1980" autore="un_autore">
.....
</testo>
i due attributi data e autore danno ulteriore informazioni sul tag in cui sono inseriti.
Per quanto riguarda i commenti, questi vengono inseriti in maniera identica all'HTML, cioe' all'interno dei tag <!-- -->.
Bisogna rispettare delle regole quando per comporre un file XML:
- i nomi in XML (sintassi dei tag) possono essere composti da un qualunque carattere alfa-numerico, compresi i caratteri . - _
- ogni tag aperto deve essere chiuso;
- ci deve essere uno e un solo elemento radice (root);
- ogni valore di attributo deve essere tra doppi apici;
- gli elementi non devono sovrapporsi;
- i commenti non possono essere annidati nè inseriti all'interno di tag;
- due attributi non possono avere lo stesso nome
Oltre a queste, ci sono altre regole che il parser indicherà in caso di documenti non ben formati.
Document Type Definition
La validazione di un documento avviene attraverso le DTD (Document Type Definition), che descrivono come i vari tag XML debbano essere inseriti, in quale ordine e numero, secondo regole più o meno rigide; per capire subito l'utilità di una DTD ecco un esempio applicato al sorgente iniziale:
<!ELEMENT testo (capitolo, nota) >
<!ELEMENT capitolo (paragrafo)+ >
<!ELEMENT paragrafo (#PCDATA) >
<!ELEMENT nota (#PCDATA) >
Questa breve DTD indica come deve essere composto il documento. Quando il sorgente rispetta una DTD si parla di documento XML valido. Essere “non valido” è meno bloccante dell'essere “non ben formato”, perchè nel primo caso dipende dall'applicazione che utilizza il sorgente, mentre nel secondo è proprio il parser a non accettare errori.
Analizzando la DTD, vediamo che e' composta da dichiarazioni di elemento, che identificano gli elementi XML e cosa devono contenere; la DTD in oggetto potrebbe essere tradotta così:
- l'elemento testo deve contenere prima un elemento capitolo, poi un elemento nota;
- l'elemento capitolo deve essere formato da almeno un elemento paragrafo;
- l'elemento paragrafo contiene caratteri alfanumerici;
- l'elemento nota contiene caratteri alfanumerici
Nella dichiarazione di elemento per il tag capitolo, si è utilizzato un l’operatore +, che ha la funzione di indicare che l'elemento che lo precede deve essere presente una o più volte. Altri operatori di questo tipo sono:
- ? zero o una volta
- * zero, una o più volte
Un altro operatore interessante è |, che si utilizza per indicare una scelta. Se nel sorgente XML si volesse dare la possibilità all'elemento <capitolo> di contenere o un elemento <paragrafo> o un elemento <sezione> (non presente nel sorgente in esempio), si scriverà:
<!ELEMENT capitolo (paragrafo+ | sezione) >
..........
<!ELEMENT sezione (#PCDATA) >
........
Attraverso l'uso delle parentesi tonde e degli operatori appena esposti, è possibile creare DTD elaborate.
All'interno di un documento XML è possibile indicare la DTD con cui confrontare il sorgente per mezzo della parola chiave SYSTEM. Per esempio:
<!DOCTYPE testo SYSTEM "testo.dtd" >
L'istruzione precedente, inserita dopo il tag iniziale <?xml ... ?>, dice che l'elemento root è testo e che la DTD può essere trovata sulla stessa macchina e stessa directory nel file testo.dtd. E’ possibile anche utilizzare un percorso relativo o un percorso web:
<!DOCTYPE testo SYSTEM "/DTD/testo.dtd" >
<!DOCTYPE testo SYSTEM "http://sito/dir/testo.dtd" >