<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="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</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:">XML</anchor> において、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク付け宣言</anchor>の一部を予め定義しておいたものを<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数実体<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">parameter entity</rt></rubyb></dfn>、
これを参照するものを<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数実体参照<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">parameter entity reference</rt></rubyb></dfn>といいます。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</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>を <dfn xmlns="http://www.w3.org/1999/xhtml"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PE</anchor></dfn> とも略します。また、<dfn xmlns="http://www.w3.org/1999/xhtml"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">パラメーター実体</anchor></dfn>とも訳されます。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</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:">DTD</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:">DTD</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="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</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:">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:">DTD</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>XML における引数実体参照</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</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>はその利用される文脈により次の3種類に大別できます。<figure class="list"><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク付け宣言</anchor>等の前後に置かれるもの (<code class="XML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DeclSep</anchor></code> として使われるもの)</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</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>部分に置かれるもの</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体値</anchor>中に置かれるもの</li></ul></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数実体</anchor>は1種類で、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数実体参照</anchor>が使われる文脈が3種類です。
同じ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数実体</anchor>を同時に別の文脈で使うこともできます。
(ただし3つすべての文脈で構文的に正しい形に展開されるような<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数実体</anchor>を定義することは不可能です。)</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> アクセスのたびに返す値が異なるような <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</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:">URL</anchor>
にアクセスするような<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:">XML</anchor> 仕様上は規定がありません。)</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</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:">EBNF</anchor> 構文では <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;35</anchor-internal> と <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;37</anchor-internal> は明記されていますが、 <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;36</anchor-internal> は明記されておらず、
<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:">EBNF</anchor> 構文により記述されていることになっています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内部部分集合</anchor>で使えるのは <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;35</anchor-internal> だけです。 <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;36</anchor-internal> や <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;37</anchor-internal> は禁じられています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;36</anchor-internal> や <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;37</anchor-internal> は、<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="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;35</anchor-internal> によって<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-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;36</anchor-internal> や <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;37</anchor-internal> が使えるのかは明記されていません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</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>しなければなりませんが。) しかし<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="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;42</anchor-internal> は、 (<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-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;40</anchor-internal> と <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;38</anchor-internal> 
によって<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="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内部部分集合</anchor>の <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;35</anchor-internal> すら対応していないようで、<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>になります。
<time>2014-02-24T12:20:43.900Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> は <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;35</anchor-internal> に対応しています。<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-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;36</anchor-internal> や <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;37</anchor-internal> が含まれる場合、元の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数実体参照</anchor>が不正であるとの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">致死的誤り</anchor>になります。 <time>2014-02-24T12:24:34.000Z</time></p></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> </p><blockquote><dl><dt><ins><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JISX4151</anchor>‐1992</ins> 3. (209) 引数実体 (parameter entity)</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>することができる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体</anchor>。</dd><dt><ins><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebSGML</anchor></ins> K.2.5.3 パラメタ実体 (parameter entity)</dt><dd>
[4.225 (JIS X 4151 においては、3. (209)) を参照。]
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">外部部分集合実体</anchor>であるか、又は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">パラメタ実体名</anchor>をつけて宣言された実体。</dd></dl></blockquote><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;24</anchor-internal> じゃあ<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="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</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>も異なります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</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>の形を取り、他に参照する方法はありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</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>を含む。) の適当な (構文上認められた) 場所です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</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>の宣言部分集合内でのみ有効です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;24</anchor-internal> 素の SGML と Web SGML では定義が違っていますが、この改訂には2つの意味があるでしょう。(1) 見方の違い : 素の SGML では参照する側からみた定義だったのが、 Web SGML では定義する側から見た定義になっている。 (2) 意味の拡大 : 素の SGML では引数実体であるか定義上曖昧であった、外部部分集合実体が Web SGML では引数実体の一種になっています。</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:">SGML</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DTD</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> XML の仕様書では、他の部分では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体参照</anchor>が使える部分が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EBNF</anchor> 構文ではっきり示してあるのに、 DTD 中のパラメーター実体参照が書ける場所については自然言語での説明しかありません。</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:">DOCTYPE</anchor> 宣言中の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内部部分集合</anchor>のマーク宣言内にパラメーター実体参照は一切書けません (<code class="XML">EntityValue</code> 内も書けないみたいです)。 (マーク宣言外、つまり地の部分には書けます。)</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> で、マーク宣言「内」とはどこからどこまでか、
なのですが、幾つかの XML parser の実装を調べてみました。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Mozilla</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">外部解析実体</anchor>を読まないので問題外、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinIE</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MSXML</anchor>) とか <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">W3C</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Validator</anchor> で試してみる。もっとも W3C のは本来 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SGML</anchor> parser だから、あてになるのかは不明。)<ul><li><ul><li>MSXML も W3C Validator も、次のは意図したように解釈してくれました。<ul><li><samp class="XML">&lt;!ENTITY % e1 &quot;type&quot;&gt;&lt;!ENTITY % e2 &quot;ANY&quot;&gt;&lt;!ELEMENT%e1;%e2;&gt;</samp></li><li><samp class="XML">&lt;!ENTITY % e &quot;type ANY&quot;&gt;&lt;!ELEMENT %e1;&gt;</samp></li></ul></li><li>次のようなものはだめでした。<ul><li><samp class="XML">&lt;!ENTITY % e &quot;ELEMENT type ANY&gt;&quot;&gt;&lt;!%e1;</samp></li><li><samp class="XML">&lt;!ENTITY % e &quot;ELEMENT type ANY&quot;&gt;&lt;!%e1;&gt;</samp></li></ul></li><li>ということで、単純に <code class="XML">&lt;!<var>declaration</var></code> の後で <code class="XML">&gt;</code> の前までかパラメーター実体参照による置換の対象のようです。 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">整形式</anchor>制約から当たり前といえば当たり前です。ただし、宣言名の直後に <code class="XML">S</code> なしに <code class="XML">%</code> が来てもよいこと、パラメーター実体参照とそのまわりがくっついていても展開の際に <code>U+0020</code> が補われることに注意したいところです。)</li></ul></li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> こんなのもありだ。 <samp class="XML">&lt;!ENTITY % include &quot; INCLUDE[&lt;!ENTITY % q '&quot;'&gt;&lt;!ENTITY name %q;name=foo%q;&gt;  &quot;&gt;&lt;![%include;</samp>&gt;]]。ところが、ちょっと修正をして <samp class="XML">&lt;![%include;]&gt;</samp> とか <samp class="XML">&lt;!%include;</samp>&gt;]] となるようではうまくいかない。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal> ここで思い出されるのが、 <code>U+0020</code> を補う規則。確かに <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal> の悪い例だと、 <samp class="XML">&lt;! [ INCLUDE[</samp> とか <samp class="XML">] ]&gt;</samp> とかになるからおかしい。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;18</anchor-internal> 整形式制約というか、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML//妥当性制約</anchor>だよな。 (パラメーター実体の外に出ている <code class="XML">&lt;</code> が整形式制約, 中に入っている (置換文の) <code class="XML">&gt;</code> が妥当性制約に引っ掛かる。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;16</anchor-internal> たしかに完全に BNF で表現するのは困難ではあるのですが...</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;22</anchor-internal> 全ての組み合わせは実質不可能だけど、せめて SGML 仕様書程度の記述はするべき、というか、 <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ts</anchor></code>, <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ps</anchor></code>, <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ds</anchor></code> 程度の区別はするべきだったと。</p><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:">XML</anchor>】 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DTD</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>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">パラメタ実体参照</anchor>などとも。
Parameter entity reference。</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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">規格参照具象構文</anchor>だとして、<pre>&lt;!ENTITY % lt '&lt;'&gt;
&lt;!ENTITY % a &quot;%lt;!ENTITY ent 'entity value'&gt;&quot;&gt;
%a;</pre></p><p>は適当でしょうか?</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JISX4151</anchor>‐1992 9.1.4 は、
「<code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ds</anchor></code> としての引数実体参照は、
0個以上の完全なマーク宣言と <code class="SGML">ds</code>
とからなる実体を参照しなければならない」と述べています。</p><p>この例では <samp class="SGML">%a;</samp> も、それに含まれる 
<samp class="SGML">%lt;</samp> も <code class="SGML">ds</code> 
としての引数実体参照とみなされます。
<samp class="SGML">&lt;</samp> だけからなるマーク宣言は存在しませんから、
この例は<strong>不正</strong>です。</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> それでは<pre>&lt;!ENTITY % q '&quot;'&gt;
&lt;!ENTITY % a &quot;&lt;!ENTITY ent %q;entity value%q;&gt;&quot;&gt;
%a;</pre></p><p>は適当でしょうか? ちなみに <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MSXML</anchor> では通ってしまいます。</p><p>JIS X 4151‐1992 9.1.1 には、
「その参照する実体は、その参照が現れた <code class="SGML">ps</code>
の直後に続ける0個以上の完全な引数の列からなっていなければならない」
としています。<samp class="SGML">&quot;</samp> だけの実体が「完全な引数」
でないことは明らかですから、この例は<strong>不正</strong>です。</p><p>実はこの例は次のように書くのと同じことです。<pre>&lt;!ENTITY % q '&quot;'&gt;
&lt;!ENTITY ent %q;entity value%q;&gt;</pre></p><p>こちらの例を見れば、「完全な引数」になっていないことはますます自明です。
<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="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <pre>&lt;!ENTITY % e1 &quot;'Q&amp;#x26;#x26;#x26;A'&quot;&gt;
&lt;!ENTITY e2 %e1;&gt;</pre></p><p>後者の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体宣言</anchor>の解釈を試みる。名前 <code class="SGML">e2</code>
と、その直後の <code class="SGML">ps</code> である <code class="SGML">s</code>
である文字 <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SP</anchor></code> まで読んだ。
ここで、引数実体参照 <samp class="SGML">%e1;</samp> を発見する。
この引数実体参照も、 <code class="SGML">ps</code> として評価される。</p><p>引数実体 <samp class="SGML">e1</samp> の値を得るが、その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数表記</anchor>は
<samp class="SGML">&quot;'Q&amp;#x26;#x26;#x26;A'&quot;</samp> である。
引数表記は両端が <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lit</anchor></code> 又は
<code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lita</anchor></code> だが、ここでは前者である。
その間の部分は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">置換可能引数データ</anchor>である。</p><p>置換可能引数データでは、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字参照</anchor>と引数実体参照が解釈される。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML では、構文上文字参照でも一般実体参照でもない文字 <code xmlns="http://www.w3.org/1999/xhtml" class="XML">&amp;</code> を書くことが出来ないが、そうだとしても一般実体参照はまだ認知されない・・・のかなあ。よくわからない。</weak>
従って、参照を置換した結果 <samp class="SGML">'Q&amp;#x26;#x26;A'</samp> 
を得る。</p><p>結局、先の後者の実体宣言は 
<samp class="SGML">&lt;!ENTITY e2 'Q&amp;#x26;#x26;A'&gt;</samp>
と書かれていたことになる。</p><p>同様の解釈 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(さっきのよりずっと簡単。)</weak>
により、 <samp class="SGML">e2</samp> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">置換文</anchor>は
<samp class="SGML">Q&amp;#x26;A</samp> であるとわかる。</p><p>文書実現値中で <samp class="SGML">&amp;e2;</samp> と参照すると、
今度はその参照の位置で数値文字参照 <samp class="SGML">&amp;#x26;</samp>
が評価され、結局その参照は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字データ</anchor> <samp>Q&amp;A</samp>
となる。</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><pre>&lt;!ENTITY % e1 &quot;'Q&amp;#x26;#x26;#x26;A'&quot;&gt;
&lt;!ENTITY % e2.5 &quot;%e1;&quot;&gt;
&lt;!ENTITY e2 %e2.5;&gt;</pre></p><p><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> の例と大差がないように思えるこの例で、 <samp class="SGML">e2</samp>
の置換文を求める。</p><p>前例と同様の手順により、 <samp class="SGML">e2</samp> の解釈に必要な
<samp class="SGML">e2.5</samp> の置換文を求めることとなった。
<samp class="SGML">e2.5</samp> の引数表記の中身は引数実体参照
<samp class="SGML">%e1;</samp> である。前例同様、 <samp class="SGML">e1</samp>
の置換文は <samp class="SGML">'Q&amp;#x26;#x26;A'</samp> である。
従って、 <samp class="SGML">&lt;!ENTITY % e2.5 &quot;'Q&amp;#x26;#x26;A'&quot;&gt;</samp>
と記述されていたとみなせる。</p><p>ここで、数値文字参照 <samp class="SGML">&amp;#x26;#x26;</samp>
がまた評価され、置換文は <samp class="SGML">'Q&amp;#x26;A'</samp> となる。
結局 <samp class="SGML">&lt;!ENTITY e2 'Q&amp;#x26;A'&gt;</samp>
となり、文書実現値中で参照したときの置換文は
<samp class="SGML">Q&amp;A</samp> となる。 
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML では、<anchor>整形式</anchor>エラーとなる。</weak></p><p>・・・と思うのだが、試しに <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MSXML</anchor> で読ませてみると、
<samp class="SGML">e2</samp> の実体宣言でえらーが出る。
「この場所ではスペースが許可されません」ハァ?</p><p>この解釈が間違っているのでしょうか?</p><p>(<samp class="XML">&lt;!ENTITY e2 '%e2.5;'&gt;</samp> と宣言すれば、
なんとなく意図したようにはなります。)</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><pre>&lt;!ENTITY % AMP0 '&amp;#x26;#x26;#x26;'&gt;
&lt;!ENTITY AMP0 '&amp;#x26;#x26;#x26;'&gt;
&lt;!ENTITY AMPp &quot;%AMP0;&quot;&gt;
&lt;!ENTITY AMP &quot;&amp;AMP0;&quot;&gt;</pre></p><p>文書実現値で <samp class="SGML">&amp;AMP;</samp> と <samp class="SGML">&amp;AMPp;</samp>
と参照することを考えます。</p><p>まず <samp class="SGML">&amp;AMP;</samp> からです。その引数指定は一般実体
<samp class="SGML">AMP0</samp> への参照があるのですが、
実体宣言の段階ではまだ認知されていません。
一般実体 <samp class="SGML">AMP</samp> の置換文はそのまま 
<samp class="SGML">&amp;AMP0;</samp> で、これが文書実現値中の参照の場所で評価されます。</p><p>一般実体・引数実体ともに、 <samp class="SGML">AMP0</samp>
の置換文は <samp class="SGML">&amp;#x26;#x26;</samp> です。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(両実体の宣言の引数指定の解釈で1つずつ減ってます。)</weak></p><p>一般実体 <samp class="SGML">AMP0</samp> を文書実現値中で評価した結果、
得られる文字データは <samp class="SGML">&amp;#x26;</samp> となります。</p><p>さて、 <samp class="SGML">&amp;AMPp;</samp> の場合です。
こちらは、一般実体 <samp class="SGML">AMPp</samp> の<em>実体宣言の時点で</em>、
その引数指定内の引数実体 <samp class="SGML">AMP0</samp> 
への参照が評価されているため、 <samp class="SGML">AMPp</samp>
の宣言は <samp class="SGML">&lt;!ENTITY AMPp &quot;&amp;#x26;#x26;&quot;&gt;</samp>
と同じことです。</p><p>また引数指定ですから、置換文は <samp class="SGML">&amp;#x26;</samp>
になります。</p><p>これが文書実現値中で評価される時、得られる文字データは
<samp class="SGML">&amp;</samp> になります。</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> 頭の体操のような様相を呈してきました。。。<ul><li><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-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal> 解釈の順序を考えれば二つの例は同等ではないです。</li><li><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> <code class="ABNF"><dfn>引数実体参照</dfn> := <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pero</anchor></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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">参照終了</anchor> ;; (60)</code></li></ul></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-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal> の「実体値指定内の引数実体参照は宣言時ではなくそれを含む引数実体が参照された時に評価される」というのは、何かの勘違いではないでしょうか。</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:">実体値</anchor>)で記述されている場合、表記の中の引数実体参照は単に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">置換可能引数データ</anchor>の文脈で解釈されます(JISX4151‐1992 表3, XML 4.4.5)。</p><p>従って、<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;6</anchor-internal> の例と同様、<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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal> の例での <samp class="SGML">%lt;</samp> や <samp class="SGML">%q;</samp> は <samp class="SGML">a</samp> の実体宣言の際に展開されてしまうので、<code class="SGML">ds</code> や <code class="SGML">ps</code> として認知されることはありません。結局、<samp class="SGML">%a;</samp> はどちらの例でも正当な <code class="SGML">ds</code> として解釈され、一般実体 <samp class="SGML">ent</samp> が正しく宣言されたものと見なされます。<ul><li><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> <em>&quot;WFC: In DTD&quot; の意味 - XML Core 関連</em> <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.satoshii.org/markup/xml/wfc-indtd">http://www.satoshii.org/markup/xml/wfc-indtd</anchor-external></li></ul></p><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>
XML では、<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> PEs in Internal Subset)</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>ではこの制限はなく、
マーク宣言内に書くことができます。</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>と同じですね。</p><p>(<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="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end>
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;11</anchor-internal> の文書は以前から気になっていた整形式制約 In DTD
のことを説明してくれています。</p><p>そこでは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CDATA区間</anchor>のためだろうという結論になっていますが、
それでも、 XML の構文では文字データ区間に引数実体参照が使える余地はありません。
ですから整形式制約として敢えて立てる必要性の説明にはならないと思います。
(本当はやはり不要で、歴史的なものではないかとにらんでいます。)</p><p>関係ありませんが、 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>にはすべて
<code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ps</anchor></code> を使いたかったからでしょう。</p><p>(<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="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end>
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;13</anchor-internal> 意表をついて、 <q>DTD の中では使ってもいいよ</q>という<q>制約</q>ではないかと思ったりしましたが、こういう解釈って駄目ですか?</p><p>XML の整形式・妥当性制約ってのは EBNF の生成規則で表現できないことを記述しているではないですか。で、マーク宣言内の引数実体参照もうまく表現できていないから・・・。</p><p>でももし本当にこういう意味だとしたら、
説明がよくなさすぎる。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">2004-06-06 03:27:37 +00:00</weak>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</anchor-end> 
<cite><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JIS X 4153:1998</anchor><sw-br xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"></sw-br>文書スタイル意味指定言語(DSSSL)  解説</cite>
<time>2001-08-19T05:29:36.000Z</time>, <time>2023-11-19T13:04:37.509Z</time> <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.y-adagio.com/public/standards/jis_dsssl/tutr.txt">http://www.y-adagio.com/public/standards/jis_dsssl/tutr.txt</anchor-external></p><blockquote><p>訳語選定に際しては,SGMLを規定しているJIS X 4151,SGMLの拡張規格であるJIS X 4155, 及びSGML関連規格であるJIS X 4171との整合を第一に配慮した。しかし次の用語などについては,その後関連分野で普及した訳語表記に従っている。</p><p>原語                           訳語           </p><p>------------------------------------------------</p><p><snip xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"></snip>  </p><p>parameter entity               パラメタ実体   </p></blockquote></section></body></html>