[18] 相対URIとその基底URIの取り方にも色々と問題があります。 大きく、
辺りに集約できるでしょう。
[28] 属性, 文字, 実体 (の置換文) は基底 URI を持ちません。それを含む・参照する構造の基底 URI が使われます。
例えば、
<!ENTITY ent "relative/URI"> <!ENTITY ext SYSTEM "entities/ext.ent"> ... <element xml:base="http://example/base/URI/of/element"> <el attribute="relative/URI"/> <uri>relative/URI</uri> &ent; &ext; </element> entities/ext.ent relative/URI <uri>relative/URI/2</uri>
で、 relative/URI
はすべて
http://example/base/URI/of/relative/URI
,
relative/URI/2
は
http://example/base/URI/of/entities/relative/URI
に解決されます。
[30] 以上の説明と重複ではありますが、 <http://www.w3.org/TR/xmlbase/#matching> から:
xml:base
属性の中にある URI 参照の基底 URI
は、xml:base
属性を持っている香具師がいれば、その基底 URI とし,[19] XML名前空間ではその名前空間を識別する名前空間名として URI 参照を用いますが、最初の勧告ではその同一性の定義 [同一] にて、相対 URI を使うと基底 URI との絡みで面倒なことになるのが示唆されています。
この問題についての討論会 [xppa] が行われ、結果として相対 URI の使用は非推奨とし、その解決は将来の W3C の仕様書で規定するかもしれないとされました [修正4]。
その後、更に修正が加えられ、相対 URI の意味については将来の W3C 仕様書でも規定しないことになりました [修正9]。
DOM や XPath などの XML 名前空間を扱う関連仕様でも、
その挙動は未定義となっています。 XMLBase
も xml:base
属性の名前空間名に対する効力は未定義にしています。
[20] 空の URI (長さ 0 の文字列) は一般には基底 URI そのものを指しますが、これが使えるかははっきりしません。
既定名前空間の定義 [既定 NS] には、
既定名前空間の宣言では空の文字列が指定
(xmlns=""
) できると書かれています。
但しこの場合は URI 参照としてではなく、
「名前空間なし」の指定とみなされます。
既定名前空間の宣言では、と書かれていることから推測して、
既定名前空間以外の宣言では使用できないと解釈できるかもしれませんが、
現時点で勧告にも Errata にもなんとも書いてありません。
ただ、 [修正 9] には「 The use of relative URI references, including same-document references, in namespace declarations is deprecated.」
と書かれています (強調引用者)。
[修正 4] にはなかった注記がわざわざ加えられているのですから、
使えると考えられるかもしれません。
(でも同じ文書の参照には #
というのもあります...)]]
[21] XML 名前空間 1.1 では空の属性値の宣言だとその接頭辞についての関連付けを取り消すという意味に解釈されることになっています。 [修正 9] の修正はこの「非互換性」への配慮かもしれませんが...
[22] ちなみに、 Mozilla の XML parser は xmlns:ns="" を文句なしに解釈してくれますが、 M$XML は致命的誤りと解釈しています。
[23] 名前空間 1.1 では IRI を URI の代わりに使いますが、 そこ [1.1 IRI] で「空文字列も妥当な IRI 参照であるが、 XML 名前空間では使わない」と言っています。 これは 1.0 にはない文ですが、これから推測するとやはり 1.0 で空文字列 URI 参照は妥当なのかもしれません。
[24] ところで、 XML 名前空間 1.1 でも、「将来の仕様書でも解釈は規定しない」 としながらも相対 IRI を認めています。 なんで禁止しないんでしょう? >>23 が真であるなら 1.0 と 1.1 は非互換なので、これも禁止しちゃえばいいのに。 それともやっぱり互換性を保つ必要があるから禁止はしないのかなあ。 やっぱりわからん...
[35] RDFa は、名前空間URL が相対URL であるのは相応しくないものの、 RDFa 処理モデルでは必ず基底URL に対して解決するので問題にはならない、 としています。