@@ この記事の内容は古いので、 [[IRI]] の項をご覧ください。

[1] [[URI]] と [[IRI]] と [[XML]]
と、それを構成する[[文字]]と[[文字コード]]について。

頭痛気味の方は読まないほうがいいかもしれません。


* URI が値である属性・表記の値における非 URI 文字の扱い


[25] URI が値であるはずの属性、例えば [CODE(XML)[[[xmlns]]]]
属性の値に非 URI 文字、例えば [CODE(char)["]]
とか [CODE(char)[あ]] とかが含まれていることは十分ありえます。

[[#comment]]



** 標準的取扱い — UTF-8 + URI 符号化

[2] そのようなときの対処法は、標準的には
= 使えない文字 ([[RFC 2396]] に書かれている、
URI で使えない文字から、 [CODE(URI)[%]],
[CODE(URI)[#]], [CODE(URI)[ [ ]],
[CODE(URI)[ ] ]] を除外したもの) を [[UTF-8]] で符号化する。
= UTF-8 のオクテット列を、 [CODE(URI)[%]] を使った所謂
[[URI符号化]] (URI Escape) する。
= この結果を元の文字と置換える。

と処理します。この結果を実際の処理 (URI で参照された資源の入手など)
に使用します。

[26] XML 本体のシステム識別子では、泥沼的な修正の結果、
システム識別子の値は「URI 参照」ではなく「URI 参照に変換されるもの」であるから問題はない、
XML 処理器は URI 参照に変換して処理せよ、ということになっています。
(詳しくは [[../]>>10]]- を参照。)

[3] 
- 処理器 (応用) が >>2 の変換をしないといけない
-- XML 本体: [[システム識別子]]
-- [[XML基底]]: [CODE(XMLa)[[[xml]]:[[base]]]] 属性
-- [[XLink]]: [CODE(XMLa)[[VAR[xlink:]][[href]]]] 属性
<http://www.w3.org/TR/xlink/#link-locators>

[[#comment]]


** 不明 — 言及なし

[27] XML 名前空間には、 1.0 にも 1.1
にも特に言及はありません。 1.0 だけなら 1.1 で IRI
を使うようにしているからなし崩し的にどんな文字でもありにしたがっているのかなあと邪推できますが、
1.1 にも書いてないのですから単なる間抜けでしょう。

ただ、名前空間名の [[URI//比較]]は単純な文字列比較ですから、
URI としての妥当性も気にせずにとにかく1文字1文字チェックすればいいんだ、
という立場かもしれません。

[28] >>27 の後半が正しいとしたら、識別子性のために URI
を利用しておきながら傲慢な態度ですね。

[4]
- 言及なし : 素通し容認?
-- [[XML名前空間]] : [[名前空間名]]


[30]
XML 名前空間 1.1 最終版では、 IRI の仕様がまだ確定していないから実装はどんな文字も受けるけるようにというようなことが書いてあります。一方で利用者は IRI 仕様が確定するまで URI を使うようにすすめられています。
([[名無しさん]])

[[#comment]]


* メモ

[29]
URI 文字以外禁止: [CODE(XMLa)[[VAR[xlink:]][[role]]]] 属性, [CODE(XMLa)[[VAR[xlink:]][[arcrole]]]] 属性
([[名無しさん]])