- From: Stefan Eissing <stefan.eissing@greenbytes.de>
- Date: Mon, 15 Oct 2007 17:42:43 +0200
- To: "Joe Gregorio" <joe@bitworking.org>
- Cc: "Mark Nottingham" <mnot@mnot.net>, "Roy T. Fielding" <fielding@gbiv.com>, uri@w3.org
Am 15.10.2007 um 15:03 schrieb Joe Gregorio:
>> We can come up with a library of rules for different scenarios (good
>> start in the other thread, btw), but we'll never be able to cover all
>> of the specialist cases. As such, there needs to be a way for a
>> template variable to specify additional processing, and for template
>> processing engines to be extended.
Fully agree. I think we should define syntax and extensibiliy first
and talk afterwards about which operations should be in the basic set.
> Additional processing? No. But we can provide a mechanism by which
> new operators can be added. There's plenty of room for future
> extensions,
> since every char outside unreserved and !?|'&<> can be used as a
> new operator.
>
> An alternative to the current proposal is to replace the
> single character operators with names, that is:
>
> {<arg|var} -> {?prefix?arg|var}
> {>arg|var} -> {?append?arg|var}
> {,arg|var} -> {?join?arg|var}
> {&arg|var} -> {?joinlist?arg|var}
>
> etc.
If we want templates on the side of a bus, we should do something
readable and pleasing to the eye. Names are easier to read and
remember that single char operators.
I would like to write templates such as:
http://example.org/{x} --- substitute x
http://example.org/{dog(x)} --- substitute function "dog"
applied to x
http://example.org/{cat(x,y)} --- substitute function "cat"
applied to x and y
http://example.org/{cat(',',y)} --- substitute function "cat"
applied to literal '#' and y
http://example.org/{cat(x,dog(y))} --- substitute function "cat"
applied to x and "dog" of y
And would like to have a URI for each function. So, if I GET http://
example.org/funcs/dog?{x} I will have the same result as any template
parser implementing that function does.
And use something like namespace uris for extension functions
n -> http://example.org/extensions/ --- (where is that done?)
http://example.org/{n:dog(x)} --- substitute function "n:dog"
applied to x
which should behave like GET on
http://example.org/extensions/dog?{x}
As for encoding issues, variable substitutions would always be
"maximum encoded" and define functions that reverse such encoding.
Example:
x = 'a+%2fb/c'
{x} -> a%2b%252fb%2fc
{path(x)} -> a%2b%252fb/c
{raw(x)} -> a+%2fb/c
//Stefan
--
Stefan Eissing
<green/>bytes GmbH
Hafenweg 16
D-48155 Münster
Germany
Amtsgericht Münster: HRB5782
Received on Monday, 15 October 2007 15:42:56 UTC