<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>引数 SCOPE (SGML 宣言)</h1><p><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> <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> <dfn><code class="SGML">SCOPE</code></dfn>
は、その SGML 宣言で指定した<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="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end><ul><li><code class="ABNF"><dfn>具象構文適用範囲</dfn> := &quot;SCOPE&quot; 1*<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ps</anchor> (&quot;DOCUMENT&quot; / &quot;INSTANCE&quot;) ;; <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JISX4151</anchor>-1992 (181)</code></li></ul></p><dl><dt><code class="SGML">DOCUMENT</code></dt><dd>具象構文の適用範囲はその SGML 文書全体です。
ただし、 SGML 宣言そのものだけは、つねに<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">規格参照具象構文</anchor>になっています。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(そうしないと、箱の中の鍵の問題が生じるからです。)</weak></dd><dt><code class="SGML">INSTANCE</code></dt><dd>具象構文の適用範囲はその文書実現値だけです。
言い換えれば、<code>前書き</code>は規格参照具象構文です。</dd></dl><p><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="SGML">SCOPE INSTANCE</code> の時には、具象構文に3つの制約が課されます。</p><ul><li>規格参照具象構文と同じ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構文参照文字集合</anchor>を使わなければなりません。</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">重要なSGML文字</anchor>が、<code>前書き</code>の終わりと<code>文書実現値集合</code>のはじめを区別できる物でなければなりません。</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">量集合</anchor>が、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">規格参照量集合</anchor>以上の量を持った物でなければなり増せん。</li></ul><p>(<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal>,<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal> JIS X 4151-1992 12.3 参照。)</p><p><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> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal> の2つめの条件ですが、
<code>文書実現値集合</code>の先頭に来得るのは<ul><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">基本文書要素</anchor></code> &gt; <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書要素</anchor></code> &gt; <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor></code><ul><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">開始タグ</anchor></code></li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容</anchor></code> (<code>開始タグ</code>が省略された場合)<ul><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">混合内容</anchor></code>・<code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素内容</anchor></code><ul><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ文字</anchor></code></li><li><code>要素</code><ul><li>文字列の種類としては文書要素と同じ。</li></ul></li><li><code>他の内容</code><ul><li><code>注釈宣言</code> / <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">短縮参照使用宣言</anchor></code> / <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">連結集合使用宣言</anchor></code> / <code>処理指令</code> / <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shortref</anchor></code> / <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字参照</anchor></code> / <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">一般実体参照</anchor></code> / <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク区間宣言</anchor></code> / <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Ee</anchor></code></li></ul></li><li><code>s</code></li></ul></li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">置換可能文字データ</anchor></code> / <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字データ</anchor></code><ul><li>これらの場合、<code>開始タグ</code>が省略できないので、実はあり得ない。</li></ul></li></ul></li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">終了タグ</anchor></code> (<code>開始タグ</code>が省略され、<code>内容</code>が空の場合)</li></ul></li><li><code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">他の前書き</anchor></code> (<code>開始タグ</code>が省略され、<code>内容</code>が空で、<code>終了タグ</code>が省略された場合)<ul><li>何であれ、先に<code>内容</code>とみなされてしまうので、実はあり得ない。</li><li>ちなみに、<code>前書き</code>なのだからもしかすると規格参照具象構文の支配下ではないかと思ってしまうが、よく読んでみるとちゃんと<code>文書実現値集合</code>には SGML 宣言で指定した具象構文が適用されると書いてあるので、<code>文書実現値集合</code>の一部である<code>他の前書き</code>は、やはりその具象構文が適用される。</li></ul></li></ul></p><p>です。
ご覧の通り、ほとんどありとあらゆるものが該当します。</p><p><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="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">stago</anchor></code> に <samp class="SGML">&lt;!</samp> を割り当てると、
<code>前書き</code>の一部の <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mdo</anchor></code> として認知されてしまうので駄目です。</p><p>また、文書要素の開始タグが省略可能なので省略して、
その要素の内容が <samp>&lt;?something</samp> だったとすると、<pre>&lt;!DOCTYPE root [&lt;!-- ここは規格参照具象構文 --&gt;]&gt;
&lt;!-- ここもまだ規格参照具象構文 --&gt;
&lt;?something
?&gt;これは文書要素の一部です。
独自の具象構文を使っています。
{/root}
{!〜 独自の具象構文を使っています。 〜}</pre></p><p>となるわけですが、これでは<code>前書き</code>内の処理指令とみなされてしまいます。
開始タグを省略しないか、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字参照</anchor>や一般実体参照
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(実体の例: <samp xmlns="http://www.w3.org/1999/xhtml" class="SGML">&lt;!ENTITY 似非pio CDATA &quot;&lt;?&quot;&gt;</samp>)</weak> を使わないといけません。</p><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:">文書実体</anchor>になってしまうのですけど、
本当に使い道があるのでしょうか?</p><p>同じように具象構文混在問題を抱える SGML 宣言は、別に必須じゃないしなあ。</p></section></body></html>