Quando si parla di HTML5, CSS3 e (X)HTML5, a volte si rischia di non comprendere l'argomento perché mancano le conoscenze teoriche che stanno “a monte” della definizione di HTML. Oggi cercheremo di chiarire l'argomento senza entrare troppo nel dettaglio, allo scopo di fornire il bagaglio di conoscenze minime per districarsi agevolmente tra le diverse versioni dell'HTML.

Sin dalla sua nascita, a cavallo tra gli anni '80 e gli anni '90, le prime versioni dell'HTML venivano specificate usando lo Standard Generalized Markup Language, in breve SGML, il cui scopo principale è quello di scrivere dei DTD (Document Type Definition). Facendo un paragone con la lingua Italiana, un documento DTD è la “grammatica” che definisce le regole di una lingua.

C'è però una differenza: un libro di grammatica è scritto in italiano, cosa che crea un circolo vizioso: occorre sapere l'italiano per leggere la grammatica, ma occorre conoscere la grammatica per capire l'italiano. Noi esseri umani risolviamo il problema imparando prima a parlare un linguaggio infantile, che basta per andare a scuola, imparare a leggere e studiare la grammatica italiana. Il risultato finale è che noi esseri umani usiamo lo stesso linguaggio sia per parlare, sia per specificare le regole della grammatica.

I computer non possono fare altrettanto, ma hanno bisogno di un altro linguaggio (lo SGML) per scrivere il libro di grammatica (il DTD). In questo modo il libro di grammatica (il DTD) può dettare le regole del linguaggio “parlato” (l'HTML) senza creare circoli viziosi.

Ma a cosa serve definire le regole dell'HTML in modo così complicato e pignolo? Vediamo un esempio pratico, considerando due ipotetiche pagine web che inizino in questo modo

Primo caso

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

ecc...

Secondo caso

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>

ecc...

Nel primo caso la pagina web dichiara di usare un grammatica HTML conforme alle specifiche del DTD disponibile al seguente URI

http://www.w3.org/TR/html4/loose.dtd

mentre nel secondo caso la pagina dichiara di rispettare il “libro di grammatica”

http://www.w3.org/TR/html4/strict.dtd

Se l'argomento sembra troppo teorico, o se la definizione di DTD continua a sfuggirci, ecco un semplice esercizio pratico che dovrebbe chiarire le idee: scarichiamo i due documenti disponibili agli URI scritti qui sopra e salviamoli, come files di testo, in una qualsiasi directory del nostro computer. Dopodiché apriamo un editor in grado di confrontare due files, come ad esempio Notepad++, ed eseguiamo un compare (ovvero un diff) dei due files.

Vedremo che nel passaggio dalla grammatica loose (sciolta e permissiva) a quella strict (più rigida e pignola) la maggior parte delle modifiche riguardano regole ed elementi che esistevano nel DTD loose ma sono state eliminate nella versione strict. Ciò significa che in genere il DTD strict permette meno tag, meno attributi e meno entità HTML rispetto alla precedente grammatica loose.

Riprendendo il paragone con la lingua italiana il DTD loose potrebbe essere la grammatica dell'italiano Volgare, che permetteva frasi del tipo “Nel mezzo del cammin di nostra vita”, mentre la grammatica strict è quella dell'Italiano odierno, che non permette più l'uso della parola “cammin”, ma pretende che venga scritta per intero (cioè “cammino”).

Adesso che abbiamo toccato con mano la struttura di un vero documento DTD, possiamo precisare alcuni importanti aspetti dell'argomento

  • Un DTD può essere utilizzando per definire qualsiasi linguaggio di markup, e non solo l'HTML. Con un DTD posso definire la grammatica di un qualsiasi file XML
  • Il DTD non è l'unico modo di specificare la grammatica dei file XML. Esiste un validissimo concorrente, detto XSD (XML Schema Definition) che negli ultimi anni ha sbaragliato il DTD per quanto riguarda la definizione di una generica struttura XML. Il formato DTD rimane comunque il più usato per quanto riguarda l'HTML
  • Lo scopo principale del DTD (o del suo equivalente XSD) è di validare un file XML (o una pagina web). Per validazione si intende il confronto tra un documento (XML o HTML) con una certa grammatica (un DTD o un XSD), allo scopo di verificare se il documento rispetta correttamente le regole della grammatica

Nel caso di una pagina web, scritta in HTML o XHTML, la dichiarazione in testa del DTD non modifica più di tanto il modo in cui la pagina verrà visualizzata dal browser (Quirksmode a parte), ma serve solamente a dichiarare con quale “dialetto” dell'HTML è stata scritta la pagina. Notare che se nessuno valida la nostra pagina contro il DTD che abbiamo dichiarato, è possibile anche “imbrogliare”, ovvero dichiarare la sintassi strict anche se in realtà usiamo quella loose. Tutto funzionerà abbastanza bene, l'unico inconveniente è che rischiamo di fare una “figuraccia” se qualcuno si prendesse la briga di validare la nostra pagina web. E' per questo motivo che la dichiarazione del DTD è facoltativa, e diventa importante solamente quando vogliamo certificare la versione del nostro HTML.

Conclusioni

Abbiamo visto che la dichiarazione o meno del DTD non impatta in modo significativo sul funzionamento delle nostre pagine web. La dichiarazione del DTD diventa importante solamente se vogliamo certificare la qualità del nostro sito, cosa che tipicamente avviene se realizziamo le pagine con la grammatica XHTML strict e vogliamo fregiarci del logo W3C, validando le nostre pagine qui.

La comprensione dei DTD può servire anche a stare al passo con le novità di HTML5 e (X)HTML 5. Se volessimo ad esempio dare un'occhiata alle differenze tra le diverse versioni dell'XHTML, ci basterà confrontare i DTD delle rispettive dichiarazioni

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">