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 GMT
This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:46:32 GMT