[14] 要素(型)宣言は、 要素型を宣言するマーク付け宣言でした。
[15] 要素型宣言は、 要素型の定義、すなわち共通識別子、 開始タグと終了タグの省略の可否、 内容モデルを記述できるものでした。
[16] 素のSGMLでは、 要素型宣言は SGML文書の必須の構成要素でした。 宣言されていない要素型の利用は禁止されており、 非妥当でした。
[17] Web SGML では、SGML宣言の指定により、 宣言されていない要素型の利用が解禁されました。
[18] XML では文書が整形式であるためには要素型が宣言されることは必須ではなく、 妥当であるためには宣言しなければならないとされました。
- (290) 要素宣言 (element declaration)
- 内容及びマーク最小化機構を処理する要素型宣言の形式指定からなるマーク宣言。 JIS X 4151-1992 3.
要素型宣言
は要素型定義
の誤り?
それとも素の SGML では要素型宣言
(未定義語)
の一種が要素宣言
だったのでしょうか?
[13] 構文:
要素型宣言 := mdo
ELEMENT 1*ps 要素型 [1*ps タグ省略最小化] 1*ps (宣言内容 / 内容モデル) *ps mdc
;; JIS X 4151‐1992 (116)
タグ省略最小化 := 最小化 1*ps 最小化 ;; (122)
タグ省略最小化引数を指定できるのは、 OMITTAG NO
のときだけ。最小化 := O / minus
;; (123), (124)
一つ目は開始タグ、二つ目は終了タグの指定。要素型 := 共通識別子 / 名前群 / 付番要素 / 付番群 ;; (117)
付番核に付番を付けて得られるものも含めて、共通識別子は文書型定義内で固有でなければならない。 (10.2.1)[5] WebSGML で SGML宣言の 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 について何か記述があれば、 b は a の子供 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)) でも構いません。