HTML には base
という要素があって、その文書中の URL の解決に用いられる基底 URL を指定することができます。例えば、
<base href="http://www.example.com/hoge/fuga/"> <a href="../abc/def">/hoge/abc/def</a>
という HTML だと、 a
要素のリンク先は http://www.example.com/hoge/abc/def
になります。
さて、 base
要素には
との規定があります。相対 URL を解決する必要が生じるよりも前に基底 URL が与えられるべきというのは納得感ありますが、それなら最初から単独の要素にせずに、 html
要素の属性にでもしておけば良さそうなものですよね。
でもそうなっていない理由として考えられるのは、 base
要素が作られたのが html
要素や head
要素の存在しない (か両タグを明記しないのが一般的だった) 時代
(1990年から1993年くらいです。)
だったから、といったところでしょうか。
(あるいは、そのような時代に作られた title
要素や nextid
要素のデザインパターンを踏襲したというのも考えられます。)
じゃあ base
要素は一体いつ HTML に追加されたのでしょうか。
初期の HTML は IETF で標準化作業が行われていました。まずはその頃の HTML 仕様を調べてみます。
IETF で最初の正式な HTML 仕様は 1995年11月の RFC 1866http://tools.ietf.org/html/rfc1866 (HTML 2.0) です。 base
要素はこの時既に HTML に含まれており、 target
属性がまだないことを除けば
(base
要素に 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-htmlhttp://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+ の要素すべてを構文解析器レベルで実装したとのことで、base
要素も含まれていたhttp://www.w3.org/MarkUp/HTMLPlus/htmlplus_53.htmlとみられます。しかし1996年7月20日の Release 4.1b3 に base
要素を実装したとあり、それまでは機能していなかったと推測できます。1996年には HTML 2.0 RFC も Netscape Navigator も Internet Explorer も既に出てしまっています。
Netscape Navigator は 1.0 (1994年12月)、 Internet Explorer は 1.0 (1995年8月) の時点で 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ようです。
まとめると base
要素は1994年から1995年にかけて Web ブラウザーに実装されたものであり、 HTML 1.0 Internet Draft よりは後ということになります。
HTML 1.0 Internet Draft 以前の HTML 仕様書としては、当時 CERN の Web サイトにあったらしい HTML ファイルや html-spec.ps
という名前で配布されたファイルが色々なところに残っています。1993年3月10日版の仕様書http://1997.webhistory.org/www.lists/www-talk.1993q1/0245.htmlとみられる1993年3月付けの html-spec.ps
(それを PDF 化したものhttp://suika.suikawiki.org/www/2005/pre-id/html-spec-199303.pdf) には base
要素の定義が含まれています。また1993年1月6日付け html.dtd
1.3 が収録されており、そこにも base
要素が含まれています。これが現在確認されている中で base
要素の最古の定義です。
(ただし後述の通り1/6という日付は怪しいです。)
また、 W3C に 1992年から HTML 2.0 までの DTD の RCS ファイル html.dtd,v
http://www.w3.org/MarkUp/html-spec/html.dtd,v があります。 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 のタイムスタンプは混乱しているように見えます。この html.dtd,v
自体が1994年3月に作られたものであり、それ以前のタイムスタンプは信用しない方が良さそうです。
base
要素の定義として確実に遡れるのは1993年3月までですが、 base
要素に相当する概念への言及はもっと早くからありました。1991年10月の Tim Berners-Lee による HTML 仕様書についてのメールhttp://lists.w3.org/Archives/Public/www-talk/1991SepOct/0003.html
(これが (base
に限らず) HTML 仕様について具体的に言及している文書としては最古のものです。)
には
と述べられています。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_timeline1991年10月のもの) にも
と base
要素に相当する構想が記述されています。具体的なタグ名はこの時点ではまだありません。
更に当時の将来の予定 (タイムスタンプは1992年12月)http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/Future.html の中にも言及があり、1992年末には savedas
という仮のタグ名が与えられていたようです。1993年1月14日http://1997.webhistory.org/www.lists/www-talk.1993q1/0070.htmlにもメールで savedas
を仕様に追加するつもりとの言及があります。
ということは1993年1月14日から3月10日の間に savedas
が base
として HTML 仕様に追加されたということになりますが、残念ながら改称の経緯や2ヶ月のうちのいつ追加されたのかまではわかりませんでした。仮称である savedas
が含まれている仕様書や DTD は見つかっていません。また1月21日付けの Dan Connolly の仕様書http://www.w3.org/History/1993/WWW/LibHTML/src/hypertext/にも <code>base</code> 要素はまだ含まれていませんでした。
以上をまとめると、次のようになります。 base
要素は 1991年10月には既に構想があり、1993年3月までに HTML 仕様に追加されました。1994年から1995年にかけて Web ブラウザーに実装されました。