ELEMENT

要素型宣言

[14] 要素(型)宣言 (element (type) declaration) は、 要素型宣言するマーク付け宣言でした。

[15] 要素型宣言は、 要素型の定義、すなわち共通識別子開始タグ終了タグの省略の可否、 内容モデルを記述できるものでした。

[16] 素のSGMLでは、 要素型宣言SGML文書の必須の構成要素でした。 宣言されていない要素型の利用は禁止されており、 非妥当でした。

[17] Web SGML では、SGML宣言の指定により、 宣言されていない要素型の利用が解禁されました。

[18] XML では文書整形式であるためには要素型宣言されることは必須ではなく、 妥当であるためには宣言しなければならないとされました。

定義

[12]

(290) 要素宣言 (element declaration)
内容及びマーク最小化機構を処理する要素型宣言の形式指定からなるマーク宣言JIS X 4151-1992 3.

要素型宣言要素型定義の誤り? それとも素の SGML では要素型宣言 (未定義語) の一種が要素宣言だったのでしょうか?

[13] 構文:

暗黙の要素型宣言

[5] WebSGMLSGML宣言IMPLYDEF 引数において ELEMENT NO 以外の値が指定されていると、 要素型宣言を明示しなくてもよいことになります。

[6] 例えば、 foo 要素が文書実現値で使われているものの、 DTD で宣言されていないとします。 このとき、 <!ELEMENT foo - o ANY> という宣言がなされていたものと仮定されます。

ELEMENT YES ではなく ELEMENT ANYOTHER であった場合には、 更に直接再帰要素の禁止という制限が加わります。 (この制限は DTD では表現できません。これを表現可能な DTD記法を使わない場合には、 ANYOTHER 以外に実現方法はありません。)

直接再帰要素が禁止されていると、例えば、

<foo><bar><foo/></bar></foo>
は妥当ですが、
<foo><foo/></foo>
は不当です。

[7] ANYOTHER が有用なのは OMITTAG YES のときです。 このとき終了タグが省略できるので、

<list>
<item>Something
<item>Something
<item>Something
</list>
を (暗示宣言だけで!) 実現できます。 (充足タグ付き文書実現値になっています。)

要素型形式の宣言

[8] 要素型宣言は、体系DTD では要素(型)形式の宣言となります。

仕様書: ISO/IEC 10744:1997 A.3.2.1.1 <http://www.y12.doe.gov/sgml/wg8/docs/n1920/html/clause-A.3.2.html#clause-A.3.2.1.1>

文書実現値の要素ではなく、 体系文書実現値体系要素を通じて間接的に文書実現値の要素を制約するという違いはありますが、 大体においては応用DTD の要素型宣言と同じ意味を持ちます。

[9] 取込み例外 (+(foo|bar) のようなもの) は、応用 DTD の宣言では、記録終了の扱いに影響するとか、 意味的解釈に影響するとかがありますが、応用 DTD ではこれはありません。模型群に普通に書かれていた場合と同じ意味になります。 (応用 DTD の著者は応用 DTD でも同じように取込み例外として定義しても構いませんし、 模型群に組込んでも構いません。応用 DTD で例外として定義した場合は当然記録終了などに影響します。)

省略タグ最小化引数 (- o のようなもの) は、応用 DTD で採用しても構いませんし、しなくても構いません (つまり応用文書には影響しません)。 ただし、体系文書で体系要素を認識するときには影響します。

[10] 体系要素の内容の意味については SGML の要素型宣言では記述できませんから、 体系定義文書で記述します。そこで特に規定があれば、 体系要素の内容はそれに従って解釈されます。そうでなければ、 それぞれの体系要素の元々の意味で解釈します。

(たとえば、体系文書で <a><b/></a> となっているときに、 体系定義文書で a の子供である b について何か記述があれば、 ba の子供 b としての意味を持ちますが、 記述が無ければ、 a とは関係無しの b としての意味を持ちます。 当たり前と言えば当たり前。)

[11] 派生体系内容模型は、 基底体系体系内容模型に一対一対応する必要は無く、 要素形式について部分集合になっていれば OK です。

たとえば、体系内容模型が (a | b | c)* のとき、内容模型は (a | b)* でも (a | b | c)+ でも構いません。 (しかし (a | b | c | d)* だと RAE です。) また、 非体系的な要素型を加えても影響は無いので、 (a | b | c | x)*((a | b)+, (c | x)) でも構いません。

メモ