Document Type Definition
Document Type Definition(文書型定義、DTD)とは、マークアップ言語のSGMLおよびXMLにおいて、文書構造(文書型)を定義するためのスキーマ言語の一つである。
DTDでは、SGMLやXMLの文書内に記述することができる要素やその発生順序、発生回数、要素がもつ属性、属性の型などを記述することができる。
他のスキーマ言語と同様に、DTDにおいても、文書構造を厳密に定義することによって、SGMLやXMLの技術を利用する際の、処理の正確性や安全性を高めることができる。SGMLやXMLの文書処理を支援するライブラリの多くは、SGMLやXMLの文書がDTDによる文書構造に従っているかどうかを検証する機能を備えている。
もともとはSGMLのスキーマ言語として開発され、SGMLから派生したXMLにおいても、スキーマ言語として採用されている。例えば、SGMLの応用技術であるHTMLや、XMLの応用技術である XHTMLでは、DTDによって文書構造が定義されている。
現在では、XML技術を利用する場合には、スキーマ言語としてDTDを採用するケースは少なくなる傾向にある。XMLが勧告された後、DTDに対してはいくつかの欠点(XMLの文法とは異なる文法を採用していることや、XML名前空間に対応していないことなど)が問題として指摘されてきたためである。そのため、XML技術は広く普及したものの、DTDの欠点が XML技術を柔軟に活用する際の障害の一つとなっていた。
この問題を解決するために、新たなスキーマ言語としてRELAX NGやW3C XML Schemaなどが開発され、それらを採用する事例が増えている。
簡単なDTDの例を示す。
このDTDでは以下の内容が記述されている。
第1行: firstName要素を宣言している。この要素は内容として文字列データをもつ。
第2行: secondName要素を宣言している。内容として文字列データをもつ。
第3行: info要素を宣言している。内容として、このDTDで宣言された任意の要素や文字列データを、もつことができる。
第4行: data要素を宣言している。内容としてfirstName、secondName、infoの各要素をもつ。要素の出現順序はこの順番でなければならない(例えば firstName の前にsecondNameが出現してはならない)。? はオプショナルであることを示す。info要素はsecondName要素の後に、出現しても良いし出現しなくても良い。
第5行: myDocument要素を宣言している。内容として0個からn個のdata要素をもつ。
第6行: data要素の属性リスト宣言をしている。data要素はage属性をもつ。age属性は文字列データであり、省略することが可能である。
このDTDに従って作成したXML文書の例