複数の中から1つ出現する
広告
DTDでの要素の定義方法について、今までは(1)要素が1つ含まれる、(2)要素が(順番通りに)複数含まれる、(3)文字データが含まれる、の3つのパターンがありました。
<!ELEMENT 要素名 (他の要素名)> <!ELEMENT 要素名 (他の要素名1, 他の要素名2, ...)> <!ELEMENT 要素名 (#PCDATA)>
ここでは、複数の要素の中からどれか1つの要素が含まれる場合の定義の方法を見てみます。定義式は下記のようになります。
<!ELEMENT 要素名 (他の要素名1 | 他の要素名2 | ... )>
上記のように要素を"|"で区切って並べて記述します。
例えば「連絡先」要素には「自宅」要素か「勤務先」要素か「携帯」要素のどれか1つだけ出てくればいい場合であれば、下記のように記述します。
<!ELEMENT 連絡先 (自宅 | 勤務先 | 携帯)>
では今までのサンプル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</携帯>
</連絡先>
</顧客>
</顧客データ>
また上記では「連絡先」という要素を作ってから、その中に選択できる要素を記述していましたが、下記のように記述することもできます。
<?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 )
WebWord