- From: Henry Story <henry.story@bblfish.net>
- Date: Sun, 3 Feb 2013 15:12:24 +0100
- To: public-ldp-wg@w3.org
- Message-Id: <934049AE-2591-4798-B6C8-DB8769252DDF@bblfish.net>
Type and solution for ISSUE-15 On 3 Feb 2013, at 14:54, Henry Story <henry.story@bblfish.net> wrote: > The LDP Model wiki [1] develops in detail the relation between > Atom and LDP. It has an example of posting an Atom Entry to > a container, and an example of posting a binary. This received > Erik Wilde's approval. > > But a remaining question subsists: What happens when posting > other types of RDF content, such a as a foaf profile like this: > > <> a foaf:PersonalProfileDocument; > foaf:primaryTopic <#i> . > > <#i> a foaf:Person; > foaf:name "Jack Daniels"; > foaf:interest <http://en.wikipedia.org/wiki/Whiskey>; > foaf:knows <http://www.spiritofspeyside.com/#j>, > <http://www.bunnahabhain.com/#jim> . > > [] a <http://dbpedia.org/resource/Whisky> ; > likes <#i>, <http://www.bunnahabhain.com/#jim> . > > > This graphs gives data about some "Jack Daniels", and he also > adds a statement that Jack likes a whiskey that Jim likes. > > Following the Atom models can lead us down two > different paths, which I will call Atom-Strict and Atom Relax. > > Atom Strict > =========== > > In Atom Strict you can only post an Entry to a container. > The content has to be wrapped in an atom entry. So if we > are dead strict we have to POST this in XML: > > <entry xmlns="http://www.w3.org/2005/Atom"> > <title>My foaf profile</title> > <id>urn:uuid:1225c695-cfb8-4ebb-bbbb-80da344efa6a</id> > <updated>2013-02-02T16:34:06Z</updated> > <author><name>Jack Daniels</name></author> > <content type="text/turtle"> > <> a foaf:PersonalProfileDocument; > foaf:primaryTopic <#i> . > > <#i> a foaf:Person; > foaf:name "Jack Daniels"; > foaf:interest <http://en.wikipedia.org/wiki/Whiskey>; > foaf:knows <http://www.spiritofspeyside.com/#j>, > <http://www.bunnahabhain.com/#jim> . > > [] a <http://dbpedia.org/resource/Whisky> ; > likes <#i>, <http://www.bunnahabhain.com/#jim> . > </content> > </entry> > > This forces us to have two content types: application/atom+xml and > the text/turtle content. > > POSTing the whole thing Turtle improve things only a bit: > > <> a :Entry; > :title "My foaf profile"; > :updated "2013-02-02T16:34:06Z"^^xsd:dateTime; > :author [ :name "Jack Daniels" ]; > :content """ > <> a foaf:PersonalProfileDocument; > foaf:primaryTopic <#i> . > > <#i> a foaf:Person; > foaf:name "Jack Daniels"; > foaf:interest <http://en.wikipedia.org/wiki/Whiskey>; > foaf:knows <http://www.spiritofspeyside.com/#j>, > <http://www.bunnahabhain.com/#jim> . > > [] a <http://dbpedia.org/resource/Whisky> ; > likes <#i>, <http://www.bunnahabhain.com/#jim> . > """^^^xxx:Turtle . > > Here we only have 1 syntax but we still have the data and the > metadata as two seperate contents. > > In both cases there are a number of serious problems: > > 1. The content's relative URLs must be abosolutized - meaning we can't really get the > server to do the right job. N3 could help here, but it is not in a standards track. > 2. The content must be encoded to remove and angle brackets in the XML format and > to make sure there are no """ in the Turtle one ( and """ are legal in Turtle ) > 3. There is a level of indirection between the metadata and the content. > 4. There seems to be duplication such as the author between > the content and the metadata. > > Could this be solved by extending Atom so that one could have > > <> a foaf:PersonalProfileDocument, a :Entry; > foaf:primaryTopic <#i>; > content ...? > > Perhaps one can, but one wonders what should go into the atom:content > relation then? Does every document need an atom:id and a summary? It seems > like a Procustean exercise. I think it is much better if we stick to > thinking about Atom as a metadata vocabulary. Things will then work > out much better as we will see in the next section: > > > Atom-Relax > ========== > > Whether or not any content one posts is in fact an atom entry or not > ( which it might well be! ), it seems clear that what one really wants > is to POST the following to the <http://drinks.example/account/> > container: > > ------------------------------------- > POST /account/ HTTP/1.1 > Slug: jack > Content-Type: text/turtle > ... > > <> a foaf:PersonalProfileDocument; > foaf:primaryTopic <#i> . > > <#i> a foaf:Person; > foaf:name "Jack Daniels"; > foaf:interest <http://en.wikipedia.org/wiki/Whiskey>; > foaf:knows <http://www.spiritofspeyside.com/#j>, > <http://www.bunnahabhain.com/#jim> . > > [] a <http://dbpedia.org/resource/Whisky> ; > likes <#i>, <http://www.bunnahabhain.com/#jim> . > ------------------------------------- > > Having posted this it should add to the container </account/> > the following triple at least: > > <> rdfs:member <jack> . > > to be precise in n3: > > </account/> log:semantics [ log:includes { </bug/> rdfs:member <req1> } ] Oops, that should be: </account/> log:semantics [ log:includes { </account/> rdfs:member </account/jack> } ] > > So what *else* should the container show? Should it show everything > that was sent too? This clearly won't work because it would have to show > triples such as > > { > [] a <http://dbpedia.org/resource/Whisky> ; > likes <#i>, <http://www.bunnahabhain.com/#jim> . > } > > That are pretty detached from the container. What if the > graph sent had contained the following: > > <http://drinks.example/account/> rdfs:member <http://dbpedia.org/resource/Whisky> . > > perhaps as a joke? Then a GET on <http://drinks.example/account/> > would return > > <> rdfs:member <http://dbpedia.org/resource/Whisky> . > > which would clearly be false, since drinks.example can't delete > resources on dbpedia. > > So here the atom metadata role starts making sense. It makes sense > not to put much information into the ldp:Container that is inside > the content, other than its type perhaps, but rather to add > the atom metadata about what the contents contain, namely > > ---------------------------------- > GET /account/ HTTP/1.1 > ----------------------->> > <> a ldp:Container; > rdfs:member [ owl:sameAs <jack>; > a foaf:PersonalProfileDocument; > :title "Jack's personal Profile"; > :id "http://drinks.example/account/jack"; > :edit-meta <jack;meta>; > :author <jack#i> ] . > ---------------------------------- Looking at this one can see how close this is to ISSUE-15 "sharing binary resources and metadata". The behavior there is not that different from this one. Especially considering this example: http://lists.w3.org/Archives/Public/public-ldp-wg/2013Feb/0010.html But then it's also a bit odd to think of Turtle as a binary format.... So this wold tend to argue for not making the distinction between binary and other resources, and to make sure they all function orthogonally: 1. POSTing content (any content) to a container creates a new resource, call it <r1> here 2. The 201 created response contains a link to the resource created ( <r1> ) and to its metadata (let's say <r1;meta> ) 3. The Container adds to its representations ( what one GETs ) a. <> rdf:member <r1> b. atom like metadata on <r1> . I think the above covers all cases. > > Then one does not confuse the container's role as maker > of metadata statements of its contents, and the contents. > Atom does not confuse it, and neither should we, as those are > very fundamental distinctions, between asserting something, > and asserting things about another assertion. Ie between you > saying > > A: Jane loves Joe. > > And you saying > > B: Jim at 5 pm on Sunday said Jane loves Joe > > You may be able to say B quite truthfully, but not want to > make the statement A directly yourself. > > The container, will be much more secure by restricting > itself to the second. > > Henry > > [1] http://www.w3.org/2012/ldp/wiki/ISSUE-37 > > > > Social Web Architect > http://bblfish.net/ > Social Web Architect http://bblfish.net/
Attachments
- application/pkcs7-signature attachment: smime.p7s
Received on Sunday, 3 February 2013 14:13:00 UTC