HTMLの文書型宣言

HTMLの文書型宣言

[103] HTML2HTML4SGML応用であると主張していました。また、 XHTML1XHTML2XHTML5XML応用です。そのため、文書型宣言 (document type declaration) によって DTD を指定することができます。また、 HTML5 では歴史的理由から文書の先頭に DOCTYPE を指定することになっています。

HTML 4 の場合

[88] HTML文書は、その HTML の版を表すために文書型宣言を最初に入れなければなりません。 HTML 4 では3種類の DTD が定義されていますので、 そのうちのいずれかを参照する宣言が必要です。 <IW:HTML4:"struct/global.html#version-info"> 参照。

Strict (厳格) DTD
非推奨ではなく、枠集合文書に現れるものではないすべての要素属性を含みます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
Transitional (過渡的) DTD
Strict DTD に加え、 非推奨の要素・属性を含みます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
Frameset (枠集合) DTD
Transitional DTD に加えを含みます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
        "http://www.w3.org/TR/html4/frameset.dtd">

[89] なお、

このため、文書型宣言のシステム識別子の値は通常は 「最新版」を表す URI参照 (>>88 に示されているもの9 を使い、特定の版の HTML 4 DTD を特に指定したいときだけそれを使うこととできます。

[101] aaa (名無しさん 2007-12-13 11:11:38 +00:00)

[102] Shiit is happened!(c)Forrest Gump (Sector [gaz@pisem.net])

HTML の文書型宣言の色々

文書型宣言のない HTML 文書

[79] 現在では、 HTML 文書 (あるいは text/html 実体) には最初に文書型宣言を記述するべきであると考えられています。 XHTML 文書の場合は、特定の DTD に適合することを主張する場合には文書型宣言を記述するべきです。

文書型宣言のない HTML 文書 (片) の解釈

[80] >>79 はとりあえずおいておいて、文書型宣言のない HTML (not XHTML) 文書が正しいのか考えてみます。

[81] WebSGML では文書型宣言は必須ではありませんから、 これを採用している HTML 4XML では省略できます。 しかし HTML 4 では文書型宣言を必須と定義しています。 XML はここでの話の対象外です。

[83] では旧来の HTML 文書で文書型宣言のないものが不当かというと、 必ずしもそうではありません。確かに、単独の文書 (SGML文書実体) としては不当です。 しかし、実はそれは外部解析実体だったとしたらどうでしょう。

つまり、WWWブラウザは随時こんな感じの SGML 文書実体を自動生成していると考えるのです。

<!SGML その実装の SGML 宣言>
<!DOCTYPE html SYSTEM "その実装の DTD" [
  <!ENTITY real-document SYSTEM "当該文書の URI">
]>
&real-document;

これなら、当該文書が SGML文実体として適当である限りは、 妥当な SGML 文書じゃないですかね?

[85] >>83 の例は不正だった。 (文書要素の外の部分に実体参照は書けない。) 訂正して、

<!SGML その実装の SGML 宣言>
<!DOCTYPE pre-html SYSTEM "その実装の DTD" [
  <!ELEMENT pre-html o o (html)>
  <!ENTITY real-document SYSTEM "当該文書の URI">
]>
&real-document;

[86] もっとも、 Web SGML ができたからもうこんな hack を考える必要はないですし、文書型宣言もない HTML 文書実現値は往々にして SGML 的に不正なことが他にあったりするんですが。

仕様書の規定

[82] HTML 4 仕様書は、次のように述べています。

HTML 2.0 仕様書は、多くの HTML 2.0 利用者エージェントは文書が文書型宣言で始まらないとき、 HTML 2.0 仕様書を参照していると仮定すると見ていました。 経験によればこれは愚かな仮定であり、現在の仕様書はこの動作を推奨していません。

HTML 4 B.1 Notes on invalid documents <IW:HTML4:"appendix/notes.html#notes-invalid-docs">

仕様の拡張

[91] HTML 4 は、仕様の拡張について、附属書 B (参考) で次のように述べています。

相互運用性の理由から、著者は SGML の仕組みを使って HTML を拡張 (例: DTD の拡張, 実体定義の追加, その他) してはなりません。

HTML 4 B.1 Notes on invalid documents <IW:HTML4:"appendix/notes.html#notes-invalid-docs">

[92] HTML 4 は SGML応用です。 ISO 8879 は SGML 応用が SGML の仕組みの一部の使用を禁止することを認めていません。 ですから、この規定は (附属書 B (参考) の中にありますし) 強制力を持たないものであると解釈されています。

メモ

[90] <!DOCTYPE HTML PUBLIC "-//W3C//DTD Netscape 4.0//EN">

<http://www.hss.osaka-u.ac.jp/new/index.shtml> (text/plain(藁)) で使われてます。。。 (名無しさん 2004-11-09 12:33:45 +00:00)

[93] 上記ページの管理者です。検索でこちらに来ました。確かに、operaで見るとテキストで表示されるのでおかしいなと思っていたので確認したところ、text/htmlでした。頭のところで定義しているとおり、このページはあまり更新していないのですが、書き換えられたのかもしれません。とにかくご指摘ありがとうございました。 (名無しさん 2005-01-20 09:30:27 +00:00)

[99] >>90-93 よくわからないですけど依然として DTD Netscape 4.0 なのがなんとも。 (名無しさん 2007-07-04 12:17:03 +00:00)

メモ

[94] So, You Want An HTML Declaration, Huh? (Joe Burns 著、2005年7月現在) <http://www.htmlgoodies.com/tutorials/getting_started/article.php/3479361#intelliTxt> (同じシリーズの内容から90年代後半に書かれたものと推測)

かなり楽しいことが書かれています。

著者は HTML について詳しく知りたければ W3CWebサイトを頭が一杯になるまで読めと勧めていますが、 著者自身は読む前から頭が一杯で何も読まなかったのでしょうかね(藁

(名無しさん)

[95] HTML宣言については別項も参照。 (名無しさん [sage])

[96] HTML5 IRC logs: w3c / #html-wg / 20070423 (2007-06-30 15:38:51 +09:00 版) <http://krijnhoetmer.nl/irc-logs/html-wg/20070423#l-94>

[03:12] <Hixie> and about 50% had doctypes of any kind

[100] HTML5 IRC logs: freenode / #whatwg / 20070704 (2007-07-04 21:13:36 +09:00 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20070704#l-230> (名無しさん 2007-07-04 12:18:26 +00:00)