XML > XML > 要素型宣言(element type declaration)
要素型宣言
XML 文章に含まれる要素の定義に対する宣言。
(書式) <!ELEMENT 要素名 内容モデル> (例) <!ELEMENT 社員情報(社員名, 年齢)> |
内容モデル(content model)
要素の内容の出現パターンを指定したもの。
同じ要素名の要素型を複数宣言することはできない。
出現パターンには次の5つがある。
種類 | 内容 | XML 例 |
---|---|---|
#PCDATA | 文字データのみ |
<要素> 文字データ </要素> |
要素内容 (element content) |
子要素のみ |
<要素> <子要素></子要素> <子要素></子要素> </要素> |
混合内容 (mixed content) |
子要素と文字データの混合 |
<要素> 文字データ <子要素></子要素> <子要素></子要素> </要素> |
EMPTY | 空要素(子要素がない) |
<要素/> |
ANY | 子要素と文字データの組み合わせ(なんでもあり) | - |
内容モデルに記述するパターン指定で使用する記号は以下のものがある。
種類 | 内容 |
---|---|
要素のみ(記号なし) | 要素が1回出現 |
要素1, 要素2 | 区切られた要素が順番に出現 |
要素1 | 要素2 | 区切られた要素のいずれか1つが出現(複数出現してはいけない) |
要素+ | 要素が1回以上出現 |
要素* | 要素が0回以上出現 |
要素? | 要素が0回または1回出現 |
(要素 ・・・) | 複数要素を1つのグループにまとめる |
上記出現パターンと記号を使っていくつかのパターン例を紹介する。
種類 | DTD 例 | XML 例 |
---|---|---|
#PCDATA | <!ELEMENT 要素(#PCDATA)> |
<要素> 文字データ </要素> |
要素内容 (element content) |
1種類の子要素を持ち、 その子要素は0回以上出現 <!ELEMENT 要素(子要素+)> |
<要素> <子要素></子要素> <子要素></子要素> </要素> |
2つの子要素を持ち、 その子要素はいずれか1つだけが出現 <!ELEMENT 要素(子要素1 | 子要素2)> |
<要素> <子要素1></子要素1> </要素> または <要素> <子要素2></子要素2> </要素> |
|
2つの子要素を持ち、 その子要素は1、2の順序で出現 <!ELEMENT 要素(子要素1, 子要素2)> |
<要素> <子要素1></子要素1> <子要素2></子要素2> </要素> |
|
2つの子要素を持ち、 その子要素は1、2の順序で出現 1は1回以上、2は0回以上出現 <!ELEMENT 要素(子要素1+, 子要素2*)> |
<要素> <子要素1></子要素1> </要素> や <要素> <子要素1></子要素1> <子要素2></子要素2> </要素> や <要素> <子要素1></子要素1> <子要素2></子要素2> <子要素2></子要素2> </要素> など |
|
混合内容 (mixed content) |
文字データと2つの子要素を持つ <!ELEMENT 要素(#PCDATA | 子要素1 | 子要素2)*> |
<要素> 文字データ <子要素1></子要素1> <子要素2></子要素2> </要素> や <要素> 文字データ <子要素2></子要素2> <子要素1></子要素1> </要素> など |
EMPTY | <!ELEMENT 要素 EMPTY> |
<要素/> |
(注意点)
混合要素の場合は、必ず最初に #PCDATA を記載する。
要素型宣言の例
(例1) 宣言 <!ELEMENT 社員情報(氏名, 年齢, 入社年) > XML・・・全てが順番どおり出現 <社員情報> <氏名>山田太郎</氏名> <年齢>20</年齢> <入社年>2004</入社年> </社員情報> (例2) 宣言 <!ELEMENT 社員情報(氏名, 年齢?, 資格*) > XML・・・氏名1回、年齢は0か1回、資格は0回以上 <社員情報> <氏名>山田太郎</氏名> <資格>情報処理</資格> <資格>XMLマスター</資格> <資格>基本情報処理</資格> </社員情報> (例3) 宣言 <!ELEMENT 社員情報(氏名 | 年齢 | 入社年) > XML・・・いずれかが出現 <社員情報> <氏名>山田太郎</氏名> </社員情報> (例4) 宣言 <!ELEMENT 社員情報(氏名, 年齢, 入社年)+ > XML・・・全てが順番どおり1回以上出現 <社員情報> <氏名>鈴木花子</氏名> <年齢>21</年齢> <入社年>2003</入社年> <氏名>山田太郎</氏名> <年齢>20</年齢> <入社年>2004</入社年> <氏名>斉藤一郎</氏名> <年齢>24</年齢> <入社年>2004</入社年> </社員情報> (例5) 宣言 <!ELEMENT 社員情報(氏名 | 年齢 | 入社年)* > XML(1)・・・それぞれが0回以上出現 <社員情報> <入社年>2003</入社年> <入社年>2004</入社年> <氏名>山田太郎</氏名> <年齢>20</年齢> </社員情報> XML(2)・・・0回以上なのでこれもあり <社員情報></社員情報> (例6) 宣言 <!ELEMENT 社員情報(氏名 | スキル+ | 入社年) > XML・・・それぞれが順番に出現するが、スキルのみ1回以上出現 <社員情報> <氏名>山田太郎</氏名> <スキル>VB</スキル> <スキル>VC++</スキル> <スキル>XML</スキル> <入社年>2004</入社年> </社員情報> (例7) 宣言 <!ELEMENT 氏名(#PCDATA) > XML・・・要素が文字データを持つ <氏名> 山田太郎 </氏名> (例8) 宣言 <!ELEMENT 社員情報(#PCDATA | 氏名 | 年齢 | 入社年)* > XML・・・要素が文字データと子要素の両方を持つ <社員情報>これは社員情報です <氏名>山田太郎</氏名> <年齢>20</年齢> <入社年>2004</入社年> </社員情報> (注意)#PCDATA は必ず先頭に指定する (例9) 宣言 <!ELEMENT br EMPTY> XML・・・空要素 <br /> |