- From: Henry Story <henry.story@bblfish.net>
- Date: Thu, 23 May 2013 21:12:42 +0200
- To: Linked Data Platform (LDP) Working Group <public-ldp-wg@w3.org>
On 23 May 2013, at 21:08, "Linked Data Platform (LDP) Working Group Issue Tracker" <sysbot+tracker@w3.org> wrote:
> ldp-ISSUE-73 (rdf:member): LDPCs to list all their rdf:member [Linked Data Platform core]
>
> http://www.w3.org/2012/ldp/track/issues/73
>
> Raised by: Henry Story
> On product: Linked Data Platform core
>
> An LDPR MUST/SHOULD list all the resources that were created in it with a POST as rdf:member .
> That is doing a GET on the LDPC should return a list of members. These members are the HTTP resources that are GETable, PATCHable, POSTable, DELETEable .
>
> Advantages:
> - a client can easily find out all the members of an LDPC by GETing it and querying the returned representation with some query that is the equivalent of the SPARQL
> SELECT ?member WHERE { <> rdf:member ?member }
> - the client does not need reasoning to find out what the members are
> ( currently it seems to require some ldp:membershipProperty relation to find out what the member is )
> - LDPRs that are not LDPCs don't get lost after creation. An admin client can easily find out all the members. ( currently LDPRs may be listed on a remote resource for which one needs to know the LDPCs it came from and that it had a ldp:membershipSubject . The same issue would be true for an ldp:membershipObject . )
> - the LDPC is a good place to add metadata on the LDPR created such as title, update time, acl resources, ...
>
Here is what it would look like for a bugtracker example. This seems very
clean and reasonable to me.
The </BugTracker> resource lists different relationships
~~~~~~~~GET /BugTracker HTTP/1.1~~~~~~~~~
<#obj> tracksProduct
</BugTracker/productsContainer/ProductA#p> ,
</BugTracker/productsContainer/ProductB#p> ;
hasBug </BugTracker/bugsContainer/bug1#b> .
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The productsContainer lists the members of the container.
~~~~~GET /BugTracker/productsContainer/ HTTP/1.1 ~~~~
<> a ldp:Container;
ldp:membershipSubject </BugTracker#obj>;
ldp:membershipPredicate bt:tracksProduct ;
rdfs:member <ProductA>, <ProductB> .
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The we have ProductA and ProductB described very cleanly
as you suggested
~~ GET /BugTracker/productsContainer/ProductA> ~~~~~~
<> a bt:ProductDescription;;
foaf:primaryTopic <#p>;
dcterms:title "The Product A Page";
<#p> ... # description of product
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~ GET /BugTracker/productsContainer/ProductB> ~~~~~~
<> a bt:ProductDescription;;
foaf:primaryTopic <#p>;
dcterms:title "The Product A Page";
<#p> ... # description of product
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The bugsContainer lists its only member <bug1>
(It's a very young project clearly )
~~~~ GET /BugTracker/bugsContainer/ HTTP/1.1 ~~~~~~~~
<> a ldp:Container;
ldp:membershipSubject </BugTracker>;
ldp:membershipPredicate bt:hasBug ;
rdfs:member <bug1> .
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
And <bug1> contains all the info as you suggested again.
~~~GET /BugTracker/bugsContainer/bug1 HTTP/1.1 ~~~~~~
<> a bt:BugReport;
foaf:primaryTopic <#b> ;
dcterms:title "Product A crashes when shutting down.";
dcterms:creator </users/johndoe#me>;
dcterms:created "2013-05-05T10:00"^^xsd:dateTime .
<#b> a bt:Bug;
bt:relatedProduct </app/BugTracker/ProductA#p>;
bt:isInState "New" .
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Social Web Architect
http://bblfish.net/
Received on Thursday, 23 May 2013 19:13:19 UTC