要素と文字データの組み合わせ

広告

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文書に追加する形で試してみます。

sample8.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 )