<html xmlns="http://www.w3.org/1999/xhtml" a0:Name="SuikaWiki" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:Version="0.9"><head></head><body><p><a0:anchor-end a0:anchor="1">[1]</a0:anchor-end> 【<a0:anchor>SGML</a0:anchor>】 <a0:anchor>マーク区間宣言</a0:anchor>の中で、その<a0:anchor>マーク区間</a0:anchor>の目的を識別するのが、
<dfn>状態見出し語</dfn> (Status keyword) です。
(<a0:anchor>JISX4151</a0:anchor>‐1992 9.4.2, 定義 (130) 参照。)</p><p><a0:anchor-end a0:anchor="2">[2]</a0:anchor-end><ul><li>状態見出し語指定 = *(1*<a0:anchor>ps</a0:anchor> (状態見出し語 / <a0:anchor>TEMP</a0:anchor>)) *ps ;; (97)</li><li>状態見出し語 = <a0:anchor>CDATA</a0:anchor> / <a0:anchor>IGNORE</a0:anchor> / <a0:anchor>INCLUDE</a0:anchor> / <a0:anchor>RCDATA</a0:anchor> ;; (100)</li></ul></p><p><a0:anchor-end a0:anchor="3">[3]</a0:anchor-end><table><tbody><tr><td>状態見出し語 (<a0:anchor>規格参照具象構文</a0:anchor>)</td><td>意味</td></tr><tr><td><code class="SGML"><a0:anchor>IGNORE</a0:anchor></code></td><td>文字がないものとして扱う</td></tr><tr><td><code class="SGML"><a0:anchor>INCLUDE</a0:anchor></code></td><td>無視しない</td></tr><tr><td><code class="SGML"><a0:anchor>CDATA</a0:anchor></code></td><td><a0:anchor>文字データ</a0:anchor>として扱う</td></tr><tr><td><code class="SGML"><a0:anchor>RCDATA</a0:anchor></code></td><td><a0:anchor>置換可能文字データ</a0:anchor>として扱う</td></tr><tr><td><code class="SGML"><a0:anchor>TEMP</a0:anchor></code></td><td>いずれ取り除くことになるかもしれない一時的な部分として扱う</td></tr><p>指定に重複がある場合、<ol><li><code class="SGML">IGNORE</code></li><li><code class="SGML">CDATA</code></li><li><code class="SGML">RCDATA</code></li><li><code class="SGML">INCLUDE</code></li></ol></p></tbody></table></p><p>という優先順を持ちます。</p><p><a0:anchor-end a0:anchor="4">[4]</a0:anchor-end> <code class="SGML">IGNORE</code> が有効な状態であるマーク区間では、
入れ子になったマーク区間宣言の終わりを識別するために、
<a0:anchor>マーク区間開始</a0:anchor>及び<a0:anchor>マーク区間終了</a0:anchor>の認知だけ行います。</p><p>有効な状態見出し語が <code class="SGML">IGNORE</code>
であるマーク区間には、 <code class="SGML"><a0:anchor>Ee</a0:anchor></code>
は現れてはなりません。 (というか現れ得ません。)</p><p><a0:anchor-end a0:anchor="5">[5]</a0:anchor-end> <code class="SGML">CDATA</code> 又は <code class="SGML">RCDATA</code>
が有効な状態であるマーク区間では、
最初に現れたマーク区間終了によってマーク区間は終わります。
<a0:weak>(マーク区間開始の認知が行われないので、入れ子にはなり得ません。)</a0:weak></p><p><a0:anchor-end a0:anchor="6">[6]</a0:anchor-end> <a0:anchor-internal a0:anchor="5">&gt;&gt;5</a0:anchor-internal> について、規格では</p><blockquote><p>備考 <code class="SGML">CDATA</code> 又は <code class="SGML">RCDATA</code>
のマーク区間では、それが1個の実体の中にある限り、
マークの認知を行わないので、その中に入れ子になったマーク区間宣言が表れることはない。</p></blockquote><p>と書いてありますけど、「それが1個の実体の中にある限り」
というのは <code class="SGML">RCDATA</code> で、一般実体参照が含まれる場合のみですよね?</p><p>で、<pre>&lt;!ENTITY ent &quot;
  &lt;![ IGNORE [
    foo
  ]]&gt;
&quot;&gt;
 <ins>...</ins>
&lt;!<RCDATA xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">
&amp;ent;
</RCDATA>&gt;</pre><p>だったら結局 <samp class="SGML">foo</samp> は無視されるんですか?</p></p><p><a0:anchor-end a0:anchor="8">[8]</a0:anchor-end> <a0:anchor-internal a0:anchor="6">&gt;&gt;6</a0:anchor-internal> <a0:anchor>W3CのValidator</a0:anchor> に解釈させてみたら、実体 <samp class="SGML">ent</samp> の<a0:anchor>置換文</a0:anchor>も <code class="SGML">RCDATA</code> と解釈されるみたいです。だから、 <samp class="SGML">foo</samp> もそのまわりのマーク区間宣言に見えるものも、文字データとして扱われます。</p><p><a0:anchor-end a0:anchor="9">[9]</a0:anchor-end> <a0:anchor-internal a0:anchor="8">&gt;&gt;8</a0:anchor-internal> <samp class="SGML">&lt;!ENTITY ent <em>PCDATA</em> &quot;<var>...</var>&quot;&gt; </samp> として宣言しておけば、、、と思ったら、
この場所で見出し語 <code class="SGML"><a0:anchor>PCDATA</a0:anchor></code>
は使えないのでした。<ul><li><a0:anchor-end a0:anchor="10">[10]</a0:anchor-end> <code class="SGML">状態見出し語指定</code>の部分は <code class="SGML">ps</code> が入る領域ですから、<a0:anchor>引数実体参照</a0:anchor>が使えます。例えば: <samp class="SGML">&lt;!ENTITY % systemA &quot;INCLUDE&quot;&gt;</samp>...<samp class="SGML">&lt;![ %systemA [ &lt;? systemA dependent command ?&gt; ] ]&gt; </samp> <a0:weak>(都合上 <code class="SGML"><a0:anchor>msc</a0:anchor></code> は <code class="SGML"> ] ]&gt;</code> にしてます。)</a0:weak></li><li><a0:anchor-end a0:anchor="11">[11]</a0:anchor-end> 状態見出し語の指定が1つも無い場合には、 <code class="SGML">INCLUDE</code> として扱われます。</li><li><a0:anchor-end a0:anchor="12">[12]</a0:anchor-end> 規則 (100), 定義 (130) に従えば <code class="SGML">TEMP</code> は状態見出し語ではありませんが、普通状態見出し語の一種として扱われます。当の JIS X 4151 でさえ、 9.4.2 で構文規則を提示したすぐ後で状態見出し語に <code class="SGML">TEMP</code> を含めています。</li><li><a0:anchor-end a0:anchor="13">[13]</a0:anchor-end> ただ、 <code class="SGML">TEMP</code> が、他の見出し語とは異なり SGML 処理系ではなく人間を対象とするものである (単なる備忘である) 点に注意したいところです。</li></ul></p><section><h1>XML における状態見出し語</h1><p><a0:anchor-end a0:anchor="14">[14]</a0:anchor-end> <a0:anchor>XML</a0:anchor> では<a0:anchor>マーク区間宣言</a0:anchor>は<a0:anchor>CDATA区間</a0:anchor>と<a0:anchor>条件区間</a0:anchor>の2種類に分かれています。</p><p><a0:anchor-end a0:anchor="15">[15]</a0:anchor-end> <a0:anchor>CDATA区間</a0:anchor>では、<a0:anchor>マーク区間宣言</a0:anchor>の<a0:anchor>状態見出し語</a0:anchor>に相当する部分は <code class="XML" xml:lang="en"><a0:anchor>CDATA</a0:anchor></code>
でなければならず、<a0:anchor>空白</a0:anchor>や<a0:anchor>引数実体参照</a0:anchor>は使えません。</p><p><a0:anchor-end a0:anchor="16">[16]</a0:anchor-end> <a0:anchor>条件区間</a0:anchor>では、<a0:anchor>状態見出し語</a0:anchor>の前後に <code class="XML" xml:lang="en"><a0:anchor>S</a0:anchor></code> を挿入したり、
<a0:anchor>引数実体参照</a0:anchor>を使ったりすることができます。<a0:anchor>キーワード</a0:anchor>は <code class="XML" xml:lang="en"><a0:anchor>INCLUDE</a0:anchor></code>
か <code class="XML" xml:lang="en"><a0:anchor>IGNORE</a0:anchor></code> のいずれかのみでなければなりません。</p><p><a0:anchor-end a0:anchor="17">[17]</a0:anchor-end> どちらの場合も、<a0:anchor>キーワード</a0:anchor>は大文字でなければなりません。</p></section><section><h1>HTML における状態見出し語</h1><p><a0:anchor-end a0:anchor="18">[18]</a0:anchor-end> <a0:anchor>HTML</a0:anchor> は <a0:anchor>SGML</a0:anchor> ではありませんが、 <a0:anchor>XML</a0:anchor> に由来する <a0:anchor>CDATA区間</a0:anchor>を<a0:anchor>外来要素</a0:anchor>
(<code class="XMLe" xml:lang="en"><a0:anchor>svg</a0:anchor></code>、<code class="XMLe" xml:lang="en"><a0:anchor>math</a0:anchor></code>) 内で使うことができます。</p><p><a0:anchor-end a0:anchor="19">[19]</a0:anchor-end> <a0:anchor-internal a0:anchor="15">&gt;&gt;15</a0:anchor-internal> と同じで、<a0:anchor>状態見出し語</a0:anchor>は<a0:anchor>大文字</a0:anchor>の <code class="HTML" xml:lang="en"><a0:anchor>CDATA</a0:anchor></code> のみでなければなりません。</p></section></body></html>