DTD

1.DTDとは?

2.DTDの問題

3.DTDの書き方



1.DTDとは?

 DTD(Document Type Definition)はXML文書の構造を定義したものです。XMLは自由にタグの定義が可能であるため、そのタグの規則予め決めておいて表したものがDTDとなります。XMLはDTDを必須とはしなかったので、DTDが無くてもXMLとして有効ですが、もしDTDが有ればパーサはこのDTDを見ることで、当該XMLデータが決められたタグ定義通りに書かれたValidなXMLであるか検査をすることが可能となります。


2.DTDの問題

 ところでDTDはあまり評判が良くありません。それはDTDの文法がSGMLの影響を強く受けていることもあって独特であり、XML自体が自由なタグ定義出来るのと裏腹に、使い難いという点が理由かと思われます。しかもXMLをデータインタフェースとして利用した場合に必要となる、データの型定義についてDTDは全く考慮していないので実効上の問題もあります。

 そうしたことからXML schemaというものがW3Cで議論されていますが、まだ最終的に標準化されるところまで来ていません。そこでXML schemaを待てない方々は、例えば国内ではRELAXといった独自仕様を定義して使おうといった動きも出ています。 


3.DTDの書き方

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