* xml:base 属性 (XML Base) [1] [DFN[[CODE(XMLa)[xml:base]]]] 属性は、 [[HTML]] の [CODE(HTMLe)[base]] 要素型を汎用化して、 [[XML]] の任意の要素の属性として[[基底URI]] を指定できるようにしたものです。 [21] '''仕様書''' - [[XML基底]] -- [6] [CSECTION@en[3 [CODE(XMLa)@en[xml:base]] Attribute]] -- [25] [CITE@en[Errata in REC-xmlbase-20010627]] (詳細は[[XML基底]]の項を参照。) [[#comment]] ** 属性値 [44] '''適当な属性値''' [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性値]]は、 ''後述の処理の後に''[[RFC 2396]] [[URI参照]]として処理されます。 [SRC[XML基底 3]] [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性値]]で使うことのできる[[文字]]は、 [[XML]]の一般の場合と同じです。 [SRC[XML基底 3.1]] [[属性値]]から[[URI参照]]に変換するためには、 - [[非ASCII文字]] - [CODE(char)@en[[[U+0000]]]]〜[CODE(char)@en[[[U+0020]]]] - [CODE(char)@en[[[U+007F]]]] - [CODE(char)[[[<]]]], [CODE(char)[[[>]]]], [CODE(char)[[["]]]], [CODE(char)[[[{]]]], [CODE(char)[[[}]]]], [CODE(char)[[[|]]]], [CODE(char)[[[\]]]], [CODE(char)[[[^]]]], [CODE(char)[[[`]]]] を[[UTF-8]]で[[百分率符号化]]します。 [SRC[XML基底 3.1]] ;; 詳しくは[[XML//URI]]および[[IRI]]の項を参照。 [52] '''RFC 3986との関係''' [[RFC 3986]]の新しい構文では、[[命名権者]]部に[[百分率符号化]]や新しい[[IP番地]]のための構文が認められていますが、 [[RFC 2396]]や[[RFC 2732]]では認められていません。 [[XML基底]]仕様を厳密に運用するなら、 [[RFC 3986]]の[[URI参照]]の一部は[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性値]]に使えません。 ;; ただし、 >>40 の規定により、 [[RFC 3986]] に従って解釈する実装も不適合にはなりません。 [53] '''RFC 3987との関係''' [[RFC 3987]]も[[RFC 3986]]にあわせた新しい構文を採用していますから、 [[XML基底]]仕様を厳密に運用するなら、 [[RFC 3987]]の[[IRI参照]]の一部は[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性値]]に使えません。 ;; ただし、 >>40 の規定により、 [[RFC 3987]] に従って解釈する実装も不適合にはなりません。 ;; なお、 >>44 の[[URI参照]]に変換するために[[逃避]]しなければならない[[文字]]の種類は、 [[RFC 3987]]の[[算法]]で規定されたものと一致しています。 [42] '''意味不定の場合''' - [43] [[XML基底]]仕様を直接または間接に参照する[[応用]]''以外''では、 [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の動作は未定義です。 [SRC[XML基底 1]] - [40] 値が[[妥当]]な[[URI参照]]にならない場合の動作は、 [[応用]]依存です。 [SRC[XML基底正誤表 E03]] [20] >>40 (>>2 の絡みで、厳密には[Q[URI 参照と解釈できない場合]]とでもしないといけないと思うのですが...) ;; [45] [[XML基底]] 3では[[RFC 2396]] [[URI参照]]として解釈するとしていますが、 同3.1の[[逃避]]に関する[[RFC 2732]]も参照しています。 字面通り厳密に解釈すると結局[[RFC 2732]]拡張は使えないことになってしまいますが、 本当にそれでよいのでしょうか。[[RFC 3986]]が発行された今、 早急に改訂するべきです。 [2] [CODE(XMLa)[xml:base]] 属性の値の定義は [Q[URI 参照と解釈されるもの]]ですから、 [CODE(URI)[#]] + [[素片識別子]]をつけても構いません。 (あまり意味は無いですが。) [75] 実のところ、[[XML基底]]仕様書には、 [CODE(XMLa)@en[[[xml]]:[[base]]]] [[属性値]]がある処理の後 [[RFC 2396]] [[URI参照]]として''処理される'' (実装に。) という説明があるだけで、 [[著者]]が [CODE(XMLa)@en[[[xml]]:[[base]]]] [[属性]]にどのような値を指定してよいのか、 どのような値を指定することが期待されているのかがまったく規定されていません。 ([[名無しさん]]) [[#comment]] ** 基底URIの算出 [46] [SRC[XML基底 4]] - ある[[要素]]の[[基底URI]]は、次の順に決定します。 == その[[要素]]に[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]があれば、 それによって指定された[[基底URI]]。 == 同じ[[文書実体]]または[[外部実体]]中に[[親要素]]があれば、 その[[基底URI]]。 == その[[要素]]が含まれる[[文書実体]]または[[外部実体]]の[[基底URI]]。 - [[要素]]中の文字列[[内容]]の[[基底URI]]は、 その[[要素]]の[[基底URI]]です。 - [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の[[基底URI]]は、 次の順に決定します。 == 同じ[[文書実体]]または[[外部実体]]中に[[親要素]]があれば、 その[[基底URI]]。 == その[[要素]]が含まれる[[文書実体]]または[[外部実体]]の[[基底URI]]。 - その他の[[属性]]の[[基底URI]] ([[既定属性]]を含みます。) の[[基底URI]]は、その付されている[[要素]]の[[基底URI]]です。 - [[処理指令]]の[[内容]]の[[基底URI]]は、 次の順に決定します。 == 同じ[[文書実体]]または[[外部実体]]中に[[親要素]]があれば、 その[[基底URI]]。 == その[[要素]]が含まれる[[文書実体]]または[[外部実体]]の[[基底URI]]。 - [[文字]]、[[内部実体]]、[[属性]]に個別に[[基底URI]]を指定する方法はありません。 [47] [[システム識別子]]における[[基底URI]]については、 [[XML]]の仕様書に規定があります。 ([[XML//URI//基底]]の項を参照。) [48] [CODE(XML)@en[[[xmlns]]]]系[[属性]]については特に例外が規定されていないので、 >>46 の原則通りになりますが、[[名前空間URI]]が[[絶対URI参照]]で''ない''時にどう処理されるのかは[[XML]]系仕様書では定義していません。 [SRC[XML基底 附属書C (参考)]] [[#comment]] ** 相対参照の解決 [49] [[XML基底]]仕様書には[CSECTION@en[4 Resolving Relative URIs]]という章がありますが、 [[基底URI]]の決定方法の説明だけで、[[相対URI参照]]の[[解決]]の方法は何ら規定していないようです。 [[XML基底]]仕様からの引用規格に[[RFC 2396]]および[[RFC 2732]]がありますし、 本文中でも再三引用されていますから、それらで定義された方法で[[解決]]すると解釈するのが自然でしょう。 [50] '''RFC 3986との関係''' [[RFC 3986]]の[[相対参照]]の[[解決]]方法には[[RFC 2396]]のものと違いがあります。 問題となる変更点は2つあります。 - [[素片識別子]]''だけ''の[[参照]] -- [[RFC 2396]]における[[素片識別子]]''だけ''の[[URI参照]]は、 同じ[[文書]]内での[[参照]]です。[[基底URI]]に対してではなく、 [[文書]]自体に対して解釈されます。 -- [[RFC 3986]]における[[素片識別子]]''だけ''の[[URI参照]]は、 [[基底URI]]に対するものとして解釈されます。 - 非階層的[[URI]] -- [[RFC 2396]]では、[[相対URI]]は階層的な[[URI]]に関して定義されており、 [[基底URI]]が階層的でない場合は使うことができません。 -- [[RFC 3986]]では、どんな[[URI]]に対しても[[相対参照]]とその[[解決]]方法が定義されています。 ;; [54] [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の[[基底URI]]が[[RFC 2396]]によれば階層的ではなく、[[相対URI]]を使えないにも関わらず、 [[属性値]]が[[相対URI]]の場合はどうなるのでしょうか。 >>40 が適用されるのでしょうか。 (その場合は[[RFC 3986]]の動作をしても[[適合]]します。) ;; [[XML基底]]を参照する仕様の1つ、[[RDF/XML]] (2004年版) は、[[RFC 2396]]の[[同文書参照]]も[[基底URI]]に対して解釈すると規定しています。 ;; [CITE[RDF/XML Syntax Specification (Revised)]] [51] '''RFC 3987との関係''' >>44 の通り、[[IRI参照]]の多くはそのまま[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性値]]として使うことができますが、 [[逃避]]して[[URI参照]]にして処理すると定義されていますから、 [[解決]]は[[IRI参照]]としてではなく、変換後の[[URI参照]]として行われます。 [[#comment]] ** XML名前空間およびスキーマとの関係 [41] '''XML名前空間を使わない場合''' [[XML名前空間]]を使わない場合、 [[名前]]が[CODE(XMLa)@en[[[xml]]:[[base]]]]の[[属性]]を使うことができます。 [SRC[XML基底 3]] [3] '''XML名前空間を使う場合''' [[XML名前空間]]を使う場合、 [[名前空間名]]が[CODE(URI)@en[[[http://www.w3.org/XML/1998/namespace]]]] ([[名前空間接頭辞]]は[CODE(XML)@en[[[xml]]]]) で[[局所名]]が[CODE(XMLa)@en[[[base]]]]の[[属性]]を使うことができます。 [SRC[XML基底 3]] [24] [[XML基底]]仕様書にも注記がありますが、 [CODE(XMLa)[xml:base]] 属性に DTD や外部スキーマで初期値が設定されていると、 [[妥当性]]を検証しない処理器などで正しい値が得られませんから、好ましくありません。 [11] >>5 ですから、既定値は DTD の内部部分集合で指定するか、 又は直接指定する'''べき'''だとされています。 (, ) [55] '''XML Schemaによる定義''' [[XML Schema]]による定義 (執筆時点での最新版は ) では、[CODE(XMLa)@en[[QN[[[xml]]:[[base]]] [http://www.w3.org/XML/1998/namespace]]]][[属性]]は[[データ型]][CODE(XML)@en[[QN[xs:[[anyURI]]] [http://www.w3.org/2001/XMLSchema]]]]として[[宣言]]されています。 また、[[属性集合]][CODE(XML)@en[[QN[[[xml]]:[[specialAttrs]]] [http://www.w3.org/XML/1998/namespace]]]] に含まれています。 [[#comment]] ** 各種データ・モデルとの関係 [29] [[XML情報集合]]は、 XML 基底仕様書の規定に基づく[[要素情報項目]]の [CODE(infoprop)[[[基底URI]]]] 特性を定義しています。 >>25 の E02 の通り、一旦情報集合を構築してしまった後は [CODE(XMLa)[xml:base]] 属性情報項目と [CODE(infoprop)[基底 URI]] 特性は切り離されてしまいます。 [30] [[DOM 3]] の [CODE(DOMi)[[[Node]]]] 界面の [CODE(DOMa)[[[baseURI]]]] 属性は基底 URI を保持しています。 XML 情報集合の [CODE(infoprop)[基底 URI]] とは異なり、 [CODE(DOMa)[baseURI]] の値は (XML 基底仕様書に基づく) 計算により求めます。 [CODE(XMLa)[xml:base]] 属性節と [CODE(DOMa)[baseURI]] は同期しています。 [59] [CODE(InfoProp)[[[基底URI]]]]と[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]では、 [CODE(InfoProp)[[[基底URI]]]]の方を優先して[[相対参照]]の[[解決]]に使うべきとされています。 [SRC[XML情報集合 1]] ([[名無しさん]]) [60] [CODE(InfoProp)[[[基底URI]]]]と[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]では、 [CODE(InfoProp)[[[基底URI]]]]の方を優先して[[相対参照]]の[[解決]]に使うべきとされています。 [SRC[XML情報集合 1]] ([[名無しさん]]) [61] [CODE(InfoProp)[[[基底URI]]]]と[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]では、 [CODE(InfoProp)[[[基底URI]]]]の方を優先して[[相対参照]]の[[解決]]に使うべきとされています。 [SRC[XML情報集合 1]] ([[名無しさん]]) [[#comment]] ** 応用言語と xml:base 属性 [23] [CODE(XMLa)[xmlns]] 系属性の値も URI 参照 (XML 名前空間 1.1 では [[IRI参照]]) で、相対 URI 参照である可能性があります (常識的な仕様とは思えません:))。 [WEAK[(一応今では非推奨になっています。)]] しかしこの URI/IRI 参照は単なる識別子で、 解決する必要があるものではありませんから、そのまま扱います。 但しその名前空間 URI/IRI 参照をたどってみる場合には [CODE(XML)[xml:base]] 属性の値を使って解決するのも勝手だそうです。 (そういえば XML 基底では IRI 参照の解決の方法は書かれていない。 そのうち改訂されるのか? それとも IRI 参照を解決する時には URI 参照に変換するのか?) [4] [[XHTML]] の使用については XML Base 仕様書は参考で曖昧なことを書いています。 実際のところ W3C の [[XHTML 1]] の [[DTD]] には[CODE(XMLa)[xml:base]] 属性は定義されていませんから、 そのままでは使えません。 [[XHTML 2.0]] [[WD]] では明確に使用できると定義されています。 [5] XML Base を使用できると明記していない仕様では、 XML Base 対応 [[UA]] と非対応 UA で挙動が異なることになるので無理して使用しない方が良いと思われます。 [[#comment]] *** xml:base 属性 (XML 型録) [12] [[XML]] [[型録]]のほとんどの要素型 ([[名前空間名]]が [CODE(URI)[[[urn:oasis:names:tc:entity:xmlns:xml:catalog]]]] 及び [CODE(URI)[[[urn:oasis:names:tc:entity:xmlns:tr9401:catalog]]]] の全ての要素型。但し、 [CODE(XML)[[[rewriteSystem]]]], [CODE(XML)[[[rewriteURI]]]] 両要素型を除く。) では [CODE(XML)[xml:base]] 属性が使えます。 [13] 唯二つ使えない両要素型も、 URI 参照を値に持つ [CODE(XML)[[[rewritePrefix]]]] 属性を持っているのに [CODE(XML)[xml:base]] 属性が無いのは不可解です。 これらの両要素型の [CODE(XML)[rewritePrefix]] 属性、 仕様書本文中の定義では [CODE[uri-reference]] になっていますし、本文中の説明でも相対 URI はその場の基底 URI で解決することになっていますが、 [[DTD]] では URI 参照ではなく単なる文字列になっています。 [WEAK[(もちろん実際の型は [CODE(XML)[[[CDATA]]]] ですが、[[引数実体]]を使って型が擬似的に示してあります。あと、 DTD でなくても [[XML Schema]] も示してありますが、こちらも同じ状況です。)]] もしかしたら [CODE(XML)[rewritePrefix]] では URI としては不正な値 [WEAK[([SAMP(URI)[http://foo.]] とか。)]] も認めたかったから文字列型にしたのかもしれません。 でもなんだかなあ。 [[#comment]] *** [CODE(XMLa)@en[xml:base]] 属性 (Atom) [62] [[Atom 1.0]]のすべての[[要素]]には、[[XML基底]]で規定された [CODE(XMLa)@en[[QN[[[xml]]:[[base]]] [http://www.w3.org/XML/1998/namespace]]]][[属性]]を持って'''構いません'''。 [[RFC 3986]] にある[[基底URI]] ([[基底IRI]]) として使われます。 ;; 出典: [[RFC 4287]] [CSECTION@en[2. Atom Document]] [63] >>62 [[RFC 2396]]を参照する[[XML基底]]仕様を参照しながら、 [[RFC 3986]]の機能を持つといい、[Q@en[or [[IRI]]]] とまで書いていますが、いったいどう理解しろというのでしょう。 [[#comment]] ** 歴史 [7] XML Base は [[XLink]] と一緒に開発されたものの汎用性を持たせるべく独立した仕様となったそうです。 [[#comment]] ** メモ [9] XML 基底を使うとして、 [PRE(XML)[ ]PRE] の [SAMP(URI)[foo.css]] は [SAMP(URI)[dir2]] からの相対 URI として解釈されるのかな? (要素の内容だから。) [10] HTML で [PRE(HTML)[ ]PRE] は >>9 と同じように解釈されるのかなあ?? [31] [CITE[XInclude, xml:base, and validation]] [[XInclude]] の処理に伴って [CODE(XMLa)[[[xml]]:[[base]]]] [[属性情報項目]]が追加されると[[妥当性検証]]に影響がでかねないという問題 ([CODE(XMLa)[[[xml]]:[[lang]]]] でも)。 ([[名無しさん]]) [32] [CITE[2005 / 04 / 04: .NET developers want inconsistent schema validity on xml:* attributes?]] >>31 の問題で予想通り(藁) [CODE(XMLa)[[[xml]]:[VAR[*]]]] は[[妥当性検証]]で無視すればよいという意見が出ていることに対して、 それでは [CODE(XMLa)[[[xml]]:[[lang]]]] の値を制約したりできなくなるというおはなし。 ([[名無しさん]] [WEAK[2005-04-05 00:21:13 +00:00]]) [56] [[正準XML]] (1.0) 仕様によって特定の[[要素]]以下を[[直列化]]する際には、 [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]を含め、 [CODE(XML)@en[[[xml]]]][[名前空間]]に属する[[属性]]がその[[要素]]の[CODE(XPath)@en[[[ancestor-or-self]]]]のうちの一番近くにあるものが[[指定]]されます。 [SRC[正準XML 2.4]] ([[名無しさん]]) [57] [[排他的XML正準化 1.0]]仕様では >>56 の規定を適用しないことになっています。 ([[名無しさん]]) [58] [[XInclude]]では[CODE(InfoProp)[[[基底URI]]]]との整合性を保持するために[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]を追加することがあります。 ([[名無しさん]]) [70] [CITE@en[xml:base in M12N]] ([[Shane McCarron]] 著, [CODE[2007-07-13 21:52:09 +09:00]] 版) ([[名無しさん]]) [73] [CITE@EN[XML Base (Second Edition)]] ([CODE[2008-03-20 00:21:54 +09:00]] 版) ([[名無しさん]]) [74] [CITE[Re: Issues concerning the element and xml:base]] ([[Ian Hickson ]] 著, [CODE[2008-02-13 01:15:07 +09:00]] 版) [76] [[Firefox]] でも [[Opera]] でも、 [CODE(XMLa)@en[[[xml]]:[[base]]]] [[属性]]の値は ([[LEIRI]] ではなく) [[HTML5]] [[URL]] として処理されるようです。 ;; [CITE[Index of /~wakaba/-temp/test/uri/leiri/xmlbase]] ([TIME[2008-11-18 20:42:03 +09:00]] 版) ;; [[Safari]] は[[空文字列]]な[[相対参照]]を [CODE(JS)@en[[[document]].[[URL]]]] とみなすらしく ([[RFC 2396]] 時代の解釈)、 [[LEIRI]] か [[URL]] か判断するいい方法が思いつきませんでした。 [77] [[Opera]] は [CODE(XMLa)@en[xlink:[[href]]]] [[属性]]の値を [[URL]] ではなく [[LEIRI]] として処理するようですけど、これって多分、 [[基底URL]] は無変換で素通しして、最後に [[URL]] を使う場面でだけ [[HTML]] か [[SVG]] かで処理を分けているんじゃ''なく''、 [[基底URL]] の段階で [[URI]] 化してるってことですよね。 [[#comment]] * base 要素型 (HTML, XHTML 1) [14] [[HTML]] の [DFN[[CODE(HTMLe)[base]] 要素型]]の要素は、 [[文書]]の[[基底URI]] や基底対象枠を指定するために使用することができます。 [17] HTML での基底 URI に関しては、 [[HTML//基底URI]] も参照してください。 [26] 仕様書: - [[HTML 2.0]] ([[RFC 1866]]) -- [CITE[5.2.2. Base Address: [CODE(HTMLe)[BASE]]]] - [[HTML 4]] -- [CITE[12.4 Path information: the [CODE(HTMLe)[BASE]] element]] [15] :[[開始タグ]]:必須 :[[終了タグ]] ([[HTML 2]], [[HTML 4]], [[ISO-HTML]]):禁止 :終了タグ (XHTML 1):必須 :[[内容模型]]:[[強制空要素]] :出現できる文脈:[CODE(HTMLe)[[[head]]]] 内の、参照を持つ要素の前に高々1個 :[[属性]]: ,属性名 ,値の型 ,既定値 ,意味 ,出典 ,[CODE(HTMLa)[[[href]]]] ,[[絶対URI]] ,(選択必須) ,基底 URI ,"[HTML 2], [HTML 4]" ,[CODE(HTMLa)[[[id]]]] ,(なし) ,固有識別子 ,"[XHTML 1.0 SE], Microsoft [[Word]]" ,[CODE(HTMLa)[[[target]]]] ,[CODE(SGML)[%[[FrameTarget]]]] ,(選択必須) ,既定の対象枠 ,[HTML 4] 非推奨 [CODE(HTMLa)[href]] 属性と [CODE(HTMLa)[target]] 属性のいずれかは必須です (が、 [[DTD]] でこれを表すことができないので、 両方の属性が存在する DTD では、両方省略可能になっています)。 [[#comment]] ** 出現できる文脈 [16] この要素は [CODE(HTMLe)[head]] 要素内に高々1個存在できますが [SRC[HTML 4]]、 外部参照を持つ要素の前になければなりません [SRC[HTML 4 仕様書]]。 [CODE(HTMLe)[base]] 要素の前に来得る、 外部参照を持ち得る要素型は [CODE(HTMLe)[[[script]]]], [CODE(HTMLe)[[[object]]]], [CODE(HTMLe)[[[link]]]] です。 (スクリプト内やスタイルシート内の参照も含まれるのでしょうか? だとしたら [CODE(HTMLe)[[[style]]]] 要素や、 [CODE(HTMLa)[style]] 属性または事象系属性を持つ任意の要素が該当します。) ところで、 [CODE(HTMLe)[head]] 要素自体も [CODE(HTMLa)[[[profile]]]] という値に [[URI]] を含む属性があります。でもそれ以前にもっていくのは不可能です。 [18] HTML 4 loose DTD でも [CODE(HTMLe)[base]] が出現可能なのは高々1回です。つまり、 [CODE(HTMLa)[href]] 用と [CODE(HTMLa)[target]] 用を別にするようなことはできない、 ということです。 [[#comment]] ** 他との関係 [27] HTML には [CODE(HTMLa)[[[codebase]]]] 属性があって、特定の要素の特定の処理における基底 URI を別途指定できます。 [[XHTML]] を他のマーク語彙と組合せる時の [CODE(HTMLe)[base]] 要素の影響は規定されていませんから、 どう解釈されるかわかりませんので危険です。 [[#comment]] ** 仕様書から *** RFC 1866 (HTML 2.0) 5.2.2. Base Address: BASE > The optional element provides a base address for interpreting relative URLs when the document is read out of context (see 7, "Hyperlinks"). The value of the HREF attribute must be an absolute URI. 省略可能な [DFN[[CODE(HTMLe)[base]] 要素]]は、 文書が文脈外で読まれる時に[[相対URL]]を解釈するための基底番地を提供します。 [CODE(HTMLa)[href]] 属性の値は[[絶対URI]]でなければなりません。 ** 不思議解釈 [8] [[不思議マーク付け]]的には、 [CODE(HTMLe)[base]] 要素は次の [CODE(HTMLe)[base]] 要素が現れるまで有効なのだそうです (少なくても [[WinIE]] はこの通り動くらしい)。 [CODE(HTMLe)[[[basefont]]]] 要素と同じですね。 [33] [[WinIE]] ([[MSHTML]]) において、 [CODE(HTMLe)[[[base]]]] 要素が [CODE(HTMLe)[[[head]]]] 中に存在する場合、 - [CODE(HTMLe)[[[body]]]] の [CODE(DOMa)[[[parentNode]]]] は [CODE(HTMLe)[[[base]]]] です。 - [CODE(HTMLe)[[[head]]]] 内の要素の内、 [CODE(HTMLe)[[[base]]]] の弟の [CODE(DOMa)[[[parentNode]]]] は [CODE(HTMLe)[[[base]]]] です。 - [CODE(HTMLe)[[[base]]]] の [CODE(DOMa)[[[childNodes]]]] には [CODE(HTMLe)[[[base]]]] の弟や [CODE(HTMLe)[[[body]]]] が含まれます。 - [CODE(HTMLe)[[[base]]]] の [CODE(DOMa)[[[parentNode]]]] は [CODE(HTMLe)[[[head]]]] です。 - [CODE(HTMLe)[[[base]]]] の [CODE(DOMa)[[[previousSibling]]]] は直近の兄です。 - [CODE(HTMLe)[[[base]]]] の [CODE(DOMa)[[[nextSibling]]]] は [CODE(DOM)[[[null]]]] です。 - [CODE(HTMLe)[[[head]]]] の [CODE(DOMa)[[[childNodes]]]] には [CODE(HTMLe)[[[base]]]] の兄や [CODE(HTMLe)[[[base]]]] が含まれます。 - [CODE(HTMLe)[[[body]]]] の [CODE(DOMa)[[[previousSibling]]]] は [CODE(HTMLe)[[[head]]]] です。 - [CODE(HTMLe)[[[body]]]] の [CODE(DOMa)[[[nextSibling]]]] は [CODE(DOM)[[[null]]]] です。 - [CODE(HTMLe)[[[head]]]] の [CODE(DOMa)[[[previousSibling]]]] は [CODE(DOM)[[[null]]]] です。 - [CODE(HTMLe)[[[head]]]] の [CODE(DOMa)[[[nextSibling]]]] は [CODE(HTMLe)[[[body]]]] です。 - [CODE(HTMLe)[[[head]]]] の [CODE(DOMa)[[[parentNode]]]] は [CODE(HTMLe)[[[html]]]] です。 - [CODE(HTMLe)[[[html]]]] の [CODE(DOMa)[[[childNodes]]]] には [CODE(HTMLe)[[[head]]]] と [CODE(HTMLe)[[[body]]]] が含まれます。 - [CODE(HTMLe)[[[base]]]] の [CODE(DOMa)[[[outerHTML]]]], [CODE(DOMa)[[[innerHTML]]]], [CODE(DOMa)[[[outerText]]]], [CODE(DOMa)[[[innerText]]]] には弟や [CODE(HTMLe)[[[body]]]] の内容も含まれます。 [CODE(HTMLe)[[[base]]]] の[[終了タグ]]はありません。 [CODE(HTMLe)[[[head]]]] の[[終了タグ]]は含まれます。 - [CODE(HTMLe)[[[head]]]] の [CODE(DOMa)[[[outerHTML]]]], [CODE(DOMa)[[[innerHTML]]]], [CODE(DOMa)[[[outerText]]]], [CODE(DOMa)[[[innerText]]]] には [CODE(HTMLe)[[[body]]]] の内容は含まれません。 ([[WinIE 6]] on [[Windows XP]] [[SP2]] で確認) 参考: [CITE[agenda 2002-03(下旬) - Personnel]] ([[名無しさん]]) [34] >>33 >>3 のように [CODE(HTMLe)[[[body]]]] 内に複数 [CODE(HTMLe)[[[base]]]] を入れてみると、それ以降がすべて [CODE(HTMLe)[[[base]]]] に飲み込まれます。 [CODE(HTMLe)[[[base]]]] の終了タグがあっても無視されます。 ([[名無しさん]] [WEAK[2005-05-29 07:33:55 +00:00]]) [35] >>34 のテスト: ([[名無しさん]] [sage]) [37] こういう変な包含関係は [CODE(HTMLa)@en[[[contentEditable]]]] でも生じるらしい [CITE@en[contentEditable - Anne’s Weblog about Markup & Style]] ([[名無しさん]] [sage]) [38] >>33-35 [[WinIE 7]] で修正される予定だそうです。 [CITE@en[IEBlog : All your are belong to us]] ([[名無しさん]] [WEAK[2005-09-02 03:35:49 +00:00]]) [64] [CITE[「base要素でいろいろ」@水無月ばけらのえび日記]] ([[名無しさん]] [WEAK[2006-11-05 23:44:46 +00:00]]) [[#comment]] ** 歴史 [19] [CODE(HTMLe)[base]] 要素に [CODE(HTMLa)[[[id]]]] を振って、相対 URI を使う文脈でどの基底 URI (たとえば画像用の基底 URI) を使うのかを選べるようにしたらどうかという案もありました。 ''www-html@w3.org from May 1995: Re: processing by browsers'' [39] [[libwww]]の[[HTML]][[構文解析器]]は1996年7月20日のRelease 4.1b3で[CODE(HTMLe)@en[[[base]]]]を実装しました。 ([[名無しさん]] [sage]) [[#comment]] ** 例 [28] [PRE(HTML)[ Our Products

Have you seen our Bird Cages? ]PRE] [WEAK[(HTML 4 仕様書より、改)]] この場合、この文書自体の [[URI]] にかかわらず、 [CODE(HTMLe)[a]] 要素のリンク先は [SAMP(URI)[http://www.example.com/cages/birds]] になります。 [[#comment]] ** メモ [65] [CITE@en[crisp’s blog » Blog Archive » Broken parsers; the importance of BASE]] ([CODE[2007-01-12 23:43:01 +09:00]] 版) ([[名無しさん]] [WEAK[2007-01-12 14:45:56 +00:00]]) [66] [CITE@en[Useful CSS Snippets - webSemantics]] ([[Mike Foskett]] 著, [CODE[2007-01-13 16:06:46 +09:00]] 版) ([[名無しさん]]) [67] 今朝の #whatwg より ([[JST]]): > - 08:15 about 5% of sites have 1 tag, apparently - 08:16 0.03% have 2 - 08:16 0.0017% have 3 - 08:16 and a few thousand have more than 3 - 08:18 so we're talking about a few million pages here - 08:18 with 2 or more elements ([[名無しさん]] [WEAK[2007-05-01 02:57:59 +00:00]]) [68] > - 08:19 oh actually this was only counting _different_ values for - 08:19 so a few million pages use two different values for ([[名無しさん]] [WEAK[2007-05-01 02:59:14 +00:00]]) [69] [CITE[Issues concerning the element and xml:base]] ([[Ian Hickson ]] 著, [CODE[2007-05-01 06:53:18 +09:00]] 版) ([[名無しさん]] [WEAK[2007-05-04 04:39:41 +00:00]]) [71] [CITE[Re: Issues concerning the element and xml:base]] ([[Ian Hickson ]] 著, [CODE[2007-08-07 09:32:28 +09:00]] 版) ([[名無しさん]]) [72] [CITE[Re: Issues concerning the element and xml:base]] ([[Ian Hickson ]] 著, [CODE[2007-08-07 09:32:28 +09:00]] 版) ([[名無しさん]]) [[#comment]] * メモ [36] [[P3P]] に[[基底URI]] を指定するための [CODE(XMLa)[base]] 属性があります。 ([[名無しさん]])