- From: James M Snell <jasnell@gmail.com>
- Date: Mon, 26 Nov 2007 08:56:51 -0800
- To: Joe Gregorio <joe@bitworking.org>
- CC: URI <uri@w3.org>
Looks good overall, some comments: 1. varname is unnecessarily restrictive. There is no harm that I can see in using the following: unreservedsansdash = (alphanum / "." / "_" / "~") varname = unreservedsansdash *(unreserved) For URI Templates, this is *extremely* minor, but for IRI Templates (see below) this will have a significant impact on what characters can be used for varname (replace unreserved with iunreserved) 2. Did you decide against introducing cardinality indicators? e.g., {-list|&|foo+,bar}. 3. For -join, you need to specify what happens if the value is a list. e.g., foo = ['a','b'] would expand to foo=a&foo=b 4. There are interesting things that could be done if we allow prefix and append to use list values. The prefix or postfix would be applied to each item in the list. e.g., when foo = ['a','b'], {-prefix|/|foo} would expand to "/a/b" and {-append|/|foo} would expand to "a/b/". http://example.org{-opt|/-|categories}{-prefix|/|categories} http://example.org/-/a/b/c http://example.org{-opt|/-/|categories}{-append|/|categories} http://example.org/-/a/b/c/ 5. We need to decide whether or not "extension operations" are going to be allowed, and if so, how are they to be handled. Should an template processor signal an error if an unknown operation is used? Should the processor replace the unknown token with an empty string? 6. We should include a section on IRI Templates. I'll volunteer to write it up if you'd like. An IRI template is generally identical to the URI Template with the exception of the characters allowed in varname, arg and the replacements. The following is taken from my expanded ABNF: ivalue = *(iunreserved / pct-encoded) ; replacement value for token iunreservedsansdash = (alphanum / "." / "_" / "~" / ucschar) iarg = *(reserved / iunreserved / pct-encoded) ivarname = iunreservedsansdash *(iunreserved) ivardefault = ivalue ivar = ivarname [ "=" ivardefault ] ivars = ivar [*(sep ivar)] ivarnodefault = ivarname ivarsnodefault = ivarname [*(sep ivarname)] iidentitytoken = ivar ioperatortoken = ( append "|" iarg "|" ivar ) / ( prefix "|" iarg "|" ivar ) / ( join "|" iarg "|" ivars ) / ( listjoin "|" iarg "|" ivarnodefault ) / ( opt "|" iarg "|" ivarnodefault ) / ( neg "|" iarg "|" ivarnodefault ) / ( extop "|" (iarg / range) "|" (ivar / ivars / ivarnodefault / ivarsnodefault) ) itoken = "{" iidentitytoken / ioperatortoken "}" itemplate = *(reserved / ipchar / iprivate / itoken) itemplate-expansion = IRI / IRI-reference - James Joe Gregorio wrote: > I've submitted draft-gregorio-uritemplate-02.txt, but it won't be > officially published until Dec 3rd because of the upcoming > IETF meeting. I've gone ahead and released the HTML and TXT > versions of the draft and will update the pointer to the TXT version > once it is published as an internet-draft. > > As usual, it can be found here: > > http://bitworking.org/projecs/URI-Templates/ > > This version adds the '-cmd' commands we've been talking > about, w/o the '-sub' command. I've also added an examples > section and some example code in an Appendix to demonstrate > how easy the parsing can be. > > I've also written a parser that extracts the example > templates and variable definitions from the final .TXT version > of the specification and runs them through the template-expansion code to > check them against the supplied expansions. Finally, the > URI Template explainer web service has been updated to > conform to this draft. > > Thanks, > -joe >
Received on Monday, 26 November 2007 16:57:17 UTC