リンク

Web Linking

[1] Web Linking は、文書の形式や応用に依存しない型付きリンク枠組です。 RFC 5988 として IETF で標準化されています。

[48] 事実上、 HTTPLink: ヘッダーデータモデルを規定するものとなっています。 IETF としてはリンク一般に適用される標準モデルとしたいようですが、 成功しているようには見えません。

[61] 本項は固有名詞である Web Linking に関するものです。 Web におけるリンク一般については、リンクハイパーリンクを参照。

仕様書

リンク

[7] Web Linking におけるリンク (link) は、 RFC 3987 IRI によって識別される2つの資源の間の型付きの連結 (typed connection) です。 リンクは次の要素により構成されます。 >>2 3.

文脈IRI
リンク関係型
対象IRI
対象属性群
任意選択。

[8] これは、「(文脈 IRI) は (関係型) な資源を (対象 IRI) に持っており、 これは (対象属性群) である」という文と解釈できます >>2 3.

[9] リンク濃度 (cardinality) には制限がなく、 ある IRI からの、あるいはある IRI へのリンクが複数あっても構いませんし、 特定の2つの IRI の間に異なるリンク型の複数のリンクがあっても構いません。 >>2 3.

[10] 特定の2つの IRI の間に同じリンク型の複数のリンクがあっても良いかには言及されていません。

[11] 特定の直列化方式における、あるいは直列化方式をまたがった複数のリンク相互の順序やその意味は定義されていません。 応用によって順序に意味を持たせたければ、持たせることができます。 >>2 3.

[22] Web Linking 本体の定義においては明記されていませんが、 Link: 欄の説明によると、文脈IRIは「匿名 (anonymous) 」となることがあるようです。 (anchor の項を参照してください。)

対象属性群

[12] 対象属性群 (target attributes) は、リンクやその対象を説明する名前と値の組の集合です。 ただしその名前や用法については定義していません。 >>2 3.

[13] 例えば、対象IRIMIME型のヒントを含めることができます。

[23] これは Link: 欄における type, hreflang などの引数が該当します。

[38] しかし各直列化法によりその表現方法は様々で、データモデルレベルでも一貫性がありません。 各直列化法は Web Linking のモデルに従った定義をしておらず、 それぞれの都合で必要な部分だけ独自に定義しているので、 Web Linking 全体で共通化した処理を行うのは困難でしょう。

[39] 構文だけ共通化した XLink と方向性は似ていますが、 どちらも等しく失敗しているように見えるのはおもしろいところです。

[37] AtomWebFinger では、対象URLhref という名前で対象属性群と並列に表現されます。

[56] (Web Linking 以前からある) Atomリンク型の中には、 XML名前空間を使って拡張した独自の属性子要素を規定するものもあります。 Web Linking の立場からそれらがどう位置付けられるのかは不明です。

atom:link 参照。

[40] Link: では title 属性titletitle* として表現されます。 後者では言語タグも指定できますが、複数の言語は指定できません。 Atom では title 属性として表現されます。 言語タグ要素自体と共通にしかできません。 WebFinger では titles として任意の言語タグと値の組を指定できます。

[41] Metalink/HTTP が追加した geo 属性Link: 以外の、例えば AtomWebFinger で指定できるのかは明確ではありません。

[42] XRD では対象資源URL の代わりに URI Template を指定できます。

[44] CoREhref を予約しています >>43

[50] CoRE 関連仕様の RFC 7641 は、 CoAP 資源への Web Linking リンク対象属性 obs を使うことができる >>49 と規定しています。 CoRE link format での利用が例示されているものの、 それに限らないことが暗示されています。しかしそれ以上の規定はありません。 本属性は値を持ってはならないこと、複数指定してはならないこと、 複数指定されていれば最初のもの以外無視しなければならないことなどの規定がありますが、 CoRE link format 以外の場合では適用できるのかすら謎です。

[51] 例えば、仮に Atom でこの対象属性を使えるとしても、 「値を持たない」ことは XML の仕様上不可能です。

[59] Collection.Doc+JSONリンクが「primary link relations」と 「secondary link relations」を持てるとしています。前者は必ず1つ、 後者は任意個持てるようです。

[54] リンク型のマーク付け言語との関係の項も参照。

直列化

[14] Web Linking 本体仕様としては、具体的にリンクをどう表現するか (直列化 (serialization) ) を定義していません。 >>2 3.

[15] RFC 5988 は次のような直列化を示しています。

[29] HTML4 (や HTML Standard) と Web Linking の定義は類似していますが、異なっており、 HTML として直列化したときにその解釈が Web Linking と同じになる保証はまったくありません。 特にリンク型の登録簿は共有されていないので、片方で有効なリンク型が他方では無効かもしれません。
[30] Atom 1.0 についても同様のことが言えますが、 Web LinkingAtom 1.0RFC を更新する形で発行されており、 Web Linking により Atom 1.0 の規定は一部上書きされていると思われます。

[24] 他に次のような直列化方式があります。

[45] Web Linking および関連仕様は次の仕様を Web Linking応用であるかのように扱うことがありますが、 当該仕様側にはそのような規定がありません。

[57] Web Linking の立場から HTMLa 要素area 要素がどう扱われているのかは謎です。 これらは link 要素と似たところもあれば、 異なるところもあります。最も大きな違いは、 link 要素文書全体について記述するのに対し、 a 要素area 要素には「文脈」があることでしょうが、それを Web Linking のモデルでどう扱う (あるいは扱わない) のかは定かではありません。
[58] 理論上は XLinkWeb Linking の一直列化法だと主張できそうなものですが、 そのような主張はまだ確認できていません。

[64] Activity StreamsLink は、「closely related to the conceptual model of Links as established in [RFC5988]」 というものを RFC 5988 を一部参照しつつ規定しています >>63。 あるいは「fundamental model for links is established by [ RFC5988]」 と説明しています >>65RFC 5988 に基づきつつも独自の規定を積み上げているようではありますが、 具体的にどの規定がどこまで適用されるのか、よくわかりません。 リンク関係に関しては RFC 5988 のみならず HTML 5.0 も参照しています。

リンク型も参照。

[47] GitHubWeb APIJSONPJSON 部分に HTTP Link: ヘッダーに相当する情報を含めています >>46

[60] BEACONRFC 5988 リンク関係を使っていますが、 それ以外に Web Linking に基づくとは言っていません。

[21] 定義上対象IRI文脈IRIIRI とされていますが、実際にはプロトコル等の制限で URI となることもあります。 >>2 3.

処理モデル

[34] Web Linking は、リンクデータモデルを定義し、 いくつかのハイパーテキスト形式への直列化の方法を説明していますが、 逆にそれを構文解析し、何らかの処理を加える方法は定義していません。

[35] ですから、あるハイパーテキスト形式で記述されたリンクWeb Linking にのっとり処理する方法は、明確ではありません。特に HTMLAtom は、 Web Linking ではなく、それぞれの仕様で定義されたリンクの意味と処理が存在しますから、 これを Web Linking の仕様に従って処理しようと試みても、 HTMLAtom の仕様上の定義とは矛盾してしまいます。

[36] 実際上は、 Web Linking に基づき定義されたそれぞれのリンク関係型において、 その処理が定義されていることがあります。 (それぞれの項を参照してください。) ただし、すべてのリンク関係型の処理がすべての形式・場面で定義されているわけではありません。 例えばリンク関係型 stylesheetHAL で用いられていたとして、それがどう解釈されるのかはまったく不明です。

[55] リンク型の項も参照。

歴史

[3] Web 上の資源の関係や、その関係の (type) を表現する方法 (すなわちリンク)HTMLAtom で定義されていますが、 これらは概念的に類似しているものの、別個に規定されています。資源が複数の表現を持つ場合など、 具体的な表現方法の如何に関わらず、書式に依存しない型付きリンクの枠組を規定することは有用であると考えられたことから、 IETFRFC 5988 でこれを Web Linking として標準化しました。 >>2 1.

[4] 既に Atomatom:link 要素rel 属性のためにリンク型IANA 登録簿と語彙を規定していましたが、 RFC 5988 はこれを改訂して書式に依存しないリンク型の登録簿としました。更に、 HTML4 で規定されていたリンク型を登録簿に追加しています。

[5] RFC 5988 の支持者は HTMLリンク型の定義を RFC 5988 に変更するべく HTML WG で工作活動を行いましたが、結局十分な支持を集められませんでした。

[6] とはいえ一連の議論で元々 WHATWG Wiki にあった HTML の登録簿は廃棄させられ、 microformats wiki に新しく登録簿が作られることになりました。

[26] RFC 5988 に基づきリンク型を定義する RFC は、このような流れの中で勝手に HTMLrel 属性で当該リンク型を使った例を示していたりします。

[27] しかしながら Web Linking および関連 RFCHTML で使うために十分な規定を含んでいません。 大文字小文字の違いなど Web LinkingHTML の定義の違いについて明確な規定がありませんし、 ハイパーリンク外部資源へのリンクの違いなど HTML での適合性処理モデルとの関係も不明確です。

実装

[52] 先述の通り、「Web Linking」全体の一般化された実装はほとんど不可能か、 意味をなしません。「Web Linking」の実装を名乗るものの多くは、実際は単なる HTTP Link: ヘッダーの実装のようです。

関連

[19] 抽象的な「リンク」の形式を規定し、それに則った具体的なリンクを各種文書形式に規定させる、 という発想は HyTime や初期の XLink 案、あるいは HLink と共通していますが、 Web Linking はより抽象的かつ単純です。リンクそのものの標準化を試みた HyTime などと異なり、 Web Linking におけるリンクの定義はむしろリンク型の登録簿の標準化の試みのために最低限の体裁を整えたに過ぎないと評価することもできるでしょう。

[20] Web Linking はその一般的な名前に反して Web におけるリンクのごく一部の限られた種類しかカバーしていません。 例えば HTMLa 要素のように IRI で表現できるとは限らないアンカーを扱うリンクは表現できません。

メモ

[62] Web Linking におけるリンクの捉え方は Semantic Web とも親和性は高そうですが、 RDF との関係も定義されていませんし、 意外と関心が重なっていないのか相互に言及も無さそうです。

[31] Five JSON REST API Link Formats Compared | Sam Placette ( ( 版)) <http://samplacette.com/five-json-rest-api-link-formats-compared/>

[32] mnot’s blog: Linking in JSON ( ( 版)) <https://www.mnot.net/blog/2011/11/25/linking_in_json>

[53] Web Linking ( 版) <https://mnot.github.io/I-D/rfc5988bis/>