<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="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</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:">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>を指定することがほとんどでありました。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</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:">システム識別子</anchor>として使っています。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><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> <cite xml:lang="EN">Extensible Markup Language (XML) 1.0 (Fifth Edition)</cite> (<time>2013-05-29 05:49:56 +09:00</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.w3.org/TR/xml/#dt-sysid">http://www.w3.org/TR/xml/#dt-sysid</anchor-external></li></ul></refs></section><section><h1>SGML の定義</h1><figure><blockquote><dl><dt><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">システム識別子<rt xmlns="http://www.w3.org/1999/xhtml">system identifier</rt></rubyb></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><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>。 <ins>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JISX4151</anchor>‐1992 定義 (106)</ins></dd></dl></blockquote></figure><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></p></section><section><h1>XML の定義</h1><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:">URI参照</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>で使います。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal></src></p><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> <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:">URI</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-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal></src> とされていますが、<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> <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>です。記法宣言以外では <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(外部識別子を使う場合)</weak> 必須です。)</p><section><h1>値</h1><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:">URL</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:">相対URL</anchor>でも構いません。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空文字列</anchor>も禁止されていません。</comment-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>です <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal></src>。</p></section><section><h1>文字</h1><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> 区切子 (<code class="XML">&quot;</code> 又は <code class="XML">'</code>) を除いたどんな<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書文字集合</anchor>中の文字でも使用できます。 <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.w3.org/TR/REC-xml#NT-SystemLiteral">http://www.w3.org/TR/REC-xml#NT-SystemLiteral</anchor-external></p><figure class="quote"><figcaption><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> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal></src> より</figcaption><blockquote><p>[定義: <code class="XML">SystemLiteral</code> 
は実体の<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">システム識別子<rt xmlns="http://www.w3.org/1999/xhtml">system identifier</rt></rubyb></dfn>と呼びます。
システム識別子は <del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E26</weak></ins> URI で、実体を取り出すのに使うことが出来るかもしれません</del> <del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E66</weak></ins> (RFC 2369 で定義され、 RFC 2732 で更新された)</ins> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E26</weak></ins> URI <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E76</weak></ins> 参照</ins>で</ins>、<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>を構築するための入力を得るために<del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> 参照を解くことになります</del></del> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> その参照を解く過程の一部として (RFC 2369 で定義され、 RFC 2732 で更新された) URI 参照に変換されることになるものです</ins>。] <del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E76</weak></ins> なお、 URI と共によく使われる <code class="URI">#</code> と素片識別子は、正確には URI の一部ではありません。 XML 処理系は素片識別子がシステム識別子の一部として出現した場合には誤りとしても構いません。</del> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E76</weak></ins> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">素片</anchor>識別子 (<code class="URI">#</code> で始まる。) がシステム識別子の一部であったなら、これは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">誤り</anchor>です。</ins>
XML 1.0 仕様書の適用範囲外の情報が提供されない限り、
(例えば特定の DTD で規定された特別な XML 要素型とか、
特定の応用の仕様で定義されている<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">処理指令</anchor>とかで指定されない限り、)
相対 URI はその実体宣言が出現する資源の位置からの関係とします。 <ins><ins>SE E18</ins> これは宣言を開始させる <code class="XML">&lt;</code> が、宣言の解釈される時点で含まれている外部実体であると定義します。</ins>
従って URI は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書実体</anchor>からの関係であったり、外部 DTD
部分集合を含んでいる実体からのであったり、
あるいは他の外部引数実体からのものであったりします。 <ins><ins>SE E3</ins> URI により識別される資源を取り出そうとする時、解析器水準で (例えば実体解決器中で)、あるいは下位 (プロトコル水準、例えば <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Location:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">頭</anchor>) で redirect されるかもしれません。資源中にこの仕様の適用範囲外の追加情報が無い場合、資源の基底 URI は、常に実際に返された資源の URI となります。言い換えれば、全ての redirect を処理した後に取り出した資源の URI です。</ins></p><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml">.<ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E78</weak></ins> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E49</weak></ins> URI は予約文字 (RFC 2396 2.2 節参照。) や非 ASCII 文字を含んでいるかもしれません。</ins> XML 処理系は、 URI 中の<del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E49</weak></ins> 非 ASCII</del> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E49</weak></ins> そのような</ins> 文字を、その文字を UTF-8 の1つ以上のバイトの列として表現し、それからそのバイトを URI escape 機構で escape する (つまり各バイトを <code class="URI">%<var>HH</var></code> に変換する。ここで <var>HH</var> はバイト値の16進数表記。)
ことで扱うべきです。</p></delete><insert xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml">.<ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE E78</weak></ins> <del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E4</weak></ins> URI 参照ではある文字群について符号化と escape が必要です。禁止文字には全ての非 ASCII 文字と、 RFC 2396 の2.4節に列挙されている除外文字を含みます。但し数値記号 (<code class="URI">#</code>) 及び百分率記号 (<code class="URI">%</code>) 及び RFC 2732で再許可された四角括弧文字を除きます。禁止文字は次のように escape しなければなりません。</del> <del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E4</weak></ins> XML 処理系は禁止文字を次の手順で escape しなければなりません。</ins></del> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> システム識別子 (及び他の XML 文字列で URI 参照として使われることになるもの) は、 RFC 2396 及び RFC 2732 に従えば URI をその参照している資源を取り出すのに使う前に escape しなければならないある文字群を含んでいるかもしれません。 Escape される文字は、制御文字 <code class="XML">#x0</code>〜<code class="XML">#1F</code>, <code class="XML">#7F</code> (このほとんどは XML では出現できない)、間隔 <code class="XML">#x20</code>, 区切子 <code class="XML">'&lt;'</code> <code class="XML">#x3C</code>, <code class="XML">'&gt;'</code> <code class="XML">#x3E</code>, <code class="XML">'&quot;'</code> <code class="XML">#x22</code>, <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非賢明<rt xmlns="http://www.w3.org/1999/xhtml"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unwise</anchor></rt></rubyb>文字 <code class="XML">'{'</code> <code class="XML">#x7B</code>, <code class="XML">'}'</code> <code class="XML">#x7D</code>, <code class="XML">'|'</code> <code class="XML">#x7C</code>, <code class="XML">'\'</code> <code class="XML">#x5C</code>, <code class="XML">'^'</code> <code class="XML">#x5E</code>, <code class="XML">'`'</code> <code class="XML">#x60</code>, それに <code class="XML">#x80</code> 以上の全ての文字です。 Escape は必ずしも完全に復元可能な過程ではないので、完全に必要な場合に限って可能な限り処理の連鎖の遅い過程で適用しなければなりません。特に、相対 URI を絶対 URI に変換する過程も、あるいは URI 参照をその参照を解くことを担当する過程又はソフトウェア部品に渡す過程も、 escape を行うきっかけとなるべきではありません。 Escape が行われる時には、次の手順で処理しなければなりません。</ins><ol><li>各<del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> 禁止</del> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> escape する</ins>文字を UTF-8 の1つ以上のバイトの列<del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> に変換</del> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> で表現</ins>する。</li><li><del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> 禁止文字に対応する各<del><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E5</weak></ins> オクテット</del> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E5</weak></ins> バイト</ins></del> <ins><ins><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE E26</weak></ins> 結果のバイト列</ins>を URI escape 機構によって
escape する。 (つまり、 <code class="URI">%<var>HH</var></code>
に変換する。ここで、 <var>HH</var> はそのバイト値の16進表記。)</li><li>元の文字を得た文字列で置換する。</li></ol></p></insert></blockquote></figure><p>修正歴:<ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FE</anchor><ul><li>E26 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">明確化</weak> URI を解決して得たバイト列を置換文の元にすることが不明瞭だった。<ul><li>E76 URI ではなく URI 参照。素片識別子は意味がないから誤りに。</li></ul></li><li>E49 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本質的</weak> URI の予約文字に触れていなかった。<ul><li>E78 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本質的</weak> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">説明なし</weak></li></ul></li><li>E66 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">編集上</weak> 最新の URI RFCs の参照に修正。</li><li>E88 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本質的</weak> 文書の全ての URI を URI 参照に変更。<ul><li><weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>nihonLinux</anchor> みたいだ(w 「URI URI 参照」ってなんよ?</weak></li></ul></li></ul></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SE</anchor><ul><li>E3 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">明確化</weak> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">説明なし</weak></li><li>E4 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">明確化</weak> URI 参照の解決に当たって XML 処理系が escape に責任があるという説明が SE では抜けていた。<ul><li>E26 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">明確化</weak> いつ誰が escape するのか不明瞭だった。<ul><li>E43 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">編集上</weak> E26 の修正時に E3, E4, E18 を見落としていた。</li></ul></li></ul></li><li>E5 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">編集上</weak> <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>E16 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本質的</weak> URI RFCs をその他の参考文献から規定参考文献に変更。</li><li>E18 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">明確化</weak> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal>-2 参照</li></ul></li></ul></p><ul><li><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> ほんとに二転三転七転八倒(謎)ですねぇ。</li><li><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> URI → URI 参照→ URI 参照に変換されるものと変わってきたのがおもしろおかしいw。そのうち IRI に変換されるもの、とかにまた訂正されるに違いない。</li><li><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> まとめると、システム識別子の値は URI ではなく、 URI 参照に変換されるものだから、 URI では使ってはいけない文字も使ってもいい、ということらしいです。ものは言いようとはまさに。</li><li><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> Escape が非可逆だからいくない!ってのも意味不明ですね。確かに <samp class="URI">http://foo.example/&quot;/</samp> と <samp class="URI">http://foo.example/%22/</samp> の区別は失われますが、前者はそもそも <em>URI として不正</em>なので、そんなものに復元する必要はないのでして。</li><li><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> <strong>XML 処理系は URI として不正な文字が含まれていたら警告</strong>するのがよいでしょう。仕様書がそういうのも扱えと言っている以上、誤りには残念ながら出来ませんが。</li></ul></section><section><h1>基底 URL</h1><p><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:">宣言基底URL</anchor>を参照。</p></section><section><h1>処理</h1><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 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><section><h1>メモ</h1><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>
<q>システム識別子 (及び他の XML 文字列で URI 参照として使われることになるもの)</q>
の、システム識別子以外の XML 文字列たる URI 参照になるものって何?
まさか <code class="XMLa">xml:base</code> のような関連規格を指しているわけではありませんよね? でもシステム識別子以外に XML 本体に URI 参照って使われますか?</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><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 xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML情報集合</anchor>...</ed></section></section><section><h1>XML Schema の定義</h1><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:">XML Schema</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> の <code class="XML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NOTATION</anchor></code> に対応する <code class="XMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">notation</anchor></code>
を規定しており、これにも<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:">xs:anyURI</anchor></code> とされています。</p></section><section><h1>システム識別子の欠落</h1><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>は必須ではありません。
ただし <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:">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>とすることもできます。</p><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:">システム識別子</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="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:">XML情報集合</anchor>ではいずれも<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>無値</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">no value</rt></rubyb>となり得ます。また<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">未展開実体参照情報項目</anchor>については<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>未知</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">unknown</rt></rubyb>ともなり得ます。</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:">DOM Standard</anchor> では <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DocumentType</anchor></code> の <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">systemId</anchor></code>
を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> にすることができません。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML Living Standard</anchor> および <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">システム識別子</anchor>のない
<code class="HTML" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOCTYPE</anchor></code> の場合<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="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:">DOM3</anchor> は <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DocumentType</anchor></code> の
<code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">systemId</anchor></code> が <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code>
になる可能性に言及していません。
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Entity</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Notation</anchor></code>
については <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> になり得るとしていました。</p></section><section><h1>セキュリティーとプライバシー</h1><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> <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><section><h1>関連</h1><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 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:">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:">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>を識別する用途に使われています。</p></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>
<cite xml:lang="ja">鳥さんの独り言 XHTML文書のDTDのURL(URI)は必須?</cite> (<code>2007-08-14 20:56:14 +09:00</code> 版) <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://gowest.blog2.fc2.com/blog-entry-47.html">http://gowest.blog2.fc2.com/blog-entry-47.html</anchor-external></p><blockquote><p>HTML鳩丸倶楽部さんの「文書型宣言の読み方」(URIを示すと横幅オーバーになってしまうので、ググッてください)に書かれている内容が、一般的な理解と言ってよいでしょう。</p></blockquote><p><q>一般的な理解</q>ってなにさw <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SGML</anchor> の仕様書嫁だよw</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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Netscape</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RSS 0.91</anchor> 仕様では、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書型宣言</anchor>は次のいずれかでなければならないとされていました。<figure><pre class="XML example code">&lt;!DOCTYPE rss PUBLIC &quot;-//Netscape Communications//DTD RSS 0.91//EN&quot; &quot;http://my.netscape.com/publish/formats/rss-0.91.dtd&quot;&gt;</pre><pre class="XML example code">&lt;!DOCTYPE rss PUBLIC &quot;-//Netscape Communications//DTD RSS 0.91//EN&quot; &quot;&quot;&gt; </pre><figcaption><cite xml:lang="en">RSS 0.91 Specification (Netscape)</cite> (<time>2008-11-22 17:21:58 +09:00</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.rssboard.org/rss-0-9-1-netscape#DOCTYPE">http://www.rssboard.org/rss-0-9-1-netscape#DOCTYPE</anchor-external></figcaption></figure></p></section></body></html>