- 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