WisdomSoft - for your serial experiences.

文書型宣言

 HTML は、文書のバージョンや種類を表すために文書型宣言(DOCTYPE)を冒頭に記述します。

文書を宣言する

前述したように HTML には複数のバージョンが存在し、HTML 文書を解析するプログラムは、処理する HTML 文書のバージョンを理解することが重要になります。多くの場合、HTML 文書と処理するプログラムのバージョンが食い違っては、正しい結果は得られません。ブラウザにとって

HTML 文書が自身のバージョン(文書型)を表明する方法として、HTML 文書の冒頭に文書型宣言(document type declaration)を記述します。文書型宣言は、HTML が従う文書型定義(document type definition)を表すものです。

文書型定義とは、HTML や XHTML のベースとなっている SGML や XML において、意味の構造を記述する方法を書いた構文規約のようなものです。文書は原則として DTD に従ったコードでなければならず、DTD に従った文書のことを妥当な文書(valid document)と呼びます。HTML を記述するだけであれば DTD の詳細を理解する必要はありません。重要なのは、どの DTD を利用するかです。

HTML 5 より以前は、より厳密な文書にするのか、過去との互換性(非推奨の機能を使うなど)を重視するのかによって、使用する DTD を選択しました。しかし HTML 5 からは、それが HTML 文書であることを宣言するだけとなり、DTD を選択することはありません。

以下は HTML 4.01 の文書型宣言です。HTML 4.01 では、厳密型と呼ばれる Strict DTD、移行型と呼ばれる Transitional DTD、そして移行型 DTD に加えて画面分割を使用できる Frameset DTD が用意されています。

HTML 4.01 Strict 文書型宣言
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	"http://www.w3.org/TR/html4/strict.dtd">
HTML 4.01 Transitional 文書型宣言
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
HTML 4.01 Frameset 文書型宣言
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
        "http://www.w3.org/TR/html4/frameset.dtd">

厳密型 DTD は非推奨となった過去の機能を取り除いた文書型で、新しい文書など過去との互換性を考慮する必要がない場合、これを利用します。これに対し、移行型は非推奨となった過去のコードとも互換性が取れるため、制約が緩くなっています。

HTML5 の文書型宣言

HTML5 では大幅に文書型宣言が省略され DTD を指定できなくなりました。以下は HTML5 の文書型宣言です。

HTML5 文書型宣言
<!DOCTYPE html>

多くの Web デザイナーにとって DTD は重要ではなく、また文書型定義と文書の関係を正しく理解し、これを利用している人も少ないため、HTML5 のような簡素な文書型宣言は、HTML 4.01のような長い文書型宣言よりも好まれるでしょう。

HTML5 の文書型宣言は、過去の HTML の文書型宣言と互換性がないため、エディターなどの HTML を処理するプログラムで、HTML5 に対応していない場合に問題が発生する可能性があります。そのような場合を想定し、HTML5 では以下のような過去の文書型宣言と互換性のある構文も定めています。

HTML5 文書型宣言+レガシー文字列
<!DOCTYPE html SYSTEM "about:legacy-compat">
<!DOCTYPE html SYSTEM 'about:legacy-compat'>

<!DOCTYPE html の後に続く、本来 DTD を指定していた部分を DOCTYPE レガシー文字列(DOCTYPE legacy string)と呼びます。HTML を出力するプログラムやアプリケーションが、従来の文書型宣言の形式しか対応していない場合、上記の DOCTYPE レガシー文字列で誤魔化します。