Il DOCTYPE sniffing di Mozilla
Articolo originale: http://developer.mozilla.org/en/docs/Mozilla%27s_DOCTYPE_sniffing
Autore: David Baron
Traduzione: Gabriele Romanato (21 febbraio 2008)
Questo documento descrive come Mozilla usa la dichiarazione di DOCTYPE per determinare la modalità rigorosa o la modalità quirks. Il codice che crea questa scelta si trova attualmente in DetermineParseMode() del file nsParser.cpp. Si veda il bug 1312 e il bug 55264 per la storia della scelta della modalità. Si veda il bug 153032 per la creazione della modalità Almost Standards in Mozilla 1.0. Gli obiettivi che portarono alla scelta di questo comportamento erano i seguenti:
- Quasi tutte le pagine esistenti in
text/htmlsul Web, che devono essere in modalità quirks per essere visualizzate correttamente, dovrebbero usare la modalità quirks (quasi tutte, invece che tutte, per permettere l'attuazione dei punti che seguono). - Gli autori che scrivono pagine web secondo gli standard attuali dovrebbero essere in grado di usare la modalità rigorosa.
- Le pagine scritte usando gli identificatori pubblici nelle dichiarazioni di DOCTYPE che verranno create in futuro dovrebbero essere visualizzate usando la modalità rigorosa.
In altre parole, questo algoritmo è la migliore approssimazione che possiamo trovare per determinare quali pagine furono scritte dopo che Mozilla divenne un importante programma utente sul Web.
Contenuti
- 1. Piena modalità standard
- 2. Modalità Almost Standards
- 3. Modalità Quirks
- 4. Vedi anche
- 5. Informazioni sul documento originale
1. Piena modalità standard
Quello che segue causa la piena modalità standard
- Ogni documento inviato con un tipo MIME XML, come
text/xml,application/xml, oapplication/xhtml+xml(poiché lo sniffing avviene solo per i documenti inviati cometext/html). - Ogni "DOCTYPE HTML SYSTEM" in opposizione a "DOCTYPE HTML PUBLIC", tranne per il DOCTYPE IBM segnalato di seguito.
- Una dichiarazione di DOCTYPE senza una DTD, ossia <!DOCTYPE HTML>.
- Una dichiarazione di DOCTYPE con un sottoinsieme interno.
- Ogni DOCTYPE sconosciuto, che dovrebbe includere i seguenti (tecnicamente conosciuti):
- L'identificatore pubblico "-//W3C//DTD HTML 4.01//EN".
- L'identificatore pubblico "-//W3C//DTD HTML 4.0//EN".
- L'identificatore pubblico "-//W3C//DTD XHTML 1.0 Strict//EN".
- L'identificatore pubblico "ISO/IEC 15445:2000//DTD HyperText Markup Language//EN".
- L'identificatore pubblico "ISO/IEC 15445:2000//DTD HTML//EN".
- L'identificatore pubblico "-//IETF//DTD HTML i18n//EN".
2. Modalità Almost Standards
Quello che segue causa la modalità almost standards. La modalità almost standards venne creata dopo le versioni 1.0 e 1.1 alfa, ma prima delle versioni 1.0.1 e 1.1 beta. Prima di allora questi DOCTYPE causavano la piena modalità standard.
- L'identificatore pubblico "-//W3C//DTD XHTML 1.0 Transitional//EN".
- L'identificatore pubblico "-//W3C//DTD XHTML 1.0 Frameset//EN".
- L'identificatore pubblico "-//W3C//DTD HTML 4.01 Transitional//EN", con un identificatore di sistema.
- L'identificatore pubblico "-//W3C//DTD HTML 4.01 Frameset//EN", con un identificatore di sistema.
3. Modalità Quirks
Quello che segue causa la modalità quirks (questo elenco ha bisogno di essere onnicomprensivo per fare in modo che le pagine esistenti sul web causino la modalità quirks):
I seguenti siti sono stati utili nel preparare questo elenco: W3C HTML Validator, HTMLHelp HTML Validator.
- L'assenza di un DOCTYPE.
- Una dichiarazione XML (pseudo-PI) senza un DOCTYPE (in altre parole, si ignora la dichiarazione XML e si usa il DOCTYPE). Nelle versioni 1.0 e 1.1 alfa e precedenti (ma non in 1.0.1 o 1.1 beta), la presenza di una dichiarazione XML causava la piena modalità standard.
- Una dichiarazione di DOCTYPE che non può essere compresa (per esempio non vi è una corretta virgolettatura).
- L'identificatore di sistema "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" (prima di 1.5b e 1.4.2, questo causava la modalità almost standards).
- L'identificatore pubblico "-//W3C//DTD HTML 4.01 Transitional//EN", senza un identificatore di sistema.
- L'identificatore pubblico "-//W3C//DTD HTML 4.01 Frameset//EN", senza un identificatore di sistema.
- L'identificatore pubblico "-//W3C//DTD HTML 4.0 Transitional//EN" (si veda anche il test con un identificatore di sistema).
- L'identificatore pubblico "-//W3C//DTD HTML 4.0 Frameset//EN" (si veda anche il test con un identificatore di sistema).
- L'identificatore pubblico "-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//EN".
- L'identificatore pubblico "-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//EN".
- L'identificatore pubblico "-//IETF//DTD HTML//EN//3.0".
- L'identificatore pubblico "-//W3O//DTD W3 HTML 3.0//EN//".
- L'identificatore pubblico "-//W3O//DTD W3 HTML 3.0//EN".
- L'identificatore pubblico "-//W3C//DTD HTML 3 1995-03-24//EN".
- L'identificatore pubblico "-//IETF//DTD HTML 3.0//EN".
- L'identificatore pubblico "-//IETF//DTD HTML 3.0//EN//".
- L'identificatore pubblico "-//IETF//DTD HTML 3//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Level 3//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Level 3//EN//3.0".
- L'identificatore pubblico "-//IETF//DTD HTML 3.2//EN".
- L'identificatore pubblico "-//AS//DTD HTML 3.0 asWedit + extensions//EN".
- L'identificatore pubblico "-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Strict//EN//3.0".
- L'identificatore pubblico "-//W3O//DTD W3 HTML Strict 3.0//EN//".
- L'identificatore pubblico "-//IETF//DTD HTML Strict Level 3//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Strict Level 3//EN//3.0".
- L'identificatore pubblico "HTML".
- L'identificatore pubblico "-//IETF//DTD HTML//EN".
- L'identificatore pubblico "-//IETF//DTD HTML//EN//2.0".
- L'identificatore pubblico "-//IETF//DTD HTML 2.0//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Level 2//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Level 2//EN//2.0".
- L'identificatore pubblico "-//IETF//DTD HTML 2.0 Level 2//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Level 1//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Level 1//EN//2.0".
- L'identificatore pubblico "-//IETF//DTD HTML 2.0 Level 1//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Level 0//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Level 0//EN//2.0".
- L'identificatore pubblico "-//IETF//DTD HTML Strict//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Strict//EN//2.0".
- L'identificatore pubblico "-//IETF//DTD HTML Strict Level 2//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Strict Level 2//EN//2.0".
- L'identificatore pubblico "-//IETF//DTD HTML 2.0 Strict//EN".
- L'identificatore pubblico "-//IETF//DTD HTML 2.0 Strict Level 2//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Strict Level 1//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Strict Level 1//EN//2.0".
- L'identificatore pubblico "-//IETF//DTD HTML 2.0 Strict Level 1//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Strict Level 0//EN".
- L'identificatore pubblico "-//IETF//DTD HTML Strict Level 0//EN//2.0".
- L'identificatore pubblico "-//WebTechs//DTD Mozilla HTML//EN".
- L'identificatore pubblico "-//WebTechs//DTD Mozilla HTML 2.0//EN".
- L'identificatore pubblico "-//Netscape Comm. Corp.//DTD HTML//EN".
- L'identificatore pubblico "-//Netscape Comm. Corp.//DTD HTML//EN".
- L'identificatore pubblico "-//Netscape Comm. Corp.//DTD Strict HTML//EN".
- L'identificatore pubblico "-//Microsoft//DTD Internet Explorer 2.0 HTML//EN".
- L'identificatore pubblico "-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//EN".
- L'identificatore pubblico "-//Microsoft//DTD Internet Explorer 2.0 Tables//EN".
- L'identificatore pubblico "-//Microsoft//DTD Internet Explorer 3.0 HTML//EN".
- L'identificatore pubblico "-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//EN".
- L'identificatore pubblico "-//Microsoft//DTD Internet Explorer 3.0 Tables//EN".
- L'identificatore pubblico "-//Sun Microsystems Corp.//DTD HotJava HTML//EN".
- L'identificatore pubblico "-//Sun Microsystems Corp.//DTD HotJava Strict HTML//EN".
- L'identificatore pubblico "-//IETF//DTD HTML 2.1E//EN".
- L'identificatore pubblico "-//O'Reilly and Associates//DTD HTML Extended 1.0//EN".
- L'identificatore pubblico "-//O'Reilly and Associates//DTD HTML Extended Relaxed 1.0//EN".
- L'identificatore pubblico "-//O'Reilly and Associates//DTD HTML 2.0//EN".
- L'identificatore pubblico "-//SQ//DTD HTML 2.0 HoTMetaL + extensions//EN".
- L'identificatore pubblico "-//Spyglass//DTD HTML 2.0 Extended//EN".
- L'identificatore pubblico "+//Silmaril//DTD HTML Pro v0r11 19970101//EN".
- L'identificatore pubblico "-//W3C//DTD HTML Experimental 19960712//EN".
- L'identificatore pubblico "-//W3C//DTD HTML 3.2//EN".
- L'identificatore pubblico "-//W3C//DTD HTML 3.2 Final//EN".
- L'identificatore pubblico "-//W3C//DTD HTML 3.2 Draft//EN".
- L'identificatore pubblico "-//W3C//DTD HTML Experimental 970421//EN".
- L'identificatore pubblico "-//W3C//DTD HTML 3.2S Draft//EN".
- L'identificatore pubblico "-//W3C//DTD W3 HTML//EN".
- L'identificatore pubblico "-//Metrius//DTD Metrius Presentational//EN".
Si noti che tutte le comparazioni di identificatori pubblici non sono sensibili al caso. Questo è dovuto al significativo numero di pagine che usano identificatori pubblici nel caso scorretto (questo non è tecnicamente corretto, in quanto le stringhe sono sensibili al caso).
4. Vedi anche
5. Informazioni sul documento originale
- Autore: David Baron
- Data dell'ultimo aggiornamento: 2 agosto 2005
- Informazioni sul copyright: Copyright (C) David Baron