DTDの書式
ではここからDTDの書式を見ていきます。まず最初にどこからどこまでがDTDに関する部分なのかを表す宣言部分です。書式は下記のようになっています。
<!DOCTYPE ルート要素[
....
]>
"DOCTYPE"の後にルート要素を記述します。そして"["と"]"の間に実際のXMLの構造を記述していきます。
次にXML文書の中に現れる各要素について定義していきます。要素に関する定義の書式は下記のようになっています。
<!ELEMENT 要素名 (モデル)>
どの要素について書かれているのか、そしてその要素の中身(モデル)は何なのかを定義していきます。中身には他の要素が入る場合や、文字データが含まれる場合などがあり、他の要素が入る場合には今度はその要素についての定義を行っていきます。
他の要素が含まれる場合には下記のように記述します。
<!ELEMENT 要素名 (他の要素名)> <!ELEMENT 要素名 (他の要素名1, 他の要素名2, ...)>
複数の要素が含まれる場合には、上記のようにカンマ","で区切って続けて記述します。また、このようにカンマ","で区切って記述した場合は、ここに記述した要素が記述した順番に現れる必要があります。
要素ではなく、最終的な文字データが含まれる場合には「#PCDATA」と記述します。
<!ELEMENT 要素名 (#PCDATA)>
他にもルールはあるのですが、基本はこの2つです。
では下記のXML文書を参考にDTDの記述を1つ1つ見ていきましょう。
<顧客データ> <顧客> <名前>加藤</名前> <性別>女</性別> <身体データ> <身長>150</身長> <体重>48</体重> </身体データ> </顧客> </顧客データ>
まずはDTDの宣言部分を記述します。ルート要素は「顧客データ」ですので下記のようになります。
<!DOCTYPE 顧客データ[ ]>
そして要素の定義を行います。まずはルート要素自体の定義を記述しましょう。ルート要素に含まれるものは、「顧客」という要素だけですので下記のようになります。
<!DOCTYPE 顧客データ[ <!ELEMENT 顧客データ (顧客)> ]>
次に「顧客」要素の定義を行います。「顧客」要素には「名前」「性別」「身体データ」の3つの要素が含まれますので下記のようになります。
<!DOCTYPE 顧客データ[ <!ELEMENT 顧客データ (顧客)> <!ELEMENT 顧客 (名前, 性別, 身体データ)> ]>
「名前」要素と「性別」要素には、他の要素は含まれずに文字データが記述されますので、下記のようになります。
<!DOCTYPE 顧客データ[ <!ELEMENT 顧客データ (顧客)> <!ELEMENT 顧客 (名前, 性別, 身体データ)> <!ELEMENT 名前 (#PCDATA)> <!ELEMENT 性別 (#PCDATA)> ]>
「身体データ」要素には「身長」要素と「体重」要素が含まれます。そして「身長」要素と「体重」要素には他の要素は含まれずに文字データが記述されますので、下記のようになります。
<!DOCTYPE 顧客データ[ <!ELEMENT 顧客データ (顧客)> <!ELEMENT 顧客 (名前, 性別, 身体データ)> <!ELEMENT 名前 (#PCDATA)> <!ELEMENT 性別 (#PCDATA)> <!ELEMENT 身体データ (身長, 体重)> <!ELEMENT 身長 (#PCDATA)> <!ELEMENT 体重 (#PCDATA)> ]>
以上でDTDの完成となります。これをXML文書のXML宣言とXML本文の間に記述すれば完成です。
<?xml version="1.0" encoding="Shift-Jis" ?> <!DOCTYPE 顧客データ[ <!ELEMENT 顧客データ (顧客)> <!ELEMENT 顧客 (名前, 性別, 身体データ)> <!ELEMENT 名前 (#PCDATA)> <!ELEMENT 性別 (#PCDATA)> <!ELEMENT 身体データ (身長, 体重)> <!ELEMENT 身長 (#PCDATA)> <!ELEMENT 体重 (#PCDATA)> ]> <顧客データ> <顧客> <名前>加藤</名前> <性別>女</性別> <身体データ> <身長>150</身長> <体重>48</体重> </身体データ> </顧客> </顧客データ>
基本的な書き方は以上となります。次のページでは、各要素の出現回数の指定方法について見ていきます。
( Written by Tatsuo Ikura )