この文書は Mozilla はどのように DOCTYPE 宣言を使って Strictモード と Quirksモード を判断するが書かれています。この判断を行うコードは現在のところ nsParser.cpp の DetermineParseMode() にあります。モード判断の歴史を知るには バグ 1312 と バグ 55264 をご覧下さい。Mozilla 1.0 前後に作られた Almost-Standard モードについては バグ 153032 をご覧下さい。この振る舞いを選ぶようにしている目的は以下の通りです:
- 正しく表示されるのに Quirks モードであることが必要な、ほぼ全ての既存の web の text/html ページは Quirks モードによって表示されるべきです (以下を配慮して、全てではなく ほぼ 全てのです)。
- 現在の標準に従って記述している著者は Strict モードを呼び出せるべきです。
- 将来登場する公開識別子を DOCTYPE 宣言で使用して書かれたページは Strict モードによって表示されるべきです。
つまり、どのページが Mozilla がウェブの重要なユーザエージェントとして知られるようになった後に書かれたものであるか判断を下すには、このアルゴリズムが最良の近似なのです。
Full Standards モード
以下の場合は Full Standards モード となります:
text/xml
,application/xml
,application/xhtml+xml
といった XML の MIME タイプで送られてきた文書全て(text/html
で送信された文書でのみ判別が行われるので)。- "DOCTYPE HTML PUBLIC" ではなく "DOCTYPE HTML SYSTEM" であるもの全て。但し後述の IBM DOCTYPE は除く。
- DTD の指定のない DOCTYPE 宣言全て。 例:
<!DOCTYPE HTML>
- 内部サブセットを伴った DOCTYPE 宣言。
- 未知の DOCTYPE 全て。以下の(技術的に既知の) DOCTYPE を含む。
Almost Standards モード
以下の場合は Almost Standards モード となります。Almost Standards モードは 1.0 や 1.1appha 以降、1.01 や 1.1beta 以前に作られました。Almost Standards モードが作られるまではこれらの DOCTYPE では Full Standards モードとなっていました。
- 公開識別子
"-//W3C//DTD XHTML 1.0 Transitional//EN"
- 公開識別子
"-//W3C//DTD XHTML 1.0 Frameset//EN"
- システム識別子を伴う 公開識別子
"-//W3C//DTD HTML 4.01 Transitional//EN"
- システム識別子を伴う 公開識別子
"-//W3C//DTD HTML 4.01 Frameset//EN"
Quirks モード
以下の場合は Quirks モードとなります(こちらのリストは既存のウェブページで確実に Quirks モード となるようにするため包括的でなければならない):
このリストの準備に際して次のサイトを利用させて頂きました: W3C HTML Validator, HTMLHelp HTML Validator.
- DOCTYPE を伴わない XML 宣言 (疑似公開識別子) (つまり、XML宣言は無視して DOCTYPE を使用します) 1.0 及び 1.1alpha 以前では (1.0.1 や 1.1beta は除く)、XML 宣言が存在すると Full Standards モード となっていました。
- 理解不能な DOCTYPE 宣言 (引用符が一致しないなど)
- システム識別子 "https://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" (1.5b と 1.4.2 以前ではこれは Almost standars モードとなっていました。)
- システム識別子を伴わない 公開識別子 "-//W3C//DTD HTML 4.01 Transitional//EN"
- システム識別子を伴わない 公開識別子 "-//W3C//DTD HTML 4.01 Frameset//EN"
- 公開識別子 "-//W3C//DTD HTML 4.0 Transitional//EN" (see also test with a system identifier).
- 公開識別子 "-//W3C//DTD HTML 4.0 Frameset//EN" (see also test with a system identifier).
- 公開識別子 "-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//EN".
- 公開識別子 "-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//EN".
- 公開識別子 "-//IETF//DTD HTML//EN//3.0".
- 公開識別子 "-//W3O//DTD W3 HTML 3.0//EN//".
- 公開識別子 "-//W3O//DTD W3 HTML 3.0//EN".
- 公開識別子 "-//W3C//DTD HTML 3 1995-03-24//EN".
- 公開識別子 "-//IETF//DTD HTML 3.0//EN".
- 公開識別子 "-//IETF//DTD HTML 3.0//EN//".
- 公開識別子 "-//IETF//DTD HTML 3//EN".
- 公開識別子 "-//IETF//DTD HTML Level 3//EN".
- 公開識別子 "-//IETF//DTD HTML Level 3//EN//3.0".
- 公開識別子 "-//IETF//DTD HTML 3.2//EN".
- 公開識別子 "-//AS//DTD HTML 3.0 asWedit + extensions//EN".
- 公開識別子 "-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//EN".
- 公開識別子 "-//IETF//DTD HTML Strict//EN//3.0".
- 公開識別子 "-//W3O//DTD W3 HTML Strict 3.0//EN//".
- 公開識別子 "-//IETF//DTD HTML Strict Level 3//EN".
- 公開識別子 "-//IETF//DTD HTML Strict Level 3//EN//3.0".
- 公開識別子 "HTML".
- 公開識別子 "-//IETF//DTD HTML//EN".
- 公開識別子 "-//IETF//DTD HTML//EN//2.0".
- 公開識別子 "-//IETF//DTD HTML 2.0//EN".
- 公開識別子 "-//IETF//DTD HTML Level 2//EN".
- 公開識別子 "-//IETF//DTD HTML Level 2//EN//2.0".
- 公開識別子 "-//IETF//DTD HTML 2.0 Level 2//EN".
- 公開識別子 "-//IETF//DTD HTML Level 1//EN".
- 公開識別子 "-//IETF//DTD HTML Level 1//EN//2.0".
- 公開識別子 "-//IETF//DTD HTML 2.0 Level 1//EN".
- 公開識別子 "-//IETF//DTD HTML Level 0//EN".
- 公開識別子 "-//IETF//DTD HTML Level 0//EN//2.0".
- 公開識別子 "-//IETF//DTD HTML Strict//EN".
- 公開識別子 "-//IETF//DTD HTML Strict//EN//2.0".
- 公開識別子 "-//IETF//DTD HTML Strict Level 2//EN".
- 公開識別子 "-//IETF//DTD HTML Strict Level 2//EN//2.0".
- 公開識別子 "-//IETF//DTD HTML 2.0 Strict//EN".
- 公開識別子 "-//IETF//DTD HTML 2.0 Strict Level 2//EN".
- 公開識別子 "-//IETF//DTD HTML Strict Level 1//EN".
- 公開識別子 "-//IETF//DTD HTML Strict Level 1//EN//2.0".
- 公開識別子 "-//IETF//DTD HTML 2.0 Strict Level 1//EN".
- 公開識別子 "-//IETF//DTD HTML Strict Level 0//EN".
- 公開識別子 "-//IETF//DTD HTML Strict Level 0//EN//2.0".
- 公開識別子 "-//WebTechs//DTD Mozilla HTML//EN".
- 公開識別子 "-//WebTechs//DTD Mozilla HTML 2.0//EN".
- 公開識別子 "-//Netscape Comm. Corp.//DTD HTML//EN".
- 公開識別子 "-//Netscape Comm. Corp.//DTD HTML//EN".
- 公開識別子 "-//Netscape Comm. Corp.//DTD Strict HTML//EN".
- 公開識別子 "-//Microsoft//DTD Internet Explorer 2.0 HTML//EN".
- 公開識別子 "-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//EN".
- 公開識別子 "-//Microsoft//DTD Internet Explorer 2.0 Tables//EN".
- 公開識別子 "-//Microsoft//DTD Internet Explorer 3.0 HTML//EN".
- 公開識別子 "-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//EN".
- 公開識別子 "-//Microsoft//DTD Internet Explorer 3.0 Tables//EN".
- 公開識別子 "-//Sun Microsystems Corp.//DTD HotJava HTML//EN".
- 公開識別子 "-//Sun Microsystems Corp.//DTD HotJava Strict HTML//EN".
- 公開識別子 "-//IETF//DTD HTML 2.1E//EN".
- 公開識別子 "-//O'Reilly and Associates//DTD HTML Extended 1.0//EN".
- 公開識別子 "-//O'Reilly and Associates//DTD HTML Extended Relaxed 1.0//EN".
- 公開識別子 "-//O'Reilly and Associates//DTD HTML 2.0//EN".
- 公開識別子 "-//SQ//DTD HTML 2.0 HoTMetaL + extensions//EN".
- 公開識別子 "-//Spyglass//DTD HTML 2.0 Extended//EN".
- 公開識別子 "+//Silmaril//DTD HTML Pro v0r11 19970101//EN".
- 公開識別子 "-//W3C//DTD HTML Experimental 19960712//EN".
- 公開識別子 "-//W3C//DTD HTML 3.2//EN".
- 公開識別子 "-//W3C//DTD HTML 3.2 Final//EN".
- 公開識別子 "-//W3C//DTD HTML 3.2 Draft//EN".
- 公開識別子 "-//W3C//DTD HTML Experimental 970421//EN".
- 公開識別子 "-//W3C//DTD HTML 3.2S Draft//EN".
- 公開識別子 "-//W3C//DTD W3 HTML//EN".
- 公開識別子 "-//Metrius//DTD Metrius Presentational//EN".
かなり多くのページが公開識別子を間違えているので、全ての公開識別子比較は大文字小文字を区別しないことに注意して下さい。(識別子は大文字小文字を区別するものであり、技術的にはこれは正しくありません)
参照
Original Document Information
- Author(s): David Baron
- Last Updated Date: August 2, 2005
- Copyright Information: Copyright (C) David Baron