- From: Pierre-Antoine Champin <pierre-antoine.champin@liris.cnrs.fr>
- Date: Wed, 5 Feb 2014 09:16:53 +0100
- To: Sandro Hawke <sandro@w3.org>
- Cc: LDP Patch Discussion List <public-ldp-patch@w3.org>, Andrei Sambra <andrei@fcns.eu>, Joe <presbrey@mit.edu>
- Message-ID: <CA+OuRR8ngL-qQGwRnfOknmi-JsL-UcYAXtr50Pe7gQF9iA1jxw@mail.gmail.com>
Hi Sandro, very elegant indeed. The only drawback that I can see is that clients willing to use TurtlePatch will either have to - perform an additional GET with Accept:text/turtlepatch just before they do the PATCH, or - systematically require text/turtlepatch when they GET any resource representation. I'm not sure about the impact of the second option... On Fri, Jan 31, 2014 at 6:15 PM, Sandro Hawke <sandro@w3.org> wrote: > Yesterday, Cody got me thinking about PATCH again and I had an idea > which I think threads the ldp-patch needle nicely. > > Cody's LDP implementation is using TurtlePatch [1], which you'll recall > is a tiny subset of SPARQL 1.1 Update which is easy to parse and execute > in linear time. It has no variables and cannot operate on blank > nodes. So, it's great, as long as you have no blank nodes. To me, in > recent years, that made it basically useless. But now I see how to make > it okay. > > My idea was that the server could provide a Skolemized (genid) view of > the data, suitable for easy patching with TurtlePatch, but not affecting > how everyone else interacts with the data. Specifically, I'm thinking > that if the client does a GET with "Accept: application/turtlepatch" > then it gets a patch from the empty graph to the current graph, with all > the blank nodes Skolemized in some way the server will accept for future > PATCH operations. You can also think about what it gets as > slightly-restricted Turtle with three extra boilerplate lines. > > For example: > > GET http://example.org/alice > Accept: text/turtle > > PREFIX foaf: <http://xmlns.com/foaf/0.1/> > PREFIX : <http://example.org/> > :me foaf:knows [ foaf:name "Bob" ]. > > > GET http://example.org/alice > Accept: text/turtlepatch > > PREFIX foaf: <http://xmlns.com/foaf/0.1/> > PREFIX : <http://example.org/> > PREFIX genid: <http://example.org/.well-known/genid/d7432/> > INSERT DATA { > :me foaf:knows genid:517. > genid:517 foaf:name "Bob". > } > > The difference here is that text/turtlepatch has the INSERT DATA > boilerplate and is Skolemized. (It's also restricted to not have any > newlines in string literals, but use \n instead.) The idea is that > clients can ask for this Skolemized version, and then patch it easily > and efficiently with TurtlePatch. If they're expecting to be patching, > I imagine they'll generally fetch with turtlepatch instead of turtle. > > My sense is this is pretty easy to implement assuming the server (1) has > some kind of access to .well-known/genid URI space on its host and (2) > has stable internal identifiers for blank nodes which it can expose or > efficiently map to/from something it can expose. (There's probably a > workaround if (1) isn't true.) > > What do you think? > > There are other ways one could ask for a skolemized view, of course. > One could have parallel resources, and have Link headers between the > two. In practice, it might turn into adding a ?genid=true to the URLs > or something. Or one could make a variation of turtle, with > media-type text/genid-turtle, or something like that. But it seems to > me like a fairly elegant hack to use TurtlePatch for this, since the > time in your coding you need these two things is the same. (I note that > SPARQL's INSERT DATA syntax does allow blank nodes, as a way to create > fresh blank nodes. I suggest they not be used when one is using > text/turtlepatch like this, as an RDF serialization syntax.) > > -- Sandro > > [1] https://www.w3.org/2001/sw/wiki/TurtlePatch > > >
Received on Wednesday, 5 February 2014 08:17:42 UTC