文書型宣言、またはDOCTYPE は、特定のXMLまたはSGML文書 (たとえば、ウェブ ページ) を文書型定義(DTD) (たとえば、特定のバージョンのHTML 2.0 - 4.0の正式な定義) に関連付ける命令です。[ 1 ]文書のシリアル化された形式では、特定の構文に準拠した短いマークアップ文字列として現れます。
最新のウェブブラウザのHTMLレイアウト エンジンは、 DOCTYPE の「スニッフィング」または「スイッチング」を実行します。これは、提供されるドキュメントの DOCTYPE によって、「互換モード」や「標準モード」などのレイアウト モードが決定されることを意味します。SGML ベースではないHTML5のシリアル化では、モード選択にのみ DOCTYPE が使用されます。ウェブブラウザは汎用の DTD ベースのパーサーではなく、専用の HTML パーサーで実装されているため、DTD を使用せず、URL が提供されても DTD にアクセスすることはありません。DOCTYPE は、一般的なブラウザで「標準モード」をトリガーするためだけに、HTML5 で「ほとんど役に立たないが必須」のヘッダーとして保持されています。[ 2 ]text/htmltext/html
文書型宣言の一般的な構文は次のとおりです。
<!DOCTYPE root-element PUBLIC "/quotedFPI/" "/quotedURI/" [ <!-- 内部サブセット宣言 --> ]>または
<!DOCTYPE root-element SYSTEM "/quotedURI/" [ <!-- 内部サブセット宣言 --> ]>開始<!DOCTYPE構文の後に区切り構文[ 3 ] : 403–404 (スペース、[ 3 ] : 297–298、372または (XML 以外) 二重ASCII ハイフンで開始および終了するコメントなど)、[ 3 ] : 372、391が続き、その後に文書型名[ 3 ] : 403–404 (つまり、DTD が派生するツリーに適用するルート要素の名前) が続きます。XML では、文書を表すルート要素は文書の最初の要素です。たとえば、XHTML では、ルート要素は< html >であり、これは (doctype 宣言の後に) 最初に開始され、最後に終了する要素です。
外部識別子と内部サブセットの構文はどちらもオプションであるため、[ 3 ] : 403–404文書タイプ名は、DOCTYPE宣言で必ず指定しなければならない唯一の情報です。
DOCTYPE宣言には、ルート要素名(スペースなどの区切り構文を含む)の後に、内部サブセットの前に、外部識別子をオプションで含めることができます。 [ 3 ] : 403–404これは、キーワードSYSTEMまたはキーワードのいずれかで始まりますPUBLIC。[ 3 ] : 379 DTDが、公開テキスト、つまり複数のコンピュータシステム間で共有されるテキストとして識別される公開識別子を使用して指定されているかどうかを指定します(一般に利用可能な公開テキストであるか、組織内でのみ共有される利用できない公開テキストであるかに関係なく)。 [ 3 ] : 180–182 PUBLICキーワードが使用される場合、その後に二重または単一のASCII引用符で囲まれた公開識別子が続きます。公開識別子はストレージの場所を指すのではなく、テーブル( SGMLカタログなど)で検索することを目的とした一意の固定文字列です。 [ 3 ]: 180ただし、一部の(すべてではない)SGMLプロファイルでは、公開識別子は、所有者と一般公開されているかどうかを指定する形式公開識別子(FPI)と呼ばれる特定の構文を使用して構築する必要があります。 [ 3 ]: 182-183
公開識別子(存在する場合)またはSYSTEMキーワード(存在しない場合)の後には、同様に引用符で囲まれた「システム識別子」が続くことがあります(XML では必ず続きます)[ 4 ]。SGML におけるシステム識別子の解釈は、システムによって完全に異なります(ファイル名、データベースキー、オフセット、またはその他のものになる可能性があります)が、[ 3 ] : 378 XML ではURIである必要があります。[ 5 ]例えば、XHTML 1.1 の FPI は であり"-//W3C//DTD XHTML 1.1//EN"、必要に応じて XHTML 1.1 で使用できるシステム識別子は 3 つあります。そのうちの 1 つは URL参照です"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"。これは、XML パーサーがシステム固有の方法で DTD を特定する必要があることを意味します。この場合、二重引用符で囲まれた DTD の URL 参照によって特定します。
XHTML文書では、doctype宣言で常にシステム識別子を明示的に指定する必要があります。一方、HTMLのようなSGMLベースの文書では、適切なシステム識別子は指定された公開識別子から自動的に推論される場合があります。この関連付けは、例えば、FPIをシステム識別子に解決するカタログファイルによって行われる可能性があります。[ 6 ]キーワードSYSTEMは(XML以外では)システム識別子を後に付けずに使用することもでき、DTDが存在するが文書型名から推論する必要があることを示します。[ 3 ] : 378
DOCTYPE宣言の最後のオプション部分は、リテラルの角括弧([])で囲まれ、内部サブセットと呼ばれます。これは、エンティティの追加/編集、またはPUBLICキーワードの動作の追加/編集に使用できます。 [ 7 ]外部ファイルから参照するのではなく、内部サブセット内にDTD全体をインラインでドキュメントに含めることは可能ですが、一般的ではありません。[ 3 ]: 402逆に、内部サブセットは、完全なSGMLパーサーを実装していない基本的なHTMLパーサーなど、単純なSGMLプロファイルでは禁止されている場合があります。
DOCTYPE宣言に内部DTDサブセットと外部識別子の両方が含まれている場合、内部サブセットが先に処理され、外部DTDサブセットは内部サブセットの末尾に挿入されたものとして扱われます。DTDでは先行する定義が後続の定義よりも優先されるため、これにより内部サブセットが外部サブセットの定義を上書きすることが可能になります。[ 3 ]: 402-403
ワールドワイドウェブページの最初の行は、次のようなものになる場合があります。
<!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この XHTML の文書型宣言には、パブリック識別子がでシステム識別子が であるDTD が参照によって含まれていますhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd。エンティティ解決器は、参照されている外部エンティティを特定するために、どちらの識別子も使用できます。この例および次の例では、内部サブセットは指定されていません。ルート要素は と宣言されhtmlているため、この例および次の例でも、doctype 宣言の末尾の後に最初に開かれるタグとなります。HTML タグは doctype 宣言の一部ではありませんが、例の分かりやすさのために含められています。
いくつかの一般的なDTDはリスト化されています。W3Cは、Webで一般的に使用されているDTDのリストを作成しており、そこには「ベア」HTML5 DTD、古いXHTML/HTML DTD、MathMLやSVGなどの一般的な埋め込みXMLベース形式のDTD 、およびこれらの形式を組み合わせた「複合」ドキュメントが含まれています。[ 8 ] W3C HTML5とその対応するWHATWGバージョンはどちらも、ブラウザが特定のFPIのXHTML DTDのみを受け入れ、外部DTDファイルを取得するよりも内部ロジックを使用することを推奨しています。さらに、XHTML用の「内部DTD」を規定しており、これは単なるHTMLエンティティ名のリストです。[ 9 ] : §13.2
Strict DTDではプレゼンテーションマークアップは許可されておらず、代わりにCascading Style Sheetsを使用すべきだとされています。Strict DTDは以下のようになります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> < html >移行DTDでは、非推奨となった一部の古いPUBLIC属性と属性が引き続き使用可能です。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> < html >フレームを使用する場合は、代わりにフレームセットDTDを使用する必要があります。例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> < html >XHTMLのDTDにも、Strict、Transitional、Framesetの3種類があります。
XHTML Strict DTDに準拠しています。非推奨のタグはサポートされておらず、コードはXML仕様に従って正しく記述する必要があります。
<?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" >XHTML Transitional DTDはXHTML Strict 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" >XHTML Frameset DTDは、Framesetをサポートする唯一のXHTML DTDです。DTDの内容は以下のとおりです。
<?xml version="1.0"coding="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 の最新の最終版であり、XHTML モジュール化のサポートが導入されています。XHTML 1.1 は、XHTML 1.0 Strict と同等の厳格さを備えています。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">XHTML 基本1.0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">XHTMLの基本 1.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">HTML5ではDOCTYPE、URLやFPIの形式でDTDへの参照がないため、非常に短い宣言を使用します。含まれるのは、ドキュメントのルート要素のタグ名のみですHTML。[ 10 ] 仕様ドラフト自体の言葉で言えば次のようになります。
<!DOCTYPE html>大文字小文字を区別しない。
URI または FPI 文字列がない場合(FPI 文字列はバリデーターによって大文字と小文字が区別されます)を除き、この形式(文字列の大文字と小文字を区別しない一致!DOCTYPE HTML)は、SGML ベースの HTML 4.01 の構文と同じですDOCTYPE。HTML4 と HTML5 の両方で、正式な構文は大文字で定義されていますが、小文字と小文字と大文字の混在も有効として扱われます。
XHTML5では、DOCTYPE文字列「 」の大文字小文字を区別した一致が必要です。<!DOCTYPE html>これは、XHTML 構文では、HTML5 内で参照されるルート要素を含め、すべてのHTML 要素名が小文字でなければならないためですDOCTYPE。
これDOCTYPEは XHTML5 ではオプションであり、省略しても構いません。[ 11 ]ただし、マークアップをXML と HTML の両方として処理する場合は、DOCTYPE を使用する必要があります。[ 12 ]
. ASCII大文字小文字を区別しない文字列「DOCTYPE」に一致する文字列。5. ASCII大文字小文字を区別しない文字列「HTML」に一致する文字列。