* a 要素・link 要素 href 属性 (HTML 4, XHTML 1)
[1] [[HTML]] の [CODE(HTMLe)[[[a]]]] 要素・[CODE(HTMLe)[[[link]]]] 要素の
[DFN[[CODE(HTMLa)[href]] 属性]]は、ウェブ[[資源]]の位置を指定します。
そして、指定された資源が[[終点アンカー]],
その [CODE(HTMLe)[a]] 要素が[[始点アンカー]]である[[連結]]になります。
仕様書: [[HTML 4]] [CODE(HTMLa)[href]]
[[#comment]]
** 属性値
[4] この属性の属性値は [CODE(SGML)[%[[URI]]]]、すなわち [[URI参照]]です。
[[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。
[5] この属性は省略可能です。省略した場合は、
そのアンカー ([CODE(HTMLa)[[[a]]]] 要素)
は始点アンカーではないものとなります。
[CODE(HTMLe)[link]] 要素の場合は省略すると意味を失ってしまうと思うのですが、
HTML 4 仕様書には何も書かれていません。
[[#comment]]
** レンダリング
[6] 多くの視覚 UA は、 [CODE(HTMLe)[a]] 要素や
[CODE(HTMLe)[link]] 要素に [CODE(CSS)[[[hover]]]]
したときに [[状態棒]]や窓の[[題名棒]]、あるいは
[[tool tip]] などとして [CODE(HTMLa)[href]] 属性で指定された
URI 参照を表示します。
表現が比較的貧しい媒体では、[[脚注]]として出力されることもあります。
[7] ほとんどの実装では、 [CODE(HTMLa)[href]] 属性が指定された
[CODE(HTMLe)[a]] 要素を他の要素とは異なってレンダリングします。
たとえば多くの視覚 UA では青字で下線付きで表示します。
詳しくは [CODE(HTMLe)[[[a]]]] 要素のレンダリングの項をご覧下さい。
[CODE(HTMLe)[link]] 要素のレンダリングは [CODE(HTMLe)[[[link]]]]
要素のレンダリングの項をご覧ください。
[[#comment]]
** 例
[14]
[[Web応用]]において[[リンク]]先の[[文書]]を新しい[[窓]]で開きたいとします。
重要: 普通の [[Webサイト]]ではこのような指定を [[HTML]]
に記述することは避けるべきです (新しい[[窓]]で開くか、
今の[[窓]]で開くか、はたまた新しい[[タブ]]で開くか、
などなどは、[[利用者]]の意思で決めることで、
[[著者]]が介入するべきではありません)。
次のように [CODE(HTMLa)[[[href]]]] 属性に
[CODE(URI)[[[javascript]]:]] [[URI]] を使うことがよくありますが、
'''好ましくありません'''。
[PRE(bad example HTML code)[
リンク
[CODE(comment)[]]
]PRE]
こうすると、 [[JavaScript]] の[[スクリプト]]片がリンク先になってしまい、
[CODE(URI)[external.html]]
がリンク先であるという情報を人間以外が理解することができません。
次の [CODE(HTMLa)[[[onclick]]]] [[属性]]による記述でも同じ効果が得られます。
[PRE(HTML example code)[
リンク
[CODE(comment)[]]
]PRE]
本当は[[内在事象属性]] ([CODE(HTMLa)[[[onclick]]]] 属性) も使わず、
[[内容]]と[[スクリプト]]は分離しておいた方が維持管理の手間としても美しさとしても更に良くなります。
[[#comment]]
** 関連
[8] 属性 [CODE(HTMLa)[[[hreflang]]]], [CODE(HTMLa)[[[charset]]]],
[CODE(HTMLa)[[[type]]]], [CODE(HTMLa)[[[rel]]]], [CODE(HTMLa)[[[rev]]]]
は意味的に [CODE(HTMLa)[href]] 属性の存在に依存しています。
また、 HTML 4 以前には [CODE(HTMLe)[a]] 要素の
[CODE(HTMLa)[[[title]]]], [CODE(HTMLa)[[[subject]]]]
属性も意味的に [CODE(HTMLa)[href]] に依存する使われ方がなされたことがあります。
HTML 4 によれば、 [CODE(HTMLa)[hreflang]] 属性は
[CODE(HTMLa)[href]] 属性があるときのみ指定できます。
他の属性もそうであるはずですが、仕様書に明記されていません。
[[#comment]]
** メモ
[15]
[CITE[指向性メモ::2006-06-24::Googleがonclickにはhref="javascript:void(0)"も付ける理由]]
([[名無しさん]] [WEAK[2006-06-25 00:40:18 +00:00]])
[16]
[CITE[Problems with letting every element be a link - Anne’s Weblog]] ([CODE[2007-03-27 20:37:46 +09:00]] 版)
([[名無しさん]] [WEAK[2007-03-28 06:31:20 +00:00]])
[17]
[CITE[html lecturte]] ([TIME[2003-10-18 17:55:15 +09:00]] 版)
1995年12月に書かれた文章らしい。
>hrefはハイパーリファレンスの略です。
([[名無しさん]])
[[#comment]]
* base 要素 href 属性 (HTML, XHTML 1)
[9] [[HTML]] の [CODE(HTMLe)[[[base]]]] 要素の
[DFN[[CODE(HTMLa)[href]] 属性]]は、その HTML
文書内の[[相対URI参照]]を解決する際に使用する[[絶対URI]]
を指定します。
[10] 仕様書:
- [[HTML 2.0]]: [[RFC 1866]] 5.2.2. Base Address: BASE
- [[HTML 4]] [CODE(HTMLa)[href]]
[[#comment]]
** 属性値
[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:必須。
[[#comment]]
** 応用
[13] [CODE(HTMLa)[href]] 属性値は[[基底URI]]として使われます。
詳しくは [[HTML//基底URI]] をご覧ください。
[[#comment]]
** メモ
[[#comment]]
* href 要素型 (WebDAV)
[[#comment]]
** 仕様書から
*** RFC 2518 (WebDAV) 12.3 href XML Element
:Name:[CODE(DAVe)[href]]
:Namespace:[CODE(URI)[[[DAV:]]]]
:Purpose:Identifies the content of the element as a URI.
:Value:URI ; See section 3.2.1 of [RFC2068]
:目的:要素の内容を [[URI]] として識別します。
>
*** RFC の部分の License
[[RFCのライセンス]]
* xlink:href 属性 (XLink)
[2] [DFN[[CODE(XMLa)[[VAR[xlink:]]href]]]] 属性は、
[[遠隔資源]]を指定するために使用します。
[CODE(XML)[[[locator]]]] 型要素では必須、
[CODE(XML)[[[simple]]]] 型要素では省略可能です。
仕様書:
[3] この属性の値は、 [[IRI参照]]です
(仕様書の表現は [Q[must be a URI reference as defined in [IETF RFC 2396], or must result in a URI reference after the escaping procedure described below is applied]])。
[[URI]] 解決器に渡す時に IRI 参照から [[URI参照]]に変換します
(変換については [[XML//URI]] 参照)。
URI 参照が[[相対URI参照]]であるときには、
[[XML基底]]に基づき解決します。
XLink 応用はこの属性の値が URI 参照であるか適合性検査する義務はありません。
[[#comment]]
* メモ