XML è un formato universale per lo scambio di dati sul web. In essenza, si tratta di un linguaggio di marcatura esattamente come HTML, ma con regole sintattiche molto più rigorose. In questo articolo delineeremo le caratteristiche principali di XML e le sue differenze con HTML.
Nomi degli elementi
XML non ha un insieme predefinito di elementi come HTML, poichè a differenza di HTML non dispone di una DTD predefinita. Siamo noi che di volta in volta definiamo i nomi dei nostri elementi nel nostro documento. Gli unici limiti sono:
- non è possibile usare come nome di elemento
xml
- i nomi di elemento non possono iniziare con un numero.
Prologo XML
Posto sempre all'inizio di un documento XML prima dell'elemento radice, il prologo XML serve a definire tre cose:
- versione di XML in uso (attributo
version
) - codifica del documento (attributo
encoding
) - se il documento dipende o meno da una DTD esterna per la validazione (attributo
standalone
- valoriyes
ono
)
Esempio:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<documento></documento>
Elemento radice
Tutti i documenti XML devono avere un elemento radice. Questo elemento conterrà tutto l'albero del documento e la sua struttura DOM.
<?xml version="1.0" encoding="utf-8"?>
<documento>
<sezione id="sezione-a">
<titolo livello="1">Titolo</titolo>
<para>...</para>
</sezione>
</documento>
Codifica e tipo di contenuto
XML dovrebbe essere sempre servito con la codifica UTF-8
come codifica di base. Il tipo di contenuto per XML può essere sia text/xml
(retrocompatibile) che il più moderno e appropriato application/xml
.
Sintassi rigorosa
La prima e più importante caratteristica di XML è la rigorosità sintattica. Ossia:
- Un documento XML deve avere sempre un prologo XML all'inizio:
<?xml version="1.0" encoding="utf-8"?> <documento></documento>
- Un documento XML deve avere sempre un (e uno soltanto) elemento radice. Quindi:
è errato e restituirà un errore nel parsing, mentre:<?xml version="1.0" encoding="utf-8"?> <documento></documento> <elemento></elemento>
è corretto<?xml version="1.0" encoding="utf-8"?> <documento></documento>
- Gli elementi devono essere correttamente annidati. Quindi:
è errato e restituirà un errore nel parsing, mentre:<elemento> <para> </elemento> </para>
è corretto<elemento> <para></para> </elemento>
-
Gli attributi devono essere sempre racchiusi tra virgolette. Quindi:
è errato e restituirà un errore nel parsing, mentre:<elemento nome=valore></elemento>
è corretto<elemento nome="valore"></elemento>
- XML è sensibile alle maiuscole e alle minuscole. Quindi
<elemento>
e<ELEMENTO>
sono due cose distinte. Questo principio si applica ai nomi degli elementi, agli attributi e ai valori di attributo. - Tutti gli elementi devono avere un tag di chiusura, compresi gli elementi vuoti. Per tali elementi potete usare sia
o più brevemente<elemento></elemento>
<elemento />
- Tutti i caratteri speciali (tra cui i caratteri >, <, ", &) devono essere codificati usando entità SGML, ossia >, < e così via. Qualora non fosse disponibile un'entità nominale, si può usare la versione esadecimale, ossia
&#x + valore Unicode + ;
Per i valori Unicode, si faccia riferimento al sito di Alan Wood
Fogli di stile per XML
Possiamo associare un foglio di stile CSS ad un documento XML usando la seguente PI (Processing Instruction) posta subito dopo il prologo XML:
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet href="stile.css" type="text/css"?>
Questa PI ha un funzionamento del tutto analogo all'elemento link
in HTML.
Attributi ID e class in XML
Dato che XML non ha una DTD predefinita, gli attributi ID e class assegnati ad un elemento verranno trattati diversamente dai programmi che andranno ad elaborare il documento. Per esempio, un browser web ignorerà gli stili CSS assegnati tramite tali attributi, in quanto per impostazione predefinita l'elemento selezionato non ha questi attributi ad esso associati.
Lo stesso discorso vale per i metodi del DOM che lavorano con questi attributi, come getElementById()
o getElementsByClassName()
. Per ovviare al problema, possiamo usare nei CSS i selettori di attributo e nel DOM metodi più generici, come getElementsByTagName()
.