* a 要素・link 要素 href 属性 (HTML 4, XHTML 1)
[1] [[HTML]] の [CODE(HTMLe)[[[a]]]] 要素・[CODE(HTMLe)[[[link]]]] 要素の
[DFN[[CODE(HTMLa)[href]] 属性]]は、ウェブ[[資源]]の位置を指定します。
そして、指定された資源が[[終点アンカー]],
その [CODE(HTMLe)[a]] 要素が[[始点アンカー]]である[[連結]]になります。
** 仕様書
-[44] [[HTML 4]]
-- [CODE(HTMLa)[href]]
-[45] [[RFC 4287]]
-- ''''''
- [58] [CITE[MathML Fundamentals]] ([TIME[2010-10-21 05:51:46 +09:00]] 版)
** 意味
[46] [CODE(XMLe)@en[[[atom:link]]]] [[要素]]の [CODE(XMLa)@en[[[href]]]]
[[属性]]は、[[リンク]]の [[IRI]] を表します [SRC[[[RFC 4287]] 4.2.7.1.]]。
[59] [[MathMLの大域属性]]としての [CODE(XMLa)@en[[[href]]]] [[属性]]は、
その[[要素]]を指定された [[URL]] への[[ハイパーリンク]]とするために使えます [SRC[>>58]]。
** 属性値
*** データ型
**** HTML4 での定義
[4] この属性の属性値は [CODE(SGML)[%[[URI]]]]、すなわち [[URI参照]]です。
[[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。
**** [CODE(XMLe)@en[atom:link]] 要素の場合
[47] [CODE(XMLe)@en[[[atom:link]]]] [[要素]]の [CODE(XMLa)@en[[[href]]]]
[[属性]]の[[値]]は [[RFC 3987]] [[IRI参照]]でなければ[['''なりません''']]
[SRC[[[RFC 4287]] 4.2.7.1.]]。
[48] [[RELAX NG]] [[スキーマ]] ([[参考]]) 上の[[データ型]]は
[CODE(XML)@en[[[atomUri]]]] となっています [SRC[[[RFC 4287]] 4.2.7.1.]]。
**** MathML 要素の場合
[60] [[MathML]] [[要素]]の [CODE(XMLa)@en[[[href]]]] [[属性]]の値は [[MathML]]
の定義に依るところの [CODE@en[[[URI]]]] とされています。 [SRC[>>58]]
;; [CODE@en[[[URI]]]] については [[IRI]>>120] の項を参照してください。
*** 既定値
**** HTML4 での定義
[5] この属性は省略可能です。省略した場合は、
そのアンカー ([CODE(HTMLa)[[[a]]]] 要素)
は始点アンカーではないものとなります。
[CODE(HTMLe)[link]] 要素の場合は省略すると意味を失ってしまうと思うのですが、
HTML 4 仕様書には何も書かれていません。
**** [CODE(XMLe)@en[atom:link]] 要素の場合
[49] [CODE(XMLe)@en[[[atom:link]]]] [[要素]]の [CODE(XMLa)@en[[[href]]]]
[[属性]]は[['''必須''']]です [SRC[[[RFC 4287]] 4.2.7.1.]]。
** レンダリング
[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]]]]
要素のレンダリングの項をご覧ください。
** 歴史
*** XHTML2
[43] [[XHTML2]] の最初の[[作業原案]]で、[[ハイパーテキスト属性集成]]に属し、
実質すべての [[XHTML2]] [[要素]]で利用できるものとして規定されるようになりました。
;; [CITE@en[- XHTML Attribute Collections]] ([TIME[2002-08-06 00:20:43 +09:00]] 版)
*** MathML3
[61] [[MathML2]] までは [[MathML]] のすべての[[要素]]で [CODE(XMLa)@en[[[xlink:href]]]]
[[属性]]が使えるとされていましたが、 [[MathML 3.0]] ではその代わりに [SRC[>>58]] [[null名前空間]]の
[CODE(XMLa)@en[[[href]]]] [[属性]]が導入されました。
;; 引き続き「[[XML Linking]] に対応する」実装は [CODE(XMLa)@en[[[xlink:href]]]]
[[属性]]にも対応するべきであるとされています [SRC[>>58]]。
** 例
[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]] ([CODE[2003-10-18 17:55:15 +09:00]] 版)
1995年12月に書かれた文章らしい。
> hrefはハイパーリファレンスの略です。
([[名無しさん]])
[18]
[CITE@en[RDF-in-XHTML TF -- 2 Apr 2007]] ([CODE[2007-04-03 04:06:37 +09:00]] 版)
([[名無しさん]] [WEAK[2007-04-07 14:00:39 +00:00]])
[20]
[CITE@en[RDF-in-XHTML Task Force -- 31 May 2007]] ([CODE[2007-06-01 01:15:47 +09:00]] 版)
> Steven: 'clickable' does not necessarily mean the XHTML2 browser would render it in blue with an underline
... don't confuse the ability to dereference an @HREF with the rendering presentation
... only A would give blue underlined presentation
いやはや。
([[名無しさん]] [WEAK[2007-06-04 13:14:16 +00:00]])
[22]
[CITE@en[markus’ blog » IE - Having fun with JS and links]] ([CODE[2008-01-08 21:18:56 +09:00]] 版)
([[名無しさん]])
[23]
[CSECTION@en[ Does HTML5 support href on any element like XHTML 2.0?]] — [CITE@en[FAQ - WHATWG Wiki]] ([CODE[2008-02-23 13:19:00 +09:00]] 版)
([[名無しさん]])
[[#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]]
** メモ
[24]
[CITE[ and xml:base="" and HTMLBaseElement.href]] ([CODE[2008-07-01 22:43:30 +09:00]] 版)
([[名無しさん]])
[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.)
* [CODE(XMLa)@en[href]] 擬似属性 ([CODE(XML)@en[xml-stylesheet]] 処理指令)
[51] [CODE(XML)@en[[[xml-stylesheet]]]] [[処理指令]]の
[DFN[[CODE(XMLa)@en[href]] [[擬似属性]]]]は、参照される[[スタイル・シート]]の[RUBY[[[番地]]][アドレス]]を表します。
[SRC[>>52]]
** 仕様書
- [52] [CITE@en[Associating Style Sheets with XML documents 1.0 (Second Edition)]] ([TIME[2010-10-28 23:13:17 +09:00]] 版)
** 属性値
[53] [[属性値]]は [[RFC 3987]] [CODE(ABNF)@en[[[IRI-reference]]]] [[文法]]に[[一致]]する値でなければ[['''なりません''']]。
[SRC[>>52]]
;; [54] ということは [[ABNF]] で表現されない要件には適合しなくても良いのでしょうか・・・。
[56] [[素片識別子]]を使って同じ文書の中の[[スタイル・シート]]と関連付けることもできます。
[SRC[>>52]]
[55] [[文書]]はこの[[擬似属性]]を指定しなければ[['''なりません''']]。 [SRC[>>52]]
** 歴史
[57] [[xml-stylesheet 1.0 1e]] では [[HTML 4.0]] を参照する形で定義されていました。
;; [CITE[Associating Style Sheets with XML documents]] ([TIME[2000-05-03 23:40:39 +09:00]] 版)
* href 要素型 (WebDAV)
** 仕様書から
*** 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のライセンス]]
* [CODE(XMLe)@en[atom:link]] 要素 [CODE(XMLa)@en[href]] 属性 (Atom 0.3)
[26] [[Atom 0.3]] の [[Link construct]] の
[DFN[[CODE(XMLa)@en[href]] [[属性]]]]は、
[[リンク]]の [[URI]] を表します [SRC@en[[[Atom 0.3]]]]。
: 状態:[[廃止]] → [[Atom 1.0]] [CODE(XMLe)@en[atom:[[link]]]] [CODE(XMLa)@en[[[href]]]]
:[[要素]]:[[Link construct]] な[[要素]]
:[[局所名]]:[CODE(XMLa)@en[[[href]]]]
:[[データ型]]:[[URI]]
:[[既定値]]:(必須)
仕様書:
[CITE[The Atom Syndication Format 0.3 (PRE-DRAFT)]] ([TIME[2006-12-22 17:03:44 +09:00]] 版)
** 属性値
[27] [[属性値]]は [[RFC 2396]] [[URI]] でなければ[['''なりません''']]
[SRC@en[[[Atom 0.3]]]]。
[28] [CODE(XMLa)@en[[[xml]]:[[base]]]] [[属性]]が [CODE(XMLe)@en[atom:[[url]]]]
[[属性]]の処理に適用されなけば[['''なりません''']] [SRC@en[[[Atom 0.3]]。
と [CODE(XMLa)@en[[[href]]]] [[属性]]の項に書いてあります。
[[コピー・アンド・ペースト]]のミスでしょう。
[29] [CODE(XMLa)@en[[[xml]]:[[base]]]] が適用されるということは、
>>27 の「[[URI]]」は実は「[[URI参照]]」である可能性が高いです。
* [CODE(XMLe)@en[app:categories]] 要素 [CODE(XMLa)@en[href]] 属性 (AtomPub)
[30] [[AtomPub]] の [CODE(XMLe)@en[app:[[categories]]]] [[要素]]の
[DFN[[CODE(XMLa)@en[href]] [[属性]]]]は、
[[分類文書]]の [[URL]] を表します。
:[[要素]]:[CODE(XMLe)@en[app:[[categories]]]]
:[[局所名]]:[CODE(XMLa)@en[[[href]]]]
:[[データ型]]:[[IRI参照]]
:[[既定値]]:(なし)
仕様書:
[CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2008-11-20 18:52:14 +09:00]] 版)
** データ型
[31] [[属性値]]は[[分類文書]]を識別する [[RFC 3987]] [[IRI参照]]でなければ[['''なりません''']]。
[SRC@en[[[AtomPub]]]]
[34] 構文上は[[素片識別子]]が認められますが、「[[分類文書]]を識別する」という制約から、
実質的には使えないのではないかと思います。
** 既定値
[32] この[[属性]]が指定されなかった場合、[[分類]]は [CODE(XMLe)@en[app:[[categories]]]]
[[要素]]の[[子要素]]によって表されることになります。
** 処理モデル
[33] [[分類文書]]を [CODE(XMLa)@en[[[href]]]] [[属性]]をたどって取り出す場合、
直接または間接に同じ[[文書]]を参照していないか注意が必要です。
** 関連
[35] この[[属性]]を使う場合、 [CODE(XMLa)@en[[[scheme]]]] [[属性]]や
[CODE(XMLa)@en[[[fixed]]]] [[属性]]は指定しては[['''なりません''']]。
また、[[要素]]は[[空]]でなければ[['''なりません''']]。
[SRC@en[[[AtomPub]]]]
* [CODE(XMLe)@en[app:collection]] 要素 [CODE(XMLa)@en[href]] 属性
[36] [[AtomPub]] [CODE(XMLe)@en[app:[[collection]]]] [[要素]]の
[DFN[[CODE(XMLa)@en[[[href]]]] [[属性]]]]は、
[[集成]]の [[IRI]] を表します [SRC@en[[[AtomPub]]]]。
:[[要素]]:[CODE(XMLe)@en[app:[[collection]]]]
:[[局所名]]:[CODE(XMLa)@en[[[href]]]]
:[[データ型]]:[[IRI]]
:[[既定値]]:(必須)
仕様書:
[CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2008-11-20 18:52:14 +09:00]] 版)
** 属性値
[37] [[属性値]]は [[RFC 3987]] [[IRI]] です。[SRC@en[[[AtomPub]]]]
;; [38] 他の[[属性]]と異なり「[[IRI]]」
であって「[[IRI参照]]」ではないのですが、意図通りなのでしょうか?
** 既定値
[39] この[[属性]]は必須です。 [SRC@en[[[AtomPub]]]]
* メモ
[19]
[CITE[Archived: Guide to the Individualized Education Program]] ([CODE[2007-05-22 17:47:31 +09:00]] 版)
>
[PRE(HTML invalid example code)[
|
]PRE]
([[名無しさん]] [WEAK[2007-05-22 08:53:30 +00:00]])
[21]
[CITE[Bug 8872 - WebFX ajax list manipulator broken]] ([CODE[2007-06-05 09:31:53 +09:00]] 版)
([[名無しさん]] [WEAK[2007-06-05 00:38:36 +00:00]])
[40] [CITE[The SMIL 3.0 Linking Modules]] ([TIME[2008-12-02 00:45:09 +09:00]] 版)
[41] [CITE[名前空間の付いていないXLinkを - dhrnameの開発日誌]] ([TIME[2009-02-17 10:44:01 +09:00]] 版)
>VMLだけですが、IE7でも、名前空間の付いていない「href」属性が実装されています。
[42] [CITE[2009-04-30 - hoshikuzu | star_dust の書斎]] ([TIME[2009-05-01 08:13:41 +09:00]] 版)
>
[PRE(HTML example code)[
{foo:bar;}body{background:url("javascript:/**/(function/**/_(){alert(document.URL)}).call(this)")}
]PRE]
>title要素に(いわゆるHTMLエスケープ済みでも良い)style記述を行います。
>通常ではurl()中のjavascript擬似スキームで書かれたステートメントは、グローバルオブジェクト配下のオブジェクトに対してプロパティ(ないしメソッド)を利用する権限がありません。このため、javascript:alert(document.URL)の記述は実行エラーとなります。
>
実行したい複数のステートメント全体を関数スコープ的な記述でくるんでやり、その関数をcall(this)してやることで権限上昇を得ます。なお、ここでthisはグローバルスコープで関数が動くことを念押ししていることになります。
>link要素やimg要素など、上で触れられた技巧で予期しないJavaScriptの起動は可能でした。ver1.5.0.9からは不可能になりましたのでことなきを得ています。
[50] [CITE[IRC logs: freenode / #whatwg / 20100401]]
([TIME[2010-04-13 08:21:06 +09:00]] 版)
[62] [CITE@en[Web Applications 1.0 r6734 .href reflects, apparently.]]
( ([TIME[2011-10-25 02:41:00 +09:00]] 版))