文書型宣言文書型宣言(ぶんしょかたせんげん、英: document type declaration)、DOCTYPE宣言(DOCTYPEせんげん)は、SGMLやXML文書を、文書型定義(DTD)と結びつけるための宣言である。 概要文書型宣言はSGMLやXML文書の冒頭に記載される。SGMLやXML文書において、どのような要素をどのように配置することが許されるかはスキーマ言語によって定義されている。歴史的経緯から、スキーマ言語としてはDTDが主に用いられてきた。文書を解析するパーサは文書型宣言に指定されたDTDを参照することで、規則に従った妥当な文書か否かを検証することができる。 HTML2.0からHTML4.01までのHTMLはSGML文書の一種として定義されているため、文書型宣言はHTML文書の冒頭にも記載される。これによって、たとえばウェブページの制作者は、W3C Markup Validation ServiceやAnother HTML-lintなどのサービスを用いて、見落としていたページ内のエラーを発見できる。 一部のHTMLレンダリングエンジンは「DOCTYPEスイッチ」と呼ばれる機能を有している。これはMIMEタイプとして HTML5はSGMLベースではなくなったが、MIMEタイプは依然として 文法文書型宣言の一般的な文法は以下のようになる。 <!DOCTYPE ルート要素 PUBLIC "公開識別子" ["URI"] [ <!-- サブセットの宣言 --> ]> or <!DOCTYPE ルート要素 SYSTEM "URI" [ <!-- サブセットの宣言 --> ]> ルート要素とは文書全体の最上位となる要素である。XMLでは、ドキュメントのルート要素はいちばん初めに現れた要素である。例えば、XHTMLでは、ルート要素はDOCTYPE宣言の直後に開始し、文書の終わりで閉じられる
一方、 最後に、角括弧([])で囲んで、宣言への追加・変更などを行える[2]「内部サブセット」を続けることができる。なお、内部サブセットは省略可能であり、完全なSGML実装になっていないパーサ(とりわけ、HTML専用のもの)では解析不能となるため付けてはならないこともある。 公開識別子とシステム識別子は独立の概念であるが、HTMLのようにSGMLを元にしたドキュメントでは、公開識別子とシステム識別子が関連付けられる場合がある。この場合、公開識別子を記述すればシステム識別子が省略可能であり、この関連付けは、例えばその関係性を記録したテーブルによって行われる[3]。XMLではシステム識別子を省略できない。 具体例例えば HTML 4.01 Transitional で書かれたWebページでは、1行目は以下のようになる。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
この文書型宣言では、公開識別子の HTML 4.01HTML4.01には3種類のDTDが用意されている。厳密なStrict、移行用のTransitional、フレームを使用するFramesetである。 Strict DTDでは、CSSで行うべき文書の見た目を左右するマークアップは廃されている。そのStrict DTDを指定するための文書型宣言は以下のようになる。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Transitional DTDでは、非推奨となった要素や属性を使うことができる。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
フレームを使う場合、以下のようにしてFrameset DTDを指定する必要がある。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
XHTML 1.0XHTML 1.0にはHTML 4.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.1XHTML 1.1はモジュール化が行われている、標準化された中では最新のXHTMLである。XHTML 1.0 Strictの流れを受け継ぐ1通りのみのDTDとなった。 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
XHTML BasicXHTML Basic 1.0 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML Basic 1.0//EN"
"http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
XHTML Basic 1.1 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML Basic 1.1//EN"
"http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
XHTML Mobile ProfileXHTML Mobile Profile 1.0 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC
"-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
"http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
XHTML Mobile Profile 1.1 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC
"-//WAPFORUM//DTD XHTML Mobile 1.1//EN"
"http://www.openmobilealliance.org/tech/DTD/xhtml-mobile11.dtd">
XHTML Mobile Profile 1.2 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC
"-//WAPFORUM//DTD XHTML Mobile 1.2//EN"
"http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">
XHTML + RDFaXHTML+RDFa 1.0 <?xml version="1.0" encoding="UTF-8"?>
<!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<!DOCTYPE html>
HTML5はSGMLベースでなく、公式のDTDは存在しない(ただし、有志によって開発されたものは存在する[4])。そのためHTML5の文書型宣言は文書とDTDを関連付けるという機能を果たしていない。宣言に入れるものはルート要素の名前、 XHTML5では、XMLの文法制約から大文字小文字が区別され、 XHTML5において、文書型宣言は必須ではなく、省略してしまっても構わない[6]。ただし、同じ文書をHTMLとしても解釈する必要があるなら、文書型宣言を付けることが推奨される[7]。逆に、XHTML5の要素をXML名前空間に入れる場合、 関連項目脚注
外部リンク
|
Portal di Ensiklopedia Dunia