<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素(型)宣言<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">element (type) declaration</rt></rubyb></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">宣言</anchor>する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク付け宣言</anchor>でした。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型宣言</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型</anchor>の定義、すなわち<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">共通識別子</anchor>、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">開始タグ</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">終了タグ</anchor>の省略の可否、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容モデル</anchor>を記述できるものでした。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">素のSGML</anchor>では、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型宣言</anchor>は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SGML文書</anchor>の必須の構成要素でした。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">宣言</anchor>されていない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型</anchor>の利用は禁止されており、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非妥当</anchor>でした。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web SGML</anchor> では、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SGML宣言</anchor>の指定により、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">宣言</anchor>されていない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型</anchor>の利用が解禁されました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">整形式</anchor>であるためには<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">宣言</anchor>されることは必須ではなく、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">妥当</anchor>であるためには<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">宣言</anchor>しなければならないとされました。</p><section><h1>定義</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end></p><blockquote><dl><dt>(290) 要素宣言 (element declaration)</dt><dd>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容</anchor>及び<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク最小化機構</anchor>を処理する要素型宣言の形式指定からなる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク宣言</anchor>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JIS X 4151</anchor>-1992 3.</src></dd></dl></blockquote><p><q>要素型宣言</q>は<q><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型定義</anchor></q>の誤り?
それとも素の SGML では<q>要素型宣言</q> (未定義語)
の一種が<q>要素宣言</q>だったのでしょうか?</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <strong>構文</strong>:<ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <code class="ABNF"><dfn>要素型宣言</dfn> := <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mdo</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ELEMENT</anchor> 1*<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ps</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型</anchor> [1*ps タグ省略最小化] 1*ps (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">宣言内容</anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容モデル</anchor>) *ps <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mdc</anchor></code> ;; JIS X 4151‐1992 (116)</code></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <code class="ABNF"><dfn>タグ省略最小化</dfn> := 最小化 1*ps 最小化 ;; (122)</code> タグ省略最小化引数を指定できるのは、 <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OMITTAG</anchor> NO</code> のときだけ。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <code class="SGML"><dfn>最小化</dfn> := <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">O</anchor> / <code class="SGML">minus</code> ;; (123), (124)</code> 一つ目は開始タグ、二つ目は終了タグの指定。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <code class="ABNF"><dfn>要素型</dfn> := <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">共通識別子</anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前群</anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">付番要素</anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">付番群</anchor> ;; (117)</code> 付番核に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">付番</anchor>を付けて得られるものも含めて、共通識別子は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書型定義</anchor>内で固有でなければならない。 (10.2.1)</li></ul></p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>暗黙の要素型宣言</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebSGML</anchor> で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SGML宣言</anchor>の <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IMPLYDEF</anchor></code> 引数において
<code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ELEMENT</anchor> NO</code> 以外の値が指定されていると、
要素型宣言を明示しなくてもよいことになります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 例えば、 <samp class="SGML">foo</samp> 要素が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書実現値</anchor>で使われているものの、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DTD</anchor> で宣言されていないとします。
このとき、 <samp class="SGML">&lt;!ELEMENT foo - o <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ANY</anchor>&gt;</samp>
という宣言がなされていたものと仮定されます。</p><p><code class="SGML">ELEMENT YES</code> ではなく
<code class="SGML">ELEMENT ANYOTHER</code> であった場合には、
更に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">直接再帰要素</anchor>の禁止という制限が加わります。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(この制限は DTD では表現できません。これを表現可能な <anchor>DTD記法</anchor>を使わない場合には、 <code xmlns="http://www.w3.org/1999/xhtml" class="SGML">ANYOTHER</code> 以外に実現方法はありません。)</weak></p><p>直接再帰要素が禁止されていると、例えば、<pre class="SGML">&lt;foo&gt;&lt;bar&gt;&lt;foo/&gt;&lt;/bar&gt;&lt;/foo&gt;</pre>は妥当ですが、<pre class="SGML">&lt;foo&gt;&lt;foo/&gt;&lt;/foo&gt;</pre>は不当です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <code class="SGML">ANYOTHER</code> が有用なのは 
<code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OMITTAG</anchor> YES</code> のときです。
このとき<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">終了タグ</anchor>が省略できるので、<pre class="SGML">&lt;list&gt;
&lt;item&gt;Something
&lt;item&gt;Something
&lt;item&gt;Something
&lt;/list&gt;</pre>を (暗示宣言だけで!) 実現できます。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(<anchor>充足タグ付き文書実現値</anchor>になっています。)</weak></p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>要素型形式の宣言</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 要素型宣言は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">体系DTD</anchor> では要素(型)形式の宣言となります。</p><p>仕様書: <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 10744</anchor>:1997 A.3.2.1.1
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.y12.doe.gov/sgml/wg8/docs/n1920/html/clause-A.3.2.html#clause-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</anchor-external></p><p>文書実現値の要素ではなく、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">体系文書実現値</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">体系要素</anchor>を通じて間接的に文書実現値の要素を制約するという違いはありますが、
大体においては<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用DTD</anchor> の要素型宣言と同じ意味を持ちます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 取込み<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">例外</anchor> (<samp class="SGML">+(foo|bar)</samp> のようなもの)
は、応用 DTD の宣言では、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">記録終了</anchor>の扱いに影響するとか、
意味的解釈に影響するとかがありますが、応用 DTD
ではこれはありません。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">模型群</anchor>に普通に書かれていた場合と同じ意味になります。
(応用 DTD の著者は応用 DTD でも同じように取込み例外として定義しても構いませんし、
模型群に組込んでも構いません。応用 DTD 
で例外として定義した場合は当然記録終了などに影響します。)</p><p>省略タグ最小化引数 (<samp class="SGML">- o</samp> のようなもの)
は、応用 DTD で採用しても構いませんし、しなくても構いません
(つまり応用文書には影響しません)。
ただし、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">体系文書</anchor>で体系要素を認識するときには影響します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end>
体系要素の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容</anchor>の意味については SGML の要素型宣言では記述できませんから、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">体系定義文書</anchor>で記述します。そこで特に規定があれば、
体系要素の内容はそれに従って解釈されます。そうでなければ、
それぞれの体系要素の元々の意味で解釈します。</p><p>(たとえば、体系文書で <samp class="SGML">&lt;a&gt;&lt;b/&gt;&lt;/a&gt;</samp> となっているときに、
体系定義文書で <samp>a</samp> の子供である <samp>b</samp> について何か記述があれば、 
<samp>b</samp> は <samp>a</samp> の子供 <samp>b</samp> としての意味を持ちますが、
記述が無ければ、 <samp>a</samp> とは関係無しの <samp>b</samp> としての意味を持ちます。
当たり前と言えば当たり前。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">派生体系</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容模型</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">基底体系</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">体系内容模型</anchor>に一対一対応する必要は無く、
要素形式について部分集合になっていれば OK です。</p><p>たとえば、体系内容模型が <samp class="SGML">(a | b | c)*</samp>
のとき、内容模型は <samp class="SGML">(a | b)*</samp> でも <samp class="SGML">(a | b | c)+</samp>
でも構いません。 (しかし <samp class="SGML">(a | b | c | d)*</samp> だと 
<abbr><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RAE</anchor><title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">報告可能マーク誤り</title></abbr> です。) また、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非体系的</anchor>な要素型を加えても影響は無いので、 
<samp class="SGML">(a | b | c | x)*</samp> や <samp class="SGML">((a | b)+, (c | x))</samp> 
でも構いません。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>メモ</h1></section></body></html>