/
233.txt
512 lines (389 loc) · 29.4 KB
/
233.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
[98] [[節点]]は、それぞれの[[基底URL]]を持っています。[[節点]]の[[基底URL]]は[[文書の基底URL]]の他、
[CODE(XMLa)@en[[[xml:base]]]] [[属性]]などによって静的または動的に変化することがあります。
* [CODE(DOMa)@en[baseURI]] 属性 (DOM)
[67] [CODE(DOMi)@en[[[Node]]]] の [DFN[[CODE(DOMa)@en[[[baseURI]]]] [[属性]]]]は、[[節点]]の[[基底URL]]を返します。
** 仕様書
[REFS[
- [64] [CITE@en-US[DOM Standard]] ([TIME[2013-01-07 19:58:20 +09:00]] 版) <http://dom.spec.whatwg.org/#concept-node-base-url>
- [66] '''[CITE@en-US[DOM Standard]] ([TIME[2013-01-07 19:58:20 +09:00]] 版) <http://dom.spec.whatwg.org/#dom-node-baseuri>'''
- [74] [CITE@en-US[DOM Standard]] ([TIME[2013-01-07 19:58:20 +09:00]] 版) <http://dom.spec.whatwg.org/#affected-by-a-base-url-change>
- [76] [CITE@en-US[DOM Standard]] ([TIME[2013-01-07 19:58:20 +09:00]] 版) <http://dom.spec.whatwg.org/#base-url-change-steps>
- [81] [CITE@en-US[DOM Standard]] ([TIME[2013-01-07 19:58:20 +09:00]] 版) <http://dom.spec.whatwg.org/#concept-node-adopt>
- [80] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-01-19 01:02:17 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#dynamic-changes-to-base-urls>
]REFS]
** 節点の基底 URL
[65] [[節点]]は[DFN[[RUBYB[基底 URL]@en[base URL]]]] を持ちます [SRC[>>64]]。
[70] ただし [[DOM Standard]] は他の仕様書においてそれが定義されるとしており、
具体的にどの仕様書でそれが定義されているのかは明記されていません。
** 属性値
[68] この[[属性]]は [CODE(DOMi)@en[[[DOMString]][[?]]]] です [SRC[>>66]]。
[69] 当該[[節点]]の[[基底URL]]を返します [SRC[>>66]]。
** 基底 URL の変更の影響
@@ [97] [[DOM]]/[[HTML]] の[[基底URL]]の定義の再編 (>>95) 途中のため本節の内容は仕様書上不整合になっています。技術的な内容は変化しないと思われます。
[75] [[要素]]が[DFN[[RUBYB[[[基底URLの変更に影響される]]]@en[affected by a base URL change]]]]時、
[[基底URL変更手順]]を実行しなければ[['''なりません''']] [SRC[>>74]]。
[78] [[要素]]が基底 URL の変更に影響されるのは次の場面です。
[FIG(list)[
- [79] [[要素]]を [[adopt]] したとき、その[[要素]] [SRC[>>81]]
- [82] [CODE(XMLa)@en[[[xml:base]]]] [[属性]]を設定、変更、削除したとき、その[[要素]]と[[子孫]]の[[要素]] [SRC[>>80]]
- [83] [[文書基底URL]]が変化したとき、[[文書]]中のすべての[[要素]] [SRC[>>80]]
]FIG]
;; [86] [[HTML Standard]] は[[子孫要素]]も明示的に含まれるとしていますが、 [[DOM Standard]] はそうしていません ([[adopt]]
は再帰的な手順でもありません)。また [[adopt]] は[[要素]]を挿入した時に呼び出されますが、逆に[[要素]]を削除した時には >>78
のいずれも該当しません。また >>83 は[[文書]]に所属し、[[文書中]]にはない[[要素]]についてはカバーしていません。
とはいえ、現時点では >>77 のいずれもこれらの点の影響を受けません。
[77] [DFN[[RUBYB[[[基底URL変更手順]]]@en[base URL change steps]]]] [SRC[>>76]] には次のものがあります。
[FIG(list)[
- [84] [[要素]]が[[ハイパーリンク]]を作る時、当該[[ハイパーリンク]]の [CODE(HTMLa)@en[[[href]]]] [[属性]]や
[CODE(HTMLa)@en[[[ping]]]] [[属性]]に基づく表示を更新する [SRC[>>80]]
- [85] [CODE(HTMLe)@en[[[blockquote]]]], [CODE(HTMLe)@en[[[q]]]], [CODE(HTMLe)@en[[[ins]]]],
[CODE(HTMLe)@en[[[del]]]] の [CODE(HTMLa)@en[[[cite]]]] [[属性]]に基づく表示を更新する [SRC[>>80]]
]FIG]
;; [87] つまり[[リンク先]]の表示に影響があり、また実際に[[リンク]]をたどる時にはその時点での[[基底URL]]に基づき[[解決]]されるわけですから、
自動的に[[基底URL]]の変更が反映されることになります。一方で、埋め込み系の [[URL]] ([CODE(HTMLa)@en[[[src]]]]
[[属性]]や[[スタイル・シート]]を埋め込む [CODE(HTMLe)@en[[[link]]]] [[要素]]など)
は[[基底URL]]が変化してもそれに追随しません。ただし [[IDL属性]]の [CODE(DOMa)@en[[[src]]]]
などは取得した時点での[[基底URL]]に対して[[解決]]されますから、実際に使われている [[URL]]
とは違うことがあります。
** 実装
[15]
[[Firefox 1.5]]では、[CODE(DOMi)@en[[[DocumentType]]]],
[CODE(DOMi)@en[[[Attr]]]], [CODE(DOMi)@en[[[Comment]]]],
[CODE(DOMi)@en[[[Text]]]]でも[[親]]の[CODE(DOMa)@en[[[baseURI]]]]と同じ値が得られるようです。
[18]
また、[[Firefox 1.5]]では、[[HTML]][[文書]]であっても[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]が適用されるようです
([[HTML 5]]案の規定と一致)。
[CODE(DOMi)@en[[[Document]]]][[節点]]の[CODE(DOMa)@en[[[baseURI]]]]は[[DOM水準3]][[中核]]仕様の規定通り
[CODE(DOMa)@en[[[base]]]][[要素]]
([[文書]]中どこにあっても。) による指定が反映されます。
しかし、後から[CODE(HTMLa)@en[[[href]]]][[属性]]を書き換えても
[WEAK[([CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]でも)]]
各[[節点]]の[CODE(DOMa)@en[[[baseURI]]]]
[WEAK[(や[[URI]]系[[属性]])]] には反映されないようです。
[17] 同じく[[Firefox 1.5]]で、主要な[[木]]に属さ''ない''[[節点]]の場合は、
属する[[節点]]と同じように、ただし必要なら[CODE(DOMa)@en[[[ownerDocument]]]][[属性]]をたどることによって[CODE(DOMa)@en[[[baseURI]]]]を算出しているようです。
[71] [[Chrome]] では[[文書中]]にない[[要素]]だと[[空文字列]]になります。 [TIME[2013-01-19T13:16:03.500Z]]
[72] [[Firefox]] では [CODE(DOMi)@en[[[DocumentType]]]] は[[親]]と同じ[[基底URL]]になるようですが、
[[Chrome]] では [[null]] になります。 [TIME[2013-01-19T13:20:54.00Z]]
[73] [[URL]] を[[解決]]できない場合にあっては、 [[Firefox]] はそれを無視してもう一段階上位の[[基底URL]]を返すようです。
[[Chrome]] は[[空文字列]]を返すようです。 [TIME[2013-01-19T13:30:43.200Z]]
* [CODE(InfoProp)[XML基底]]特性 (XML情報集合)
[40] [[XML情報集合]]の[DFN[[CODE(InfoProp)[[RUBYB[基底URI] @en[base URI]]]]]][[特性]]は、
その[[情報項目]]の[[基底URI]]を値として保持します。
この[[特性]]は、
- [[文書情報項目]]
- [[要素情報項目]]
- [[処理指令情報項目]]
で定義されています。
** 仕様書
[REFS[
- [41] [[XML情報集合]]
-- [CSECTION@en[Base URIs]]
<http://www.w3.org/TR/xml-infoset/#intro.baseURIs>
-- [CSECTION@en[2.1. The Document Information Item]]
<http://www.w3.org/TR/xml-infoset/#infoitem.document>
-- [CSECTION@en[2.2. Element Information Items]]
<http://www.w3.org/TR/xml-infoset/#infoitem.element>
-- [CSECTION@en[2.4. Processing Instruction Information Items]]
<http://www.w3.org/TR/xml-infoset/#infoitem.pi>
- [42] [[XML基底]] <http://www.w3.org/TR/xmlbase/>
]REFS]
** 特性値
*** 文書情報項目の場合
[43]
[FIG(steps)[
= [[文書実体]]の[[基底URI]]です。 [SRC[XML情報集合 2.1]]
= [[XML基底]]仕様に従います。 [SRC[XML情報集合 1]]
= [[RFC 2396]]に従います。 [SRC[XML基底 4]]
]FIG]
[44] [[XML基底]]の仕様書の内容には多少曖昧な点もありますが、
[[RFC 2396]]の規定と矛盾する規定を行う意図はなさそうなので、
[FIG(steps)[
= [[転送プロトコル]]によってもたらされた[[基底URI]]
= [[文書実体]]の[[取出し]]に用いた[[URI]]
([[リダイレクト]]がある場合は、最終的な[[URI]])
= [[応用]]の文脈に依存した[[URI]]
]FIG]
の順で決定するものと思われます。
*** 要素情報項目の場合
[45]
[FIG(steps)[
= [[要素]]の[[基底URI]]です。 [SRC[XML情報集合 2.2]]
= [[XML基底]]仕様に従います。 [SRC[XML情報集合 1]]
= [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の項を参照。
]FIG]
*** 処理指令情報項目の場合
[46]
[FIG(steps)[
= [[処理指令]]の[[基底URI]]です。 [SRC[XML情報集合 2.4]]
= [[XML基底]]仕様に従います。 [SRC[XML情報集合 1]]
= [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の項を参照。
]FIG]
*** エスケープ
[47] [CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の[[値]]を[[URI参照]]として使うためには[RUBY[[[逃避]]][エスケープ]]が必要です
[WEAK[([CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]の項を参照してください。)]]
が、[[特性値]]はその''前''のものです。
[SRC[XML情報集合 1]]
*** 応用依存
[48] [[XML基底]]仕様で[[基底URI]]が[[応用]]依存になる場合に関して、
[[XML情報集合]]仕様は[CODE(InfoProp)[[[基底URI]]]]の値を規定しません。
[SRC[XML情報集合 1]]
;;
[15]
[[DTD]]を[[処理]]するか否かによって結果が異なり得る[[特性]]では[[値]]が[[無値]]や[[未知]]になることもありますが、
[CODE(InfoProp)[[[基底URI]]]]ではそれは無いようです。
[[DTD]]を[[処理]]しない場合に関しても[[XML基底]]仕様で[[基底URI]]が明確に定義されているためでしょうか。
(実際[[DTD]]を[[処理]]していないからといって[[無値]]や[[未知]]にされては役に立ちませんしw)
*** URL の定義
[37] [[XDM]] は [CODE(InfoProp)[[[基底URI]]]]が[[非ASCII文字]]を含むことがあるとしています。
[REFS[
- [38] [CITE@en[XQuery 1.0 and XPath 2.0 Data Model (XDM) (Second Edition)]] ([TIME[2010-12-17 00:06:35 +09:00]] 版) <http://www.w3.org/TR/2010/REC-xpath-datamodel-20101214/#const-infoset-document>
]REFS]
** SML の基底 URL
[49] [[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]]]]
*** 仕様書
[REFS[
- [50] [CITE@en-US[Service Modeling Language Interchange Format Version 1.1]] ([TIME[2009-05-12 17:50:21 +09:00]] 版) <http://www.w3.org/TR/2009/REC-sml-if-20090512/#Base_URI>
]REFS]
*** [CODE(XML)@en[smlif:baseURI]] 機構
[51] [[SML-IF]] 独自の処理モデルである [DFN[[CODE(XML)@en[[[smlif:baseURI]]]] [RUBYB[機構]@en[mechanism]]]]では、
[[要素情報項目]]の[CODE(InfoProp)[[[基底URI]]]] を次のように決定します。 [SRC@en[[[SML-IF]]]]
[FIG(steps)[
= 当該[[要素情報項目]]が[[交換モデル]]中の[[文書]]の一部なら ([[先祖要素]]が [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]]]] [[要素]]が存在する場合はその値、そうでない場合は値なしです。
]FIG]
[52] [[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]]]]
が[[値なし]]となりえます。
** 関連
[53] [[合成情報集合]] ([[XML]][[文書]]から生成してすぐの[[情報集合]]''以外'')
では、[CODE(InfoProp)[[[基底URI]]]]と[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]][[情報項目]]に齟齬が生じていることもあります。
[SRC[XML情報集合 1]]
[54] [[外部実体]]の直下に[[処理指令]]がある場合、
その[[外部実体]]の[[基底URI]]が[[処理指令]]の[[基底URI]]になりますが、
[[処理指令]][[情報項目]]を含む[[情報集合]]を[[直列化]]する時にその[[基底URI]]の情報は保存する方法がありません。
[SRC[XML情報集合 2.4]]
[55] [[非解析対象実体]][[情報項目]]や[[記法]][[情報項目]]には、
[CODE(InfoProp)[[[宣言基底URI]]]]という[[特性]]が定義されています。
[56] [[DOM]]の[CODE(DOMa)@en[[[baseURI]]]][[特性]]は[CODE(InfoProp)[[[基底URI]]]]ではなく、
[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]に基づき定義されています。
[57] [[XInclude]]では[[基底URI]]を保存するために[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]を追加して整合性を維持することがあります。
[58] [CODE(InfoProp)[[[基底URI]]]]と[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]では、
[CODE(InfoProp)[[[基底URI]]]]の方を優先して[[相対参照]]の[[解決]]に使うべきとされています。
[SRC[XML情報集合 1]]
[59] [[RDF/XML]][[構文]]を定義する[[事象]]モデルでは、
[[根]][[事象]]と[[要素]][[事象]]に[CODE@en[[[base-uri]]]][[アクセス子]]があり、
共に[CODE(InfoProp)[[[基底URI]]]][[特性]]から値を得ることとされています。
[60] [[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]] が算出されます。
** 仕様書
[REFS[
- [25] [[XSLT 1]]
-- [CSECTION@en[3.2 Base URI]] <IW:XSLT1:"#base-uri">
-- [CSECTION@en[3.3 Unparsed Entities]] <IW:XSLT1:"#unparsed-entities">
-- [CITE@en[Errata in REC-xslt-19991116]]
<http://www.w3.org/1999/11/REC-xslt-19991116-errata/#E5>
]REFS]
** 節点と基底 URI
[24]
, ,[[XSLT 1.0]] ,[[XSLT 1.1]]
,[[文書節点]] ,[[文書実体]]の[[URI]] ,(規定なし)
,[[根節点]] ,(規定なし) ,[[文書実体]]の[[URI]]
,[[要素節点]] ,[[外部実体]]中なら[[外部実体]]の[[URI]]、そうでなければ[[文書]]の[[基底URI]] ,[[XML基底]]による
,[[処理指令節点]] ,[[外部実体]]中なら[[外部実体]]の[[URI]]、そうでなければ[[文書]]の[[基底URI]] ,[[XML基底]]による
,"[[文節点]], [[注釈節点]], [[属性節点]]" ,[[親節点]]の[[基底URI]] ,==
,[[名前空間節点]] ,[[親節点]]の[[基底URI]] ,実装依存
,[[非解析対象実体]]の[[システム識別子]] ,[[実体宣言]]を含む[[資源]]の[[基底URI]] ,==
;;
- [61] [Q[[[文書実体]]・[[外部実体]]の[[基底URI]]]]では''なく''て[Q[[[文書実体]]・[[外部実体]]の[[URI]]]]なのがちょっと・・・。
- [62] それでいて[Q[そうでなければ[[文書]]の[[基底URI]]]]とは何事か。
[[文書実体]]や[[文書節点]]ではなく、[[文書]]の[[基底URI]]なのか?
- [63] そもそも[[文書節点]]という語も、ここ1箇所でしか出てこない ([[根節点]]の誤りか)。
* 歴史
** DOM3 における [CODE(DOMa)@en[baseURI]] 属性
[3] [[DOM水準3]]で[CODE(DOMi)@en[[[Node]]]][[界面]]に追加された[[読取専用属性]][DFN[[CODE(DOMa)@en[baseURI]]]]は、
その[[節点]]の[[基底URI]]を表します。
[REFS[
- [1] [DOM 3]
-- 中核 [CSECTION@en[1.3.4 Base URIs]]
<IW:DOM3:"Core/core.html#baseURIs-Considerations">
-- 中核 [CODE(DOMi)@en[[[Node]]]] [CODE(DOMa)@en[[[baseURI]]]]
<IW:DOM3:"Core/core.html#Node3-baseURI">
-- 中核 [CODE(DOMi)@en[[[Document]]]] [CODE(DOMa)@en[[[documentURI]]]]
<IW:DOM3:"Core/core.html#Document3-documentURI">
-- 中核 [CSECTION@en[Appendix C: Infoset Mapping]]
<IW:DOM3:"Core/infoset-mapping.html">
]REFS]
*** XML DOMの場合の属性値
[FIG(steps)[
[FIGCAPTION[
[2] [SRC[DOM3 中核]]
]FIGCAPTION]
= [[XML基底]]に従って計算し、得た[[絶対URI]]です。
([Q[[[URI]]]]は[[DOM URI]]の意味か?)
= 得られなかった場合は、 [CODE(DOM)@en[[[null]]]]とします。
]FIG]
[3] [[実体参照]]を保存している場合は良いのですが、
そうで無い場合は[[外部実体]]中の[[基底URI]]情報が失われてしまいます。
[14]
[CODE(DOMi)@en[[[DocumentType]]]], [CODE(DOMi)@en[[[Comment]]]],
[CODE(DOMi)@en[[[Entity]]]], [CODE(DOMi)@en[[[Notation]]]],
[CODE(DOMi)@en[[[EntityReference]]]],
[CODE(DOMi)@en[[[DocumentFragment]]]],
[CODE(DOMi)@en[[[XPathNamespace]]]]
[WEAK[([[DOM水準3]] [[XPath]] <IW:DOM3:"XPath/xpath.html#XPathNamespace">)]]
に関しては、相当する規定が参照されている[[XML基底]]仕様書に含まれていないので、
どんな値になるべきなのかがよくわかりません。
それ以外の種類の[[節点]]も、[[XML基底]]と[[DOM]]の附属書の規定
(>>8-13) に矛盾か見られます。
[16] '''部分木'''
[CODE(DOMi)@en[[[Document]]]][[節点]]から連なる主となる[[木]]に属さない[[節点]]
[WEAK[(例えば、[CODE(DOMm)@en[[[createElementNS]]]]したばかりの[[節点]])]]
は [WEAK[(そもそもそのようなものがない)]] [[XML仕様]]では[[基底URI]]が規定されていませんが、
[[DOM]]の仕様書でも規定されていません。
*** HTML DOM の場合の属性値
[4]
[CODE(DOMi)@en[[[Document]]]]が[[機能]] [CODE(DOM)@en[[[HTML]]]]
([[DOM水準2]] [[HTML]]仕様が参照されています。)
に対応している場合 [SRC[DOM3 中核]]:
[FIG(steps)[
= [CODE(HTMLe)@en[[[base]]]][[要素]]の[CODE(HTMLa)@en[[[href]]]][[属性]]があれば、その値を使って計算します。
= 無い場合は、[CODE(DOM)@en[[CODE(DOMi)@en[[[Document]]]].[CODE(DOMa)@en[[[documentURI]]]]]]です。
]FIG]
[5] [CODE(DOMa)@en[[[documentURI]]]]は[CODE(DOMa)@en[[[baseURI]]]]とは違って読書両用です。
その定義には、設定時に字句的なチェックはしないので、
[CODE(DOMa)@en[[[baseURI]]]]が[CODE(DOM)@en[[[null]]]]になることもある
[SRC[DOM3 中核]] とされています。
[[絶対URI]]''以外''が指定された場合は[CODE(DOMa)@en[[[documentURI]]]]から[CODE(DOMa)@en[[[baseURI]]]]を定められないという意味でしょうか。
よく読むと[CODE(DOMa)@en[[[documentURI]]]]の定義には、
[[属性名]]以外でその値が[[URI]]であるとは一言も述べられていません。
どうしろというのでしょうか。
*** 関連
[6] [[合成情報集合]]では[CODE(InfoProp)[[[基底URI]]]]と[CODE(XMLa)@en[[[xml]]:[[base]]]]を計算して得られる値が一致するとは限りませんが、
[[DOM]]には[CODE(InfoProp)[[[基底URI]]]]に直接相当するものがなく、
常に[CODE(XMLa)@en[[[xml]]:[[base]]]]を計算するので、
情報の欠落なく[[DOM]]''外''から得られた[[合成情報集合]]を直接処理することはできません。
[8] [[DOM]]と[[情報集合]]の写像 [SRC[DOM3]]
によれば、[[文書]][[情報項目]]と[CODE(DOMi)@en[[[Document]]]]では[CODE(InfoProp)[[[基底URI]]]]と[CODE(DOMa)@en[[[baseURI]]]]および[CODE(DOMa)@en[[[documentURI]]]]が対応することになっています。
[CODE(DOMa)@en[[[documentURI]]]] ([[文書]]の場所)
に相当する情報が無い[[情報集合]]''から''[[DOM]]への変換で[CODE(DOMa)@en[[[documentURI]]]]に[CODE(InfoProp)[[[基底URI]]]]を使うのはよいとしても、
逆に[CODE(InfoProp)[[[基底URI]]]]を[CODE(DOMa)@en[[[baseURI]]]]から持ってくるのはおかしいです。
[[DOM]]の[CODE(DOMa)@en[[[baseURI]]]]の定義は[[XML基底]]により、
[[XML基底]]の定義は[[RFC 2396]]に拠っている''はず''ですから、
[[基底URI]]と[[文書]]の所在は必ずしも一致しない''はず''です。
;; ''はず''というのは、[[XML基底]]の仕様書もなんだかおかしいからです。
[9] [[DOM]]と[[情報集合]]の写像 [SRC[DOM3]]
によれば、[[要素]][[情報項目]]と[CODE(DOMi)@en[[[Element]]]]では[CODE(InfoProp)[[[基底URI]]]]と[CODE(DOMa)@en[[[baseURI]]]]が対応することになっています。
しかし、[[合成情報集合]]の場合[CODE(InfoProp)[[[基底URI]]]]を同的に計算される[CODE(DOMa)@en[[[baseURI]]]]と一致させることができないはずです。
一致させるためには[[属性]]に関する[[特性]]・[[属性]]の修正が必要ですが、そのような規定はありません。
[10] [[DOM]]と[[情報集合]]の写像 [SRC[DOM3]]
によれば、[[属性]], [[文字]][[情報項目]]から[CODE(DOMi)@en[[[Attr]]]],
[CODE(DOMi)@en[[[Text]]]], [CODE(DOMi)@en[[[CDATASection]]]][[節点]]への変換で[CODE(DOMa)@en[[[baseURI]]]]は[CODE(DOM)@en[[[null]]]]になるとされています。
しかし、これは[[XML基底]]によって計算するとした本文の規定と矛盾します。
[[注釈]], [[文書型宣言]][[情報項目]]と[CODE(DOMi)@en[[[Comment]]]],
[CODE(DOMi)@en[[[DocumentType]]]][[節点]]についても同様です。
ただし、[CODE(DOMa)@en[[[baseURI]]]][[属性]]の定義が参照する[[XML基底]]仕様で[[マーク宣言]]の[[基底URI]]は明確に定義されていません。
(自然に解釈すればそれが含まれる[[要素]]または[[外部実体]]・[[文書実体]]と同じでしょうが、ここで[[外部実体]]内の[[注釈宣言]]に関して[[処理指令]]と同じ問題 (>>7) が発生します。)
[11] [[DOM]]と[[情報集合]]の写像 [SRC[DOM3]]
によれば、[[処理指令]][[情報項目]]と[CODE(DOMi)@en[[[ProcessingInstruction]]]]では''あれば、[[親要素]]の''[CODE(InfoProp)[[[基底URI]]]]が[CODE(DOMa)@en[[[baseURI]]]]に、
その[[処理指令]][[節点]]の[CODE(DOMa)@en[[[baseURI]]]]
(はあれば[[親要素]]の[CODE(DOMa)@en[[[baseURI]]]]と同じ)
がその[[処理指令]][[情報項目]][CODE(InfoProp)[[[基底URI]]]]に対応することになっています。
[[親要素]][[情報項目]]がない場合の[CODE(DOMa)@en[[[baseURI]]]]に関する規定がなぜか抜けています。
[12] [[DOM]]と[[情報集合]]の写像 [SRC[DOM3]]
によれば、[[未展開実体参照]][[情報項目]]と[CODE(DOMi)@en[[[EntityReference]]]]
([[子供]]なし。) では[CODE(InfoProp)[[[宣言基底URI]]]]と[CODE(DOMa)@en[[[baseURI]]]]が対応することになっています。
そもそも[CODE(DOMa)@en[[[baseURI]]]]の定義が参照する[[XML基底]]仕様では[[実体参照]]の[[基底URI]]など定義されていないのですが、
普通に解釈すれば[[実体参照]]そのものの[[基底URI]]はそれが含まれる[[要素]]の[[基底URI]]になるはずです。
一方[[実体参照]]によって[[展開]]される[[内容]]の側からすれば、
[CODE(DOMi)@en[[[EntityReference]]]][[節点]]は[[実体]]そのもの
(の1つの[[実現値]]) に相当する[[節点]]と考えることもできますから、
その[[実体]]そのものの[[基底URI]]にアクセスできる方が便利です。
(ただし、ここで問題にしているのは未展開参照ですから、
その[[基底URI]]はわかっていません。)
[[DOM]]の附属書にある[CODE(InfoProp)[[[宣言基底URI]]]]は、
これらいずれとも必ずしも一致しません。[[宣言基底URI]]は[[実体宣言]]の含まれる[[外部実体]]の[[基底URI]]だからです。
本当にそんなもので良いのでしょうか。
;; [[XML情報集合]]では[[未展開実体参照]][[情報項目]]に[CODE(InfoProp)[[[システム識別子]]]][[特性]]があるので、
その[[解決]]のために[CODE(InfoProp)[[[宣言基底URI]]]][[特性]]も用意されたと考えられます。
[CODE(DOMa)@en[[[systemId]]]][[属性]]がない[CODE(DOMi)@en[[[EntityReferenfce]]]]で一体何に使うのでしょうか。
[13] [[DOM]]と[[情報集合]]の写像 [SRC[DOM3]]
によれば、[[非解析対象実体]], [[記法]][[情報項目]]と[CODE(DOMi)@en[[[Entity]]]]
([[非解析対象実体]]。), [CODE(DOMi)@en[[[Notation]]]]では[CODE(InfoProp)[[[宣言基底URI]]]]と[CODE(DOMa)@en[[[baseURI]]]]が対応することになっています。
[CODE(DOMa)@en[[[baseURI]]]][[属性]]の定義が参照する[[XML基底]]仕様にはこれらの[[基底URI]]に関する規定がないので、
これでよいものかどうかはよくわかりませんが。。。
[7] [[外部実体]]の[[基底URI]]が[[実体参照]]を[[展開]]すると失われる問題
(>>3) について、[[DOM]]仕様書では、[[DOM]][[木]]構築時に[CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]を設定しないといけないかもね、
[[処理指令]]では無理だけど、と述べています。
[SRC[DOM3 中核 1.3.4]]
それを受けて[[LS]]仕様では[CODE(DOM)@en[[[pi-base-uri-not-preserved]]]]という[[警告]]
<IW:DOM3:"LS/load-save.html#LS-LSParser"> が定義されていますが、
[[要素]]に関しては何も ([CODE(XMLa)@en[[[xml]]:[[base]]]][[属性]]を修正しろなどの)
規定がありません。
** HTML5
[94] [[HTML5]] によって動的な[[基底URL]]の変化の[[要素]]への影響が明確化されました。
** DOM4
[96] [[DOM Standard]] によって仕様書上の概念として[[基底URLの変更に影響される]] (>>75)、[[基底URL変更手順]] (>>77)
が定義され、 [[HTML Standard]] はこれを用いて定義する形に改められました。
** 再び DOM から HTML へ
[95] [[DOM Standard]] の[[基底URLの変更に影響される]] (>>75)、[[基底URL変更手順]] (>>77)
の定義は削除され、より一般的な [[adopting steps]] に変更されました。[[基底URL]]
の変化の処理は [[HTML Standard]] 側に統合されることになっています [SRC[>>93]]。
[REFS[
- [89] [CITE@en[Bug 23810 – When adopting, "If node is an element, it is affected by a base..."]]
( ([TIME[2014-02-11 09:56:13 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=23810>
- [92] [CITE[Also run base URL change steps for nested elements. https://www.w3.org/B... · 8b87826 · whatwg/dom]]
( ([TIME[2014-04-11 23:01:09 +09:00]] 版))
<https://github.com/whatwg/dom/commit/8b87826a4a153f386152b44c691b9413eed93ed5>
- [93] [CITE[Make the adopt hook more generic. https://www.w3.org/Bugs/Public/show_bu... · e50fd71 · whatwg/dom]]
( ([TIME[2014-04-11 23:02:38 +09:00]] 版))
<https://github.com/whatwg/dom/commit/e50fd7138f1bf288c4fa0b92f1673359a3affadb>
]REFS]
* メモ
[39] [CITE[''''''[''''''whatwg'''''']'''''' Document's base URI should use the document's *current* address]]
( ([TIME[2011-07-20 08:43:41 +09:00]] 版))
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-July/032565.html>
[19] [CITE[IRC logs: freenode / #whatwg / 20100913]]
( ([TIME[2010-09-26 22:31:37 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20100913#l-1054>
[88] [CITE[IRC logs: freenode / #whatwg / 20140116]]
( ([TIME[2014-01-17 23:23:36 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140116#l-704>
[90] [CITE[IRC logs: freenode / #whatwg / 20140207]]
( ([TIME[2014-02-10 22:38:26 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140207#l-546>
[91] [CITE@en[Web Applications 1.0 r1821 Define what should happen when the base URL changes, keeping it as lightweight as possible.]]
( ([TIME[2008-06-28 06:50:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=1820&to=1821>
[20] [CITE@en[20976 – Define base URLs in DOM]]
([TIME[2015-08-04 13:48:35 +09:00]] 版)
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=20976>
[21] [CITE@en[Design base URL change notification system · Issue #61 · whatwg/dom]]
([TIME[2015-08-04 13:49:17 +09:00]] 版)
<https://github.com/whatwg/dom/issues/61>