このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

3分間・URIテンプレート

最近、「URIテンプレート(URI Template)」という言葉を聞くことがあるので、次の仕様を読んでみました。

要するに次のようなもんです。


一種のテンプレート言語なので、テンプレートプロセッサにより展開される部分があります。その構文は次のとおり。

 展開部分 ::= '{' 式 '}'

式が、変数束縛の環境のもとで評価されて文字列になります。テンプレートプロセッサは、展開部分内の式言語(expression languate)のインタプリタにもなっています。

その式言語の特徴は:

  1. データは、UNICODE文字列、またはUNICODE文字列のリスト。
  2. 変数にデータが束縛された環境を持つ。
  3. 変数に何も束縛されてないことを表すundefinedがある(undefinedを状態とみなしても特殊な値とみなしてもよい)
  4. 空文字列や空リストはundefinedではない。
  5. 変数参照とオペレータ呼び出しが使える。

次に構文。まずは変数名。

 変数名 ::= (英字 | 数字) (英字 | 数字 | '.' | '_' | '-') *

名前先頭文字に数字を許し、ピリオドとハイフンも名前文字です。

変数参照には、オプショナルにデフォルト値を指定できます。

 変数参照 ::= 変数名 ('=' デフォルト値)?

デフォルト値はそのままURIの一部になるので、特殊文字はパーセントエスケープする必要があります。生で入れてもいい文字は次のとおり。

  • 英字 数字 - . _ ~

変数参照以外にオペレータ呼び出しが使えます。

 オペレータ名 ::= 英字+
 オペレータ呼び出し::= '-' オペレータ名 '|' 引数データ '|' 変数参照並び
 引数データ ::= (URIで許される文字 | パーセントエスケープ)*
 変数参照並び ::= 変数参照 (',' 変数参照)*

URIで許される文字には、次の予約文字も含まれます。

  • : / ? # [ ] @ ! $ & ' ( ) * + , ; =

'|'や'^'はパーセントエスケープする必要があります。

それで、展開部分に含まれる式の構文は次です。

 式 ::= 変数参照 | オペレータ呼び出し

変数束縛の環境のもとで、変数参照やオペレータ呼び出しがどう評価されるかについては、原仕様を参照してください。