Lo strano tag DOCTYPE iniziale dell’HTML

doctype xhtml 1.0 strictSono molte le persone, fra coloro che scrivono pagine web in modo fai da te, che sottovalutano l’importanza di avere in ogni documento, sia esso html, xhtml o applicazioni speciali WEB2.0, un appropriato tag !DOCTYPE che referenzi un altrettanto appropriato DTD.

In questo articolo cercheremo di capirne la storia, di analizzarne la sintassi e vedremo le differenze fra i diversi tipi possibili: queste ultime spesso e volentieri non sono di poco conto, perché influenzano il modo in cui il browser ci mostra le pagine sullo schermo; in casi estremi si potrebbe addirittura stravolgere la pagina dando ai tag e ai loro attributi un significato diverso (nel caso si faccia uso di un dtd diverso da quello relativo alla sintassi della nostra pagina).

doctypeFin dall’HTML 3.2 infatti (anno 1997) i documenti avrebbero dovuto sforgiare, posto all’inizio, un tag di tipo !DOCTYPE; tuttavia per mille ragioni (tra cui anche il fatto che in ogni caso la pagina html funzionava senza particolari problemi), questo tag fu spesso ignorato da molti, addirittura nemmeno inserito, o se inserito facendo un copia-incolla senza averne ben chiara la sintassi. La sua introduzione si rese necessaria per tre ordini di motivo:

  • Avere uno standard unico che coprisse tutti i meta-linguaggi derivati dal SGML (come è appunto l’HTML).
  • Dare un’informazione in più ai browser, che così possono capire che tipo di documento sia quello che stanno aprendo
  • Potere ‘validare’ in modo appropriato le pagine, ovverosia vedere se utilizzano tag obsoleti, specifici (non cross-browser) o illegali (conformemente al DTD dato)
  • Aiutare in un certo senso l’aderenza agli standard da parte dei browser che alla fine degli anni ’90 non era adeguata: facendo così si sarebbe spianata la strada per far visualizzare ai browser gli elementi in un modo piuttosto che in un altro; in particolare questo ha portato ai browser moderni la possibilità di aderire a due diverse modalità: una standard, quando si trovano ad avere a che fare con una pagina con doctype riconosciuto dal browser, e quindi con una sintassi rigida e non retrocompatibile che segue il w3c, ed una quirk, quando la pagina che visualizzano è priva di !doctype oppure non sia riconosciuto; questa ultima modalità è utile nel caso di codice html molto vecchio che magari ha ancora all’interno tag non cross-browser come ad esempio "blink" o "marquee" od illegali.

Per poterne analizzare la sintassi, vediamo Innanzitutto un !DOCTYPE di esempio, preso proprio dal sito Dynamick che sforgia un DTD recente di tipo XHTML 1.0:

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

oppure un altro, preso dal sito www.tin.it, che ha un doctype HTML 4.01:

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

Dobbiamo trattenerci dalla tentazione di dire che un DOCTYPE è ‘migliore’ di un altro, perché non esiste una regola vera e propria, l’unica regola è che i tag che si utilizzano siano ‘attinenti’ e ‘conformi’ al dtd specificato (e non magari ad un altro).

Occupiamoci ora della sintassi, dopo il classico <!DOCTYPE , scritto in maiuscolo:

  • è esplicitato il tag di apertura (in entrambi gli esempi ‘html’)
  • successivamente va indicato se il dtd è pubblico (PUBLIC) o privato o di sistema (SYSTEM), negli esempi ‘PUBLIC’
  • successivamente una stringa fra virgolette, con tante informazioni suddivise da ‘//’, più in particolare:
    • + o – a seconda che il dtd utilizzato sia o meno registrato all’ISO, in entrambi gli esempi ‘-‘
    • Il consorzio che emana questo DTD (W3C), seguito dopo uno spazio dal nome del documento e dalla versione (facoltativa) e, scendendo più in dettaglio viene indicato anche il tipo di HTML o XHTML:
      • Strict: che fa più attenzione alla sintassi utilizzata
      • Transitional: più aperto alle diverse sintassi (anche quelle un po’ datate)
      • Frameset: nel caso ci troviamo di fronte a pagine suddivise in più frame.
    • Eventuale lingua della documentazione (usualmente EN)
  • Un’altra stringa che identifica il percorso completo del DTD (acronimo di Document Type Definition, ovverosia definizione del tipo di documento)

Le differenze fra una versione e l’altra spaziano dalla diversa renderizzazione a video delle larghezze di alcuni elementi, alla disposizione non corretta (al mm, o al pixel) degli stessi.

Scendendo più in dettaglio, tramite un singolo DTD riconosciuto da tutti i browser dovrebbe essere possibile la renderizzazione uguale (o comunque simile al 99,99%) di una pagina da parte dei primi, cosa in passato impossibile. Le differenze di renderizzazione tra un browser e un altro si hanno solo nel caso del quirk mode che abbiamo già citato (ovverosia quando non esiste !DOCTYPE o non viene riconosciuto dal browser), in cui ogni browser fa un po’ come vuole. In ogni caso, nel quirk mode vi sono alcune peculiarità comuni a tutti i browser moderni, tra queste, ricordiamo che:

  • i valori dei colori in formato esadecimale vengono accettati anche se non iniziano per #.
  • i valori numerici senza unità di misura vengono accettati anche se successivamente non è specificato px.

Anche documenti non HTML hanno un loro DTD; e la sintassi per esplicitarlo all’interno del documento è pressoché simile, questo è un esempio trovato su internet che referenzia una abbastanza nota applicazione web2:

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

…………

</web-app>

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

%d blogger hanno fatto clic su Mi Piace per questo: