<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">この記事の内容は古いので、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IRI</anchor> の項をご覧ください。</ed><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:">URI</anchor> と <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IRI</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><p>頭痛気味の方は読まないほうがいいかもしれません。</p><section><h1>URI が値である属性・表記の値における非 URI 文字の扱い</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> URI が値であるはずの属性、例えば <code class="XML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">xmlns</anchor></code>
属性の値に非 URI 文字、例えば <code class="char">&quot;</code>
とか <code class="char">あ</code> とかが含まれていることは十分ありえます。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form><section><h1>標準的取扱い — UTF-8 + URI 符号化</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> そのようなときの対処法は、標準的には<ol><li>使えない文字 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2396</anchor> に書かれている、
URI で使えない文字から、 <code class="URI">%</code>,
<code class="URI">#</code>, <code class="URI"> [ </code>,
<code class="URI"> ] </code> を除外したもの) を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-8</anchor> で符号化する。</li><li>UTF-8 のオクテット列を、 <code class="URI">%</code> を使った所謂
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI符号化</anchor> (URI Escape) する。</li><li>この結果を元の文字と置換える。</li></ol></p><p>と処理します。この結果を実際の処理 (URI で参照された資源の入手など)
に使用します。</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> XML 本体のシステム識別子では、泥沼的な修正の結果、
システム識別子の値は「URI 参照」ではなく「URI 参照に変換されるもの」であるから問題はない、
XML 処理器は URI 参照に変換して処理せよ、ということになっています。
(詳しくは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <ul><li>処理器 (応用) が <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> の変換をしないといけない<ul><li>XML 本体: <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:">XML基底</anchor>: <code class="XMLa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">xml</anchor>:<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">base</anchor></code> 属性</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XLink</anchor>: <code class="XMLa"><var>xlink:</var><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">href</anchor></code> 属性
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/xlink/#link-locators" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.w3.org/TR/xlink/#link-locators</anchor-external></li></ul></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="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> XML 名前空間には、 1.0 にも 1.1
にも特に言及はありません。 1.0 だけなら 1.1 で IRI
を使うようにしているからなし崩し的にどんな文字でもありにしたがっているのかなあと邪推できますが、
1.1 にも書いてないのですから単なる間抜けでしょう。</p><p>ただ、名前空間名の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI//比較</anchor>は単純な文字列比較ですから、
URI としての妥当性も気にせずにとにかく1文字1文字チェックすればいいんだ、
という立場かもしれません。</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-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;27</anchor-internal> の後半が正しいとしたら、識別子性のために URI
を利用しておきながら傲慢な態度ですね。</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><ul><li>言及なし : 素通し容認?<ul><li><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></li></ul></li></ul></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>
XML 名前空間 1.1 最終版では、 IRI の仕様がまだ確定していないから実装はどんな文字も受けるけるようにというようなことが書いてあります。一方で利用者は IRI 仕様が確定するまで URI を使うようにすすめられています。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section></section><section><h1>メモ</h1><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>
URI 文字以外禁止: <code class="XMLa"><var>xlink:</var><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">role</anchor></code> 属性, <code class="XMLa"><var>xlink:</var><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">arcrole</anchor></code> 属性
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p></section></body></html>