文書型宣言の意味
HTML文書の先頭に記述する<!DOCTYPE ...
という宣言は、その文書がどんな定義(DTD)に基づいて記述されるかを示すものです。HTMLの場合、DTDは文書とは別のところで定義されているので、外部にあるどんなDTDを使うかを宣言します。文書型宣言は文書の厳密な検証のためには重要ですが、XHTMLの場合にこれを用いると、複数の語彙を混在させるという柔軟性(拡張性)が制約されます。
HTMLの文書型宣言
ここではHTML 4.01の文書型宣言:
<!DOCTYPE HTML
PUBLIC
"-//W3C//DTD HTML 4.01//EN"
>
を例に、各部分を説明します。
- <!DOCTYPE HTML
-
この部分は、これからSGMLのDTDを宣言することを示し、その文書タイプ名が「HTML」であることを述べています。
- PUBLIC
-
これはこのDTDが公開されたものであること(続いて記述されるのが公開識別子であること)を示します。DTDが特定のマシン上にある場合は
SYSTEM
が使われます。 - -//W3C//DTD HTML 4.01//EN
この部分はSGMLで定められた「フォーマル公開識別子(FPI)」という書き方に従って、公開文書(ここではDTD)を特定するための情報を記述します。
フォーマル公開識別子
宣言している文書タイプを他のものと区別するのがこのFPIです。これは次のような部分から構成されます。
-//W3C 所有者識別子を示します。 |
// スラッシュ2つは区切りです。 |
DTD 公開文種別を示します。 |
HTML 4.01 公開文記述を示します。 |
// ここにも区切りがあります。 |
EN 公開文言語を示します。 |
- 所有者識別子 (OwnerID)
公開文書の所有者を示します。ISO(国際標準化機構)出版物*はその出版物番号を用います。JISなどの国家規格あるいは工業規格もしくはISO 9070に従って割り当てた所有者(登録所有者)の場合は先頭に
+//
を、それ以外の未登録所有者は先頭に-//
を加えます。W3C
はこのHTMLを策定したWorld Wide Web Consortiumを示します(HTML2.0だとIETF
になります)。- 公開文種別 (Public Text Class)
公開されている文書の内容を示します。この場合はDTDを公開しているわけです。必ず大文字でなければなりません。
- 公開文記述 (Public Text Description)
公開文書がどんなものであるかを記述します。この場合はHTMLのバージョン4.01のために公開している文書ということになります。
- 公開文言語 (Public Text Language)
この公開文書(つまりDTD)が記述されている言語のコードを示します。
EN
は英語。もし日本語で定義されたDTDならJA
となります。大文字で書くことに注意してください。なお、これはHTML本文を記述する言語とは関係ありません。
所有者識別子と公開文記述の組み合わせは、URLにおけるホスト名とローカル部の組み合わせのような役割で、この文書型を一意に特定します(もっとも未登録の所有者識別子は重複する可能性はありますが)。また、SGML Open catalogを併用すると、FPIだけでパーサに(ローカルに保存した)DTDを処理させることもできます。
このFPIをURNとして表現する方法がRFC 3151に定義されています。当サイトのURNについての簡単な説明を参照してください。
〔補足〕
ISOの出版物(規格など)の場合は、-//
や+//
を付けず、直接ISOの出版番号などを記述します。例えばISO 15445の文書型宣言は
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000
//DTD HTML//EN">
という具合になります。
〔以上補足〕
システム識別子について
社内文書のための定義で、DTDがローカルディスクにあるような場合、この宣言は
<!DOCTYPE myown SYSTEM "file:///HD/docs/dtd/myown.dtd">
という形になり、外部参照のIDをPUBLIC
ではなくSYSTEM
とし、システム識別子にDTDの保管場所(ファイルのURI)を記述します。これはHTMLのような既知の(FPIだけでDTDの内容が明らかな)文書タイプの場合でも、公開識別子に続けてDTDを参照できるURIをシステム識別子として記述することができます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
文書型宣言におけるシステム識別子の記述は、XMLでは必須になっています。XHTMLで仕様書に“厳密適合”することを目指す場合、あるいはü
といったXHTMLで定義されている文字参照を利用したい場合は、システム識別子も含めた文書型宣言を記述しなければなりません(これらが不要ならば、文書型宣言を記述しなくても整形式XMLとして通用します。この場合は、名前空間を使って他の語彙を組み込むことが可能になります)。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTMLでも文書タイプの名称はhtmlです。ただしこれが小文字になっていることに注意してください。
HTML5の場合
HTML5はDTDにもとづいていませんが、ブラウザが標準モードで(仕様に準拠した文書として)処理して良いことを示すためにDOCTYPEを用います。そのためFPIやシステム識別子は持ちいず、次のようなシンプルな形になっています。
(例)
<!DOCTYPE html>
一部のシステムでこれだと問題が生じる場合は、次のようなシステム識別子が用意されています。
(例)
<!DOCTYPE html SYSTEM "about:legacy-compat">
従来のHTML4/XHTML1用文書型宣言も認められていますが、HTML構文では推奨されていません。XHTML構文では文書型宣言の制約はありません。