DTD(Document Type Definition)はXML文書の構造を定義したものです。XMLは自由にタグの定義が可能であるため、そのタグの規則予め決めておいて表したものがDTDとなります。XMLはDTDを必須とはしなかったので、DTDが無くてもXMLとして有効ですが、もしDTDが有ればパーサはこのDTDを見ることで、当該XMLデータが決められたタグ定義通りに書かれたValidなXMLであるか検査をすることが可能となります。
ところでDTDはあまり評判が良くありません。それはDTDの文法がSGMLの影響を強く受けていることもあって独特であり、XML自体が自由なタグ定義出来るのと裏腹に、使い難いという点が理由かと思われます。しかもXMLをデータインタフェースとして利用した場合に必要となる、データの型定義についてDTDは全く考慮していないので実効上の問題もあります。
そうしたことからXML schemaというものがW3Cで議論されていますが、まだ最終的に標準化されるところまで来ていません。そこでXML schemaを待てない方々は、例えば国内ではRELAXといった独自仕様を定義して使おうといった動きも出ています。
1.文書型宣言(DOCTYPE)
A. <!DOCTYPE ルート要素名称 {
]>
B. <!DOCTYPE ルート要素名称 SYSTEM "DTD-URI">
C. <!DOCTYPE ルート要素名称 PUBLIC "公開識別子" "DTD-URI">
例(B.の場合)
<!DOCTYPE root SYETEM "http://localhost/xml/sample.dtd">2.要素型宣言(ELEMENT)
<!ELEMENT 要素名 要素仕様>
A. 「 , と |」
<!ELEMENT parent (child1, child2)>
parentにはchild1とchild2が出現
<!ELEMENT parent (child1 | child2)>
parentにはchild1とchild2のどちらかが出現
B. 「 (なし) と ? と + と *」
<!ELEMENT parent (child1+)>
parentにはchild1が一回以上出現
(なし) 必ず出現
? 0回もしくは一回出現
+ 1回以上出現
* 0回以上出現C. 「ANY と EMPTY と #PCDATA」
<!ELEMENT child1 #PCDATA>
要素child1は文字データである。
ANY 要素も文字データも入いる
EMPTY 何も入らない3.属性リスト宣言(ATTLIST)
<!ATTLIST 要素名 属性名 属性のデータ型 デフォルト値>
<!ATTLIST child1 attribute1 CDATA #REQUIRED>
CDATA 任意の文字データ
(列挙) 定義した値を複数並べたもの
ENTITY 実体参照名を指定
ENTITIES 空白区切りの複数のENTITY
ID 要素識別子
IDREF 識別子参照値
IDREFS 空白区切りの複数のIDREF
NKTOKEN 名前トークン
NKTOKENS 空白区切りの複数のNKTOKEN
#REQUIRED 当該属性は必須
#IMPLIED 当該属性は任意
#FIX 当該属性は固定値
前ページに戻る---> RETURN