Lavorando sul web è pressoché obbligatorio conoscere i rudimenti dell'HTML e dell'XML, almeno a livello operativo, ma a volte è difficile orientarsi nel guazzabuglio di tecnologie esistenti, quali ad esempio XHTML 1.0, HTML 4, XHTML 2.0, X/HTML 5. Per riuscirci dobbiamo fare un passo in dietro e discutere il paradigma alla base di questi linguaggi: i linguaggi di markup.

Le origini dei linguaggi di markup può essere fatta risalire ad alcuni sistemi di composizione dei testi tipografici usati soprattutto tra la fine degli anni '80 e nei primi anni '90, come ad esempio LaTex. Il concetto principale alla base dei linguaggi di markup è quello di specificare come deve essere stampato un certo testo usando delle meta-istruzioni, ad esempio:

ORIGINALE RISULTATO
Parola in <grassetto>grassetto<grassetto> Parola in grassetto

In questo caso l'istruzione <grassetto> è una marcatura, ovvero un'indicazione inserita dall'editore che spiega come stampare la parola “grassetto” contenuta tra le due marcature. Si tratta di un'idea apparentemente banale, eppure l'adozione dei linguaggi di markup può essere considerata una rivoluzione simile a quella dell'introduzione dei caratteri mobili da parte di Gutenberg.

L'HTML, ovvero Hyper Text Markup Language, è il linguaggio di markup convenzionalmente usato per scrivere ipertesti, che vengono poi trasmessi mediante il protocollo HTTP. Nel caso dell'HTML gli elementi di marcatura vengono dette tag HTML.

SORGENTE (HTML) RISULTATO (VISUALIZZATO)
Parola in <strong>grassetto</strong> Parola in grassetto

La prima marcatura <strong> viene detta tag di apertura, la seconda marcatura </strong> (notare lo slash prima della “s”) viene detta tag di chiusura. Un elemento HTML è invece tutto il testo compreso tra le due tag (incluse):

<strong>grassetto</strong>

L'enumerazione e descrizione delle varie tag HTML esula dagli scopi del nostro articolo: chi non conoscesse l'HTML può le consultare le guide del consorzio W3C, disponibili qui. Quello che ci interessa è invece osservare che l'HTML nasce con lo scopo di fornire anche una rappresentazione semantica dell'ipertesto, perché non si limita a dire come stampare caratteri, parole o immagini, ma specifica anche il significato (o meglio il ruolo) dei vari elementi.

SORGENTE (HTML) RISULTATO (VISUALIZZATO)
<h1>Titolo della notizia</h1> <p>Contenuto della notizia</p>
Titolo della notizia Contenuto della notizia

Nell'esempio qui sopra la tag <h1> è l'abbreviazione di Heading 1, ovvero “intestazione del capitolo”: ciò significa che la tag <h1> non si limita a dire “stampa in grassetto e in grande”, ma ci dice anche che la frase “titolo della notizia” ha il ruolo (semantico) di titolo del paragrafo. L'osservazione ci permette di evidenziare la principale differenza tra i due linguaggi di markup più diffusi, l'HTML e l'XML:

  • il linguaggio HTML definisce la presentazione di un documento, spesso facendo riferimento al significato del contenuto, ma con meno cura della sintassi
  • Il linguaggio XML si occupa di definire la struttura e/o contenuto di un documento, senza specificare la presentazione, occupandosi della semantica il minimo possibile
Da questa diversa impostazione seguono le altre differenze tra i due linguaggi: l'HTML è più flessibile sulla sintassi, consentendo di ottenere un stesso risultato in maniera diversa, ma non è estendibile, cioè non permette al programmatore di inventarsi le tag, obbligandolo ad usare solo quelle permesse dalle specifiche. Di contro l'XML è estendibile, in quanto permette di “inventarsi” le tag che più servono a seconda del contesto, e ci riesce proprio perché non da troppo peso al significato delle tag stesse. Data tanta libertà l'XML è giocoforza molto rigido sulla sintassi, altrimenti si rischierebbe di introdurre definizioni ambigue delle nuove tag.
XML (giusto) XML (giusto) XML (sbagliato)

<cliente>

<nome>Mario</nome>

<cognome>Rossi</cognome>

</cliente>

<cli><nom>Mario</nom><cog>Rossi</cog></cli>

<cli>

<nome>Mario

Rossi<cognome>

</cliente>

L'esempio mostra come l'XML permette di “inventare” il nome delle tag: posso decidere di usare nome e cognome oppure una forma abbreviata di mio gusto, che potrebbe essere nom e cog. Devo però essere coerente, ovvero usare sempre la stessa sintassi, e chiudere correttamente ogni tag, rigore sintattico che non è richiesto nell'HTML. Notare che nell'esempio qui sopra manca la colonna “risultato” o “visualizzazione”, in quanto l'XML non si occupa di questo aspetto, ma solamente di rappresentare in modo preciso dati, informazioni e strutture di dati.

Tutto ciò ci permette di evidenziare le differenze tra due paradigmi in competizione:

  • Le diverse versioni dell' HTML, tra cui le più recenti HTML 4.x e HTML 5, sono diventate man mano più precise sulla sintassi, avvicinandosi (senza ambire a raggiungerlo) al rigore dell'XML, ma restando sempre non estendibili
  • L'XHTML è fondamentalmente dell'HTML “scritto bene”, rispettando rigorosamente la sintassi XML: un documento XHTML è contemporaneamente una pagina HMTL e un file XML (ma non estendibile)

La convergenza dei due approcci ha contribuito alla definizione, non ancora ufficiale, dell'HTML 5. Le specifiche dell'HTML5 mirano tra l'altro a ridurre le differenze tra HTML e XHTML, e per questo alcuni parlano di X/HTML 5. La proposta dell'HTML5 ha già sbaragliato il suo principale antagonista, passato alla storia come XHTML 2 senza mai essere adottato. L'HTML 5 sembra quindi essere il miglior candidato a semplificarci la vita nel prossimo futuro.