要素と文字データの組み合わせ
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 )