$Date: 2002/12/21 22:13:01 $
DTD とは文書型定義のことである. 文書中における要素, 属性, その他のデータがどのように定義され, 論理的に関連付けられるかを表す規則を定義する.
XML はメタ言語であり, ユーザが自分の文書のためのマークアップを定義し, 書式化する自由を与えることがその特徴である. したがって, 自分で定義したもの以外は 正しい タグは存在しないという事実を認識することが重要である.
要素の宣言の仕方は次の通り;
<!ELEMENT 要素名 規則>
開始文字は `_' ないし XML 1.0 にて Letter として定義されたもの. 2 文字目以降には, XML 1,0 にて NameChar として定義されたもの (文字, 数字, `-', `.', `_') を利用する. ただし, `xml' 始まるシーケンスは使えない.
規則は以下のようなものがある;
これらを組み合わせて要素が子を持つように定義したり, グループ化して自由度を高める. また, 対象要素 (ないし対象グループ) の直後に以下の文字を付加することで繰り返しの概念を持たせることができる.
属性の宣言の仕方は次の通り;
<!ATTLIST 対象要素名 属性名 属性タイプ デフォルト値>
属性タイプ:
デフォルト値:
おおむねマクロのようなものと考えて差し支えない.
参照する時は,<!ENTITY 実体名 "置換すべき文字(列)">
とする.&実体名;
なお, パラメータ実体を参照する前にあらかじめ定義しておく必要がある.<!ENTITY % 実体名 "置換すべき文字(列)">
置換すべきものは URI で与えられ, 参照した XML 文書内に include される.<!ENTITY 実体名 SYSTEM "外部の置換すべきもの">
ちなみに, XML では <, >, &, ' そして " は一般実体として定義されている.
<?xml version="1.0"?> <!ENTITY % id "(uid, gid)"> <!ELEMENT passwd (user+)> <!ELEMENT user (name, password, %id;, class?, change?, expire?, gecos, home_dir, shell)> <!ELEMENT name (#PCDATA)> <!ELEMENT password (#PCDATA)> <!ELEMENT uid (#PCDATA)> <!ELEMENT gid (#PCDATA)> <!ELEMENT class (#PCDATA)> <!ELEMENT change (#PCDATA)> <!ELEMENT expire (#PCDATA)> <!ELEMENT gecos (#PCDATA)> <!ELEMENT home_dir (#PCDATA)> <!ELEMENT shell (#PCDATA)>
<?xml version="1.0"?> <?xml-stylesheet href="passwd.css" type="text/css"?> <!DOCTYPE passwd SYSTEM "passwd.dtd"> <passwd> <user> <name>karl</name> <password>*</password> <uid>1000</uid> <gid>200</gid> <gecos>Michio Jinbo</gecos> <home_dir>/home/karl</home_dir> <shell>/bin/tcsh</shell> </user> <user> <name>5hed</name> <password>*</password> <uid>1001</uid> <gid>200</gid> <gecos>YOSHIDA Ken-ichi</gecos> <home_dir>/home/5hed</home_dir> <shell>/usr/local/bin/bash</shell> </user> ... </passwd>
user { display: block; } name, password, uid, gid, class, change, expire, home_dir, shell { display: inline; }