- From: Roy T. Fielding <fielding@gbiv.com>
- Date: Thu, 25 Feb 2010 18:37:54 -0800
- To: James Manger <James@Manger.com.au>
- Cc: uri@w3.org
On Nov 3, 2009, at 5:46 AM, James Manger wrote: > [Comments on the current URI Template working draft.] > > > 1. It would be helpful if URI Templates (like URIs) can be written in ASCII so they can be used in similar places to URIs (eg a Link-Template: <template>... HTTP header, similar to the Link: <uri>... HTTP header). > 2. Templates should support (almost) all of unicode for variable names. > > The current draft offers #2, but not #1. I think we can have both. > > The current draft is really an "IRI Template" as 'literals' in a template can use almost any Unicode characters and 'pct-encoded' sequences. Variable names can use almost any Unicode characters -- but NOT 'pct-encoded' sequences. > > Consequently, while an IRI can be converted to an ASCII URI (and still be a valid IRI), a template cannot be converted to an ASCII form. > > I suggest allowing 'pct-encoded' sequences in 'varname'. These would be decoded before using the resultant variable name to lookup the variable value. > The 'vartype' used to indicate when the variable is an associative array would have to be changed from '%' to another special character. > > The definitions become: > varspec = [ vartype ] varname [ modifier ] [ "=" default ] > vartype = "@" / something other than "%" > varname = 1*( varchar / pct-encoded ) > varchar = ALPHA / DIGIT / "." / "_" / ucschar / iprivate > > Then if you need to put a URI Template into an ASCII protocol, you can %-escape any non-ASCII chars in literals and variable names -- it will still be a valid URI Template. > > > P.S. I would avoid using '%' for anything other than %-escapes to minimise potential human confusion -- even if it is technically unambiguous. Yes, I added that to the draft last December (though forgot to Ack it). It currently looks like variable-list = varspec *( "," varspec ) varspec = varname [ modifier ] [ "=" default ] varname = varchar *( varchar / "." ) varchar = ALPHA / DIGIT / "_" / ucschar / iprivate / pct-encoded Thanks, ....Roy
Received on Friday, 26 February 2010 02:38:22 UTC