複数の中から1つ出現する

広告

DTDでの要素の定義方法について、今までは(1)要素が1つ含まれる、(2)要素が(順番通りに)複数含まれる、(3)文字データが含まれる、の3つのパターンがありました。

<!ELEMENT 要素名 (他の要素名)>
<!ELEMENT 要素名 (他の要素名1, 他の要素名2, ...)>
<!ELEMENT 要素名 (#PCDATA)>

ここでは、複数の要素の中からどれか1つの要素が含まれる場合の定義の方法を見てみます。定義式は下記のようになります。

<!ELEMENT 要素名 (他の要素名1 | 他の要素名2 | ... )>

上記のように要素を"|"で区切って並べて記述します。

例えば「連絡先」要素には「自宅」要素か「勤務先」要素か「携帯」要素のどれか1つだけ出てくればいい場合であれば、下記のように記述します。

<!ELEMENT 連絡先 (自宅 | 勤務先 | 携帯)>

では今までのサンプルXML文書に追加する形で試してみます。

sample6.xml

<?xml version="1.0" encoding="Shift-Jis" ?>

<!DOCTYPE 顧客データ[
  <!ELEMENT 顧客データ (顧客+)>
  <!ELEMENT 顧客 (名前, 性別, 身体データ, 趣味*, 連絡先)>
  <!ELEMENT 名前 (#PCDATA)>
  <!ELEMENT 性別 (#PCDATA)>
  <!ELEMENT 身体データ (身長, 体重)>
  <!ELEMENT 身長 (#PCDATA)>
  <!ELEMENT 体重 (#PCDATA)>
  <!ELEMENT 趣味 (#PCDATA)>
  <!ELEMENT 連絡先 (自宅 | 勤務先 | 携帯)>
  <!ELEMENT 自宅 (#PCDATA)>
  <!ELEMENT 勤務先 (#PCDATA)>
  <!ELEMENT 携帯 (#PCDATA)>
]>

<顧客データ>
    <顧客>
        <名前>加藤</名前>
        <性別>女</性別>
        <身体データ>
            <身長>150</身長>
            <体重>48</体重>
        </身体データ>
        <連絡先>
            <自宅>03-xxxx-xxxx</自宅>
        </連絡先>
    </顧客>

    <顧客>
        <名前>佐藤</名前>
        <性別>男</性別>
        <身体データ>
            <身長>170</身長>
            <体重>65</体重>
        </身体データ>
        <趣味>読書</趣味>
        <趣味>スポーツ</趣味>
        <連絡先>
            <携帯>090-xxxx-xxxx</携帯>
        </連絡先>
    </顧客>
</顧客データ>

また上記では「連絡先」という要素を作ってから、その中に選択できる要素を記述していましたが、下記のように記述することもできます。

sample7.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)>
]>

<顧客データ>
    <顧客>
        <名前>加藤</名前>
        <性別>女</性別>
        <身体データ>
            <身長>150</身長>
            <体重>48</体重>
        </身体データ>
        <自宅>03-xxxx-xxxx</自宅>
    </顧客>

    <顧客>
        <名前>佐藤</名前>
        <性別>男</性別>
        <身体データ>
            <身長>170</身長>
            <体重>65</体重>
        </身体データ>
        <趣味>読書</趣味>
        <趣味>スポーツ</趣味>
        <携帯>090-xxxx-xxxx</携帯>
    </顧客>
</顧客データ>

上記の場合には、「顧客」要素に含まれる5番目の要素が「自宅」「勤務先」「携帯」のどれか1つが出現するという規則になります。

( Written by Tatsuo Ikura )