展開

URI Template (IETF)

[3] URI Template は、 IETFRFC 6570 で規定されているURL雛形構文の一種です。

仕様書

言語

[36] 次の概念が存在します。

[38] 入力となる雛形は、 絶対URL相当のものであることもあれば、 相対URL相当のものであることもあります。解決は、 展開より後に行います >>17

展開の前に解決を適用してしまうと、結果が変わってしまうことがあります。

[44] URI Template は、0個以上のリテラルの列です >>45

  1. *
    1. |
      1. 雛形リテラル
      2. 雛形式

[41] URI Template は、 Unicode符号位置の列です >>40

[42] RFC 3986 URI とは違って、 ASCII文字に限定はされていません。

展開

[48] URI雛形から RFC 3986 URI参照を得る演算展開 (expansion) といいます。 また演算式を処理して得られる文字列のことも展開 (expansion) >>17 と呼ばれています。

[49] URI雛形展開は、次のように行います。

  1. [50] 入力として雛形と、変数の値を用意します >>47
  2. [51] 出力として結果を空文字列、誤りを null とします。
  3. [52] 雛形を最初から順に走査してゆきます >>47
    1. [53] 雛形リテラルなら、展開し、結果の末尾に連結します >>47
    2. [54] { ... } >>68 なら、
      1. [55] 雛形式として展開を試みます >>47
      2. [56] 成功したら、結果の末尾に展開結果を連結します >>47
      3. [57] 失敗したら、
        1. [58] 誤りの位置と種類を設定するべきです >>47
        2. [59] 展開しないまま結果の末尾に連結するべきです >>47
    3. [60] 文法に一致しない文字列 (対応する } のない { や、 雛形リテラル以外の文字 >>68) なら、
      1. [61] 誤りの位置と種別を設定するべきです>>47
      2. [62] この部分以降の雛形残りすべてをそのまま結果の末尾に連結し、 >>64 に進むべきです >>47
    4. [63] 雛形の最後に到達したら、 >>64 に進みます。そうでなければ、 >>52 に戻ります。
  4. [64] 出力として結果と誤りを返します。

[65] 雛形リテラル雛形式の展開の項も参照。

[43] 利用者によって与えられた値は、 NFC正規化するべきです >>40

[46] それ以外の場合について特に制約はありません。従って出力が NFC である保証もありません。

[37] 出力は、 RFC 3986 URI参照です >>34

[66] 誤りがある場合、得られた文字列は妥当な URI参照ではないかもしれません。 これは診断用のものです。 >>47

[67] 誤りが無い場合、RFC 3986 URI参照で使うことができない文字が含まれないことは保証されます。 構文的・意味的に正しいことは保証されません。

応用

[6] WADL pattern 属性: >>3 系の構文

[8] AtomPP は以前 >>3 系の構文で URI雛形 (or IRI雛形) を使っていましたが、既に削除されています。

[21] draft-hammer-hostmeta-13 - Web Host Metadata ( ( 版)) <http://tools.ietf.org/html/draft-hammer-hostmeta>

関連

[1] 同じ目的の他の構文は、 URL雛形を参照。

歴史

[39] URI TemplateWSDLWADLOpenSearch などの既存の雛形構文を統合し拡張してインターネット応用での共通の構文とする >>34 ことを謳っています。 しかし実際には OpenSearch の構文と互換性があるのは水準1だけで、 OpenSearch の省略可能構文に URI Template は対応していません。

[7] gregorio-uritemplate <http://ietfreport.isoc.org/idref/draft-gregorio-uritemplate/>

[16] mnot’s Web log: URI Templates Redux ( 版) <http://www.mnot.net/blog/2007/07/28/more_uri_templates> (名無しさん 2007-07-28 13:19:06 +00:00)

[18] snellspace.com &#187; Blog Archive &#187; URI Template Update ( 版) <http://www.snellspace.com/wp/?p=717>

実装

[9] Joe Gregorio | BitWorking | Projects | URI-Templates <http://bitworking.org/projects/URI-Templates/>

[14] Brian Cassidy / URI-Template - search.cpan.org (2007-02-18 15:08:51 +09:00 版) <http://search.cpan.org/dist/URI-Template/> (名無しさん 2007-02-18 06:10:45 +00:00)

[19] URI::Template 0.14_01 は draft-03 相当 - Yet Another Hackadelic ( 版) <http://d.hatena.ne.jp/ZIGOROu/20081211/1229008879>

[20] URI Templates の各言語実装 - Mi manca qualche giovedi`? ( 版) <http://d.hatena.ne.jp/n_shuyo/20080614/uritemplates>

[22] uri-templates - URI Template Library - Google Project Hosting ( ( 版)) <http://code.google.com/p/uri-templates/>

[70] wlwmanifest水準1のようなものを使っているようです。

[71] Schema.org Actions - schema.org ( ( 版)) <http://schema.org/docs/actions.html>

[73] draft-wilde-template-desc-00 - URI Template Descriptions ( 版) <https://tools.ietf.org/html/draft-wilde-template-desc-00>

メモ

[69] 水準1だけにとどめておけばよかったものを、欲を出して拡張したせいで必要以上に複雑なものになってしまった印象があります。