DOCTYPE宣言とは、ドキュメントがどういった仕様の、どのバージョンに従って記述されたものかを示す宣言文です。文書型宣言ともいわれます。仕様とバージョンごとに標準化団体の定義した文書型定義(Document Type Definition : DTD)があります。DTDには、記述のルールや使用できる要素・属性などが定義されています。DTDとは文法だと思えばいいです。
通常、DOCTYPE宣言はドキュメントの先頭に記述することで、どの仕様に沿って記述されてるかを示すことになります。WebブラウザはDOCTYPE宣言を参考に表示モードを切り替えます。これがいわゆるDOCTYPEスイッチですね。
DOCTYPE宣言はいつ宣言するのか
HTMLを書きはじめるときに宣言するのか、HTMLを書き終わったときに宣言するのか。まあ、両方でしょう。マークアップし始めるときにどのDTDに従うかを決め、気をつけながらマークアップし、最後に宣言と食い違わないかを確認して終える、これが理想でしょう。最近は、ドキュメント制作開始時にWeb制作アプリケーションが自動でつけてくれるので、DOCTYPE宣言の無いHTMLを書こうと思うほうが手間だとおもいます。しかし、テキストエディタなどでHTMLを書くことも当然できるので、そのような場合は意識してつけなくてはいけません。
DTDにのっとったマークアップ
文頭で宣言したDTDにのっとりマークアップを行うのは当然なのだが、DTDにのっとっているかをどのように判断すればよいのでしょうか。
リファレンスや解説を参考にする
本やサイトを問わず参考になるものはたくさんあります。それらを参考に書いていくのもいいかもしれません。参考文献が間違った解釈をしていなければの話ですが。
仕様書を参考にする
仕様書なんですから間違っているということはありません。その仕様に納得がいかないということはあっても、それは仕様なので仕方ありません。最終的にはこれ以外に信じるものは無いでしょう。
自分の経験を信じる
上記2点を繰り返すことで得られた経験から、大抵のことは正しい方法でできるようになると思います。ただし、そもそも根本的に間違った理解をしていた場合はその限りではありません。
ブラウザでチェックする
一見、正しいように思えますが、確実ではありません。ブラウザの開発者は、当然仕様書をもとにブラウザを開発しているはずです。そのブラウザで正しく表示されていれば、仕様にのっとっていると言えるように思いますが、実際はそうでもありません。ブラウザにはエラーを訂正する機能も同時に実装されているからです。簡単な話
<p>テスト</p>
とするところを
<pp>テスト</p>
としてしまったとします。htmlでは定義されていない<pp>というタグが記述されていますが、ブラウザでは表示されます。『<pp>というタグはDTDで定義されていません』というようなアラートが出るわけでもありません。何事も無かったかのように無視されます。このようなエラー訂正機能は、ブラウザとしてはありがたい機能のように思います。
ブラウザを利用するユーザは正しい構造のHTMLをブラウズしたいのではなく、自分の知りたい内容ありきでブラウジングしているからです。些細なエラーを訂正できず『404NotFound』のように逐一『構文ERROR、解析できません』と出てくるブラウザは利用したくありません。
また、制作者側も簡単に公開することができなくなってしまいます。公開する内容(原稿)に力をいれたいのに、HTMLの仕組みを理解しないと公開できないというメディアでは、良さが半減してしまいます。その点、WeblogやCMSはコンテンツと構造が分離されていて、コンテンツに注力できるので便利だといえます。
構文チェックアプリケーションを利用する
エラーチェックに定評のある Another HTML-lint を利用するのをオススメします。エラーがでたらエラーを理解し修正することで経験値もたまります。
理解レベルが重要
参考書を元にするにしても、仕様書を見るにしても、エラーチェックを利用するにしても、各自の理解レベルに依存します。
ブラウザにDOCTYPEスイッチが搭載されている理由
以前のHTMLは、DOCTYPE宣言がされていないものがほとんどでした。ブラウザのバージョンアップ、制作者の意識の改善、HTMLのバージョンアップと様々な変化の結果、表示上・構造上のズレが生じてしまいました。そのズレを吸収するために、DOCTYPE宣言の有無やDTDによって区別することで解決しようとしています。