メインコンテンツまでスキップ

RFC 8288 - Web Linking (Webリンキング)

  • ステータス: Proposed Standard
  • 発行日: October 2017
  • ストリーム: IETF
  • 廃止: RFC5988
  • エラッタ: エラッタなし

概要 (Abstract)​

本仕様は、Web上のリソース間の関係のモデル ("リンク", links) と、それらの関係のタイプ ("リンク関係タイプ", link relation types) を定義します。

また、Linkヘッダーフィールドを使用してHTTPヘッダー内でそのようなリンクをシリアライズする方法を定義します。


目次 (Contents)​



1. はじめに (Introduction)​

本仕様は、Web 上のリソース間の関係のモデル(「リンク (links)」)とそれらの関係のタイプ(「リンク関係タイプ (link relation types)」)を定義します。

HTML [W3C.REC-html5-20141028] と Atom [RFC4287] はどちらも明確に定義されたリンクの概念を持っています。第 2 節では、これらのフォーマットのリンクおよび(おそらく)他の場所のリンクをカバーするフレームワークとしてこれを一般化します。

さらに、第 3 節では、このようなリンクを伝えるための HTTP ヘッダーフィールドを定義します。

1.1. 表記規約 (Notational Conventions)​

本文書のキーワード「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「NOT RECOMMENDED」「MAY」「OPTIONAL」は、BCP 14 [RFC2119] [RFC8174] の記述に従って解釈されます。

本文書は [RFC7230] の拡張バッカス・ナウア記法 (Augmented Backus-Naur Form, ABNF) [RFC5234] 表記法を使用します。

1.2. 適合性とエラー処理 (Conformance and Error Handling)​

[RFC7230] 第 2.5 節で強調されている適合性とエラー処理に関する要件が本文書に適用されます。


本仕様では、リンクは 2 つのリソース間の型付き接続であり、以下の部分で構成されます。

  • リンクコンテキスト (link context)
  • リンク関係タイプ (link relation type)(第 2.1 節)
  • リンクターゲット (link target)
  • オプションのターゲット属性 (target attributes)(第 2.2 節)

リンクは次の形式の文として見ることができます。「リンクコンテキストはリンクターゲットにリンク関係タイプのリソースを持ち、そのリソースはターゲット属性を持つ」。

例えば、「https://www.example.com/」は「https://example.com」に「canonical」リソースを持ち、そのリソースは「text/html」の「type」を持つ。

リンクコンテキストとリンクターゲットはどちらも国際化リソース識別子 (Internationalized Resource Identifiers, IRIs) [RFC3987] です。

最も単純なケースでは、リンク関係タイプはリンクのセマンティクスを識別します。例えば、関係タイプ「copyright」を持つリンクは、現在のリンクコンテキストがリンクターゲットに著作権リソースを持つことを示します。

関係タイプはメディアタイプ [RFC2046] と混同すべきではありません。関係タイプはリンクを逆参照したときに生成される表現のフォーマットを識別するのではなく、現在のコンテキストが別のリソースとどのように関連しているかを記述するだけです。

関係タイプには 2 種類あります。登録済みと拡張です。

2.1.1. 登録済み関係タイプ (Registered Relation Types)​

明確に定義された関係タイプは、第 2.1.1.1 節の手順を使用してトークンとして登録できます。

登録済み関係タイプ名は reg-rel-type ルール(第 3.3 節参照)に準拠しなければならず (MUST)、大文字小文字を区別せずに文字ごとに比較されなければなりません (MUST)。

登録済み関係タイプはリンクコンテキストのメディアタイプを制約してはならず (MUST NOT)、リンクターゲットの利用可能な表現メディアタイプを制約してはなりません (MUST NOT)。

2.1.2. 拡張関係タイプ (Extension Relation Types)​

関係タイプを登録したくないアプリケーションは、関係タイプを一意に識別する URI [RFC3986] である拡張関係タイプを使用できます。

拡張関係タイプを比較する場合、それらは文字列として(異なる形式でシリアライズされている場合は URI に変換後)大文字小文字を区別せずに文字ごとに比較されなければなりません (MUST)。

2.2. ターゲット属性 (Target Attributes)​

ターゲット属性は、リンクまたはそのターゲットを記述するキー/値ペアのリストです。例えば、メディアタイプのヒントなどです。

これらは個々のリンク関係タイプとリンクシリアライゼーションによって定義できます。


Link エンティティヘッダーフィールドは、HTTP ヘッダーで 1 つ以上のリンクをシリアライズする方法を提供します。HTML の <link> 要素と意味的に等価です。

Link       = #link-value
link-value = "<" URI-Reference ">" *( OWS ";" OWS link-param )
link-param = token BWS [ "=" BWS ( token / quoted-string ) ]

各 link-value は 1 つのリンクを伝えます。リンクターゲットは山括弧(< と >)内の URI-Reference で表されます。

デフォルトでは、リンクのコンテキストは [RFC7230] 第 5.5 節で定義されているように、それが現れるメッセージを表す有効なリクエスト URI (Effective Request URI) です。

3.3. 関係タイプ (Relation Type)​

リンク関係タイプは「rel」パラメーターの値によって識別され、その値は以下のいずれかを含まなければなりません (MUST)。

  • 登録済み関係タイプ名(第 2.1.1 節参照)、または
  • 拡張関係タイプ(第 2.1.2 節参照)
relation-type  = reg-rel-type / ext-rel-type
reg-rel-type = LOALPHA *( LOALPHA / DIGIT / "." / "-" )
ext-rel-type = URI

3.4. ターゲット属性 (Target Attributes)​

リンクのターゲット属性は link-value 内で link-param として表されます。

3.4.1. シリアライゼーション定義の属性​

「rel」パラメーターは存在しなければならず (MUST)、複数回現れてはなりません (MUST NOT)。

その他の一般的なターゲット属性には以下が含まれます。

  • hreflang: ターゲットリソースの言語を示します。値は [RFC5646] に準拠しなければなりません (MUST)。
  • media: ターゲットリソースの意図された表示メディアを示します。
  • title: ターゲットリソースをラベル付けするための人間が読める識別子。
  • title*: [RFC8187] で定義されたエンコーディングを使用した「title」パラメーターの国際化バージョン。
  • type: ターゲットリソースのメディアタイプに関するヒントを提供します。

例えば:

Link: <http://example.com/TheBook/chapter2>; rel="previous";
title="previous chapter"

「previous chapter」が http://example.com/TheBook/chapter2 にあることを示します。

Link: </>; rel="http://example.net/foo"

ルートリソース(「/」)がカスタム拡張関係タイプ「http://example.net/foo」に関連していることを示します。

複数のリンクを単一の Link ヘッダーフィールドで伝えることができます。

Link: </TheBook/chapter2>; rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>; rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel

複数の Link ヘッダーフィールドを使用することもできます。

Link: </TheBook/chapter2>; rel="previous"
Link: </TheBook/chapter4>; rel="next"

4. IANA に関する考慮事項 (IANA Considerations)​

本仕様は「Message Headers」レジストリの「Link」ヘッダーフィールドの定義を更新します。

ヘッダーフィールド名: Link
適用プロトコル: http
ステータス: 標準
著者/変更管理者: IETF
仕様文書: 本仕様(第 3 節)

本仕様は「Link Relation Types」レジストリを確立します。場所は https://www.iana.org/assignments/link-relations/ です。

登録リクエストには以下を含める必要があります。

  • 関係名: 関係タイプの名前
  • 説明: タイプのセマンティクスの短い英語の説明
  • 参照: リンク関係タイプを規定する文書への参照

本仕様は「Link Relation Application Data」レジストリを確立します。


付録 (Appendices)​

HTML [W3C.REC-html5-20141028] はリンクを伝えるための <link> 要素を定義しています。例えば:

<link rel="stylesheet" href="/style.css" type="text/css">

HTML リンクと本仕様で定義されたリンクモデルの対応関係は以下の通りです。

  • リンクコンテキストはリンク要素を含む文書の URI
  • リンク関係タイプは「rel」属性の値によって識別される
  • リンクターゲットは「href」属性の値によって識別される
  • ターゲット属性は他の属性(「type」「media」など)によって表される

Atom [RFC4287] はフィードとエントリに現れることができるリンク要素を定義しています。例えば:

<link rel="alternate" type="text/html" 
href="http://example.org/"/>

Atom リンクと本仕様で定義されたリンクモデルの対応関係は以下の通りです。

  • リンクコンテキストはリンク要素を含むフィードまたはエントリの URI
  • リンク関係タイプは「rel」属性の値によって識別される
  • リンクターゲットは「href」属性の値によって識別される
  • ターゲット属性は他の属性(「type」「hreflang」など)によって表される

本付録では Link ヘッダーフィールドを解析するアルゴリズムを定義します。これらのアルゴリズムは規範的です。

HTTP ヘッダーフィールドのセット headers が与えられた場合:

  1. links を空のリストとする
  2. headers 内のフィールド名が「Link」(大文字小文字を区別しない)の各フィールド field について:
    • field_value を field のフィールド値とする
    • field_links を field_value の解析結果とする(B.2 節のアルゴリズムを使用)
    • field_links の各リンクを links に追加する
  3. links を返す

付録 C. RFC 5988 からの変更点 (Changes from RFC 5988)​

本仕様と RFC 5988 の主な変更点には以下が含まれます。

  • リンクコンテキストとリンクターゲットの定義を明確化
  • RFC 8126 を使用するよう登録手順を更新
  • 解析アルゴリズムを追加(付録 B)
  • 拡張関係タイプの使用を明確化
  • 他の仕様への参照を更新
  • 例と説明テキストを改善