要素と文字データの組み合わせ
HTML文書などでは下記のような記述を行うことがあります。
<p> 父親は<strong>資産家</strong>です </p>
インライン要素である<strong>タグを使って文字データの中にタグを記述しています。
同じようにXMLにおいても文字データの中に要素を(何回でも)記述することが出来ます。このような場合のDTDの記述方法ですが、前のページで見た複数の要素の中から1つを選ぶ方法を使って記述することができます。
まず下記のように記述します。
<!ELEMENT 要素名 (#PCDATA | 他の要素名)>
"|"を使った記述方法は要素だけではなく上記のように#PCDATAと要素といった記述も可能です。このままでは、文字データか他の要素かどちらか1つだけを記述できるだけですけど、下記のようにすることで解決します。
<!ELEMENT 要素名 (#PCDATA | 他の要素名)*>
上記のように出現回数として0回以上を指定する「*」を最後に記述します。このように記述することで、文字データか要素のどちらか1つが、それぞれ0回以上何回でも出現することができます。例えば先ほどのHTMLの例ですと下記のような意味合いになります。
父親は <strong>資産家</strong> です ------ ----------------------- ---- #PCDATA 「strong」要素 #PCDATA
これは#PCDATAと「strong」要素が繰り返し出てきていることになります。
では今までのサンプルXML文書に追加する形で試してみます。
<?xml version="1.0" encoding="Shift-Jis" ?>
<!DOCTYPE 顧客データ[
<!ELEMENT 顧客データ (顧客+)>
<!ELEMENT 顧客 (名前, 性別, 身体データ, 趣味*, (自宅 | 勤務先 | 携帯), 付記?)>
<!ELEMENT 名前 (#PCDATA)>
<!ELEMENT 性別 (#PCDATA)>
<!ELEMENT 身体データ (身長, 体重)>
<!ELEMENT 身長 (#PCDATA)>
<!ELEMENT 体重 (#PCDATA)>
<!ELEMENT 趣味 (#PCDATA)>
<!ELEMENT 自宅 (#PCDATA)>
<!ELEMENT 勤務先 (#PCDATA)>
<!ELEMENT 携帯 (#PCDATA)>
<!ELEMENT 付記 (#PCDATA | 重要)*>
<!ELEMENT 重要 (#PCDATA)>
]>
<顧客データ>
<顧客>
<名前>加藤</名前>
<性別>女</性別>
<身体データ>
<身長>150</身長>
<体重>48</体重>
</身体データ>
<自宅>03-xxxx-xxxx</自宅>
</顧客>
<顧客>
<名前>佐藤</名前>
<性別>男</性別>
<身体データ>
<身長>170</身長>
<体重>65</体重>
</身体データ>
<趣味>読書</趣味>
<趣味>スポーツ</趣味>
<携帯>090-xxxx-xxxx</携帯>
<付記>
父親は<重要>資産家</重要>であり<重要>議員</重要>である。
</付記>
</顧客>
</顧客データ>
( Written by Tatsuo Ikura )
WebWord