[1] [DFN[[RUBY[基底][きてい]@en[base]] URL]]、[DFN[[RUBY[基底][きてい]@en[base]] URI]]、 [DFN[[RUBY[基底][きてい]@en[base]] IRI]] とは、[[相対URL]]、[[相対参照]]、[[相対IRI参照]]を[[解決]]する際の基準として用いられる [[URL]]、[[URI]]、[[IRI]] です。 * 呼称について [32] 「[[URL]]」(的なもの) の概念と用語の混乱に伴い、「[[基底URL]]」(的なもの) の概念と用語も場面によって異なっていることがあります。 [33] [[URL]]、[[URI]]、[[IRI]] といった元となる用語にあわせて、「[[基底URL]]」、「[[基底URI]]」、「[[基底IRI]]」 のような異なる呼称を用いることがあります。細かな差異を無視すればこれらはいずれも同じ概念を表しています。 [[W3C]] の仕様の中には、実際には [[IRI]] や[[遺物拡張IRI]] であっても「[[基底URI]]」 の名称を用いることがあります。 [2] 「[[URI]]」という語は [[RFC 3986]] に従えば[[相対参照]]を含みませんし、 [[RFC 2396]] 時代の定義では[[素片識別子]]も含まれませんでしたが、[[相対参照]]や[[素片識別子]]を使っていても 「[[基底URI参照]]」ではなく単に「[[基底URI]]」と呼ぶことがあります。 ;; [[相対参照]]の[[解決]]において[[素片識別子]]の有無は結果に影響しないのですが、 普通は[[素片識別子]]つきの [[URI参照]]を認めても特に害はないので、 「[[基底URI]]」が認められる場所で[[素片識別子]]つきの [[URI参照]]も認められていたりするのでしょう。 ;; [3] もっとも、 [[RFC 3986]] などで定義されている[[相対参照]]の[[解決]]の[[算法]]の入力としての[[基底URI]] は[[絶対URI]] ([[絶対URI参照]]) である必要があります。 [CODE(XMLa)@en[[[xml:base]]]] [[属性]]のように[[基底URI]] が望まれるところで[[相対参照]]が使えることもありますが、より上位の[[相対参照]]について[[解決]]した結果が [[RFC 3986]] 的な意味での[[基底URI]] となって使われます。 * 文書 URL との関係 [34] [[基底URL]] はそれが適用される[[文書]] [WEAK[(というものがあるとして。)]] 自体の [[URL]] とは別個に、その[[文書]]に含まれる[[相対参照]]を[[解決]]するため''だけ''の文脈情報として提供されると解釈するのが一般的と思われますが、 歴史的には[[文書]]自体の [[URL]] を (諸々の処理において) 上書きするものとして用いられているらしき場面もあります。 * [CODE(InfoProp)[XML基底]]特性 (XML情報集合) [5] [[XML情報集合]]の[DFN[[CODE(InfoProp)[[RUBYB[基底URI] @en[base URI]]]]]][[特性]]は、 その[[情報項目]]の[[基底URI]]を値として保持します。 この[[特性]]は、 - [[文書情報項目]] - [[要素情報項目]] - [[処理指令情報項目]] で定義されています。 [6] '''仕様書''' - [[XML情報集合]] -- [CSECTION@en[Base URIs]] -- [CSECTION@en[2.1. The Document Information Item]] -- [CSECTION@en[2.2. Element Information Items]] -- [CSECTION@en[2.4. Processing Instruction Information Items]] - [[XML基底]] [[#comment]] ** 特性値 [7] '''文書情報項目の場合''' = [[文書実体]]の[[基底URI]]です。 [SRC[XML情報集合 2.1]] = [[XML基底]]仕様に従います。 [SRC[XML情報集合 1]] = [[RFC 2396]]に従います。 [SRC[XML基底 4]] [[XML基底]]の仕様書の内容には多少曖昧な点もありますが、 [[RFC 2396]]の規定と矛盾する規定を行う意図はなさそうなので、 = [[転送プロトコル]]によってもたらされた[[基底URI]] = [[文書実体]]の[[取出し]]に用いた[[URI]] ([[リダイレクト]]がある場合は、最終的な[[URI]]) = [[応用]]の文脈に依存した[[URI]] の順で決定するものと思われます。 [8] '''要素情報項目の場合''' = [[要素]]の[[基底URI]]です。 [SRC[XML情報集合 2.2]] = [[XML基底]]仕様に従います。 [SRC[XML情報集合 1]] = [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の項を参照。 [9] '''処理指令情報項目の場合''' = [[処理指令]]の[[基底URI]]です。 [SRC[XML情報集合 2.4]] = [[XML基底]]仕様に従います。 [SRC[XML情報集合 1]] = [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の項を参照。 [16] '''逃避''' [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の[[値]]を[[URI参照]]として使うためには[[逃避]]が必要です [WEAK[([CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の項を参照してください。)]] が、[[特性値]]はその''前''のものです。 [SRC[XML情報集合 1]] [14] '''応用依存''' [[XML基底]]仕様で[[基底URI]]が[[応用]]依存になる場合に関して、 [[XML情報集合]]仕様は[CODE(InfoProp)[[[基底URI]]]]の値を規定しません。 [SRC[XML情報集合 1]] ;; [15] [[DTD]]を[[処理]]するか否かによって結果が異なり得る[[特性]]では[[値]]が[[無値]]や[[未知]]になることもありますが、 [CODE(InfoProp)[[[基底URI]]]]ではそれは無いようです。 [[DTD]]を[[処理]]しない場合に関しても[[XML基底]]仕様で[[基底URI]]が明確に定義されているためでしょうか。 (実際[[DTD]]を[[処理]]していないからといって[[無値]]や[[未知]]にされては役に立ちませんしw) ** SML の基底 URL [28] [[SML-IF]] では[CODE(InfoProp)[[[基底URI]]]]に関する2種類の処理モデルが定義されています。 1つは[[XML基底]]に基づく [CODE(XMLa)@en[[[xml:base]]]] [[属性]]を使った標準的な方法で、 もう1つは互換性のための独自の方法です。[[SML-IF消費器]]はいずれかを実装しなければ[['''なりません''']]。 [[SML-IF生産器]]は前者の [CODE(XMLa)@en[[[xml:base]]]] [[属性]]の方法は実装しなければ[['''なりません''']]が、 後者の独自の方法の実装は義務付けられていません。 [SRC@en[[[SML-IF]]]] *** 仕様書 - [29] [CITE@en-US[Service Modeling Language Interchange Format Version 1.1]] ([TIME[2009-05-12 17:50:21 +09:00]] 版) *** [CODE(XML)@en[smlif:baseURI]] 機構 [30] [[SML-IF]] 独自の処理モデルである [DFN[[CODE(XML)@en[[[smlif:baseURI]]]] [RUBYB[機構]@en[mechanism]]]]では、 [[要素情報項目]]の[CODE(InfoProp)[[[基底URI]]]] を次のように決定します。 [SRC@en[[[SML-IF]]]] = 当該[[要素情報項目]]が[[交換モデル]]中の[[文書]]の一部なら ([[先祖要素]]が [CODE(XMLe)@en[[[smlif:locator]]]] などなら)、[[文書基底URI]]です。[DFN[[RUBYB[文書基底][document base]] URI]] とは、次の [[RFC 3986]] [[絶対URI]] です。 == [CODE(XML)@en[[[docInfo/baseURI]]]] [[要素]]が存在する場合、その値が[[相対参照]]なら[[交換モデル基底URI]] について[[解決]]したもの、[[相対参照]]でないなら値そのものです。 == そうでなく、[[交換モデル基底URI]] が値を持つ場合、その値です。 == そうでない場合、値を持ちません。 = そうでない場合、[[交換モデル基底URI]]です。[DFN[[RUBYB[交換モデル基底]@en[interchange model base]] URI]] は、 [CODE(XML)@en[[[/model/identity/baseURI]]]] [[要素]]が存在する場合はその値、そうでない場合は値なしです。 [31] [[SML-IF]] では[[相対参照]]が必要な場合に本処理モデルに基づく、あるいは [CODE(XMLa)@en[[[xml:base]]]] [[属性]]による[[基底URL]] の明記が義務付けられており、[[相対参照]]の[[解決]]においてより上位の[[基底URL]] ([[文書実体]]の [[URL]] など) が用いられることはないとされています [SRC@en[[[SML-IF]]]]。 ただし >>30 からわかるようにその規定が従われなかった場合に[CODE(InfoProp)[[[基底URI]]]] が[[値なし]]になってしまうことがあります。また、[[SML-IF生成器]]も2つの処理モデルのいずれかのための[[基底URL]] を指定することしか義務付けられていないので、 [[SML-IF消費器]]側が異なる処理モデルを選択している場合にも[CODE(InfoProp)[[[基底URI]] が[[値なし]]となりえます。 ** 関連 [13] '''合成情報集合''' [[合成情報集合]] ([[XML]][[文書]]から生成してすぐの[[情報集合]]''以外'') では、[CODE(InfoProp)[[[基底URI]]]]と[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]][[情報項目]]に齟齬が生じていることもあります。 [SRC[XML情報集合 1]] [10] '''処理指令情報項目の直列化''' [[外部実体]]の直下に[[処理指令]]がある場合、 その[[外部実体]]の[[基底URI]]が[[処理指令]]の[[基底URI]]になりますが、 [[処理指令]][[情報項目]]を含む[[情報集合]]を[[直列化]]する時にその[[基底URI]]の情報は保存する方法がありません。 [SRC[XML情報集合 2.4]] [11] '''[CODE(InfoProp)[宣言基底URI]]''' [[非解析対象実体]][[情報項目]]や[[記法]][[情報項目]]には、 [CODE(InfoProp)[[[宣言基底URI]]]]という[[特性]]が定義されています。 [12] '''DOM特性''' [[DOM]]の[CODE(DOMa)@en[[[baseURI]]]][[特性]]は[CODE(InfoProp)[[[基底URI]]]]ではなく、 [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]に基づき定義されています。 [17] [[XInclude]]では[[基底URI]]を保存するために[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]を追加して整合性を維持することがあります。 ([[名無しさん]]) [18] [CODE(InfoProp)[[[基底URI]]]]と[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]では、 [CODE(InfoProp)[[[基底URI]]]]の方を優先して[[相対参照]]の[[解決]]に使うべきとされています。 [SRC[XML情報集合 1]] [19] '''[CODE@en[base-uri]] アクセス子''' [[RDF/XML]][[構文]]を定義する[[事象]]モデルでは、 [[根]][[事象]]と[[要素]][[事象]]に[CODE@en[[[base-uri]]]][[アクセス子]]があり、 共に[CODE(InfoProp)[[[基底URI]]]][[特性]]から値を得ることとされています。 [20] '''XSLTデータ・モデル''' [[XPath 1.0]]の[[データ・モデル]]には、 [CODE(InfoProp)[[[基底URI]]]]に相当するものがありません。 [[XSLT 1]]の[[データ・モデル]]における[CODE(InfoProp)[[[基底URI]]]]相当のものに関しては、 >>26 を参照してください。 * 基底 URI (XSLT データ・モデル) [26] [[XSLT]] の[[データ・モデル]]においても[DFN[基底 URI]] の概念があります。 なお、 [[XSLT 1.0]] や [[XSLT 1.1]] の[[データ・モデル]]の礎となっている [[XPath 1.0]] の[[データ・モデル]]にはそれに相当する概念はありませんでした。 [35] [[XSLT 1.0]] では、[[基底URI]] は各[[節点]]について規定されています。 ;; [[XSLT 1.0]] は [[XML基底]]以前に定義されたものなので、 [CODE(XMLa)@en[[[xml:base]]]] [[属性]]は反映されません。 [36] [[XSLT 1.1]] では、基本的に [[XML基底]]に従って[[基底URI]] が算出されます。 ** [25] 仕様書 - [[XSLT 1]] -- [CSECTION@en[3.2 Base URI]] -- [CSECTION@en[3.3 Unparsed Entities]] -- [CITE@en[Errata in REC-xslt-19991116]] ** 節点と基底 URI [24] , ,[[XSLT 1.0]] ,[[XSLT 1.1]] ,[[文書節点]] ,[[文書実体]]の[[URI]] ,(規定なし) ,[[根節点]] ,(規定なし) ,[[文書実体]]の[[URI]] ,[[要素節点]] ,[[外部実体]]中なら[[外部実体]]の[[URI]]、そうでなければ[[文書]]の[[基底URI]] ,[[XML基底]]による ,[[処理指令節点]] ,[[外部実体]]中なら[[外部実体]]の[[URI]]、そうでなければ[[文書]]の[[基底URI]] ,[[XML基底]]による ,"[[文節点]], [[注釈節点]], [[属性節点]]" ,[[親節点]]の[[基底URI]] ,== ,[[名前空間節点]] ,[[親節点]]の[[基底URI]] ,実装依存 ,[[非解析対象実体]]の[[システム識別子]] ,[[実体宣言]]を含む[[資源]]の[[基底URI]] ,== ;; - [21] [Q[[[文書実体]]・[[外部実体]]の[[基底URI]]]]では''なく''て[Q[[[文書実体]]・[[外部実体]]の[[URI]]]]なのがちょっと・・・。 - [22] それでいて[Q[そうでなければ[[文書]]の[[基底URI]]]]とは何事か。 [[文書実体]]や[[文書節点]]ではなく、[[文書]]の[[基底URI]]なのか? - [23] そもそも[[文書節点]]という語も、 ここ1箇所でしか出てこない ([[根節点]]の誤りか)。 * メモ [27] @@ [[RFC 4722]] [CODE(XMLa)@en[[[baseurl]]]] ([[名無しさん]] [WEAK[2006-11-18 03:19:09 +00:00]])