- From: Kev Burns <kevburnsjr@gmail.com>
- Date: Wed, 2 Jun 2010 02:36:21 -0700
- To: Joe Gregorio <joe@bitworking.org>
- Cc: URI <uri@w3.org>
- Message-ID: <AANLkTimWXD8YIOToo9gaQKv9i4VsAjkYRFoGlc5UBHx-@mail.gmail.com>
In implementing a -04 parser in PHP, I also found the expansion operators to
treat modifiers dissimilarly, resulting in a large number of special cases.
http://lab.kevburnsjr.com/php-uri-template-parser
I did, however, get the library to pass for all examples I could find in the
-04 spec (except those relating to partial modifiers which I have yet to
implement).
http://php-uri-template-parser.hackyhack.net/tests.php
KB - a
- --- -
> 1. [...]
>
> To simplify I would like to see label and semicolon path
> style expansions dropped. I also believe the '+' modifier could
> be dropped without loss of generality.
In the step from -03 to -04 the syntax has become more succinct, but has
also become more magical. Simpler is better IMHO.
KB - b
- --- -
> 6. I've come across yet another case where going in reverse, from a
> template to matching, would be useful [...]
Reversibility was something that originally attracted me to URI-Templates.
If a resource could use the same pattern to match a URI as it uses to
generate them, the world could be a much simpler place.
However, it could be argued that most templates are not designed to be
reversible (you wouldn't try to reverse an HTML template expansion).
The best solution I could come up with is a second format employing an
extended expression syntax (adding support for RegEx) used for matching that
could be easily reduced to a valid uri-template for expansion. A *
reversible-uri-template* if you will.
Keeping this as a separate format would ensure that uri-template parsers
remain simple to implement (important for adoption IMHO).
KB - c
- --- -
Lastly, I wondered about using multiple operators for a single expression,
particularly with respect to the + operator.
Should expressions with multiple operators such as {+;list1,list2} be
allowed in order to add support for Reserved Expansion of expressions with
delimiter operators?
- KevBurnsJr
c: +001 (650) 521-7791
On Tue, Jun 1, 2010 at 9:00 PM, Joe Gregorio <joe@bitworking.org> wrote:
> I've committed an incomplete implementation of the -04 spec
> in Python to svn along with test cases taken from the spec.
>
> http://code.google.com/p/uri-templates/source/detail?r=57
>
> The tests themselves are taken directly from the spec and
> are stored in a JSON file, to make it easier to reuse them.
> (Well, almost taken verbatim from the spec, below I list
> the cases that were either inconsistent or looked wrong
> and how I changed them.) The code does not implement
> 'partial' modifiers.
>
> Here are my notes:
>
> 1. The spec is fiddly, by which I mean that while the rules
> for handling semicolon, query parameter, path and label
> expansions all make sense on their own, they are all
> slightly different from each other. It makes for a lot
> more code than I expected, and is fairly tedious to implement.
> I'm not sure that the amount of complexity is warranted.
>
> To simplify I would like to see label and semicolon path
> style expansions dropped. I also believe the '+' modifier could
> be dropped without loss of generality.
>
> 2. From the spec, this rule isn't consistent:
> ["{?x,y,empty}", "?x=1024&y=768&empty="],
>
> 3. One of these is inconsistent
> ["X{.empty}", "X."],
> ["x{?empty_list}", "x"],
>
> 4. Also inconsistent
> ["{;list}", ";val1,val2,val3"],
> ["x{;name=none}", "x;name=Fred,Wilma,Pebbles"],
>
> 5. I tried working through the empty and default cases
> (section 2.5) but came across so many cases that
> seemed to disagree with previous examples or the wording
> of the spec that I began to suspect the section was incomplete.
> Here is the list of test cases I had collected and believe are wrong,
> before I stopped:
>
> ["x{empty_list=_}y", "xy"],
> ["x{empty_list+=_}y", "xempty_list._y"],
> ["x{empty_keys=_}y", "xy"],
> ["x{empty_keys+=_}y", "xempty_keys._y"],
> ["x{?empty}", "x?empty="],
> ["x{?empty=none}", "x?empty="],
> ["x{?empty_list*=none}", "x?none"],
> ["x{?empty_list+=none}", "x?empty_list.none"],
> ["x{?empty_keys*=none}", "x?none"],
> ["x{?empty_keys+=none}", "x?empty_keys.none"],
>
> I believe many of these cases with defaults are ones that Mike Burrows
> raised earlier.
>
> 6. I've come across yet another case where going in reverse, from a
> template
> to matching, would be useful. How about carving out () at the end of
> an expression as a place where a regex could be stored for applications
> that want to use a template for matching against incoming requests, but
> just state that the allowed regex's and matching algorithms are outside
> the scope of the current spec?
>
> Thanks,
> -joe
>
>
Received on Wednesday, 2 June 2010 12:30:21 UTC