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. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━