doctypeとはdocument typeの略で、「文書タイプ」、「文書種別」のことで標準化団体W3Cが定義しているHTMLバージョン、XHTMLバージョンごとに種類があります。
HTML4(html 4.0/4.01)では、ホームページの作り方、利用するタグに応じて[Strict DTD][Transitional DTD][Frameset DTD]の3種類があります。
尚、HTML4と言えばHTML 4.01を指し、HTML 4.0のバグ解消などを含めHTML 4.01に集約の上、HTML4に一本化されています。
HTML4では、この記述をホームページ各ページ最上部に記載する事がインターネット上に公開する上でお作法となっていますが、それ以前のHTML 2.0/HTML 3.2や、それ以後のHTML5、XHTMLにはこうした種別はありません。
XMLとの兼ね合いも含めXHTMLのDOCTYPE宣言はHTMLとは異なりますし、HTML5のdoctype宣言は下記1種類のみです。
<!doctype html>
ちなみにこれはHTML5タグ・要素には、iframeは別としてHTML4で非推奨とされていたframeset/frameタグは定義されていないので必然的に[Frameset DTD]が不要、一部HTML4で非推奨でHTML5に同名の要素・タグがある場合がありますが、非推奨となっている要因を取り除くなどして再定義されていることから[Transitional DTD]と[Strict DTD]を区別する必要もなく、よって名前空間を分ける必要がなくなることによるものでしょう。
XHTMLは別としてHTMLにおいては、これまで世界中の人々が作成するページ上、実際にはdoctypeが徹底されていなかったことから便宜上ブラウザが無視するなどの対処をしているケースが多く、これら非推奨タグを利用しているページで単にdoctypeをHTML5用に代えた場合、まずブラウザ表示上、不都合が起きることはないでしょうが、W3Cの妥当性検証ページ等ではおそらくエラーとしてカウントされるでしょう。
ただ、仮に作者には必要性がないように感じたとしてもSGML/XML/XHTML/HTMLなどのマークアップ言語は、構造化されていることに意味を持たせて仕様化されているので利用するからには、手間を惜しまず(HTML5にするなら尚のこと)それ相応のdoctype宣言を記述すべきでしょう。
尚、IEに関しては、metaタグやdoctype 指定の有無、doctype の内容などによって標準モード、互換モードといったレンダリングモードを自動判定する機能があり、それによって特にCSSの解釈が異なる場合があります。
HTMLやCSSでは基本的に余計なスペースやタブを無視しますから複数行にわたっても構いませんが、普通doctype宣言は基本的に一行で書きます。
以降、表示上の制約から複数行となっている場合もありますが、1行で記述する場合には、改行部分には半角スペースを入れてください。
HTMLでは大文字/小文字は区別されませんから混在しても構わず自由ですが、ちなみに他にもいくつか相違点はあるもののXML/XHTMLでは全て小文字のみ大文字は不可となっています。
Strict DTDは、厳密で正確な文書タイプで今後W3Cが規格から外すと宣言されているような不適切な、いわゆる非推奨とされる要素や属性とframe/フレーム関連を除いたページに宣言します。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> |
Transitional(過渡期・移行期) におけるloose DTDは、今後W3Cが規格から外すと宣言されているような不適切な、いわゆる非推奨とされる要素や属性を含み、フレーム関連を除いたページに宣言する為の文書タイプです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> |
Frameset DTDは、今後W3Cが規格から外すと宣言されているような不適切な、いわゆる非推奨とされるフレーム関連を含む要素や属性を利用するページに宣言する為の文書タイプです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"> |
前述のようにブラウザが良きに計らってくれることを期待しつつ、書かないのも申し訳ない、とは言うものの全部書くのも・・・そうだ、これならHTML 2.0やHTML 3.2と似たような書き方だし、いいよねっていう発想で名前空間がどこか遠い彼方へ行ってしまったHTML4としては片手落ちなdoctype宣言。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"> |
但し、この書き方をすると前述したIEのレンダリングモード自動選択上、表示に影響がある場合があります。
ちなみに更に過去のHTMLバージョンにおけるDOCTYPE宣言は、下記のようになっていました。
W3C設立によりIETFから継承した当初策定のHTML3.0は多くの難しい仕様を盛り込んだ為、頓挫、紆余曲折を経てHTML3.2が正規版としてW3C最初のHTML勧告・リリース。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> |
HTML2.0は、CERN(原子力研究所)内で利用する為に作られた構想と仕様を世界標準化すべくIETF/Internet Engineering Task Forceに託され策定されたRFC仕様。
<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"> |