-
Notifications
You must be signed in to change notification settings - Fork 4
/
669.txt
106 lines (72 loc) · 9.46 KB
/
669.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
HTML には [CODE[base]] という要素があって、その文書中の URL の解決に用いられる基底 URL を指定することができます。例えば、
[PRE(HTML code)[
<base href="http://www.example.com/hoge/fuga/">
<a href="../abc/def">/hoge/abc/def</a>
]PRE]
という HTML だと、 [CODE[a]] 要素のリンク先は [CODE[http://www.example.com/hoge/abc/def]] になります。
さて、 [CODE[base]] 要素には
[FIG(quote)[ <http://www.whatwg.org/specs/web-apps/current-work/#the-base-element>
> A [CODE[base]] element, if it has an [CODE[href]] attribute, [MUST[must]] come before any other elements in the tree that have attributes defined as taking URLs, except the [CODE[html]] element (its [CODE[manifest]] attribute isn't affected by [CODE[base]] elements).
]FIG]
[FIG(quote)[
> [CODE[base]] 要素は、 [CODE[href]] 属性を持つ場合には、当該木上にあって URL を取る属性を持つ他の要素よりも前に来なければ[MUST[なりません]]。ただし [CODE[html]] 要素を除きます ([CODE[manifest]] 属性は [CODE[base]] 要素の影響を受けません)。
]FIG]
との規定があります。相対 URL を解決する必要が生じるよりも前に基底 URL が与えられるべきというのは納得感ありますが、それなら最初から単独の要素にせずに、 [CODE[html]] 要素の属性にでもしておけば良さそうなものですよね。
でもそうなっていない理由として考えられるのは、 [CODE[base]] 要素が作られたのが [CODE[html]] 要素や [CODE[head]] 要素の存在しない (か両タグを明記しないのが一般的だった) 時代
[WEAK[(1990年から1993年くらいです。)]]
だったから、といったところでしょうか。
[WEAK[(あるいは、そのような時代に作られた [CODE[title]] 要素や [CODE[nextid]] 要素のデザインパターンを踏襲したというのも考えられます。)]]
じゃあ [CODE[base]] 要素は一体いつ HTML に追加されたのでしょうか。
* IETF
初期の HTML は IETF で標準化作業が行われていました。まずはその頃の HTML 仕様を調べてみます。
IETF で最初の正式な HTML 仕様は 1995年11月の RFC 1866<http://tools.ietf.org/html/rfc1866> (HTML 2.0) です。 [CODE[base]] 要素はこの時既に HTML に含まれており、 [CODE[target]] 属性がまだないことを除けば
[WEAK[([CODE[base]] 要素に [CODE[target]] 属性が追加されたのは1995年の Netscape Navigator 2、あるいは1998年の HTML4 です。)]]、
ほぼ現在と同じ定義となっています<http://tools.ietf.org/html/rfc1866#section-5.2.2>。
それよりも前の、現在では HTML 1.0 と呼ばれている1993年6月の Internet Draft draft-ietf-iiir-html<http://tools.ietf.org/html/draft-ietf-iiir-html> が IETF では一番古い HTML 仕様ですが、ここでも HTML 2.0 と同様の規定となっています。
HTML 1.0 Internet Draft に既に含まれているなら、もっと前から存在していそうです。先に実装されて後から仕様に取り込まれることもよくありますから、いつから実装されているのかも調べてみましょう。
* 実装
初期の HTML のリファレンス実装とでも言うべき libwww の改訂履歴<http://www.w3.org/Library/User/History.html>によると、 1994年3月25日の 2.15 で HTML+ の要素すべてを構文解析器レベルで実装したとのことで、[CODE[base]] 要素も含まれていた<http://www.w3.org/MarkUp/HTMLPlus/htmlplus_53.html>とみられます。しかし1996年7月20日の Release 4.1b3 に [CODE[base]] 要素を実装したとあり、それまでは機能していなかったと推測できます。1996年には HTML 2.0 RFC も Netscape Navigator も Internet Explorer も既に出てしまっています。
Netscape Navigator は 1.0 (1994年12月)、 Internet Explorer は 1.0 (1995年8月) の時点で [CODE[base]] 要素に対応している<http://www.blooberry.com/indexdot/html/tagpages/b/base.htm>ようです。 NCSA Mosaic は 2.0 (1995年10月) からの対応で、それ以前は対応していなかったようです。 Lynx は 1995年1月22日に実装した<http://lynx.isc.org/current/CHANGES2.4>ようです。
まとめると [CODE[base]] 要素は1994年から1995年にかけて Web ブラウザーに実装されたものであり、 HTML 1.0 Internet Draft よりは後ということになります。
* もっと前
HTML 1.0 Internet Draft 以前の HTML 仕様書としては、当時 CERN の Web サイトにあったらしい HTML ファイルや [CODE[html-spec.ps]] という名前で配布されたファイルが色々なところに残っています。1993年3月10日版の仕様書<http://1997.webhistory.org/www.lists/www-talk.1993q1/0245.html>とみられる1993年3月付けの [CODE[html-spec.ps]] (それを PDF 化したもの<http://suika.suikawiki.org/www/2005/pre-id/html-spec-199303.pdf>) には [CODE[base]] 要素の定義が含まれています。また1993年1月6日付け [CODE[html.dtd]] 1.3 が収録されており、そこにも [CODE[base]] 要素が含まれています。これが現在確認されている中で [CODE[base]] 要素の最古の定義です。
[WEAK[(ただし後述の通り1/6という日付は怪しいです。)]]
[FIG(quote)[
> This element allows the URL of the document itself to be recorded in situations in which the document may be read out of context. URLs within the document may be in a "partial" form relative to this base address.
Where the base address is not specified, the reader will use the URL it used to access the document to resolve any relative URLs.
The one attribute is:
:[CODE[HREF]]: the URL
[FIGCAPTION[
[CITE[Hypertext Markup Language]]
<http://suika.suikawiki.org/www/2005/pre-id/html-spec-199303.pdf>
]FIGCAPTION]
]FIG]
また、 W3C に 1992年から HTML 2.0 までの DTD の RCS ファイル [CODE[html.dtd,v]]<http://www.w3.org/MarkUp/html-spec/html.dtd,v> があります。 [CODE[base]] 要素が初めて登場する 1.6 は1993年6月の HTML 1.0 Internet Draft のものとされています。それより前の 1.5 はファイル中に1993年1月7日とあります。その更に前の 1.4 はファイル中に1993年1月20日とあり、 RCS ファイルとしてのタイムスタンプは1993年2月3日となっています。前述の3月10日の仕様書内の1月6日付けDTDも含め、この頃の DTD のタイムスタンプは混乱しているように見えます。この [CODE[html.dtd,v]] 自体が1994年3月に作られたものであり、それ以前のタイムスタンプは信用しない方が良さそうです。
[CODE[base]] 要素の定義として確実に遡れるのは1993年3月までですが、 [CODE[base]] 要素に相当する概念への言及はもっと早くからありました。1991年10月の Tim Berners-Lee による HTML 仕様書についてのメール<http://lists.w3.org/Archives/Public/www-talk/1991SepOct/0003.html>
[WEAK[(これが ([CODE[base]] に限らず) HTML 仕様について具体的に言及している文書としては最古のものです。)]]
には
[FIG(quote)[
> The base address tag is not used
[FIGCAPTION[
[CITE[Re: status. Re: X11 BROWSER for WWW]]
<http://lists.w3.org/Archives/Public/www-talk/1991SepOct/0003.html>
]FIGCAPTION]
]FIG]
と述べられています。1992年11月時点で CERN の Web サイトにあったらしい Tim Berners-Lee の仕様書<http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/Tags.html> (Wikipedia 英語版によると<http://en.wikipedia.org/wiki/HTML#HTML_draft_version_timeline>1991年10月のもの) にも
[FIG(quote)[
> The format of this tag is not yet specified. NOT CURRENTLY USED
[FIGCAPTION[
[CITE[HTML Tags]]
<http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/Tags.html>
]FIGCAPTION]
]FIG]
と [CODE[base]] 要素に相当する構想が記述されています。具体的なタグ名はこの時点ではまだありません。
更に当時の将来の予定 (タイムスタンプは1992年12月)<http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/Future.html> の中にも言及があり、1992年末には [CODE[savedas]] という仮のタグ名が与えられていたようです。1993年1月14日<http://1997.webhistory.org/www.lists/www-talk.1993q1/0070.html>にもメールで [CODE[savedas]] を仕様に追加するつもりとの言及があります。
ということは1993年1月14日から3月10日の間に [CODE[savedas]] が [CODE[base]] として HTML 仕様に追加されたということになりますが、残念ながら改称の経緯や2ヶ月のうちのいつ追加されたのかまではわかりませんでした。仮称である [CODE[savedas]] が含まれている仕様書や DTD は見つかっていません。また1月21日付けの Dan Connolly の仕様書<http://www.w3.org/History/1993/WWW/LibHTML/src/hypertext/>にも <code>base</code> 要素はまだ含まれていませんでした。
* まとめ
以上をまとめると、次のようになります。 [CODE[base]] 要素は 1991年10月には既に構想があり、1993年3月までに HTML 仕様に追加されました。1994年から1995年にかけて Web ブラウザーに実装されました。
[POSTAMBLE[
[1] 初出:
<http://d.hatena.ne.jp/wakabatan/20130326/1364259067>,
[TIME[2013-03-26]]
]POSTAMBLE]