/
966.txt
215 lines (155 loc) · 9.97 KB
/
966.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
[3] [[URL]] を生成する元となる構文を一般に[DFN[URL[RUBYB[雛形]@en[template]]]]といいます。
文脈などによっていくつかの構文が存在します。
* [CODE(URI)[%%]]
[25] [[HTML]] の[[フォームの提出]]では、 [CODE(URI)@en[[[data:]]]]
[[URL]] を生成する際に [CODE(URI)[[[%%]]]] の置換が行われます [SRC[>>24]]。
[29] なおこの形式の値は通常の [[URL]] と同じように [[URLの解決]]が適用されます。
[REFS[
- [24] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-01-16 08:47:54 +09:00]] 版) <https://html.spec.whatwg.org/#submit-data-post>
-- [4] 旧版:
[CITE[Web Forms 2.0]] <http://www.whatwg.org/specs/web-forms/current-work/#for-data>
]REFS]
* [CODE(URI)[%s]]
[26] [CODE(DOMm)@en[[[registerProtocolHandler]]]] や [CODE(DOMm)@en[[[registerContentHandler]]]]
では、 [[URL]] を生成する際に [CODE(URI)[[[%s]]]] の置換が行われます [SRC[>>5]]。
[28] この [CODE(URI)[%s]] が含まれ得る[[絶対URL]]のことを[DFN[[[proto-URL]]]]といいます
[SRC[>>27]]。
[30] なおこの形式の値は通常の [[URL]] と同じように [[URLの解決]]が適用されます。
[REFS[
- [5]
[CITE[Web Applications 1.0]] <http://www.whatwg.org/specs/web-apps/current-work/#custom-handlers>
-- [27] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-01-16 08:47:54 +09:00]] 版) <https://html.spec.whatwg.org/#proto-url>
]REFS]
* OpenSearch URL template
[23] [[OpenSearch]] は、[DFN[OpenSearch URL template]] を規定しています。
[1]
[CITE[Specifications/OpenSearch/1.1/Draft 3 - OpenSearch]] <http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_URL_template_syntax>
([[名無しさん]])
[2]
[CITE[A9.com > OpenSearch > OpenSearch Query Syntax 1.0]] <http://opensearch.a9.com/spec/opensearchquerysyntax/1.0/>
* URI Template
[3] [DFN[[[RFC 6570]]]] は、 [DFN[[[URI Template]]]] を規定しています。
** 仕様書
[REFS[
- [34] [CITE@en[RFC 6570 - URI Template]] ([TIME[2014-10-27 23:08:55 +09:00]] 版) <http://tools.ietf.org/html/rfc6570>
-- [17] [CITE@en[RFC 6570 - URI Template]] ([TIME[2014-10-27 23:08:55 +09:00]] 版) <http://tools.ietf.org/html/rfc6570#section-1.1>
-- [40] [CITE@en[RFC 6570 - URI Template]] ([TIME[2014-10-27 23:08:55 +09:00]] 版) <http://tools.ietf.org/html/rfc6570#section-1.6>
-- [45] [CITE@en[RFC 6570 - URI Template]] ([TIME[2014-10-27 23:08:55 +09:00]] 版) <http://tools.ietf.org/html/rfc6570#section-2>
-- [47] [CITE@en[RFC 6570 - URI Template]] ([TIME[2014-10-27 23:08:55 +09:00]] 版) <http://tools.ietf.org/html/rfc6570#section-3>
-- [68] [CITE@en[RFC 6570 - URI Template]] ([TIME[2014-10-27 23:08:55 +09:00]] 版) <http://tools.ietf.org/html/rfc6570#appendix-A>
- [35] [CITE[RFC Errata Report]] ([TIME[2015-01-17 15:19:44 +09:00]] 版) <http://www.rfc-editor.org/errata_search.php?rfc=6570>
]REFS]
** 言語
[36] 次の概念が存在します。
[FIG(short list)[
- [[URI雛形]]
- [[雛形リテラル]]
- [[雛形式]]
- [[式型]]
- [[演算子]]
- [[変数]]
- [[値修飾子]]
- [[展開]]
- [[雛形処理器]]
- [[水準 (URI雛形)]]
]FIG]
[38] 入力となる[[雛形]]は、 [[絶対URL]]相当のものであることもあれば、
[[相対URL]]相当のものであることもあります。[[解決]]は、
[[展開]]より後に行います [SRC[>>17]]。
;; [[展開]]の前に[[解決]]を適用してしまうと、結果が変わってしまうことがあります。
[44] [[URI Template]] は、0個以上の[[リテラル]]や[[式]]の列です [SRC[>>45]]。
[FIG(railroad)[
= *
== |
=== [[雛形リテラル]]
=== [[雛形式]]
]FIG]
[41] [[URI Template]] は、 [[Unicode符号位置]]の列です [SRC[>>40]]。
;; [42] [[RFC 3986]] [[URI]] とは違って、 [[ASCII文字]]に限定はされていません。
** 展開
[48] [[URI雛形]]から [[RFC 3986]] [[URI参照]]を得る[[演算]]を[DFN[[RUBYB[[[展開]]]@en[expansion]]]]といいます。
また[[演算式]]を処理して得られる[[文字列]]のことも[DFN[[RUBYB[[[展開]]]@en[expansion]]]]
[SRC[>>17]] と呼ばれています。
[49] [[URI雛形]]の[[展開]]は、次のように行います。
[FIG(steps)[
= [50] 入力として[[雛形]]と、[[変数]]の値を用意します [SRC[>>47]]。
= [51] 出力として結果を空文字列、誤りを null とします。
= [52] [[雛形]]を最初から順に[[走査]]してゆきます [SRC[>>47]]。
== [53] [[雛形リテラル]]なら、[[展開]]し、結果の末尾に連結します [SRC[>>47]]。
== [54] [CODE[[[{]]]] ... [CODE[[[}]]]] [SRC[>>68]] なら、
=== [55] [[雛形式]]として[[展開]]を試みます [SRC[>>47]]。
=== [56] 成功したら、結果の末尾に[[展開]]結果を連結します [SRC[>>47]]。
=== [57] 失敗したら、
==== [58] 誤りの位置と種類を設定する[['''べきです''']] [SRC[>>47]]。
==== [59] [[展開]]しないまま結果の末尾に連結する[['''べきです''']] [SRC[>>47]]。
== [60] [[文法]]に一致しない文字列 (対応する [CODE[[[}]]]] のない [CODE[[[{]]]] や、
[[雛形リテラル]]以外の[[文字]] [SRC[>>68]]) なら、
=== [61] 誤りの位置と種別を設定する[['''べきです''']]。 [SRC[>>47]]
=== [62] この部分以降の[[雛形]]残りすべてをそのまま結果の末尾に連結し、
>>64 に進む[['''べきです''']] [SRC[>>47]]。
== [63] [[雛形]]の最後に到達したら、 >>64 に進みます。そうでなければ、 >>52 に戻ります。
= [64] 出力として結果と誤りを返します。
]FIG]
;; [65] [[雛形リテラル]]、[[雛形式]]の展開の項も参照。
[43] [[利用者]]によって与えられた値は、 [[NFC]] に[[正規化]]する[['''べきです''']]
[SRC[>>40]]。
;; [46] それ以外の場合について特に制約はありません。従って出力が [[NFC]]
である保証もありません。
[37] 出力は、 [[RFC 3986]] [[URI参照]]です [SRC[>>34]]。
[66] [[誤り]]がある場合、得られた文字列は妥当な [[URI参照]]ではないかもしれません。
これは診断用のものです。 [SRC[>>47]]
[67] [[誤り]]が無い場合、[[RFC 3986]] [[URI参照]]で使うことができない[[文字]]が含まれないことは保証されます。
構文的・意味的に正しいことは保証されません。
** 応用
[6]
[[WADL]] [CODE(XMLa)@en[[[pattern]]]] [[属性]]: >>3 系の構文
[8]
[[AtomPP]] は以前 >>3 系の構文で [[URI雛形]] (or [[IRI雛形]]) を使っていましたが、既に削除されています。
;; [CITE[ietf-atompub-protocol]] <http://ietfreport.isoc.org/idref/draft-ietf-atompub-protocol/>
[REFS[
- [32] [CITE[Restlet | Technical Resources | Framework]] ([TIME[2015-01-17 15:14:29 +09:00]] 版) <http://restlet.com/technical-resources/restlet-framework/tutorials#part11>
-- [11]
[CITE[Restlet - Tutorial]] ([TIME[2007-01-09 21:53:39 +09:00]] 版) <http://www.restlet.org/tutorial#part11>
-- [33] >>11 は [CODE(HTTP)[[[404]]]] [TIME[2015-01-17T06:15:08.00Z]]
]REFS]
[21] [CITE@en[draft-hammer-hostmeta-13 - Web Host Metadata]]
( ([TIME[2010-09-16 05:16:02 +09:00]] 版))
<http://tools.ietf.org/html/draft-hammer-hostmeta>
** 歴史
[39] [[URI Template]] は [[WSDL]]、[[WADL]]、[[OpenSearch]] などの既存の雛形構文を統合し拡張して[[インターネット]][[応用]]での共通の構文とする [SRC[>>34]] ことを謳っています。
[7]
[CITE[gregorio-uritemplate]] <http://ietfreport.isoc.org/idref/draft-gregorio-uritemplate/>
[16]
[CITE[mnot’s Web log: URI Templates Redux]] ([TIME[2007-07-28 13:11:02 +09:00]] 版) <http://www.mnot.net/blog/2007/07/28/more_uri_templates>
([[名無しさん]] [WEAK[2007-07-28 13:19:06 +00:00]])
[18]
[CITE@en-US[snellspace.com » Blog Archive » URI Template Update]] ([TIME[2007-08-15 13:20:27 +09:00]] 版) <http://www.snellspace.com/wp/?p=717>
** 実装
[9]
[CITE[Joe Gregorio | BitWorking | Projects | URI-Templates]] <http://bitworking.org/projects/URI-Templates/>
[14]
[CITE[Brian Cassidy / URI-Template - search.cpan.org]] ([CODE[2007-02-18 15:08:51 +09:00]] 版) <http://search.cpan.org/dist/URI-Template/>
([[名無しさん]] [WEAK[2007-02-18 06:10:45 +00:00]])
[19] [CITE[URI::Template 0.14_01 は draft-03 相当 - Yet Another Hackadelic]] ([TIME[2009-02-01 19:35:28 +09:00]] 版) <http://d.hatena.ne.jp/ZIGOROu/20081211/1229008879>
[20] [CITE[URI Templates の各言語実装 - Mi manca qualche giovedi`?]] ([TIME[2009-02-01 19:35:13 +09:00]] 版) <http://d.hatena.ne.jp/n_shuyo/20080614/uritemplates>
[22] [CITE[uri-templates - URI Template Library - Google Project Hosting]]
( ([TIME[2011-06-11 15:17:56 +09:00]] 版))
<http://code.google.com/p/uri-templates/>
** メモ
[69] [[水準1]]だけにとどめておけばよかったものを、欲を出して拡張したせいで必要以上に複雑なものになってしまった印象があります。
* その他
[REFS[
- [10]
[CITE[Scholarly Link Specification Framework (S-Link-S)]] <http://www.openly.com/SLinkS/SLinkS-20060711.html>
]REFS]
[31] >>10 は [[XML]] によって[[雛形]]を記述する言語です。
[12]
[CITE@en[Web Service Definition Language (WSDL)]] ([CODE[2001-03-15 07:14:12 +09:00]] 版) <http://www.w3.org/TR/2001/NOTE-wsdl-20010315#_http:urlReplacement>
[15]
[CITE@en[Web Services Description Language (WSDL) Version 2.0 Part 2: Adjuncts]] ([CODE[2007-06-23 05:33:39 +09:00]] 版) <http://www.w3.org/TR/2007/REC-wsdl20-adjuncts-20070626/#_http_operation_location_cited_ser>
[13]
[CITE@ja[InterWikiテクニカル - InterWikiNameの記述方法など]] ([CODE[2007-02-04 18:22:17 +09:00]] 版) <http://www.hyuki.com/yukiwiki/wiki.cgi?InterWiki%a5%c6%a5%af%a5%cb%a5%ab%a5%eb>
[70] [[wlwmanifest]] も水準1のようなものを使っているようです。
[71] [CITE@en[Schema.org Actions - schema.org]]
( ([TIME[2015-02-12 17:09:35 +09:00]] 版))
<http://schema.org/docs/actions.html>