文書型宣言

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

文書型宣言(ぶんしょかたせんげん)、DOCTYPE宣言(DOCTYPEせんげん)は、SGMLXML文書を、Document Type Definition(DTD)と結びつけるための命令である。たとえば、ウェブページがどのバージョンのHTMLで書かれているかを、そのDTDと関連付けて示す役割を持つ。

HTMLレンダリングエンジンによっては、text/htmlな文書に書かれたDOCTYPEの内容によってレンダリングを「標準モード」や「互換モード(Quirksモード)」というように切り替える、「DOCTYPEスイッチ」と呼ばれる機能が存在する。SGMLベースでなくなったtext/htmlHTML5文書では、DOCTYPE宣言はこのモード切替のためだけに存在している。WebブラウザはDTDに基づいた汎用のパーサではなく、HTMLに特化して作られているので、たとえDTDのURLが与えられていてもそこへアクセスすることはない。HTML5では、「標準モード」へ切り替えるためだけの、「ほとんど役に立たないが、それでも必要な」ヘッダとして存在している[1]

文法[編集]

文書型宣言の一般的な文法は以下のようになる。

<!DOCTYPE ルート要素 PUBLIC "公開識別子" ["URI"] [ 
<!-- サブセットの宣言 -->
]>

or

<!DOCTYPE ルート要素 SYSTEM "URI" [ 
<!-- サブセットの宣言 -->
]>

XMLでは、ドキュメントのルート要素はいちばん初めに現れた要素である。例えば、XHTMLでは、ルート要素はDOCTYPE宣言の直後に開始し、文書の終わりで閉じられるhtml要素である。SYSTEMPUBLICというキーワードは、DTDがシステム内部のものなのか、公開されているものなのかを指定するためのキーワードである。PUBLICを指定した場合、その後には限られた公開識別子(公式公開識別子; FPI)を二重引用符で括って指定する必要があり、その後には必要であれば、同じく二重引用符で括った「システム識別子」を指定することができる。たとえば、XHTML 1.1の公開識別子は"-//W3C//DTD XHTML 1.1//EN"であり、その後にはシステム識別子である"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"を続けることができる。一方、SYSTEMを指定した場合、その後にはシステム識別子を続ける必要がある。これらのシステム識別子としては、URIの形式でDTDの所在を指定する。最後に、角括弧([])で囲んで、宣言への追加・変更などを行える[2]「内部サブセット」を続けることができる。なお、内部サブセットは省略可能であり、完全なSGML実装になっていないパーサー(とりわけ、HTML専用のもの)では付けてはならないこともある。

一方、HTMLなど、SGMLを元にしたドキュメントでは、公開識別子とシステム識別子が関連付けられる場合があるという点で、XMLのときとは少々異なっている。この関連付けは、例えばその関係性を記録したテーブルによって行われる[3]

具体例[編集]

多くのWebページで、1行目は以下のようになっている。

<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="ar" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">

この文書型宣言では、公開識別子の-//W3C//DTD XHTML 1.0 Transitional//ENとシステム識別子のhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdによって、特定のDTDがこの文書と関連付けられている。パーサはどちらかの識別子を使ってエンティティの定義を得ることができる。この例でも次の例でも、内部サブセットの指定はない。ルート要素はhtmlと指定されている。つまり、この宣言の後にはhtml要素が続くこととなる。例には宣言の位置を示すためにhtmlタグまでが書かれているが、これは宣言の一部ではない。

HTML 4.01[編集]

Strict DTDでは、CSSで行うべき文書の見た目を左右するマークアップは廃されている。そのStrict DTDを指定するための文書型宣言は以下のようになる。

 <!DOCTYPE HTML
     PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 <html>

Transitional DTDでは、非推奨となった要素や属性を使うことができる。

 <!DOCTYPE HTML
    PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>

フレームを使う場合、以下のようにしてFrameset DTDを指定する必要がある。

 <!DOCTYPE HTML
     PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
 <html>

XHTML 1.0[編集]

XHTML 1.0にはHTML4.01と同じく、Strict、Transitional、Framesetという3種類のDTDが存在する。

Strict DTD

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 

Transitional DTD

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 

Frameset DTD

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 

XHTML 1.1[編集]

XHTML 1.1はモジュール化が行われている、標準化された中では最新のXHTMLである。XHTML 1.0 Strictの流れを受け継ぐ1通りのみのDTDとなった。

<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.1//EN"
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

XHTML Basic[編集]

XHTML Basic 1.0

<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML Basic 1.0//EN"
  "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">

XHTML Basic 1.1

<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML Basic 1.1//EN"
  "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">

XHTML Mobile Profile[編集]

XHTML Mobile Profile 1.0

<!DOCTYPE html PUBLIC
  "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
  "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">

XHTML Mobile Profile 1.1

<!DOCTYPE html PUBLIC
  "-//WAPFORUM//DTD XHTML Mobile 1.1//EN"
  "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile11.dtd">

XHTML Mobile Profile 1.2

<!DOCTYPE html PUBLIC
  "-//WAPFORUM//DTD XHTML Mobile 1.2//EN"
  "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">

XHTML + RDFa[編集]

XHTML+RDFa 1.0

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
    "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html lang="ar" dir="rtl" xmlns="http://www.w3.org/1999/xhtml">

HTML5[編集]

HTML5では、URIや公開識別子によって参照するDTDが存在しない形のため、文書型宣言はかなり短いものとなっている。宣言に入れるものはルート要素の名前、HTMLだけである[4]。規格ドラフト自身には、このように表記されている。

In other words, <!DOCTYPE html>, case-insensitively[訳注 1].

URIや公開識別子(大文字小文字の区別あり)がないことを除けば、大文字小文字の区別がない!DOCTYPE HTMLという、この形の宣言はHTML 4.01のものと同じである。

XHTML5では、大文字小文字が区別され<!DOCTYPE html>という形で書くこととなる。これは、XHTMLの文法上、宣言内のルート要素も含め、HTMLのタグをすべて小文字で書く必要があることによる。また、DOCTYPEはすべて大文字とする必要がある。これらのルールはHTML5での定義はないが、XMLやXHTMLのDTDから結論づけられる。

XHTML5において、文書型宣言は必須ではなく、省略してしまっても構わない[5]。ただし、同じ文書をHTMLとしても解釈する必要があるなら、文書型宣言を付けることが推奨される[6]。逆に、XHTML5の要素をXML名前空間に入れる場合、DOCTYPEを使うことはできない。


関連項目[編集]

脚注[編集]

訳注[編集]

  1. ^ 和訳すると、「つまり、<!DOCTYPE html>(大文字小文字は区別しない)。」

出典[編集]

  1. ^ The HTML syntax ― HTML5”. 2011年6月5日閲覧。
  2. ^ DOCTYPE宣言 MSDN ライブラリ(2013年9月15日閲覧)。
  3. ^ http://www.freebsd.org/doc/en/books/fdp-primer/sgml-primer-doctype-declaration.html
  4. ^ The HTML syntax ― HTML5”. Web Hypertext Application Technology Working Group. 2011年6月5日閲覧。 “3. A string that is an ASCII case-insensitive match for the string "DOCTYPE". ... 5. A string that is an ASCII case-insensitive match for the string "HTML".”
  5. ^ The XHTML syntax ― HTML5”. Web Hypertext Application Technology Working Group. 2009年9月1日閲覧。
  6. ^ Polyglot Markup: HTML-Compatible XHTML Documents”. World Wide Web Consortium. 2012年1月17日閲覧。

外部リンク[編集]