4.2 要素間の関係の指定
その要素が子供要素をもつとき、要素型宣言では子供要素の構成を記述します。子供要素間の関係について、以下の項目を定義することが可能です。
- 出現順序
子供要素が複数存在する場合、どの順番で出現するのか定義します。 - 出現回数
子供要素の出現回数に関する制限を、要素型定義内に記述することができます。
4.2.1 出現順序
出現順序に関しては、2通りの指定方法があります。一つ目は、要素が出現する順番を指定する方法です。以下のように、複数の要素を要素が出現する順番に、’,’で区切って記述します。
<!ELEMENT 要素名 (要素1, 要素2, 要素3,...) >
以上のように指定した場合、要素は必ず、要素1、要素2、要素3、...の順番で出現します。
二つ目は、出現しうる要素のリストを指定する方法です。以下のように、要素のリストを’|’で区切って指定します。
<!ELEMENT 要素名 (要素1 | 要素2 | 要素3 |...) >
以上のように指定した場合、要素は要素1、要素2、要素3、...のどれかひとつのみが出現します。
4.2.2 出現回数
要素の出現回数については、次の4パターンの指定を行うことができます。
- 必ず1回出現
- 0回もしくは1回出現
- 1回以上出現
- 0回以上出現
要素の出現回数について、「必ず1回出現」と指定した場合、その要素は必ず1回出現する必要があります。要素の出現回数についての制限を記述しなければ、デフォルトで「必ず1回出現」が設定されます。
<!ELEMENT 要素名 要素名>
「要素が出現してもしなくてもよい」というように指定するには、要素名の横に’?’を記述します。
<!ELEMENT 要素名 要素名?>
また、「1回以上出現してもよい」というように指定するには、要素名の横に’+’を記述します。
<!ELEMENT 要素名 要素名+ >
さらに出現しても、出現しなくてもよく、複数出現してもよい場合には、要素名の横に’*’を記述します。
<!ELEMENT 要素名 要素名* >
4.2.3 要素指定例
以上に要素型の指定例を記述します。
<!ELEMENT 料理 (名前,材料+)>
料理要素を以上のように定義した場合、「名前要素の次に、材料要素が1回以上出現する」という指定になります。例を以下に示します。
<料理> <名前>冷奴</名前> <材料>豆腐</材料> </料理> <料理> <名前>カレーライス</名前> <材料>にんじん</材料> <材料>ジャガイモ</材料> <材料>たまねぎ</材料> <材料>鶏肉</材料> </料理>
また、材料要素の部分を以下のように変更します。
<!ELEMENT 料理 (名前,(材料|調味料)+)>
上の要素型定義は、「名前要素の次に,材料要素か調味料要素が任意の順序で1回以上何度でも出現する」ことを示します。以下のXML文書はすべて、上の定義に沿うものです。
<料理> <名前>冷奴</名前> <材料>豆腐</材料> <調味料>醤油</調味料> </料理> <料理> <名前>カレーライス</名前> <調味料>塩</調味料> <調味料>こしょう</調味料> <材料>鶏肉</材料> <調味料>カレールー</調味料> <調味料>油</調味料> <材料>にんじん</材料> <材料>ジャガイモ</材料> <材料>たまねぎ</材料> </料理>
以下のように宿泊要素を宣言したとします。
<!ELEMENT 宿泊 (飲み物|食べ物|サービス)*>
上の宿泊要素は、「飲み物、食べ物、サービスの各要素が任意の順番で何回でも出現する可能性がある」ことを示しています。上の要素型宣言にしたがっているXML文書の例を以下に記します。
<宿泊> <食べ物>チーズ盛り合わせ</食べ物> <飲み物>ビール</飲み物> </宿泊> <宿泊> <サービス>マッサージ</サービス> <飲み物>コーラ</飲み物> <サービス>外線電話</サービス> <食べ物>焼きうどん</食べ物> <食べ物>炒飯</食べ物> </宿泊>