Good Ideas

Lo strano tag DOCTYPE iniziale dell’HTML

Posted by:

|

On:

|

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 *