2003-01-24

今更ながら、なんとなく・・・。(ぼそ)

<!DOCTYPEは必須か?

<!DOCTYPEが何故必要なのか?

HTMLドキュメント(文書)では、その文書が従って作成されたDTDを示すために文書冒頭に文書型を宣言しなければならない。しかし、HTML文書を記述する際、DTDは必須ではない。などの意見があります。

W3C(HTMLの標準化団体)のWAIガイドラインにおける、<!DOCTYPE>の明記は [優先度2] になっていることからもわかるように、W3C自体は<!DOCTYPE>を必須とは言っていません。「HTML4.01に従う場合は必須」逆に言うと「従わないならば必須ではない」と解釈した方がよさそうです。

[引用: DOCTYPEは必須か? -- とほほのWWW入門 > HTMLリファレンス より]

確かに、とほほさんの解説のように、W3C 勧告 [WCAG 1.0] では・・・

3.2 Create documents that validate to published formal grammars. [Priority 2]
For example, include a document type declaration at the beginning of a document that refers to a published DTD (e.g., the strict HTML 4.0 DTD).

[引用: Checkpoints 3.2 -- Web Content Accessibility Guidelines 1.0 より]

このように、文書型宣言に関する項目は [Priority 2] とされ、つまり、must [引用: http://www.w3.org/TR/WAI-WEBCONTENT/#wc-priority-1 より] (満たさなければならない)ではなく、should [引用: http://www.w3.org/TR/WAI-WEBCONTENT/#wc-priority-2 より] (満たすべきである)とされています(WCAG 2.0 草案ガイドライン5も参考)。

ところで、この"<!DOCTYPE"とは、そもそも一体何?なのでしょう。

In the SGML specification, the first production of the SGML syntax grammar separates an SGML document into three parts: an SGML declaration, a prologue, and an instance. For the purposes of this specification, the prologue is a DTD. This DTD describes another grammar: the start symbol is given in the doctype declaration, the terminals are data characters and tags, and the productions are determined by the element declarations. The instance must conform to the DTD, that is, it must be in the language defined by this grammar.

[引用: SGML Documents -- Hypertext Markup Language - 2.0 より]

上記の引用文を要約すると、SGML構文文法では、仕様書の目的の為のその序幕(開始)は、DTDであり、文法(構文)は、この文法で定義された言語になければならないということです。つまり、HTML(XHTML)がSGMLのアプリケーションであるならば、文書型宣言は絶対に必用という事になります。これは、言い換えるならば、文書型宣言が省略されている文書はHTML文書ではない。と言えることなのです。

<!DOCTYPEは必須か?の結論

このような解釈で文書型宣言に従ってない為に、文書冒頭に文書型宣言を記述しないという文書があるとするならば、その文書のマークアップは文法的に変な構造の文書なのでしょう。しかし、極普通に、極自然にマークアップされた文書は、HTML4.01(もしくは、仕様書の何れかのバージョン)に従った記述ができます。故に、何等問題無いのです。そしてそれは、特定のユーザ環境に依存しないことにも繋がるのです。

マークアップの正当性よりも文書の内容が重要。という風な意見の人もいます。確かに文書の内容は重要だと思います。しかし、文書の作成者本人が文書構造(マークアップ)の不当性(参考: エラーについて)を承知の上でその文書を公開するならば、なにもHTMLに拘らずにプレーン・テキストなどの別の手段(代替メディア)にてリソースを公開すべきなのではないのでしょうか?

最後に、HTMLを記述する際は、文書冒頭に文書型宣言を記述し、極普通に、極自然なマークアップを心掛けましょう。

追記

「ひとりごと」にしては長いですし、HTMLの解説としては内容が極めて乏しいし、他にも書きたい内容(極普通、極自然なマークアップの例とか)もあるので、今後数回に渡りマークアップ関連の「ひとりごと」を続けようか?そう考えております。