14 comments

[ 5.8 ms ] story [ 37.3 ms ] thread
I quite like the semi-colons. I wonder how we ended up with the slightly unwieldy ?foo=bar&some=thing
Semicolon is also nice on the eyes compared to '&' we're used to today.

Why in the world this didn't gain traction?

Browser and server and language defaults. Back in the CGI-BIN days there were loads of apps using "exotic" options in the URL. IMO when ASP3 and PHP3 were popular (I was there Gandalf!) the world started to normalize around '&'
The generic URI syntax actually specifies that any path segment within a URI can be divided up into parts by semicolons (or commas), and suggests using key=value as parameters within that segment.

http://tools.ietf.org/html/rfc3986#section-3.3

   For
   example, the semicolon (";") and equals ("=") reserved characters are
   often used to delimit parameters and parameter values applicable to
   that segment.  The comma (",") reserved character is often used for
   similar purposes.  For example, one URI producer might use a segment
   such as "name;v=1.1" to indicate a reference to version 1.1 of
   "name", whereas another might use a segment such as "name,1.1" to
   indicate the same
There’s no thought given as far as I can see to the relative URL concepts this matrix proposal covers, but the idea of adding key=value data in this format is supported by the RFC, and indeed in a way that supports further adding sub resources below the current one.

Which, by the way, this matrix relative URL proposal seems to ignore - how is ./subpage resolved relative to /map;x=250;y=582 ?

Many comments so far seem to imply (perhaps not intentionally) that this syntax was intended only on the "right side" of the URI, but you can think of it more as adding qualifier-like information to (potentially) each path segment. So in /com/foo/bar you could further qualify foo (perhaps as /com/foo;color=yellow/bar). This can be combined with a (definitionally trailing) query string as well. Someone noted that Spring implements some support for this; the Eclipse Foundation's Jersey (Java REST toolkit) does as well if I remember right.
That's how I use matrix params in one of my Angular projects - these are very handy to put segment filter params into instead of query params. When you have parallel routes (page/dialog) and filtering everywhere, URLs stay much easier to reason about.
Alan Kay kind of said something along those lines, in that he envisioned the world wide web to be more integrative.

If we include this with Matrix URIs, we could have a scheme format that could work with remote data/objects in a convenient and logical way. RESTful APIs do not seem to be quite the same though. Like some universal API ... not sure how it would look.

If my query would be "weather?" then any API should understand this to mean I'd like to return the local weather. But as an API. Naturally we have AI now so any such queries become trivial at all times, but this is still not quite what was meant. We kind of limited things here because "all external input may be malicious". This then meant no further development in this area, because "too dangerous". Every time I try to use JavaScript to read a local file, I am reminded of that as limitation. They did not think that there are valid, non-malicious use cases, so I am using ruby and python rather than JavaScript (I could use node, but it kind of feels ... so dirty when using it).

This is completely redundant w.r.t. URL parameters: ?foo=bar&etc=whatever ...

There is no need to have two competing keyword-value-list (KVL) formats in the same context.

Wasn't the matrix proposal earlier (or in parallel) to the query string one? Or did they have different intended meanings from the start?
Whenever the article mentions 'pause', it means 'parse', right?!
Wondered about that as well. There are a few more word errors like this one, so I guess the text was captured using early dictation/speech recognition software?
The cool thing is, there is so little "ossification surface" in URLs that this proposal could still be implemented today. The only thing not natively supported by browsers is the relative URL syntax, but even that could be added by some JavaScript or server-side rewrites if desired.