[1] [DFN[[CODE(URI)@en[[[coffee:]]]]]] その他は、 [[HTCPCP]] に対応する
[[URL scheme]] です。

* 仕様書

[REFS[
- [2] [CITE@en[RFC 2324 - Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)]] ([TIME[2014-10-06 15:21:16 +09:00]] 版) <http://tools.ietf.org/html/rfc2324#section-3>
- [4] [CITE[RFC Errata Report]] ([TIME[2014-11-14 23:58:24 +09:00]] 版) <http://www.rfc-editor.org/errata_search.php?rfc=2324>
- [20] [CITE@en[RFC 7168 - The Hyper Text Coffee Pot Control Protocol for Tea Efflux Appliances (HTCPCP-TEA)]] ([TIME[2014-10-12 17:41:43 +09:00]] 版) <http://tools.ietf.org/html/rfc7168#section-2.1>
- [28] [CITE@en[RFC 7168 - The Hyper Text Coffee Pot Control Protocol for Tea Efflux Appliances (HTCPCP-TEA)]] ([TIME[2014-10-12 17:41:43 +09:00]] 版) <http://tools.ietf.org/html/rfc7168#section-2.3.1>
]REFS]

* 意味

[24] [CODE(URI)@en[[[coffee:]]]] その他の [[URL scheme]] は [[HTCPCP]] 
を表します。

[25] [[HTCPCP-TEA]] の [[URL scheme]] は明記されていませんが、
[[HTCPCP]] から特に変更はなく同じ [[URL scheme]] 群を共有しているものと思われます。

* 構文

[10] [[HTCPCP]] の [[URL]] は [[URL scheme]]、[[ホスト]]、ポット指示子、
添加物リストで構成されます。 [[URL scheme]] の後には [CODE(URI)[[[:]]]]
を置きます。[[ホスト]]、ポット指示子、添加物リストは省略可能です。
省略しない場合はそれぞれの前に [CODE(URI)[[[//]]]]、[CODE(URI)[[[/]]]]、
[CODE(URI)[[[?]]]] を置きます。 [SRC[>>2]]

[FIG(railroad)[
= [[URL scheme]]
= [CODE(URI)[[[:]]]]
= ?
== [CODE(URI)[[[//]]]]
== [[ホスト]]
= ?
== [CODE(URI)[[[/]]]]
== ポット指示子
= ?
== [CODE(URI)[[[?]]]]
== 添加物リスト
]FIG]

;; [11] [[RFC 2324]] は[[素片識別子]]を構文上明示していませんが、 [[URL scheme]]
に依存する部分のみ示しており、除外する意図は無いと思われます。 (この時代の [[URL]]
の仕様では[[素片識別子]]は [[URI]] の一部とはされていませんでした。)

;; [12] [[authority]] に [[userinfo]] や[[ポート]]は含まれていないようです。

* URL scheme

[3] [[RFC 2324]] は[[国際化]]と称して次の (同じ意味の) [[URL scheme]]
を規定しています [SRC[>>2]]。

[FIG(short list)[
- [CODE(URI)@en[[[koffie:]]]]
- [CODE(URI)@en[[[q%C3%A6hv%C3%A6:]]]]
- [CODE(URI)@en[[[%D9%82%D9%87%D9%88%D8%A9:]]]]
- [CODE(URI)@en[[[akeita:]]]]
- [CODE(URI)@en[[[koffee:]]]]
- [CODE(URI)@en[[[kahva:]]]]
- [CODE(URI)@en[[[kafe:]]]]
- [CODE(URI)@en[[[caf%C3%E8:]]]]
- [CODE(URI)@en[[[%E5%92%96%E5%95%A1:]]]]
- [CODE(URI)@en[[[kava:]]]]
- [CODE(URI)@en[[[k%C3%A1va:]]]]
- [CODE(URI)@en[[[kaffe:]]]]
- [CODE(URI)@en[[[coffee:]]]]
- [CODE(URI)@en[[[kafo:]]]]
- [CODE(URI)@en[[[kohv:]]]]
- [CODE(URI)@en[[[kahvi:]]]]
- [CODE(URI)@en[[[%4Baffee:]]]]
- [CODE(URI)@en[[[%CE%BA%CE%B1%CF%86%CE%AD:]]]]
- [CODE(URI)@en[[[%E0%A4%95%E0%A5%8C%E0%A4%AB%E0%A5%80:]]]]
- [CODE(URI)@en[[[%E3%82%B3%E3%83%BC%E3%83%92%E3%83%BC:]]]]
- [CODE(URI)@en[[[%EC%BB%A4%ED%94%BC:]]]]
- [CODE(URI)@en[[[%D0%BA%D0%BE%D1%84%D0%B5:]]]]
- [CODE(URI)@en[[[%E0%B8%81%E0%B8%B2%E0%B9%81%E0%B8%9F:]]]]
]FIG]

[5] ただし[[RFC正誤表]]では [CODE(URI)@en[[[caf%C3%E8:]]]] は
[CODE(URI)@en[[[caf%C3%E9:]]]] の誤りと報告されています [SRC[>>3]]。

[6] [[RFC 2324]] は[[4月1日]]に発行された [[RFC]] であり、
[[ネタにマジレス]]するのも野暮ですが、
[FIG(list)[
- [7] [[URL scheme]] が[[国際化]]されている例はなく、[[プロトコル要素]]なので本来は[[ロケール]]に関わらず共通のもの1つを使うべきです。[[国際化]]の方法としては間違っています。 (そんなことは承知のうえで敢えてネタとしてやっているのでしょうが。)
- [8] [[URL scheme]] では[[パーセント符号化]]は認められていませんので、
[CODE[%]] を使う [[URL scheme]] はすべて構文上正しい [[URL]] には使えません。
- [9] [[ドイツ語]]では[[大文字]]を使うことが重要として [CODE[K]] を
[[パーセント符号化]]して [CODE[%4B]] としていますが、 (仮に[[パーセント符号化]]を許容するとしても)
[[非予約文字]]は[[パーセント符号化]]してもしなくても等価とされており、
従って [CODE[K]] と等価なので、[[正規化]]により[[小文字]]に変換されるおそれがあります。
[[パーセント符号化]]しても[[小文字]]への[[正規化]]の防止にはなりません。
]FIG]

[13] [[URL scheme]] の違いは、[[珈琲]]の種類の決定に反映させても構いません [SRC[>>2]]。

[18] これらの [[URL scheme]] は [[IANA登録簿]]にはなぜか登録されていません。 [TIME[2014-11-14T15:38:00.400Z]]

* パス

[14] [[パス]]部にはポット指示子を指定できます。これは [CODE[pot-]] のあとに[[整数]]を指定するもので、複数のポットがある場合にそれを識別するために使うことができます [SRC[>>2]]。 [CODE[pot-]] は[[大文字・小文字不区別]]で [SRC[>>2]]、明記されていませんがどちらでも同じ意味と思われます。明記されていませんが[[整数]]は [[ASCII数字]]の1つ以上の列を指すと推測されます。

[21] [[HTCPCP-TEA]] では[[パス]]はポットだけでなく、[[ティーバッグ]]や[[茶葉]]も指定できるように拡張されているようです [SRC[>>20]]。ただしその構文は明記されていません。

[EG[
[22] 次のような[[パス]]が例示されています [SRC[>>20]]。
[FIG(short list)[
- [CODE(URI)@en[/darjeeling]]
- [CODE(URI)@en[/earl-grey]]
- [CODE(URI)@en[/peppermint]]
- [CODE(URI)@en[/pot-0/darjeeling]]
- [CODE(URI)@en[/pot-0/earl-grey]]
- [CODE(URI)@en[/pot-1/peppermint]]
]FIG]

[23] [CODE(URI)[/]] は [[HTCPCP]]、 >>22 は [[HTCPCP-TEA]] のように一つの[[鯖]]で混在させることもできるようです [SRC[>>20]]。
]EG]

** [CODE(URI)[/]]

[26] [CODE(URI)[[[/]]]] への [CODE(MIME)@en[[[message/coffeepot]]]] [[要求]]に対する[[応答]]は
[CODE(HTTP)@en[[[Alternates:]]]] [[ヘッダー]]を含む[['''べきです''']] [SRC[>>20]]。

;; [CODE(MIME)@en[[[message/coffeepot]]]] も参照。

[27] [CODE(URI)[[[/]]]] への [CODE(MIME)@en[[[message/teapot]]]] [[要求]]に対する[[応答]]は
[CODE(HTTP)@en[[[Alternates:]]]] [[ヘッダー]]を含まなければ[['''なりません''']] [SRC[>>20]]。
茶はまだ沸かしません。

[29] [CODE(HTTP)@en[[[Alternates:]]]] [[ヘッダー]]を送信する (茶を沸かしていない)
[[応答]]は[[状態符号]] [CODE(HTTP)[[[300]]]] を使う[['''べきです''']] [SRC[>>28]]。

* query

[15] [[query]] 部分には添加物の[[リスト]]を指定できます [SRC[>>2]]。

[16] [[HTTP]] における[[リスト]]の構文である [CODE[#]] を使って定義されていますが [SRC[>>2]]、
[[URL]] では[[空白]]をそのまま使うことはできませんから、[[空白]]は禁止されると解釈するべきでしょうか。あるいは[[パーセント符号化]]すれば[[空白]]を [CODE(HTTP)[[[,]]]]
の前後に挿入できると解釈するべきでしょうか。

[17] 添加物として何を指定できるのかは明記されてません。 [CODE(HTTP)@en[[[Accept-Additions:]]]]
[[ヘッダー]]で指定できる種別とも推測されますが、はっきりしていません。

* 相対 URL

[19] [[HTCPCP-TEA]] の [CODE(HTTP)@en[[[Alternates:]]]] [[ヘッダー]]で[[相対URL]]
([[絶対パス]]) を使った例が示されています [SRC[>>20]]。