* [CODE(HTMLe)[link]] 要素 (HTML, XHTML 1)
[6] [CODE(HTMLe)[link]] 要素は、当該 [[HTML]]
文書そのものを[[始点アンカー]]とする[[ハイパーリンク]]を記述するための[[要素]]です。
[20]
仕様書:
- [DEL[[[HTML 2.0]]: [[RFC 1866]] ([[IETF]] [[提案標準]])]]
([[RFC 2854]] により廃止)
-- [CSECTION@en[5.2.4. Link: LINK]]
- [[HTML 4]]
-- ''Links in HTML documents''
--- 12.3 Document relationships: the LINK element
[21]
:状態:[[W3C]] [[勧告]]
:[[名前空間URI]]:[CODE(URI)@en[[[http://www.w3.org/1999/xhtml]]]]
:[[局所名]]:[CODE(HTMLe)@en[link]] ([Q@en[link]] ([[リンク]]) より)
:[[開始タグ]]:必須
:[[終了タグ]]:禁止 (HTML 4), 必須 (XHTML 1)
:[[内容模型]]:[CODE(SGML)[[[EMPTY]]]] ([[強制空要素]]型)
:出現できる文脈:[CODE(HTMLe)[[[head]]]] 要素内、任意個
:[[属性]]:
,属性名 ,属性値 ,既定値 ,説明 ,状態 ,出典
,[CODE(HTMLa)@en[[[bulletin-date]]]] , , , ,[[満期]] [DEL@en[([[IETF]] [[I-D]])]]
,[CODE(HTMLa)@en[[[bulletin-expires]]]] , , , ,[[満期]] [DEL@en[([[IETF]] [[I-D]])]]
,[CODE(HTMLa)@en[[[bulletin-image]]]] ,[CODE(SGML)@en[%[[URI]];]] , , ,[[満期]] [DEL@en[([[IETF]] [[I-D]])]]
,[CODE(HTMLa)@en[[[bulletin-text]]]] ,[CODE(SGML)@en[%[[Text]];]] , , ,[[満期]] [DEL@en[([[IETF]] [[I-D]])]]
,[CODE(HTMLa)[[[charset]]]] ,[CODE(SGML)[%[[Charset]]]] ,(なし) ,リンク先 charset のヒント ,[HTML 4]
,[CODE(HTMLa)[[[class]]]] , ,(なし) ,[[級]] ,[HTML 4] [CODE(SGML)[%[[coreattrs]]]]
,[CODE(HTMLa)[[[id]]]] ,[CODE(SGML)[[[ID]]]] ,(なし) ,一意識別子 ,[HTML 4] [CODE(SGML)[%coreattrs]]
,[CODE(HTMLa)[[[dir]]]] , ,(継承) ,[[書字方向]] ,[HTML 4] [CODE(SGML)[%[[i18n]]]]
,[CODE(HTMLa)[[[href]]]] ,[CODE(SGML)[%[[URI]]]] ,(なし) ,終点アンカー URI 参照 ,[HTML 4]
,[CODE(HTMLa)[[[hreflang]]]] ,[CODE(SGML)[%[[LanguageCode]]]] ,(なし) ,リンク先言語のヒント ,[HTML 4]
,[CODE(HTMLa)[[[lang]]]] ,[CODE(SGML)[%LanguageCode]] ,(継承) ,自然言語 ,[HTML 4] [CODE(SGML)[%i18n]]
,[CODE(HTMLa)[[[xml]]:lang]] ,[CODE(SGML)[%LanguageCode]] ,(継承) ,自然言語 ,[XHTML 1]
,[CODE(HTMLa)[[[media]]]] ,[CODE(SGML)[%[[MediaDesc]]]] , , ,[HTML 4]
,[CODE(HTMLa)[[[methods]]]] , , ,
,[CODE(HTMLa)[[[onclick]]]] ,[CODE(SGML)[%[[Script]]]] ,(なし) , ,[HTML 4] [CODE(SGML)[%[[events]]]]
,[CODE(HTMLa)[[[ondblclick]]]] ,[CODE(SGML)[%Script]] ,(なし) , ,[HTML 4] [CODE(SGML)[%events]]
,[CODE(HTMLa)[[[onkeydown]]]] ,[CODE(SGML)[%Script]] ,(なし) , ,[HTML 4] [CODE(SGML)[%events]]
,[CODE(HTMLa)[[[onkeypress]]]] ,[CODE(SGML)[%Script]] ,(なし) , ,[HTML 4] [CODE(SGML)[%events]]
,[CODE(HTMLa)[[[onkeyup]]]] ,[CODE(SGML)[%Script]] ,(なし) , ,[HTML 4] [CODE(SGML)[%events]]
,[CODE(HTMLa)[[[onmousedown]]]] ,[CODE(SGML)[%Script]] ,(なし) , ,[HTML 4] [CODE(SGML)[%events]]
,[CODE(HTMLa)[[[onmousemove]]]] ,[CODE(SGML)[%Script]] ,(なし) , ,[HTML 4] [CODE(SGML)[%events]]
,[CODE(HTMLa)[[[onmouseover]]]] ,[CODE(SGML)[%Script]] ,(なし) , ,[HTML 4] [CODE(SGML)[%events]]
,[CODE(HTMLa)[[[onmouseup]]]] ,[CODE(SGML)[%Script]] ,(なし) , ,[HTML 4] [CODE(SGML)[%events]]
,[CODE(HTMLa)[[[onmouseout]]]] ,[CODE(SGML)[%Script]] ,(なし) , ,[HTML 4] [CODE(SGML)[%events]]
,[CODE(HTMLa)[[[rel]]]] ,[CODE(SGML)[%[[LinkTypes]]]] , ,関係(順) ,[HTML 4]
,[CODE(HTMLa)[[[rev]]]] ,[CODE(SGML)[%LinkTypes]] , ,関係(逆) ,[HTML 4]
,[CODE(HTMLa)@en[[[src]]]],,,,非標準
,[CODE(HTMLa)[[[style]]]] ,[CODE(SGML)[%[[StyleSheet]]]] ,(なし) ,様式 ,[HTML 4] [CODE(SGML)[%coreattrs]]
,[CODE(HTMLa)[[[target]]]] ,[CODE(SGML)[%[[FrameTarget]]]] , , ,[HTML 4] 非推奨
,[CODE(HTMLa)[[[title]]]] ,[CODE(SGML)[%[[Text]]]] ,(なし) , ,[HTML 4] [CODE(SGML)[%coreattrs]]
,[CODE(HTMLa)[[[type]]]] ,[CODE(SGML)[%[[ContentType]]]] ,(なし) ,リンク先媒体型のヒント ,[HTML 4]
,[CODE(HTMLa)[[[urn]]]]
,[CODE(XMLa)[[[xmlns]]]] ,[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] 固定 ,== ,[[名前空間名]] ,W3C 勧告 ,[[XHTML m12n]]
[1] [[HTML 4]] では必須属性なしなんですけど、本当にそれでいいのでしょうか?
多分 [CODE(HTMLa)[[[href]]]] 属性は必須でしょう。
[4] [CODE(HTMLa)[[[lang]]]] 属性も [CODE(HTMLa)[[[dir]]]] 属性も対象は
[CODE(HTMLa)[[[title]]]] 属性だけのようです。
[5] こんな要素にまで [CODE(HTMLa)[onmouse[VAR[*]]]] /
[CODE(HTMLa)[onkey[VAR[*]]]] 属性があるなんて、徹底してますね。
[30]
普通[[著者]]、関係する[[索引]]・[[用語集]]、 古い版や新しい版、
文書階層、[[スタイル・シート]]など関連付ける資源、 その他を示すために使います。
[SRC[RFC 1866 5.2.4]]
[[#comment]]
** 応用
[22] レンダリング例:
- リンクの drop‐down メニューがついてる工具棒 [SRC[HTML 4]]
- 文書群を印刷するときの基本材料 [SRC[HTML 4]]
- 常時表示メニューや文脈メニューの一部として
- 文書本文領域の最初や最後の部分として
[[#comment]]
*** 検索円陣
[24] [[検索円陣]]に対しては、特に次のようなものへの [CODE(HTMLe)[link]]
が有用です。 [SRC[HTML 4]]
- 文書の他の言語で書かれた版
- 文書の他の媒体向け (例: 印刷用) に書かれた版
- 文書群の開始頁
* 歴史
** XHTML2
[51] [[RDFa]] が取り込まれた [[XHTML2]] の第6次案では [CODE(HTMLe)@en[[[link]]]] [[要素]]や
[CODE(HTMLe)@en[[[meta]]]] [[要素]]を[[子供]]にできるようになっています。また、
[[文書]]中ほとんどどこででも使えるように変更されています。
;; [CITE@en[- XHTML Metainformation Module]] ([TIME[2004-07-22 15:25:35 +09:00]] 版)
** Web Linking
[56] [[RFC 5988]] は [CODE(HTMLe)@en[[[link]]]] [[要素]]を [[Web Linking]]
の[[直列化]]の1方式として取り扱っていました。
;; [57] 2010年に出版された [[RFC]] で [[HTML4]] をベースにした規定というのは甚だ時代遅れ感がありますがw
[REFS[
- [58] [CITE@en[RFC 5988 - Web Linking]] ([TIME[2012-03-22 09:19:11 +09:00]] 版)
]REFS]
;; [59] [[RFC]] が [[HTML]] について規定する正当性は特になく、若干遠慮して本文ではなく附属書になっているようですw
(しかし[[附属書]]が[[参考]]であるとは書かれていないので、[[規定]]の一部なのでしょうが・・・。)
[60] [[HTML5]] の[[リンク型]]の定義を [[IANA]] の登録簿にしようと [[IETF]]
系の人達が [[HTML WG]] でロビー活動を行なっていたこともありましたが、採用されておらず、
あくまで [[RFC]] の規定は [[IETF]] 側からの勝手な見解となっており、
一般的な [[HTML]] の解釈とは一致していないようです。
[61] [[HTML4]] の [CODE(HTMLe)@en[[[link]]]] [[要素]]は [CODE(HTMLa)@en[[[href]]]]
[[属性]]を[[対象URI]]、 [CODE(HTMLa)@en[[[rel]]]] [[属性]]を[[リンク関係型]]、
当該[[HTML文書]]全体に関連付けられた [[URL]] を[[文脈]]とする [[Web Linking]]
[[リンク]]に写像することができます。 [SRC[>>58]]
[62] [[HTML4]] が定義する[[リンク型]]は [[IETF]] 側でも登録されており、そのまま使うことができます。
[SRC[>>58]]
;; [63] 実際には [[HTML4]] の[[リンク型]]と同名であっても別の出典から登録されたものがあり、
その[[意味]]が必ずしも一致しているとは断言できないのですが・・・。
[64] 逆に[[拡張リンク関係型]] ([[URL]] で表されるもの) を
[[HTML4]] で表現するにあたっては、幾つかの方法が考えられます。例えば、
- [65] [[絶対URL]]として表す
- [66] [CODE(HTMLa)@en[[[profile]]]] [[属性]]の [[URL]] を[[接頭辞]]として使って表す
- [67] [[RDFa]] の方法により ([[CURIE]] で) 表す
... といったような方法が考えられます。従って[[リンク]]を使う[[応用]]はそれぞれ [[HTML4]]
でどう[[直列化]]するべきかを定義する必要があります。 [SRC[>>58]]
;; [68] 既に [[HTML5]] が廃止した [CODE(HTMLa)@en[[[profile]]]] [[属性]]をわざわざ推すあたりが時代錯誤感激しいですね。というか著者が
[CODE(HTMLa)@en[[[profile]]]] [[属性]]存続主義者なのでしょうが。しかし[[応用]]依存にして明確に決めないで、
[[相互運用性]]をどうやって確保するつもりなのでしょう。
;; [76] [[HTML4]] でも [[HTML5]] でも [CODE(HTMLa)@en[[[rel]]]]
[[属性値]]は[[ASCII大文字・小文字不区別]]であり、 [[Web Linking]] では [[URL]]
は[[大文字・小文字区別]]である点も互換性がありませんが、特に言及はありません。
[69] [[HTML]] では [[IANA]] 未登録の[[リンク関係型]]で [[URL]]
でないものがよく使われていることがわかっており、適合する [[HTML]]
の実装はこれを誤りとはみなさずに、局所的な適用範囲の (当該[[文書]]内で意味を持つ)
[[リンク関係型]]と考えるべきです。 [SRC[>>58]]
;; [70] 本当に、なんで [[HTML]] の[[利用者エージェント]]の適合性を規定しているのでしょうね・・・。
それは [[HTML]] の仕様の役目でしょうに・・・。どうしてもそれを規定したいのなら、
[[HTML4]] と [[Web Linking]] の両方を実装する[[UA]]は [CODE(HTMLa)@en[[[rel]]]]
[[属性]]をこう解釈しなければならない、ともっとはっきり定義すれば良いのに。
[71] [[IANA]] に登録されていても [[HTML4]] で定義されていない[[リンク型]]もたくさんありますが、
これを [[HTML4]] でどう表現するのかについてはなぜか一切言及がありません。
[72] [[HTML4]] で [CODE(HTML)@en[[[alternate stylesheet]]]] の組には特別な意味が与えられているため、
[CODE(HTTP)@en[[[Link:]]]] 欄として直列化するときには単一のリストとして、
[CODE(HTTP)@en[[[rel]]="[[alternate stylesheet]]"]] のように表すべきです。 [SRC[>>58]]
[73] [[HTML4]] の定義する[[属性]]のいくつかは [CODE(HTTP)@en[[[Link:]]]]
欄では明確に定義されていませんが、忠実に再現するために拡張[[引数]]としてそのまま直列化することもできます。
[SRC[>>58]]
;; [74] [CODE(HTMLa)@en[[[target]]]] [[属性]]などのことでしょう。それならそれで定義しておけばいいのになぜ曖昧にするのでしょうね。
;; [75] しかしなぜ [CODE(HTMLe)@en[[[link]]]] [[要素]]と [CODE(HTTP)@en[[[Link:]]]]
欄の対応関係を定義するのか、という肝心の意図が全然説明されていません。これは
[CODE(XMLe)@en[[[atom:link]]]] [[要素]]についての同様の規定でも同じです。
* 実装
[7] 大昔から定義されている要素型であるにもかかわらず、
長らく [[Lynx]] などの一部[[WWWブラウザ]]等しか実装しない瀕死状態でしたが、
[[外部スタイル・シート]]の指定に使われたことで一躍有名となり、
意味マーク付けへの回帰の流れの中で再び注目されるようになりました。
現在では [[Mozilla]] や [[Opera]] のような有名な WWW
ブラウザも目立つ形で実装し、 [[IE]] でも利用可能にする拡張
tool が幾つも公開され、同時に [[HTML]] 文書に [CODE(HTMLe)[link]]
要素を明記する流れが広まっています。
[17] [[NCSA Mosaic]] 3.0 とか [[iCab]] とか、
昔から実装はあったことはあったのだけど。。。
[8] [CODE(HTML)[link]] 要素型を使って前後の文書などの関係を明記し、
Web ブラウザの [[UI]] を通して利用可能となることで、
Web browsing の効率は著しく向上します。
[16] >>7 多くの解説書に[Q[表示されないから意味が無い]]
とまで切り捨てられたからなあ。悲惨だよね。
[9] ''Bug 2800 - No UI for HTML2 "LINK" element'' :
[[Mozilla]] での [CODE(HTMLe)[link]] 要素の実装について。
[15] [[Excel]] (少なくても Excel 10) は、
[SAMP(HTML)[]] とか
[SAMP(HTML)[]] とかを一つの文書内に一杯出力します。
[CODE(HTMLa)[id]] と [CODE(HTMLa)[rel]] をまちがえているとしかおもえません(w
[40]
[[libwww]]の[[HTML]][[構文解析器]]は1996年7月20日のRelease 4.1b3で[CODE(HTMLe)@en[[[link]]]]を実装しました。
([[名無しさん]] [sgea])
[43]
[CITE[link要素とCSSのみでナビゲーションを作る]]
[[Gecko]] は [CODE(HTMLe)@en[[[link]]]] を
[CODE(HTMLe)@en[[[a]]]] と同じように[[リンク]]として[[レンダリング]]する。
([[名無しさん]] [WEAK[2006-08-23 00:15:14 +00:00]])
[45]
[CITE@ja[FirefoxでOperaのようなlink要素を表示させる「Mozeraナビ=叢ナビ」 (インターネット帳面)]] ([CODE[2007-02-09 08:54:37 +09:00]] 版)
([[名無しさん]])
[46]
[CITE[link 要素を可視化してみる - double-team.org]] ([CODE[2007-02-08 18:33:35 +09:00]] 版)
([[名無しさん]])
[[#comment]]
*** [CODE(HTMLe)[link]] 要素によるスタイル・シートの実装
[33]
:[[Trident]] ([[WinIE]]):
:[[Classic Mozilla]]:
:[[Tasman]] ([[MacIE]]):
:[[iCab]]:
:[[Gecko]] ([[Mozilla Suite]], [[Firefox]] など):
:[[Opera]]:
:[[KHTML]] ([[Safari]] など):
その他枚挙に暇がありません。
[[#comment]]
*** [CODE(HTMLe)[link]] 要素によるナビゲーションの実装
[32]
:[[Lynx]]:かなり以前から実装。
画面例: ,
:[[NCSA Mosaic]]:[[NCSA Mosaic]] 3.0 以降で実装。
画面例:
:[[iCab]]:
画面例: ,
:[[emacs-w3m]]:
2001年8月に実装されました。
[emacs-w3m:01393]
:[[Mozilla Suite]]:
[[Mozilla]] 0.9.5 ''以上'' 1.0 ''未満''と 1.1 ''以上''で
[[Site Navigation Bar]] として実装。 (>>9)
画面例: ,
,
:[[Opera]]:[[Opera]] 7 以降で実装。
画面例:
:[[Mozilla Firefox]] [[Link Toolbar]]:
[[拡張]]機能として用意されています。 [CODE(HTMLe)[[[link]]]]
要素に限らず、 [CODE(HTMLe)[[[a]]]] 要素や [[URI]]
による推測も含めてナビゲーションを提供します。
画面例:
この他 [[WinIE]] 用の拡張、 [[Mozilla]] 系ブラウザ用の拡張、
[[Gecko]] や [[Trident]] を使った独自ブラウザなど、
細かいものも入れればきりがありません。
[[#comment]]
*** [CODE(HTMLe)[link]] 要素による favicon の実装
[34] → [CODE(file)[[[favicon.ico]]]]
** 不思議解釈
[35]
[[Stricter]] 系過激派の中には、[[ナビゲーション]]的な記述が
[CODE(HTMLe)@en[[[body]]]] 内に含まれるのは好ましくなく、
すべて [CODE(HTMLe)@en[[[link]]]] 要素を使って記述されるべきだと考える人もいます。
[36]
ながくあってないもの状態の時代が続いたので、
未だに[Q[多くのブラウザが対応していない]]などと嘘を平気で言う人がよくいます。
([[名無しさん]] [sage] [WEAK[2005-12-13 11:13:11 +00:00]])
[[#comment]]
** 例
[23]
[PRE(HTML)[
Chapter 2
...the rest of the document...
]PRE]
[WEAK[(HTML 4 仕様書より)]]
[25] 色々な言語の版へのリンクの例
[PRE(HTML)[
The manual in English
]PRE]
[WEAK[(HTML 4 仕様書より、改)]]
[26] 印刷版へのリンクの例
[PRE(HTML)[
Reference manual
]PRE]
[WEAK[(HTML 4 仕様書より、改)]]
[27] 文書群の最初の文書へのリンクの例
[PRE(HTML)[
Reference manual -- Page 5
]PRE]
[WEAK[(HTML 4 仕様書より、改)]]
[[#comment]]
** 他との関係
[28] [[HTTP]] には [CODE(HTTP)[[[Link]]:]] (古くは [CODE(HTTP)[[[WWW-Link]]:]] とも)
という[[実体頭欄]]があります。 [CODE(HTTP)[Link]] は [CODE(HTMLe)[link]]
の弟にあたります。
HTML 4 12.4.1 Resolving relative URIs
の注には、 [CODE(HTTP)[Link]] を [CODE(HTMLe)[link]] と同じように扱うと書いてあります。
(が、[[基底URI]] の話なので、基底 URI 限定のメモかもしれません。)
[[#comment]]
** メモ
[10] HTML 4 でも [CODE(HTMLa)[[[accesskey]]]] 属性は無いんだね。
[11] >>10 文書が個々に指定するよりブラウザの [[UA]] で
[CODE(HTMLa)[[[rel]]]] / [CODE(HTMLa)[[[rev]]]] ごとに決まってた方がいい。
[CODE(HTML)[[CODE(HTMLa)[rel]]=[[prev]]]] == [KBD[←]] とか。
[19] ''Subotnik: Das 'link'-Element in (X)HTML''
(ドイツ語):
[CODE(HTMLa)[link]] 要素についてのありとあらゆる情報のリンク集。
(ドイツ語が読めなくてもリンク集なので大丈夫です。)
[31]
[CITE[linkのススメ - 駄的HTML改善計画]]
[42]
[[Link Toolbar]] とかで [[URI]] の[[コピー]]ができないのが不便・・・。
([[名無しさん]] [WEAK[2006-06-21 23:04:45 +00:00]])
[44]
[CITE[我的春秋: link 要素をナビゲーションに利用することの注意点(改訂)]] ([CODE[2007-02-09 08:54:04 +09:00]] 版)
([[名無しさん]] [WEAK[2007-02-09 00:07:14 +00:00]])
[47]
[CITE@ja[パンくずリストがベストとは限らない | WWW WATCH]] ([CODE[2007-02-10 14:54:24 +09:00]] 版)
([[名無しさん]] [WEAK[2007-02-10 05:56:55 +00:00]])
[[#comment]]
* メモ
[18] [WEAK[2003-08-30 23:52:46 +00:00]] ''[[名無しさん]]'':
なぜかこの WikiPage が で20位、
及び で1位ですよ。なんでやねん。
[37]
[CITE[DPML Transit Link Protocol]] (2006年1月1日付[[URI scheme]]仕様書)
([[名無しさん]] [sage])
[38]
例 [SRC[>>37]]:
[CODE(URI example)@en[link:module:dpml/metro/dpml-metro]]
([[名無しさん]] [sage])
[41]
:
[PRE(CSS example code)[
[CODE(HTMLe)@en[[[a]]]]'''['''[CODE(HTMLa)@en[[[href]]]]''']''' { [[link]]: [CODE(HTMLa)@en[[[href]]]] }
]PRE]
([[名無しさん]] [sage])
[48]
[CITE[Document specific background and foreground control]] ([CODE[2007-02-26 22:14:03 +09:00]] 版)
([[名無しさん]])
[49]
[CITE[XML.com: Building the Annotated XML Specification]] ([[Tim Bray]] 著, [CODE[2007-03-17 18:34:30 +09:00]] 版)
([[名無しさん]])
[50]
[CITE@en[Re: '''['''XHTML 2''']''' renaming :link to :unvisited]] ([[Bert Bos]] 著, [TIME[2006-09-28 21:34:24 +09:00]] 版)
([[名無しさん]])
[52] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-08-31 23:52:26 +09:00]] 版)
[53] [CITE[IRC logs: freenode / #whatwg / 20100807]]
([TIME[2010-08-13 08:31:42 +09:00]] 版)
[54] [CITE@en[draft-hammer-discovery-03 - LRDD: Link-based Resource Descriptor Discovery]]
( ([TIME[2010-09-22 07:17:54 +09:00]] 版))
[55] [CITE@en[Web Applications 1.0 r6388 Disallow from having both rel='' and itemprop=''. This might change back if there are compelling use cases, but in the meantime it seems like this is likely to catch errors. This also effectively disallows rel='' on s in .]]
( ([TIME[2011-08-10 05:08:00 +09:00]] 版))
[77] [CITE@en[Building Smartphone-Optimized Websites - Webmasters — Google Developers]]
( ([TIME[2012-08-02 09:24:38 +09:00]] 版))
[78] [CITE[Document specific background and foreground control]]
( ([TIME[2013-03-05 11:23:15 +09:00]] 版))
[79] [CITE[WWWLibrary_1.1]]
( ([TIME[2003-08-10 20:15:53 +09:00]] 版))
[80] [CITE[IRC logs: freenode / #whatwg / 20130408]]
( ([TIME[2013-04-12 00:56:17 +09:00]] 版))
[81] [CITE@en[Web Applications 1.0 r8222 Clarify the activation behaviour of elements.]]
( ([TIME[2013-10-16 02:28:00 +09:00]] 版))