- From: Andy Seaborne <andy.seaborne@talis.com>
- Date: Tue, 10 Nov 2009 12:45:17 +0000
- To: RDF Data Access Working Group <public-rdf-dawg@w3.org>
I had a quick look at implementing the update protocol and a couple of
points came up regarding ?graph= vs http://host/service/http:// vs
http://host/graphs/mygraph56
I wanted a service endpoint that could handle both server controlled
URIs e.g. http://host/graphs/mygraph56 and also graph names that were
not server local. http://host/graphs/?graph=.. or the non-query
concatenation form.
(Aside: some agreed neutral terminology needed!
server-relative URIs
query string identification
concatenation identification
)
1/ Service endpoint naming.
It's not always clear what service endpoint URI actually is so splitting
request URIs at the service endpoint can be tricky.
This can be because the service endpoint is actually inside the firewall
and the request is passed from the front end. Aligning these names
would be an additional deployment constraint that might be hard to
justify. (Steve has mentioned this before.) Also, in a framework like
servlets, the processing code might not actually know their own service
endpoint name very well, or it may be registered under several different
URLs.
This gets into service endpoint vs dataset/graph store naming.
2/ Extreme URIs.
For the non-query string form, corner case URIs can be difficult or
ambiguous. URI scheme names may appear in URIs as legitimate character
strings so looking for a ":" is not always safe enough.
Some (unusual URIs - but this is a spec) cases: one level of encoding
removed for clarity.
# Two encoded http: in URI
http://service/graphs/http://other/abc/http://yetanother/xyz
is a legal URI but which "http://" is the split?
This quite nasty as it could be passed round so it's not just the
service decoding it to get the meaning out.
# Enmbedded data has a URI in it.
http://service/graphs/http://other/g1%25query=\
CONSTRUCT...{GRAPH<http//yetother/}
%25 is ? encoded.
The "?" in ?query is encoded a second time to neutralise it and means
something very different from if encoded once :-)
I'm still puzzling over the use of ?query=CONSTRUCT and query patterns
with URIs in them.
3/ Server-scoped names with #frag as tricky.
These are extreme examples but ones we need to consider. I'm not keen
on just saying "don't do that" and placing a limitation in a spec unless
there identified reasons not too. Some principle is needed. The
server-controlled cases should be just REST operations, with no
SPARQL-derived restrictions so we have to make sure even extreme URIs do
the right thing (at least, they are not ambiguous).
What experience have people had here?
Andy
Received on Tuesday, 10 November 2009 12:45:42 UTC