An LDP example with and without membershipSubject predicate

Hi all,

Roger and I were discussing some examples to include in the primer and came
up with two slightly different models; one having the membershipSubject
predicate and one without. We thought sharing both examples as it might
contribute the discussion about membershipSubject that Henry brought up in
the last conf call.

Both examples involve a Bug Tracker which deals with Bugs of different
Products. From these examples (and NetWorth example), on the one hand it
seems membershipSubject is useful in scenarios where one resource comprises
of two or more containers (collections / value sets). On the other hand, it
seems it is possible to model the simple scenarios without
membershipSubject predicate. This aligns with the explanation given in the
spec after example 3.

Model 1 (Model1.jpg)
Bug Tracker tracks Products.
Products has Bugs.

Model 2 (Model2.jpg)
Bug Tracker tracks Products and manages Bugs.
Bugs are related to Products.

If we model this with LDP,

----------------------- Model 1 --------------------------------------

<http://example.org/app/BugTracker> a ldp:Container, bt:BugTracker ;
        ldp:membershipPredicate bt:tracksProduct ;
bt:tracksProduct <http://example.org/app/BugTracker/ProductA> .
------
<http://example.org/app/BugTracker/ProductA> a ldp:Container, bt:Product;
ldp:membershipPredicate bt:hasBug ;
 bt:hasBug <http://example.org/app/BugTracker/ProductA/Bug1> .
------
 <http://example.org/app/BugTracker/ProductA/Bug1> a bt:Bug;
      dcterms:title "Product A crashes when shutting down.";
      dcterms:creator <http://example.org/users/johndoe>;
      dcterms:created "2013-05-05T10:00"^^xsd:dateTime
      bt:isInState "New" .

----------------------- Model 2 -------------------------------------

<http://example.org/app/BugTracker> a bt:BugTracker;
 tracksProduct
           <http://example.org/app/BugTracker/products/ProductA> ,
           <http://example.org/app/BugTracker/products/ProductB> ;
        hasBug <http://example.org/app/BugTracker/bugs/1> .
------
<http://example.org/app/BugTracker/products/> a ldp:Container;
 ldp:membershipSubject <http://example.org/app/BugTracker>;
         ldp:membershipPredicate bt:tracksProduct .
------
<http://example.org/app/BugTracker/bugs/> a ldp:Container;
 ldp:membershipSubject <http://example.org/app/BugTracker>;
         ldp:membershipPredicate bt:hasBug .
------
<http://example.org/app/BugTracker/products/ProductA> a bt:Product .
------
<http://example.org/app/BugTracker/ProductA/Bug1> a bt:Bug;
      dcterms:title "Product A and B doesn't interoperate ";
      dcterms:created "2013-05-05T10:00"^^xsd:dateTime;
      dcterms:creator <http://example.org/users/johndoe>;
      bt:relatedProduct <http://example.org/app/BugTracker/products/ProductA
>;
      bt:relatedProduct <http://example.org/app/BugTracker/products/ProductB
>;
      bt:isInState "New" .
------------------------------------------------------------------------

Best Regards,
Nandana

Received on Tuesday, 21 May 2013 16:31:07 UTC