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:

  1. versione di XML in uso (attributo version)
  2. codifica del documento (attributo encoding)
  3. se il documento dipende o meno da una DTD esterna per la validazione (attributo standalone - valori yes o no)

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:

  1. Un documento XML deve avere sempre un prologo XML all'inizio:

    
    <?xml version="1.0" encoding="utf-8"?>
    
    <documento></documento>
    
    
  2. Un documento XML deve avere sempre un (e uno soltanto) elemento radice. Quindi:

    
    <?xml version="1.0" encoding="utf-8"?>
    
    <documento></documento>
    <elemento></elemento>
    
    

    è errato e restituirà un errore nel parsing, mentre:

    
    <?xml version="1.0" encoding="utf-8"?>
    
    <documento></documento>
    
    

    è corretto

  3. Gli elementi devono essere correttamente annidati. Quindi:

    
      <elemento>
        <para>
      </elemento>
      </para>
    
    

    è errato e restituirà un errore nel parsing, mentre:

    
    <elemento>
      <para></para>
    </elemento>
    
    

    è corretto

  4. Gli attributi devono essere sempre racchiusi tra virgolette. Quindi:

    
      <elemento nome=valore></elemento>
    
    

    è errato e restituirà un errore nel parsing, mentre:

    
    	<elemento nome="valore"></elemento>
    
    

    è corretto

  5. 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.

  6. Tutti gli elementi devono avere un tag di chiusura, compresi gli elementi vuoti. Per tali elementi potete usare sia

    
    <elemento></elemento>
    
    

    o più brevemente

    
    <elemento />
    
    
  7. Tutti i caratteri speciali (tra cui i caratteri >, <, ", &) devono essere codificati usando entità SGML, ossia &gt;, &lt; 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().