文書型定義(DTD)とは
文書型定義(DTD)は、SGML(Standard Generalized Markup Language)およびXML(
Extensible Markup Language)において、文書構造(文書型)を定義するためのスキーマ言語の一つです。DTDは、文書内に記述できる要素、その出現順序や回数、属性とその型などを記述します。
他のスキーマ言語と同様に、DTDも文書構造を厳密に定義することで、SGMLやXML技術を利用する際の処理の正確性や安全性を高める役割を担います。多くの文書処理
ライブラリは、文書がDTDで定義された構造に従っているかを検証する機能を備えています。
DTDの歴史
DTDは元々SGMLのスキーマ言語として開発され、SGMLから派生したXMLでも採用されました。例えば、HTMLやXHTMLはDTDによって文書構造が定義されています。しかし、XMLの普及とともに、DTDにはいくつかの欠点が指摘されるようになりました。
DTDの課題
DTDはXMLとは異なる文法を採用しており、XML名前空間に対応していないなどの問題がありました。これらの欠点は、XML技術を柔軟に活用する上での障害となり、より高度なスキーマ言語の必要性が高まりました。
DTDから新しいスキーマ言語へ
DTDの課題を解決するため、RELAX NGやW3C
XML Schemaなどの新しいスキーマ言語が開発されました。これらの言語はDTDの欠点を克服し、XML技術のさらなる発展に貢献しています。
DTDの構造
DTDは主に以下の4つの宣言で構成されます。
要素型宣言
属性リスト宣言
エンティティ宣言(実体参照宣言)
記法宣言
要素型宣言
要素型宣言では、SGML/XML文書で使用する要素を定義し、その名前、親子関係、出現順序を記述します。
`構成要素`は以下の種類に分けられます。
EMPTY: 子要素を持たない要素(属性のみなど)
ANY: 任意の要素やデータを持つ要素
子要素: 子要素の順序と出現回数を指定
属性リスト宣言
属性リスト宣言では、要素が持つ属性の型やデフォルト値を定義します。
例えば、俳優の出身地域を属性として定義する場合、以下のように記述します。
エンティティ宣言と記法宣言
エンティティ宣言: 文書内で使用するエンティティ参照を定義し、文字列の置換や外部ファイルの埋め込みを可能にします。
記法宣言: 文書内から参照する外部ファイルの種類(JPEGなど)を指定します。
DTDの例
簡単なDTDの例を示します。
dtd
)>
このDTDでは、以下の内容が定義されています。
1. `firstName`要素:文字列データを持ちます。
2. `secondName`要素:文字列データを持ちます。
3. `info`要素:任意の要素や文字列データを持ちます。
4. `data`要素:`firstName`、`secondName`、`info`要素をこの順で持ちます(`info`要素はオプション)。
5. `myDocument`要素:0個以上の`data`要素を持ちます。
6. `data`要素:`age`属性を持ち、文字列データで、省略可能です。
このDTDに従ったXML文書の例は以下のようになります。
xml
John
Doe
Some info
Jane
Smith
関連項目
コンピュータ言語
データ記述言語
仕様記述言語
スキーマ言語
* 文書型宣言