0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

XML学習備忘録04-1_要素型宣言

0
Last updated at Posted at 2026-05-01

要素型宣言

XML文書を構成する要素の名前、要素の内容(文字データ、親子関係)、要素が登場する順番について以下のように定義する。(公式の対応部分は https://www.w3.org/TR/xml/#elemdecls )

<!ELEMENT 要素名 内容モデル>     <!--コメントはXMLと同じ-->

「要素名」に関するルール

(1)要素の名前を記述する。要素名の大文字小文字は区別される。
(2)同じ要素名を持つ要素型宣言を複数指定することはできない
(3)要素名に指定された要素は、内容モデルに記述された要素の「親要素」となる

「内容モデル」に関するルール(=制約条件)

・対象となる要素に関連付けられたルール(規則)のこと
・その要素にどのような内容を持たせるのかをパターンとして指定

内容モデルで指定可能な記号

指定可能な記号 説明
,(コンマ) 各要素を区切り、順番を指定する
|(または) | で区切られた要素のいずれか1つだけが出現する
? 要素が0回または1回出現可能
*(アスタリスク) 要素が0回以上出現可能
+ 要素が1回以上出現可能
() ※半角括弧 ひとまとまりの要素を表す。入れ子にすることができる

内容モデルとして指定可能なパターン

指定可能なパターン どのような制約か DTDに実際どう書くか 左のパターンを満たすXMLの例
要素A (#PCDATA) 要素Aが子要素として
テキストノードだけ
持つことを許す
(※空要素は×)
<!ELEMENT sample (#PCDATA)> <sample>
 何らかの文字列
</sample>
要素A (子要素名一覧) 要素Aのタグが、
記載した子要素のタグを
ちょうど1つだけ
持つことを許す
(※空要素は×)
<!ELEMENT sample1 (sample2)> <sample1>
 <sample2>
 </sample2>
</sample1>
要素A (#PCDATA | 子要素名一覧)* 要素Aのタグが、
記載した子要素の
タグとテキストノードが
0回以上、好きな順番で
入ることのみを許す
(※空要素は×)
<!ELEMENT sample1 (#PCDATA | sample2)*> <sample1>
 サンプル
 <sample2>
 </sample2></sample1>
要素A (要素B,要素C) 要素Aのタグの子要素
として要素Bのタグ、
要素Cのタグが
順番に1個ずつ
入ることを許す
(※空要素は×)
<!ELEMENT sample1 (sample2, sample3)> <sample1>
 <sample2>
 </sample2>
 <sample3>
 </sample3>
</sample1>
要素A EMPTY 要素Aが空要素
(要素がない状態)
である状態のみ許す
<!ELEMENT sample EMPTY> <sample>
</sample>
要素A ANY 要素Aの中身は
何でもOK
<!ELEMENT sample ANY> <sample>
 任意の要素
</sample>

上から3つめの形は参考資料によっては「混合内容」と呼ばれているが、
末尾の「*(アスタリスク)」を書かないとエラーになる
要素A (#PCDATA \| 子要素名一覧)+要素A (#PCDATA \| 子要素名一覧)?としてもエラーになる

実際は上記の記号とパターンを以下の例のようにもっと組み合わせてるっぽい

sample.dtd
<!ELEMENT root (a, (x|y)*)> 
 <!--root要素の中にはa要素が1回出現し、次にx要素とy要素のいずれかが0回以上出現するという制約-->
<!ELEMENT a (#PCDATA)>     <!--a要素はテキストノードのみ持つことを許される-->
<!ELEMENT x (#PCDATA)>     <!--x要素はテキストノードのみ持つことを許される-->    
<!ELEMENT y (#PCDATA)>     <!--y要素はテキストノードのみ持つことを許される-->

上記のsample.dtdを満たす妥当なXML文書の例

sample.xml
<!DOCTYPE root SYSTEM "sample.dtd">
<root>
  <a></a>
  <x>エックス</x>
</root>

主な参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?