タイトル
TOP → This Page

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 />


TOP → This Page