Re: URI templates and "back references" - a question

Hi Marc,

Marc Hadley wrote:
> On Oct 22, 2007, at 11:45 AM, John Kemp wrote:
>> 
>> I have written some simple C code to process and match URI
>> templates against URIs. I'm using the "va_list" approach to create
>> a C function that takes a URI template (as a string) and a
>> variable-length list of string values to put into the template,
>> creating a URI with all substitutions made.
>> 
>> I can't tell from the specification whether this is a good idea ;)
>> 
> I think there's a place for positional substitutions, the current
> JAX-RS UriBuilder has support for both positional and named variables
> in the build methods:
> 
> https://jsr311.dev.java.net/nonav/javadoc/javax/ws/rs/core/UriBuilder.html
> 
OK.

> 
>> But, for this usage, I don't really need named variables. I could 
>> certainly choose to use distinct variable names anyway, and
>> essentially discard them during the substitution, but my usage
>> seems a little similar to the idea of backreferences in regular
>> expressions, and I was wondering whether it makes any sense to
>> standardize a variable name for when the name is not important, or
>> for a specific ordering of values?
>> 
> Even if we allowed anonymous variables I'm not sure the specification
>  would be the right place to define default names. Seems to me like
> that is something that a URI template library could do itself.

Yes, that's certainly possible.

> What's your use case for a default name ?

Well, I have more or less the same usage as your Java method:

> public abstract java.net.URI build(java.lang.String... values) throws
> java.lang.IllegalArgumentException, UriBuilderException

Except, instead of using the variable name even in positional
substitutions, my usage is even simpler. In other words, in your example:

> All instances of the same template parameter will be replaced by the
> same value that corresponds to the position of the first instance of
> the template parameter. e.g. the template "{a}/{b}/{a}" with values
> {"x", "y", "z"} will result in the the URI "x/y/x", not  "x/y/z".

My code would result in your latter case - x/y/z, rather than the
former, as I completely ignore the variable names themselves. As I said,
I'm not convinced that what I do is actually a good idea yet, but
certainly, there is no need for variable names to be supplied in this
usage. The specification, as is, supports that, and as you mention I can
choose a convention for my own code processing my own URI templates.

I did wonder though whether it would make sense to choose a standard
name value to indicate that a variable is there, but to denote that the
name itself is not relevant. Using {} wouldn't meet the spec (today).

- John

> 
> Cheers, Marc.
> 
> --- Marc Hadley <marc.hadley at sun.com> CTO Office, Sun
> Microsystems.
> 
> 

Received on Tuesday, 23 October 2007 21:21:31 UTC