- From: Kjetil Kjernsmo <kjetil@kjernsmo.net>
- Date: Thu, 08 Nov 2012 20:56:56 +0100
- To: public-ldp@w3.org
Hi all! First, I should congratulate you with such an excellent first public working draft of the Linked Data Platform! However, in doing so, you violated the first principle of FPWDs of my former boss chaals: He said that FPWDs should be really bad, to bring out all the fury of the people just sitting idly by and thus get all the arguments to the surface before putting too much effort into it. And while I appreciate your work, I shall have to come out in all my fury, which is too bad, since you already wrote a very comprehensive and thorough spec. ;-) I think we, as a community, have become somewhat too narrow-minded and constrained to HTTP due to the Linked Data principles. That is not to say that HTTP isn't the most suitable protocol and that HTTP URIs aren't the best URIs, they are, but it steals focus from what we should be thinking about first. I think the charter has a clear mandate for a non-HTTP focus, even though it also has a clear misunderstanding of HTTP in REST. This misunderstand is so common that Roy Fielding has commented on it in a blog post: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven "A REST API should not be dependent on any single communication protocol," which is broken in the very first requirement: "4.1.1 LDPR servers must at least be HTTP/1.1 conformant servers". So, the problem here is that people generally agree that REST is important, but they aren't sure why. Now, let me shamelessly plug my paper from the ESWC LAPIS2012 workshop: "The necessity of hypermedia RDF and an approach to achieve it", with paper and slides (you may prefer the latter) respectively at http://folk.uio.no/kjekje/2012/hypermedia-rdf.pdf http://folk.uio.no/kjekje/2012/lapis2012.xhtml In there, I hint at a different focus: See, the thing isn't just that we need to use HTTP verbs to read or write stuff, that's the trivial part. What we need to think about is what kind of interactions made possible by the protocol. Now, with this spec, if I have some resource, I still have to look up your out-of-band specification to figure out how I can edit it, though with HTTP, I can figure out that I can edit by looking at the Allow header by taking the extra effort of doing a HEAD first. In my talk, I said that REST implies that "don't make developers look up the spec", let me reformulate that a bit: "Systems that require developers to frequently look up specifications will over time loose to systems that do not", or something like that. REST is there because it is far easier to just "View Source" and then you have what you need to do the Right Thing[tm]. Moreover, by having what you need right there, up front, in the message, you can automate things that you cannot automate if you need a human looking up the spec. That's partly why RDF is self-describing, right? So, that's what we need to focus on: The message, not the protocol! In my paper, I propose not only ways to express what write operations are allowed, but also some links to read-only resources. However, it is much more to be explored there. In the original Linked Data Design Issue, timbl introduces the concept of a "Browsable Graph": http://www.w3.org/DesignIssues/LinkedData where part of the definition is "Returning all statements where the node is a subject or object; and Describing all blank nodes attached to the node by one arc. " (go check it if the context isn't clear) Note the object part, because I think we have a potential for a lot of confusion and incompatibilities there, since the current spec says: "4.4.5 A LDPR client must preserve all triples retrieved using HTTP GET that it doesn’t change whether it understands the predicates or not, when its intent is to perform an update using HTTP PUT. " So, following timbl's advice, we would PUT back triples that has the Request-URI as object, not subject. OMG, the horror! ;-) It gets worse though, because in near future, the server might have much more data than is reasonable to communicate in a single message, and paging might be the wrong solution, since it doesn't say anything about what is relevant by any measure... I think that timbl's "browsable graphs" will also be obsolete in many cases. You can't just return an RDF molecule, or a concise bounded graph, or an spo = Request-URI ?p ?o. Many of the reasons are already listed in the next section "Limitations on browseable data" in the Design Issue. Instead, Linked Data Information Architects (who is the first to have such a title? :-) ) would have to think carefully about the interactions they would enable by the data. And then, we're not just talking about replacing a resource or merging more triples into it. Perhaps there are a whole lot of sensor readings for example for a certain resource, they may want to provide some digest and link to more readings, carefully thinking about what that digest should be, just like you're not putting all your relevant links in a hypertext document, that's up to the author. In some cases, the first thing an agent might want to do is to put sensor data that pertains to a certain resource, and lots of it. Making this interaction efficient will be the chief concern of the Linked Data Information Architect. Without this, Linked Data servers will be just like the web pages of 1996 that contained mostly links to other pages, but very little new information of value... However, this WG cannot foresee these developments, and it is a 1.0 spec after all. What I expect of 1.0 is a basic set of interactions and some constraints on what triples can be expected to be returned and what MUST be accepted and what SHOULD be accepted and what MUST NOT. To understand this last point, lets go back to the SPARQL Graph Store. I helped conceive that spec back in the day, thinking we would one day understand what REST could do for us. Then, we got distracted by HTTP, indirect identification and all that kind of stuff, and it ended up in something non-RESTful. The main difference, as I see it, is this: With the Graph Store spec, the Request-URI is just a name for a bunch of triples. It could be just about any bunch of triples, the Request-URI is not even likely to be subject or object of any of the triples, but I guess it could be. On the Linked Data Platform, this is not the case, at the very least you'd expect that the Request-URI has to be the subject of some of the triples in the result, and the platform may legitimately reject or ignore triples sent to it that doesn't have the Request-URI as the subject, or some other criteria. This makes the Linked Data Platform much more complex than just a Graph Store, but other than that, in particular considering the interactions you can do with it, it is the same beast. The interactions you are allowed to do, must be immediately clear when you have a representation of a resource, that's the most efficient way to do things, and to do that, it must be part of the message somehow. I believe this is where most of the effort should be spent, because it is not going to be easy. Once that's done, adding HTTP is going to be easy. It would be particularly nice if that could be done in-band too, i.e. in terms of a vocabulary. In my talk, I proposed doing stuff like this on every resource that can be POSTed to: <> hm:canBe hm:mergedInto . Then, the object of that can be defined in a vocabulary like: hm:mergedInto rdfs:comment "Perform an RDF merge of payload into resource"@en ; hm:httpMethod "POST" . Finally, I have only suggested a vocabulary, but this you could turn into an ontology. With HTTP verbs, all you're going to get is a literal. :-) BTW, I'm landing in Boston for ISWC on Friday, and I'm all for a f2f chat and hack session on Saturday if anybody wants to meet up. My simple linked data platform is the Perl module RDF::LinkedData, which is on CPAN, and also in Debian and Ubuntu as librdf-linkeddata-perl. I have some unreleased code on github for the read-write support ideas, at least many of the tests are there. Cheers, Kjetil -- Kjetil Kjernsmo PhD Research Fellow, University of Oslo, Norway Semantic Web / SPARQL Query Federation kjetil@kjernsmo.net http://www.kjetil.kjernsmo.net/
Received on Thursday, 8 November 2012 19:57:29 UTC