[26] [CODE(HTTP)@en[[[Link:]]]] 欄の [DFN[[CODE(HTTP)@en[[[anchor]]]] [[引数]]]]は、
当該 [CODE(HTTP)@en[[[Link:]]]] 欄で表現される [[Web Linking]] [[リンク]]の[[始点アンカー]]を表します。

* 仕様書

[REFS[
- [25] [CITE@en[RFC 5988 - Web Linking]] ([TIME[2012-03-22 09:19:11 +09:00]] 版) <http://tools.ietf.org/html/rfc5988#section-5.2>
]REFS]

* 意味

[28] [CODE(HTTP)@en[[[Link:]]]] 欄で表される[[リンク]]の [[Web Linking]]
における[[文脈IRI]]は、その[[要求]]されている[[資源]]となります。しかし、これを
[CODE(HTTP)@en[[[anchor]]]] [[引数]]によって上書きできます [SRC[>>25]]。

* 構文

[29] [CODE(HTTP)@en[[[anchor]]]] [[引数]]の値は [[URL]] です。

[30] [[RFC]] によれば値は [[RFC 3986]] [CODE(ABNF)[[[URI-Reference]]]] [SRC[>>25]]
である必要があります。

[31] これは同じ[[資源]]の[[素片]]を指した [[URL]] であっても構いませんし、別の[[資源]]の
[[URL]] であっても構いません。[[相対URL]]なら、解釈に当たり [[RFC 3986]]
に従って[[解決]]しなければ[['''なりません''']]。なお、メッセージの本体で指定されている[[基底URL]]
は適用されません。 [SRC[>>25]]

;; [32] 従って、 [CODE(HTTP)@en[[[Link:]]]] 欄の[[対象IRI]]と同じく、
[[HTTP]] [[ヘッダー]]の[[基底URL]]に対して[[相対]]と解釈されることになります。
なお、 [[Web Linking]] の定義上[[文脈IRI]]は [[RFC 3987]] [[IRI参照]]であり、
また [CODE(HTTP)@en[[[anchor]]]] [[引数]]の値は [[RFC 3986]] [[URI参照]]であるため、
(明記されていませんが) 適宜[[パーセント符号化]]して [[URI]] とする必要があります。
また、 (明記されていませんが) [CODE(ABNF)[[[URI-Reference]]]] としての構文的な制約だけでなく、
[[RFC 3986]]/[[RFC 3987]] に規定された構文で表現されていない制約も適用されていると解釈するべきでしょう。

[407] [[RFC]] によると、この[[引数]]の値は [CODE(char)[[["]]]] で括らなければなりません。 [SRC[>>25]]

;; [408] 多くの [[RFC]] は引用符の扱いが不明瞭で、構文上と実際上・一般的な理解上の引用符の必要性が一致していないこともあります。
しかし >>25 では他の[[引数]]で引用符の有無の両方の構文が区別されているところ、
[CODE(HTTP)@en[[[anchor]]]] に関しては引用符ありの構文のみしか示されていないので、
必ず使わなければならないようです。また、 [[quoted-pair]] は使えない構文となっています。
同様の理由で [[RFC 2231]] の拡張は使えないと解釈できます。

[410] [CODE(HTTP)@en[[[anchor]]]] [[引数]]が複数指定されている場合の意味と処理モデルは規定されていません。

;; [411] 他の[[引数]]は複数指定することが認められているものもあります。

* 既定値

[409] [CODE(HTTP)@en[[[anchor]]]] [[引数]]が省略された場合の[[文脈IRI]]の[[既定値]]は、
その [[HTTP]] [[要求]]の [[URL]] です。

[35] [[HTTP]] の[[状態符号]]や[[応答ヘッダー]]によっては、[[文脈IRI]]が
「匿名」となることもあります。 [SRC[>>25]]

[EG[
[36] 例えば、 [CODE(HTTP)@en[[[GET]]]] [[要求]]に対する [CODE(HTTP)[[[404]]]]
[[応答]]の場合が該当します。 [SRC[>>25]]

;; [405] >>36 のように [[RFC]] には記述がありますが、この例は一般的には [[URL]]
が「匿名」であるとは解釈されていないように思います。 [CODE(HTTP)@en[[[OPTIONS]]]]
[[メソッド]]など [[Request-URI]] が指定されなくて良いような[[要求]]などは [[URL]]
が定義されないのでしょうが・・・。そもそもそのような場合に[[相対URL]]
はどう解釈したらよいのでしょう。少なくても [[RFC 3986]] に従う限りそのような状況では[[解決]]できないと思うのですが、
[[RFC]] はその辺の問題には言及していません。
]EG]

* 処理モデル

[33] 実装は [CODE(HTTP)@en[[[anchor]]]] [[引数]]が指定された[[リンク]]を無視しても構いません。
その場合、 [CODE(HTTP)@en[[[anchor]]]] [[引数]]だけではなく、[[リンク]]全体を無視しなければ[['''なりません''']]。
[SRC[>>25]]

[EG[
[34] 例えば、[[文脈IRI]]が別の[[資源]]であるような[[リンク]]を見tめなくても構いません。
[SRC[>>25]]
]EG]

* PROV-AQ

[REFS[
- [1] [CITE@en[PROV-AQ: Provenance Access and Query]]
( ([TIME[2012-01-07 07:17:25 +09:00]] 版))
<http://www.w3.org/TR/2012/WD-prov-aq-20120110/#resource-accessed-by-http>
- [2] [CITE@en[PROV-AQ: Provenance Access and Query]]
( ([TIME[2012-01-07 07:17:25 +09:00]] 版))
<http://www.w3.org/TR/2012/WD-prov-aq-20120110/#resource-represented-as-html>
]REFS]

* セキュリティー

[412] [CODE(HTTP)@en[[[anchor]]]] [[引数]]を使うと他の[[資源]]についての[[リンク]]を記述することが可能であることから、[[セキュリティー]]について特に配慮が必要だと指摘されています
[SRC[>>25 7.]]。

* 歴史

[24] [[RFC 2068]] では [CODE(HTTP)@en[[[anchor]]]] [[引数]]が定義されてはいたものの、
その意味は明確に説明されていませんでした。

[27] [[RFC 5988]] は [CODE(HTTP)@en[[[anchor]]]] [[引数]]の意味を明確に規定しています。

* 関連

[413] [[HTML]] には [CODE(HTTP)@en[[[anchor]]]] [[引数]]に存在するものがありませんが、
[[PROV-AQ]] はこれを強引に表現するために[[リンク型]] [CODE(URI)@en[[[http://www.w3.org/ns/prov#has_anchor]]]]
を使っています。

* メモ

[15] 2002-10-20 (日) 07:02 ''[[Link:]>>5]'': anchor 属性ってのがよくわかりません。現資源でもリンク先資源でもないが、関係ある第3の資源を書けばいいんでしょうか?

[21] >>15 訳が間違っていたので直しました。
[CODE(HTTP)[anchor]] パラメーターは[[始点アンカー]]を当該資源ではなく
[[URI]] で示す他の資源 (当該資源の一部でも良い。)
を表すのに示すようです。
例えば、こんな風に使うのを想定していたのではないでしょうか。

[PRE[
Link: <#section2>; anchor="#section1"; rel="next"
Link: <#section3>; anchor="#section2"; rel="next"
Link: <#section4>; anchor="#section3"; rel="next"
Link: <#section5>; anchor="#section4"; rel="next"
]PRE]

これが役に立つのかはちょっとわかりませんが、
役に立つ使い方もありそうな気はします。

また、第3の資源云々というのは、後の [[XLink]]
にある、始点アンカーの要素以外で定義されたリンクの仕組みを先駆けたものなのかなあという気もしますが、
それを HTTP header で提供する必然性も無いですし、
違うのかなあ。

[23] [[Link:]>>22] によれば >>21 の前者はそれで問題ないようです。

[406] これ、本当に必要なのかとても疑問です。

[[素片識別子]]を使って[[文書]]の一部分と他の[[資源]]の[[リンク]]を表現するという用法はまだ理解できます。
しかしそういうのは実際の[[レンダリング]]その他の[[処理モデル]]のことを考えると、
[[マーク付け言語]]等々本体側の仕様と分離して定義・処理することはほとんど不可能なので、
中途半端な規定と構文を [[HTTP]] [[ヘッダー]]に入れるよりは、
本体側の言語に組み込んだ方が自然ですし、[[著者]]にとっても編集しやすいですし、
処理もたぶんしやすいです。

他の[[資源]]からの[[リンク]]を表現するというのは、 [[XLink]] 含め[[ハイパーテキスト]]を [[Web]]
に持ち込もうとしたシステムが何度か試みてますが、みんな失敗していて、これも成功しそうに思えない。
そもそも関係ない[[資源]]の[[リンク]]を混ぜる意味なんてほとんど無いわけで。
[[RDF]] みたいな [[URL]] を濫用したシステムだって、本体に含めるので十分で[[ヘッダー]]を使う必然性はないですし、
他の[[資源]]からこの[[資源]]への[[リンク]] ([[逆リンク]]) を表すというのならかろうじて理解できますが、
[[レンダリング]]の方法も規定されない[[ヘッダー]]に含めたところで用途が本当にあるのか疑問な上、
[CODE(HTTP)@en[[[rev]]]] [[引数]]とかぶってもいます。