最初に述べたように、SGMLについて知らなくてもHTMLを操ることはできますが、W3CではHTMLについてSGML風の文書型定義(DTD:Document Type Definition)を示しています。文書型定義とは、「このタグ環境の中にはこれらのタグのみを入れることができる」「このタグはこのようなアトリビュートを持つことができる」といった厳密な定義を行うものです。
この定義に沿って記述すると、「見出し」「段落」といった文書の構造が明確になります。この定義にはブラウザ固有のタグは排除されているので、どのブラウザでも正常に表示することができるHTMLドキュメントを記述することができます。SGMLエディタなどの構造化ドキュメントに適合したエディタを使えば、自動的なタグの補完やエラーチェックなどが可能となります。これらの機能は、特に大量の技術ドキュメントやフォーマットの一定したイントラネットドキュメントで有効でしょう。
W3Cから発表になっているいくつかの文書型定義を比較的見やすい形式で提供しています。本ドキュメント執筆時点で最新のHTMLはバージョン4.0です。
本ドキュメントでは、HTML 4.0文書型定義で許可されているタグやアトリビュートには[Strict]、HTML 4.0 Transitional文書型定義で許可されているものには[Transitional]、HTML 4.0 Frameset文書型定義で許可されているものにはのマークを付けています。
現在W3Cでは次期HTML、コードネーム「Voyger」の仕様策定中です8。
これらの文書型定義に沿っていることを明言するために、ドキュメントの先頭でdoctypeという宣言文を記述する必要があります。
これは次の書式になっています。 <!doctype html public "公開識別子" "文書型定義のURI">
公開識別子の部分には、前述の中から使う文書型定義の識別子を入れます。doctypeやhtml、publicの部分はアルファベットの大文字、小文字に関係はありませんが、識別子は大文字と小文字を区別するIDなので、厳密にそのままを表記します。文書型定義のURIには、文書型定義ファイルのあるインターネット上の場所を示します9。
たとえばHTML 4.0の文書型定義を使っていることを宣言するならば、次のようになります。
<!doctype html public "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">