HTML5 e la soluzione del problema dei processori validanti e non validanti

HTML5 ha scelto di non utilizzare una DTD per via di un problema in cui erano cadute le specifiche XHTML.

XHTML infatti prevedeva l'uso della DTD, ma questa scelta non ebbe seguito se non ad uso esclusivo del validatore del W3C. Infatti i browser non hanno mai usato la DTD XHTML, in quanto essi utilizzano un processore non validante. Cosa significa non validante?

Ecco cosa dicono le specifiche XML:

I processori XML conformi si dividono in due categorie: validanti e non validanti.

Entrambi i tipi di processori devono ugualmente segnalare le violazioni alle specifiche XML relative alle regole espresse nella DTD ed in qualsiasi altra entità analoga.

(Definizione: i processori validanti devono, a scelta dell'utente, segnalare la violazione delle regole espresse nelle dichiarazioni della DTD e gli errori nel soddisfare i requisiti delle specifiche XML). Per far ciò, i processori XML validanti devono leggere e analizzare l'intera DTD e tutte le entità esterne contenute nel documento.

I processori non validanti devono solo verificare la conformità sintattica del documento. (Definizione: per quanto questi processori non debbano verificare la validità del documento, essi devono comunque leggere ed elaborare tutte le dichiarazioni incontrate nella DTD interna e tutte le entità; in altre parole, devono utilizzare le informazioni contenute in tali dichiarazioni per normalizzare i valori degli attributi, sostituire il testo delle entità interne e fornire valori predefiniti per gli attributi). Ad eccezione di quando è presente il valore yes per l'attributo standalone, essi non devono elaborare le dichiarazioni di entità o gli elenchi di attributi che trovano dopo un riferimento ad un'entità parametro non letto, in quanto l'entità potrebbe contenere dichiarazioni che sovrascrivono le precedenti; quando invece è presente il valore yes per l'attributo standalone, i processori devono elaborare queste dichiarazioni.

In pratica i browser di fronte ad un errore come questo nella DTD XHTML:


<a>
<h1>...</h1>
</a>

visualizzano ugualmente il documento, in quanto controllano solo la conformità sintattica del documento e non la sua validità. Il frammento di codice può essere usato anche servendo un documento come application/xhtml+xml senza restituire alcun errore.

Quindi le DTD non servono ai browser in quanto il loro tipo di processore è non validante. Ed è questo il motivo principale per cui la DTD è stata rimossa da HTML5.