DTD (Document Type Definition)
$Date: 2002/12/21 22:13:01 $
はじめに
DTD ってなに?
DTD とは文書型定義のことである. 文書中における要素, 属性, その他のデータが
どのように定義され, 論理的に関連付けられるかを表す規則を定義する.
XML はメタ言語であり, ユーザが自分の文書のためのマークアップを定義し, 書式
化する自由を与えることがその特徴である. したがって, 自分で定義したもの以外
は正しいタグは存在しないという事実を認識することが重要である.
知っておいてほしいこと
parse
構文解析をすること. つまり, 指定されたファイルの内容を検査し, 情報を適
切に分類することである.
埋め込み
スタイルシートやスクリプトと同様に, DTD も文書中に埋め込むことができる.
単一の文書中に情報を構造定義を詰め込むことができるので, それ自身で利用
する場合はよいが, DTD を再利用することを考えるのなら避けた方がいいかも
知れない.
名前空間
各 XML 要素の一意性を保証するために導入されたもの. これの利用は必須では
ないが, あると便利. <名前空間:タグ> のように表現する.
DOCTYPE 宣言
XML 宣言の後に続くべきもの. 文書のルート要素を定義し, また DTD を指定す
る. 現在 2 種類ほど指定の仕方がある;
SYSTEM 指定
PUBLIC 指定
PCDATA
Parsed Character Data (解析済み文字データ) の略. 他の要素のタグ, 文字
`<' と `&', シーケンス `]]>' を除く, すべての文字を許容する.
CDATA セクション
シーケンス `' で終る領域. この中では XML プ
ロセッサは文字データをマークアップがあっても解釈しない. すべて単なるテ
キストとして扱う.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DTD の書き方
要素
要素の宣言の仕方は次の通り;
開始文字は `_' ないし XML 1.0 にて Letter として定義されたもの. 2 文字目以
降には, XML 1,0 にて NameChar として定義されたもの (文字, 数字, `-', `.',
`_') を利用する. ただし, `xml' 始まるシーケンスは使えない.
規則は以下のようなものがある;
ANY
その要素の中に他のタグや, 一般的な文字データを含ませることができる.
(#PCDATA)
一般的な文字データ.
(a, b)
列挙. 要素が特定の順序で現れるようにする場合.
(a|b)
要素 a または b のどちらかが現れるようにする場合.
いずれか一方の要素を含めなければならないのであって, 両方含めると妥当な
文書ではなくなることに注意.
EMPTY
空要素.
これらを組み合わせて要素が子を持つように定義したり, グループ化して自由度を
高める. また, 対象要素 (ないし対象グループ) の直後に以下の文字を付加するこ
とで繰り返しの概念を持たせることができる.
?
0 回または 1 回現れる.
+
1 回以上現れる.
*
0 回以上現れる.
属性
属性の宣言の仕方は次の通り;
属性タイプ:
CDATA
文字データ.
ENTITY
DTD 内で宣言されている実体.
ID
一意の要素識別子.
NMTOKENS
XML の名前トークン.
デフォルト値:
#REQUIRED
要素が出現する時に必ず属性値の指定させる.
#IMPLIED
属性値は文書中の値にまかせる.
#FIXED "値"
属性値は固定で, 変更不可.
"値"
属性のデフォルト値
実体
おおむねマクロのようなものと考えて差し支えない.
一般実体
参照する時は,
&実体名;
とする.
パラメータ実体
DTD の中でのみ使用され, DTD 内の実体定義により置き換えられる.
なお, パラメータ実体を参照する前にあらかじめ定義しておく必要がある.
外部実体
置換すべきものは URI で与えられ, 参照した XML 文書内に include される.
ちなみに, XML では <, >, &, ' そして " は一般実体として定義されている.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
サンプル
DTD
XML 文書
karl
*
1000
200
Michio Jinbo
/home/karl
/bin/tcsh
5hed
*
1001
200
YOSHIDA Ken-ichi
/home/5hed
/usr/local/bin/bash
...
XML スタイルシート
user { display: block; }
name, password, uid, gid, class,
change, expire, home_dir, shell { display: inline; }
レンダリング結果
passwd.xml のレンダリング結果
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
参考
XML デスクトップリファレンス第 2 版
著: Robert Eckstein, Michel Casabianca, 監訳: 川俣晶, 訳: 木田直子,
http://www.oreilly.co.jp/BOOK/xmldkr2/
文書型定義(DTD)とその設計
檜山正幸, http://www.saiensu.co.jp/ct_resource/199809/On-DTD.htm
XML 日本語プロファイル TR X 0015:1999
日本規格協会
tdtd -- Emacs Major Mode for SGML and XML DTDs
Tony Graham, http://www.menteith.com/tdtd/
psgml -- An Emacs mode for SGML and XML
Lennart Staflin, http://sourceforge.net/projects/psgml/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Copyright (C) 2001-2003 Hideyuki KURASHINA.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━