[9] [[HTML]] の [CODE(HTMLe)[[[base]]]] 要素の
[DFN[[CODE(HTMLa)[href]] 属性]]は、その HTML 
文書内の[[相対URI参照]]を解決する際に使用する[[絶対URI]]
を指定します。

* 仕様書

[REFS[
- [2] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-04-21 07:11:38 +09:00]] 版) <https://html.spec.whatwg.org/#attr-base-href>'''
- [6] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-04-21 07:11:38 +09:00]] 版) <https://html.spec.whatwg.org/#dom-base-href>
]REFS]

* 属性値

[4] [CODE(HTMLa)@en[href]] [[属性値]]は、
[[valid URL potentially surrounded by spaces]] でなければ[MUST[なりません]] [SRC[>>2]]。

;; [5] [CODE(HTMLa)@en[href]] [[属性]]には、多くの場合に[[絶対URL]]
が指定されますが、[[相対URL]]を指定することもできます。

* 文脈

[3] [CODE(HTMLe)@en[base]] [[要素]]に指定できます。
[CODE(HTMLe)@en[base]] [[要素]]は、
[CODE(HTMLa)@en[href]] [[属性]]と [CODE(HTMLa)@en[target]]
[[属性]]の一方または両方を持たなければ[MUST[なりません]] [SRC[>>2]]。

[26] [CODE(HTMLa)@en[href]] [[属性]]の [CODE(HTMLe)@en[base]]
[[要素]]は、 [[URL]] を[[属性値]]として持つ他の[[要素]]よりも前になければ[MUST[なりません]]
[SRC[>>2]]。

[FIG(list)[
- [27] [[システム識別子]]の値は [[URL]] であり、また[[公開識別子]]も値が [[URL]] となることがありますが、
これらは[[属性]]ではありませんから対象外です。
- [28] [CODE(XMLa)@en[[[xml-stylesheet]]]] [[処理指令]]には [CODE(XMLa)@en[[[href]]]]
[[擬似属性]]がありますが、これは[[属性]]ではありませんから対象外です。
- [29] [CODE(HTMLe)@en[[[html]]]] [[要素]]の [CODE(HTMLa)@en[[[manifest]]]] [[属性]]は対象外です。 [SRC[>>2]]
- [30] [CODE(HTMLe)@en[[[head]]]] [[要素]]の [CODE(HTMLa)@en[[[profile]]]] [[属性]]は既に廃止されていますが、
[CODE(HTMLe)@en[html]] [[要素]]同様、対象外と考えられます。 [SRC[[[OBSVOCAB]]]]
- [32] [CODE(XMLa)@en[[[xmlns]]]] [[属性]]群の値は [[URL]] ですが、これは[[解決]]されることが無く、対象外と思われます。
- [31] [CODE(XMLa)@en[xml:base]] [[属性]]は既に廃止されていますが、
これが当時対象内だったかどうかは定かではありません。
]FIG]

* 処理

[13] [CODE(HTMLe)@en[base]] や [[URLの解決]]を参照。

* [CODE(DOMi)@en[HTMLBaseElement]] インターフェイス [CODE(DOMa)@en[href]] 属性

[7] [CODE(DOMi)@en[HTMLBaseElement]] [[インターフェイス]]の
[DFN[[CODE(DOMa)@en[href]]]] [[IDL属性]]の[[取得器]]は、
次のようにしなければ[MUST[なりません]] [SRC[>>6]]。
[FIG(steps)[
= [22] [CODE(IDL xattr)@en[CEReactions]] の開始の処理を実行します。
= [8] [VAR[文書]]を、[[文脈オブジェクト]]の[F[節点文書]]に設定します。
= [14] [VAR[値]]を、[[文脈オブジェクト]]の [CODE(HTMLa)@en[href]]
[[属性値]]に設定します。
= [15] [VAR[値]]が [[null]] なら、
== [16] [VAR[値]]を、[[空文字列]]に設定します。
= [17] [VAR[URL]] を、
[VAR[値]]に、
[VAR[文書]]の[F[フォールバック基底URL]]と[VAR[文書]]の[F[文字符号化][文書の文字符号化]]について、
[[URLの構文解析器]]を適用した結果に設定します。
= [20] [CODE(IDL xattr)@en[CEReactions]] の終わりの処理を実行します。
= [18] [VAR[URL]]が[[失敗]]なら、
== [19] [VAR[値]]を返します。
= [21] [VAR[URL]] に[[URLの直列化]]を適用した結果を返します。
]FIG]

[23] 同じく[[設定器]]は、次のようにしなければ[MUST[なりません]] [SRC[>>6]]。
[FIG(steps)[
= [35] [VAR[値]]を、指定された値を[[文字列]]として解釈した結果に設定します。
= [33] [CODE(IDL xattr)@en[CEReactions]] の開始の処理を実行します。
= [36] [[文脈オブジェクト]]の [CODE(HTMLa)@en[href]] [[属性値]]を、[VAR[値]]に設定します。
= [34] [CODE(IDL xattr)@en[CEReactions]] の終わりの処理を実行します。
]FIG]

* 歴史

[10] 仕様書:
- [[HTML 2.0]]: [[RFC 1866]] 5.2.2. Base Address: BASE
- [[HTML 4]] [CODE(HTMLa)[href]] <IW:HTML4:"struct/links.html#adef-href-BASE">

[11] この属性は [CODE(SGML)[%[[URI]]]] ([[絶対URI参照]])
で、 [[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。
更に仕様書本文で絶対 URI に限定されています [SRC[HTML 2.0, HTML 4]]。

HTML 4 仕様書は[[素片識別子]]について全体的に曖昧で、
[CODE(HTMLe)[base]] [CODE(HTMLa)[href]] 
に素片識別子を含めて構わないのか否かは不明です。
(あってもなくても機能的に変わらないのですが。)

RFC 1866 (HTML 2.0) も曖昧なところはありますが、
こちらは素片識別子は含まない[Q[絶対 URI]] である可能性が高そうです。

[12] 省略の可否:
:HTML 2.0 (RFC 1866):必須。
:HTML 4 Strict:必須。
:HTML 4 Transitional:省略可能。 
(その場合 [CODE(HTMLa)[[[target]]]] がないと [CODE(HTMLe)[base]]
が意味を成さないのですが、仕様書には言及がありません。)
:XHTML 1.0 FE:省略可能。
:XHTML 1.0 SE Strict:必須。

[24]
[CITE[<base href> and xml:base="" and HTMLBaseElement.href]] ([CODE[2008-07-01 22:43:30 +09:00]] 版) <http://suika.fam.cx/~wakaba/-temp/test/html/base/href/relative-xmlbase-1.xhtml>

[25]
>>24
:[[Firefox 2]]: [CODE(XMLa)@en[[[xml]]:[[base]]]] is applied to compute reflected DOM attribute value.
(However, [CODE(XMLa)@en[[[xml]]:[[base]]]] does not affect to base URI computation for [CODE(HTMLe)@en[[[base]]]] [CODE(HTMLa)@en[[[href]]]]; 
relative URL in [CODE(HTMLe)@en[[[base]]]] [CODE(HTMLa)@en[[[href]]]] is simply
ignored.)
:[[Opera]] 9: [CODE(XMLa)@en[[[xml]]:[[base]]]] is applied to compute reflected DOM attribute value.
([CODE(XMLa)@en[[[xml]]:[[base]]]] on [CODE(HTMLe)@en[[[base]]]] doss also
affect to base URL of the document.)
:[[Safari]] 3.1:[CODE(DOMa)@en[[[href]]]] DOM attribute takes the same
value as the [CODE(HTMLa)@en[[[href]]]] content attribute for 
[CODE(HTMLe)@en[[[base]]]] elements. ([CODE(XMLa)@en[[[xml]]:[[base]]]]
on [CODE(HTMLe)@en[[[base]]]] dose not affect to the base URL of
the document.)

[1] [CITE@en[Correct URL parsing of base elements · whatwg/html@2719a51]]
([TIME[2016-04-21 13:00:05 +09:00]] 版)
<https://github.com/whatwg/html/commit/2719a514ebd2ee66813fb5ee92f52e99a1479e78>