#?SuikaWiki/0.9
*xml:base 属性 (XML Base)
[1] [[XMLBase]] は [[HTML]] の [CODE(HTML)[BASE]]
要素を汎用化して、 [[XML]] の任意の要素の属性として[[基底URI]]
を指定できるようにしたものです。
XML Base を使う場合は、[[相対URI]]の解決は、
=その要素の [CODE(XML)[xml:base]] 属性の値
=その要素の親・先祖の [CODE(XML)[xml:base]] 属性の値
=上位プロトコルによる URI の値
により行われます。
この属性の値は、
-同じ要素の他の属性値
-子 [CODE(XML)[#text]]
-子孫要素
-子孫[[処理命令]]
に影響します。特に、 [CODE(XML)[xml:base]]
属性の値は''相対 URI でも構わない''ので、その解決にも使われます。
(逆に言えば、子孫の相対 URI の解決には先祖要素の
[CODE(XML)[xml:base]] 属性を絶対 URI が得られるまで遡り続けないといけないということです。)
[2] [CODE(XML)[xml:base]] 属性の値の定義は URI 参照ですから、
[CODE(URI)[#]] [[断片]]をつけても構いません。
(意味は無いですが。)
URI に使えない文字が入っている場合は [[UTF-8]]
にして [[escape]] し''ないといけません''。
(最初から非 URI 文字は含めてはならないと言ってしまえば良いのに、そうしないのはどうせ守らない人が出るのと、
[[IRI]] の絡みでしょうか。)
[3] この属性自体は、 [[XML名前空間]]を使わない場合も使うことが出来ます。
また、 [[xml]] 名前空間は暗黙の宣言がなされていますから、
[[xmlns]]:xml 属性なしで使うことが出来ます。
[CODE(XML)[xmlns]] 系属性の値も [[URI]] 参照で、相対 URI
の可能性があります (常識的な仕様とは思えません:))。
しかしこの URI は単なる識別子で、解決する必要があるものではありませんから、そのまま扱います。
但しその名前空間 URI をたどってみる場合には
[CODE(XML)[xml:base]] 属性の値を使って解決するのも勝手だそうです。
[4] [[XHTML]] の使用については XML Base
仕様書は参考で曖昧なことを書いています。
実際のところ W3C の XHTML 1 の [[DTD]]
にはこの属性は定義されていませんから、そのままでは使えません。
XHTML 2.0 [[WD]] では明確に使用できると定義されています。
[5] XML Base を使用できると明記していない仕様では、 XML Base
対応 [[UA]] と非対応 UA で挙動が異なることになるので無理して使用しない方が良いと思われます。
また、 XML Base 仕様書にも注記がありますが、
[CODE(XML)[xml:base]] 属性に DTD
や外部スキーマで初期値が設定されていると、[[妥当性]]を検証しない
processor で正しい値が得られませんから、好ましくありません。
-''XML Base''
-''Errata in REC-xmlbase-20010627''
- [6] ''XML Base [日本語訳]'' : Errata 未反映なので注意
- [7] XML Base は [[XLink]] と一緒に開発されたものの汎用性を持たせるべく独立した仕様となったそうです。
[[#comment]]
*メモ
- [8] [[不思議マーク付け]]的には、 [CODE(HTML)[BASE]] 要素は次の [CODE(HTML)[BASE]] 要素が現れるまで有効なのだそうです (少なくても [[WinIE]] はこの通り動くらしい)。 [CODE(HTML)[BASEFONT]] 要素と同じですね。