XML HOME > DTD入門

DTD入門(最終更新日 2003/03/08)

well-formed と valid
HTML と同様、XML も正しい書式でない場合は XML パーサがエラーと認識する。
どういった場合にエラーとなるかに関しては、XMLの構文(入門編)を参照していただきたいが、エラーではない XML 文書を well-formed な XML 文書という。

well-formed な XML 文書の例
(例) <band><name>Beatles</name></band>
well-formed ではない XML 文書の例
(例) <name><band>Beatles</name></band>

XML はその柔軟な仕様上、様々なフォーマットが考えられる。
例えば、A社で使用するフォーマットをB社と共用する場合、たとえ well-formed であっても、タグの名前が違っていたりなど、誤ったフォーマットでデータ交換する可能性がある。

このような誤ったフォーマットを判断させるために DTD(Document Type Definition) を用いることにより、使用するフォーマットの詳細をパーサに伝えることができる。

DTD でチェックできるフォーマットは以下のとおりである。

タグ名・属性名
適切なタグ名・属性名を使用しているか?
入れ子構造(要素の親子関係)
指定された順番で入れ子構造になっているか?
要素の内容
要素は指定された文字種か?

なお、パーサが DTD に従った正しいフォーマットとして認識した XML 文書を valid な XML 文書という。
DTD の種類
DTD は以下の構文により記述される。
<!DOCTYPE ルート要素名 書式>
これを文書型宣言という。文書型宣言を記述する位置は、XML 宣言のあとであり、最上位タグが記述される前であれば、どこでもよい。

書式の属性として、次のような種類の宣言によりフォーマットの定義を行う。
要素型宣言
文書内に組み込めるタグの名前と、タグの内容や親子関係を定義する。
属性リスト宣言
タグに記述する属性の名前とデータ型・初期値を定義する。
実体宣言
頻繁に使用する XML データや XML データ以外を XML 文書に格納する。
記法宣言
データ形式・データ処理方法を指定する。
例えば、要素型宣言は次のように定義される(詳細に関しては後述する)。
(例) (要素型宣言の例)
  <?xml version = "1.0" encoding = "Shift_Jis"?>
  <!DOCTYPE main
   [
   <!ELEMENT main (col)>
   <!ELEMENT col (year, event)>
   <!ELEMENT year (#PCDATA)>
   <!ELEMENT event (#PCDATA)>
   ]
  >
  <main>
  <col>
   <year>BC 753</year>
   <event> 伝説上のローマ建国 </event>
  </col>
  </main>
この DTD では
 「 main タグの下には col タグのみが存在している」
 「 col タグの下には year タグと event タグがその順番どおりに存在している」
 「 year タグは通常の文字列である」
 「 eventタグは通常の文字列である」
ということを意味している。

上記サンプルの XML ファイルがこちらから。