Re: Updated URI Template proposal

FYI... I've updated my experimental java implementation [1].  The only
operation that is currently not supported is sub.  I'll update the impl
with support for that operation once Joe decides what to do with that
operation.

Example use:

    Template template = new Template(
      "http://example.org/{foo}{-opt|/|bar}{bar}");
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("foo", "abc");
    map.put("bar", "xyz");
    System.out.println(template.expand(map));

Javadocs provided.

- James

[1] http://www.snellspace.com/public/uritemplates.zip

Joe Gregorio wrote:
> Based on everyone's feedback I've updated my proposal
> and updated the URI Template explainer service to reflect that proposal.
> Expansions are now of the form:
> 
>   {var=default}
> 
> or
> 
>   {-op|arg|vars}
> 
> where <op> is now a word, one of 'prefix', 'append',
> 'join', 'listjoin', 'opt', 'neg', or 'sub'. This addresses
> the concerns with readability, extensibility, embedding in XML,
> and also makes parsing easier by delimiting each part with '|'.
> In addition I've added in the 'sub' operator
> which operates on a sub-string.
> 
> Here is an example using sub:
> 
> URI Template
>     http://example.com/user/{-sub|0-1|username}/{-sub|1|username}
> Variables
>     username := 'jcgregorio'
> URI
>     http://example.com/user/j/cgregorio
> 
> The examples on this page have been updated
> to reflect the new syntax:
> 
>   http://bitworking.org/projects/URI-Templates/
> 
> Other restrictions that are found in the new BNF include
> restricting var names to
> 
>   [a-zA-Z0-9][a-zA-Z0-9\_\.\-]*
> 
> which makes disambiguating between the IdentityOperatorTemplate
> and OperatorTemplate easier now that operators are not punctuation.
> Here is the updated BNF:
> 
>   token arg        '[^\|]*';
>   token varname    '[a-zA-Z0-9][a-zA-Z0-9\_\.\-]*' ;
>   token vardefault '[\w\-\.\~\%]+' ;
>   token num        '[0-9]+';
> 
>   START    -> Template;
>   Template ->
>        IdentityOperatorTemplate
>      | OperatorTemplate
>      ;
>   IdentityOperatorTemplate-> Var
>   OperatorTemplate         ->
>        '-append\|'   arg '\|' Var
>      | '-prefix\|'   arg '\|' Var
>      | '-join\|'     arg '\|' Vars
>      | '-listjoin\|' arg '\|' VarNoDefault
>      | '-opt\|'      arg '\|' Vars
>      | '-neg\|'      arg '\|' Vars
>      | '-sub\|'
>           num
>           ( '-' num )?
>           '\|' Var
>      ;
> 
>   Vars                     -> Var
>                                  (
>                                     ',' Var
>                                  ) * ;
>   Var                      -> varname
>                                  (
>                                    '=' vardefault
>                                  ) ? ;
>   VarNoDefault             -> varname;
> 
> 
> Here are the rest of the examples previously given
> rewritten in the new syntax:
> 
> URI Template
>     {-join|&|q,num}
> Variables:
>     q := fred
>     num := 10
> URI
>     q=fred&num=10
> 
> URI Template
>     /foo{-prefix|/notebooks/|notebookID}
> Variables
>     notebookID := stuff
> URI
>    /foo/notebooks/stuff
> 
> URI Template
>   foo{-opt|/-/|categories}
> Variables
>    opt := fred
> URI
>    foo/-/
> 
> URI Template
>    /-/{-listjoin|/|categories}
> Variables
>    categories := ['A|-B', 'C']
> URI
>   /-/A%7C-B/C
> 
> The python implementation and the associated explainer service have
> been updated:
> 
>    http://code.google.com/p/uri-templates/
> 
> There are two issues that are outstanding:
> 
> 1. Seven operations is a bit much. Prefix and append are both
>     convenience operators that can be done using 'opt'. Is it worth
>     dropping them to reduce the count to five?
> 2. The 'sub' operator could either be defined to operate on
>     the octets of the variables value, or on the unicode character points
>     of the equivalent utf-8 decoded string. Both have their pros and cons.
> 
>    Thanks,
>    -joe
> 

Received on Monday, 26 November 2007 06:01:48 UTC