複数の中から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 )