コンテンツにスキップ

HTML/DTD

出典: フリー教科書『ウィキブックス(Wikibooks)』

DTD(文書型定義)

[編集]

DTD(Document Type Definition、文書型定義)は、SGML(Standard Generalized Markup Language)およびそれに基づくHTMLやXMLで、文書の構造、要素、属性、ならびにそれらの相互関係を定義するためのスキーマ言語です。

HTML4以前のHTMLはSGMLに基づいているため、DTDが不可欠でした。しかし、HTML5以降のHTMLはSGMLベースではなくなり、DTDは使用されていません。

DTDの役割

[編集]

DTDの主な役割は以下の通りです:

  • 文書構造の定義: HTML文書で使用可能な要素や属性を定義。
  • 文法チェック: 文書が正しい構文で記述されているかを検証。
  • 互換性の保証: 異なるシステム間で文書を共通フォーマットで扱えるようにする。

DTDの基本構成

[編集]

DTDは、以下の要素で構成されます:

要素型宣言(Element Declaration)

[編集]

HTML文書内で使用できる要素を定義します。

例:
<!ELEMENT title (#PCDATA)>
<!ELEMENT p (#PCDATA | a | img)*>

ここでは、<title>要素がテキストデータ(#PCDATA)のみを含むこと、<p>要素がテキストデータや<a><img>要素を繰り返し含むことを定義しています。

属性リスト宣言(Attribute List Declaration)

[編集]

要素に使用できる属性を定義します。

例:
<!ATTLIST img
  src CDATA #REQUIRED
  alt CDATA #IMPLIED>

この宣言は、<img>要素がsrc属性を必須(#REQUIRED)として、alt属性を任意(#IMPLIED)として持つことを定義します。

エンティティ宣言(Entity Declaration)

[編集]

再利用可能な文字列や記号をエンティティとして定義します。

例:
<!ENTITY copy "©">

このエンティティを使用することで、文書内で&copy;と記述するだけで「©」を挿入できます。

記号と演算子

[編集]

DTDでは以下の記号を使用して構造を定義します:

  • ,:順序付き要素(例:(head, body)
  • |:いずれかの要素(例:(h1 | h2)
  • *:0回以上の繰り返し(例:(li)*
  • +:1回以上の繰り返し(例:(li)+
  • ?:0回または1回の出現(例:(title?)

HTMLにおけるDTD

[編集]

HTMLはバージョンによって異なるDTDを使用していました。

HTML 4.01【廃止】

[編集]

HTML 4.01【廃止】では、3つのDTDが提供されています:

  • 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">
    
    • 古いHTML要素を許容。
  • Frameset DTD(フレームセット型):
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
    
    • フレームセットを使用する文書用。

XHTML【廃止】

[編集]

XHTML【廃止】では、SGMLではなくXMLを基盤としていますが、DTDを使用して文書構造を定義します。

例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

HTML5以降

[編集]

HTML5以降はSGMLベースではないため、DTDは使用されなくなりました。代わりに、HTML5では以下のようなシンプルなDOCTYPE宣言のみが必要です:

<!DOCTYPE html>

HTML5ではブラウザが統一されたパーサーを使用するため、DTDによる文書型の定義は不要となっています。

DTDの制限

[編集]

DTDにはいくつかの制限があります:

  1. 型の制限: 属性値の型は簡単なもの(例:CDATA、ID)に限られ、複雑な型は定義できない。
  2. ネームスペースの非対応: XMLのネームスペースをサポートしていない。
  3. 拡張性の欠如: より柔軟なスキーマ言語(例:XML SchemaRELAX NG)の登場により、DTDの利用は減少。