WWW INFOMATION
XML top >>DTD仕様詳細 要素タイプ宣言

要素タイプ宣言 (Element type Declaration)

 要素タイプ宣言とは、各要素がどのような内容で構成されるかを定義するものです。例えば、EX要素が、データとA要素、B要素をその内容に持つ場合、以下のように定義します。

<!ELEMENT EX (#PCDATA,A,B)>

#PCDATAは、データを持つことを、A,BはA,Bという要素を持つことを示します。

 要素タイプ宣言の構成は以下のようになります。

<!ELEMENT 要素名 (内容モデル) >

 内容モデルには、内容の順序と内容の出現数を設定します。

・内容の順序

 内容モデルにて内容の順序を示す方法は以下の2種類あります。
  1. ','(カンマ)で出現順に区切る。
  2. '|'(縦棒)で出現順に区切る。
1の','で区切った場合、要素は必ず区切った順で必ず出現しなくてはなりません。
<!ELEMENT EX (A,B)>

のDTD定義をした場合、
<EX>
  <A></A>
  <B></B>
</EX> 

はOKですが、下2つの例はNGとなります。
<!-- 出現順序が異なる -->
<EX>
  <B></B>
  <A></A>
</EX> 
<!-- B要素が出現しない -->
<EX>
  <A></A>
</EX> 

2の'|'で区切った場合、指定された要素のいずれかが、出現しなくてはいけません。
<!ELEMENT EX (A|B)>

とDTDに定義した場合、
<EX>
  <A></A>
</EX>

や、
<EX>
  <B></B>
</EX>

は、正しい表記となりますが、以下の表記はNGとなります。
<!-- A、Bどちらも出現している -->
<EX>
  <A></A>
  <B></B>
</EX>

また、区切りの方法に関わらず、要素が内容を持つ場合内容モデルの先頭に#PCDATAを付属させます。
<!ELEMENT EX (#PCDATA|A|B)>
                 OR
<!ELEMENT EX (#PCDATA,A,B)>

・内容の出現数

 要素タイプ宣言では、子要素の出現数を定義することができます。
子要素の要素名の横に出現数を意味する記号をつけることにより、出現数を定義します。
<!ELEMENT EX (A?,B+)>

 上の例では、EXの子要素Aは、0回、もしくは1回出現し、Bは必ず1回以上出現することを意味します。下の例では、EXの子要素A、Bともに何回でも出現してよい事になります。(括弧の横に記号をつけることにより、括弧内の全ての要素の出現順序を決めます。)
<!ELEMENT EX (A|B)*>


 出現数を定義する記号と意味は以下のようになります。

記号 意味
なし 記号が何もない場合は、必ず1回その要素は出現する。
? 0回、もしくは、1回出現する。
+ 1回以上出現する。(必ず出現し、何回でても良い。)
* 0回以上出現する。(出現しても、しなくても良い。出現する場合は何度出現しても良い。)

 各記号を設定した場合の正しいXML表記と間違ったXML表記を以下に示します。

記号

なし
<!ELEMENT A(B)>

正しい表記 <A>
  <B></B>
</A>
   
誤りの表記 <A>
  <B></B>
  <B></B>
</A>
<A></A>  

記号

?
<!ELEMENT A(B?)>

正しい表記 <A>
  <B></B>
</A>
<A></A>  
誤りの表記 <A>
  <B></B>
  <B></B>
</A>
   

記号

+
<!ELEMENT A(B+)>

正しい表記 <A>
  <B></B>
</A>
<A>
  <B></B>
  <B></B>
</A>
 
誤りの表記 <A></A>    
記号

*
<!ELEMENT A(B*)>

正しい表記 <A></A> <A>
  <B></B>
</A>
<A>
  <B></B>
  <B></B>
</A>
誤りの表記 なし。    

戻る   進む