/
606.txt
251 lines (192 loc) · 14.8 KB
/
606.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
[1] [DFN[[[Web Linking]]]] は、[[文書]]の形式や[[応用]]に依存しない[[型付きリンク]]の[[枠組]]です。
[[RFC 5988]] として [[IETF]] で標準化されています。
[48] 事実上、 [[HTTP]] の [CODE(HTTP)@en[[[Link:]]]] [[ヘッダー]]の[[データモデル]]を規定するものとなっています。
[[IETF]] としては[[リンク]]一般に適用される標準モデルとしたいようですが、
成功しているようには見えません。
* 仕様書
[REFS[
- [2] '''[CITE@en[RFC 5988 - Web Linking]] ([TIME[2012-03-01 09:27:46 +09:00]] 版) <http://tools.ietf.org/html/rfc5988>'''
- [43] [CITE@en[RFC 6690 - Constrained RESTful Environments (CoRE) Link Format]] ([TIME[2014-09-27 02:33:02 +09:00]] 版) <http://tools.ietf.org/html/rfc6690>
- [49] [CITE@en[RFC 7641 - Observing Resources in the Constrained Application Protocol (CoAP)]] ([TIME[2015-10-01 09:47:49 +09:00]] 版) <https://tools.ietf.org/html/rfc7641#section-6>
]REFS]
* リンク
[7] [[Web Linking]] における[DFN[[RUBYB[リンク]@en[link]]]]は、
[[RFC 3987]] [[IRI]] によって識別される2つの[[資源]]の間の[RUBYB[型付きの連結]@en[typed connection]]です。
[[リンク]]は次の要素により構成されます。 [SRC[>>2 3.]]
[FIG[
- [[文脈IRI]]
- [[リンク関係型]]
- [[対象IRI]]
- [[任意選択]]で、[[対象属性群]]
]FIG]
;; [8] これは、「(文脈 IRI) は (関係型) な[[資源]]を (対象 IRI) に持っており、
これは (対象属性群) である」という文と解釈できます [SRC[>>2 3.]]。
[9] [[リンク]]の[RUBYB[[[濃度]]]@en[cardinality]]には制限がなく、
ある [[IRI]] からの、あるいはある [[IRI]] への[[リンク]]が複数あっても構いませんし、
特定の2つの [[IRI]] の間に異なる[[リンク型]]の複数の[[リンク]]があっても構いません。
[SRC[>>2 3.]]
;; [10] 特定の2つの [[IRI]] の間に同じ[[リンク型]]の複数の[[リンク]]があっても良いかには言及されていません。
[11] 特定の[[直列化]]方式における、あるいは[[直列化]]方式をまたがった複数の[[リンク]]相互の順序やその意味は定義されていません。
[[応用]]によって順序に意味を持たせたければ、持たせることができます。
[SRC[>>2 3.]]
;; [22] [[Web Linking]] 本体の定義においては明記されていませんが、 [CODE(HTTP)@en[[[Link:]]]]
欄の説明によると、[[文脈IRI]]は「[RUBYB[匿名]@en[anonymous]]」となることがあるようです。
([CODE(HTTP)@en[[[anchor]]]] の項を参照してください。)
* 対象属性群
[12] [RUBYB[[[対象属性群]]]@en[target attributes]]は、[[リンク]]やその[[対象]]を説明する名前と値の組の集合です。
ただしその名前や用法については定義していません。
[SRC[>>2 3.]]
[EG[
[13] 例えば、[[対象IRI]]の[[MIME型]]のヒントを含めることができます。
]EG]
[23] これは [CODE(HTTP)@en[[[Link:]]]] 欄における [CODE(HTTP)@en[[[type]]]],
[CODE(HTTP)@en[[[hreflang]]]] などの[[引数]]が該当します。
[38] しかし各直列化法によりその表現方法は様々で、データモデルレベルでも一貫性がありません。
各直列化法は [[Web Linking]] のモデルに従った定義をしておらず、
それぞれの都合で必要な部分だけ独自に定義しているので、
[[Web Linking]] 全体で共通化した処理を行うのは困難でしょう。
;; [39] 構文だけ共通化した [[XLink]] と方向性は似ていますが、
どちらも等しく失敗しているように見えるのはおもしろいところです。
[37] [[Atom]] や [[WebFinger]] では、[[対象URL]]も [CODE(XML)@en[href]]
という名前で[[対象属性群]]と並列に表現されます。
[56] ([[Web Linking]] 以前からある) [[Atom]] の[[リンク型]]の中には、
[[XML名前空間]]を使って拡張した独自の[[属性]]や[[子要素]]を規定するものもあります。
[[Web Linking]] の立場からそれらがどう位置付けられるのかは不明です。
;; [CODE(XMLe)@en[[[atom:link]]]] 参照。
[40] [CODE(HTTP)@en[[[Link:]]]] では [CODE@en[title]] [[属性]]は
[CODE(HTTP)@en[[[title]]]] や [CODE(HTTP)@en[[[title*]]]] として表現されます。
後者では[[言語タグ]]も指定できますが、複数の[[言語]]は指定できません。
[[Atom]] では [CODE(XMLa)@en[[[title]]]] [[属性]]として表現されます。
[[言語タグ]]は[[要素]]自体と共通にしかできません。
[[WebFinger]] では [CODE@en[[[titles]]]] として任意の[[言語タグ]]と値の組を指定できます。
[41] [[Metalink/HTTP]] が追加した [CODE(HTTP)@en[[[geo]]]] [[属性]]を
[CODE(HTTP)@en[[[Link:]]]] 以外の、例えば [[Atom]] や [[WebFinger]]
で指定できるのかは明確ではありません。
[42] [[XRD]] では[[対象資源]]の [[URL]] の代わりに [[URI Template]]
を指定できます。
[44] [[CoRE]] は [CODE(HTTP)@en[[[href]]]] を予約しています [SRC[>>43]]。
[50] [[CoRE]] 関連仕様の [[RFC 7641]] は、 [[CoAP]] [[資源]]への
[[Web Linking]] [[リンク]]で[[対象属性]] [CODE[[[obs]]]]
を使うことができる [SRC[>>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]] 本体仕様としては、具体的に[[リンク]]をどう表現するか
([RUBYB[[[直列化]]]@en[serialization]]) を定義していません。 [SRC[>>2 3.]]
[15] [[RFC 5988]] は次のような直列化を示しています。
[FIG(list)[
- [16] [[HTTP]] [CODE(HTTP)@en[[[Link:]]]] [[欄]]
- [17] [[HTML4]] [CODE(HTMLe)@en[[[link]]]] [[要素]]
- [18] [[Atom 1.0]] [CODE(XMLe)@en[[[atom:link]]]] [[要素]]
]FIG]
;; [29] [[HTML4]] (や [[HTML Standard]]) と [[Web Linking]] の定義は類似していますが、異なっており、
[[HTML]] として[[直列化]]したときにその解釈が [[Web Linking]] と同じになる保証はまったくありません。
特に[[リンク型]]の登録簿は共有されていないので、片方で有効な[[リンク型]]が他方では無効かもしれません。
;; [30] [[Atom 1.0]] についても同様のことが言えますが、 [[Web Linking]] は [[Atom 1.0]]
の [[RFC]] を更新する形で発行されており、 [[Web Linking]] により [[Atom 1.0]] の規定は一部上書きされていると思われます。
[24] 他に次のような[[直列化]]方式があります。
[FIG(list short)[
- [25] [[CoRE Link Format]]
- [28] [[HAL]]
-- 明記されていないが [[Normative Reference]] であり、実質的に利用している
- [33] [[Collection+JSON]]
-- [[Collection.Doc+JSON]]
- [[WebFinger]]
- [CODE(MIME)@en[[[application/link-format]]]]
- [[XRD]]
- [[XML2RFC]]
- [[RDAP]] [[JSON]] ([[RFC 7483]])
- [[XML Hypermedia]]
- [[restbus]]
- [[HTTP Link Hints]]
- [[ALPS]]
]FIG]
[45] [[Web Linking]] および関連仕様は次の仕様を [[Web Linking]]
の[[応用]]であるかのように扱うことがありますが、
当該仕様側にはそのような規定がありません。
[FIG(short list)[
- [[HTML]]
- [[OpenSearch]]
- [[Maze+XML]]
]FIG]
;; [57] [[Web Linking]] の立場から [[HTML]] の [CODE(HTMLe)@en[[[a]]]]
[[要素]]や [CODE(HTMLe)@en[[[area]]]] [[要素]]がどう扱われているのかは謎です。
これらは [CODE(HTMLe)@en[[[link]]]] [[要素]]と似たところもあれば、
異なるところもあります。最も大きな違いは、
[CODE(HTMLe)@en[[[link]]]] [[要素]]は[[文書]]全体について記述するのに対し、
[CODE(HTMLe)@en[[[a]]]] [[要素]]や [CODE(HTMLe)@en[[[area]]]]
[[要素]]には「文脈」があることでしょうが、それを [[Web Linking]]
のモデルでどう扱う (あるいは扱わない) のかは定かではありません。
;; [58] 理論上は [[XLink]] も [[Web Linking]] の一直列化法だと主張できそうなものですが、
そのような主張はまだ確認できていません。
[47] [[GitHub]] の [[Web API]] は [[JSONP]] の [[JSON]] 部分に
[[HTTP]] [CODE(HTTP)@en[[[Link:]]]] [[ヘッダー]]に相当する情報を含めています [SRC[>>46]]。
[REFS[
- [46] [CITE@en[GitHub API v3]] ([TIME[2015-02-19 00:56:09 +09:00]] 版) <https://developer.github.com/v3/#json-p-callbacks>
]REFS]
[21] 定義上[[対象IRI]]や[[文脈IRI]]は [[IRI]] とされていますが、実際には[[プロトコル]]等の制限で
[[URI]] となることもあります。 [SRC[>>2 3.]]
* 処理モデル
[34] [[Web Linking]] は、[[リンク]]の[[データモデル]]を定義し、
いくつかの[[ハイパーテキスト]]形式への[[直列化]]の方法を説明していますが、
逆にそれを[[構文解析]]し、何らかの処理を加える方法は定義していません。
[35] ですから、ある[[ハイパーテキスト]]形式で記述された[[リンク]]を [[Web Linking]]
にのっとり処理する方法は、明確ではありません。特に [[HTML]] や [[Atom]]
は、 [[Web Linking]] ではなく、それぞれの仕様で定義された[[リンク]]の意味と処理が存在しますから、
これを [[Web Linking]] の仕様に従って処理しようと試みても、 [[HTML]] や [[Atom]]
の仕様上の定義とは矛盾してしまいます。
[36] 実際上は、 [[Web Linking]] に基づき定義されたそれぞれの[[リンク関係型]]において、
その処理が定義されていることがあります。 (それぞれの項を参照してください。)
ただし、すべての[[リンク関係型]]の処理がすべての形式・場面で定義されているわけではありません。
例えば[[リンク関係型]] [CODE(HTML)@en[[[stylesheet]]]] が [[HAL]]
で用いられていたとして、それがどう解釈されるのかはまったく不明です。
;; [55] [[リンク型]]の項も参照。
* 歴史
[3] [[Web]] 上の[[資源]]の関係や、その関係の[RUBYB[型]@en[type]]を表現する方法
[WEAK[(すなわち[[リンク]])]] は [[HTML]] や [[Atom]] で定義されていますが、
これらは概念的に類似しているものの、別個に規定されています。[[資源]]が複数の[[表現]]を持つ場合など、
具体的な表現方法の如何に関わらず、書式に依存しない[[型付きリンク]]の枠組を規定することは有用であると考えられたことから、
[[IETF]] は [[RFC 5988]] でこれを [[Web Linking]] として標準化しました。 [SRC[>>2 1.]]
[4] 既に [[Atom]] は [CODE(XMLe)@en[[[atom:link]]]] [[要素]]の [CODE(XMLa)@en[[[rel]]]]
[[属性]]のために[[リンク型]]の [[IANA]] 登録簿と語彙を規定していましたが、 [[RFC 5988]]
はこれを改訂して書式に依存しない[[リンク型]]の登録簿としました。更に、 [[HTML4]]
で規定されていた[[リンク型]]を登録簿に追加しています。
[5] [[RFC 5988]] の支持者は [[HTML]] の[[リンク型]]の定義を [[RFC 5988]]
に変更するべく [[HTML WG]] で工作活動を行いましたが、結局十分な支持を集められませんでした。
;; [6] とはいえ一連の議論で元々 [[WHATWG Wiki]] にあった [[HTML]] の登録簿は廃棄させられ、
[[microformats wiki]] に新しく登録簿が作られることになりました。
[26] [[RFC 5988]] に基づき[[リンク型]]を定義する [[RFC]] は、このような流れの中で勝手に [[HTML]]
の [CODE(HTMLa)@en[[[rel]]]] [[属性]]で当該[[リンク型]]を使った例を示していたりします。
;; [27] しかしながら [[Web Linking]] および関連 [[RFC]] は [[HTML]] で使うために十分な規定を含んでいません。
[[大文字]]と[[小文字]]の違いなど [[Web Linking]] と [[HTML]] の定義の違いについて明確な規定がありませんし、
[[ハイパーリンク]]と[[外部資源へのリンク]]の違いなど [[HTML]] での[[適合性]]や[[処理モデル]]との関係も不明確です。
* 実装
[52] 先述の通り、「[[Web Linking]]」全体の一般化された実装はほとんど不可能か、
意味をなしません。「[[Web Linking]]」の実装を名乗るものの多くは、実際は単なる
[[HTTP]] [CODE(HTTP)@en[[[Link:]]]] [[ヘッダー]]の実装のようです。
* 関連
[19] 抽象的な「[[リンク]]」の形式を規定し、それに則った具体的な[[リンク]]を各種文書形式に規定させる、
という発想は [[HyTime]] や初期の [[XLink]] 案、あるいは [[HLink]] と共通していますが、 [[Web Linking]]
はより抽象的かつ単純です。[[リンク]]そのものの標準化を試みた [[HyTime]] などと異なり、
[[Web Linking]] における[[リンク]]の定義はむしろ[[リンク型]]の登録簿の標準化の試みのために最低限の体裁を整えたに過ぎないと評価することもできるでしょう。
[20] [[Web Linking]] はその一般的な名前に反して [[Web]] における[[リンク]]のごく一部の限られた種類しかカバーしていません。
例えば [[HTML]] の [CODE(HTMLe)@en[[[a]]]] [[要素]]のように [[IRI]]
で表現できるとは限らない[[アンカー]]を扱う[[リンク]]は表現できません。
[31] [CITE@en-US[Five JSON REST API Link Formats Compared | Sam Placette]]
( ([TIME[2014-07-01 13:09:40 +09:00]] 版))
<http://samplacette.com/five-json-rest-api-link-formats-compared/>
[32] [CITE[mnot’s blog: Linking in JSON]]
( ([TIME[2014-05-08 02:20:00 +09:00]] 版))
<https://www.mnot.net/blog/2011/11/25/linking_in_json>
[53] [CITE@en[Web Linking]]
([TIME[2015-11-16 15:10:32 +09:00]] 版)
<https://mnot.github.io/I-D/rfc5988bis/>