- From: Henry Story <henry.story@bblfish.net>
- Date: Wed, 22 May 2013 00:41:58 +0200
- To: public-ldp-wg@w3.org
On 21 May 2013, at 18:30, Nandana Mihindukulasooriya <nmihindu@fi.upm.es> wrote:
> ----------------------- 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" .
> ------------------------------------------------------------------------
Ok, so what you want is:
1. a way to create new products
2. a way to create new bugs on existing products
3. a list that ties the bugs and the products together
So you could create new products simply by Posting to
the collection:
~~~~~ /app/BugTracker/products/ ~~~~~~~~~~~~~>
<> a ldp:Container, bt:ProductDescriptionCollection;
bt:member <Ace>, <Base> .
<Ace> a bt:ProductDescription;
dct:title "The Ace Product Page";
dct:created "2013-05-00T17:05Z"^^xsd:dateTime;
dct:creator </staff/Eliza#i> .
<Base> a bt:ProductDescription;
dct:title "The Base Product Page";
dct:created "2013-05-02T19:19Z"^^xsd:dateTime;
dct:creator </staff/Eliza#i> .
~~~~~~~~~~~~~~~~~~
So the good thing is that we then know from the collection who
owns the documents about the object in them and what the type
of the documents in them is.
Again we distinguish between the Product an the description
of the product. For example here:
~~~~~~~~~~<Ace>~~~~~~~~~~~~
<> a bt:ProductDesciption;
dct:title "The Ace Product Page";
dct:created "2013-05-00T17:05Z"^^xsd:dateTime;
dct:creator </staff/Eliza#i> ;
foaf:primaryTopic <#p> .
<#p> a Product;
dct:created "2013-03-00T14:52Z"^^xsd:dateTime;
dct:creator </co#mpany> ;
price [ dollars 22 ] .
owl:sameAs dbpedia:AceProduct .
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
So clearly the page does not cost 22 dollars but the product does
and the page is not the same page as the dpbedia page ( PATCHing
dbpedia won't change this product description ). Also the product
has a different creator time and date as the page, and is updated
at different rates.
So now nothing stops the server from generating a list of all the
products too and of placing that somewhere and of linking to
it. Hey perhaps it could even place that in the products collection
~~~~~ /app/BugTracker/products/ ~~~~~~~~~~~~~>
...
<#p> a ProductCollection;
owl:oneOf ( <Ace#p> <Base#p> ) .
...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
No matter where it is placed, the advantage is already
that you can easily speak about products described locally
or remotely. You are not stuck with only dealing with locally
described resources. The LDPC as a creator of resources on the
other is forced to only have local members: ie point to
resources that can be PATCHed, DELETEd, ... and so that it is in
control of.
So once you have the ProductCollection, you can now create
the bug report container and restrict what products it
can be about
~~~~~~~~~~
<> a ldp:Container, bt:BugReportContainer;
val:memberPrimaryTopicRestriction [
onProperty bt:product;
allValuesFrom <../products#p> ;
];
bt:member <bug1>, <bug2>, <bug3> .
# note that we add metadata on the information resource
# note also that the creator is the creator of the bug report,
# not the creator of the bug
<bug1> dct:title "Product A and B doesn't interoperate ";
dct:created "2013-05-05T10:00"^^xsd:dateTime;
dct:creator <http://example.org/users/johndoe#i> .
...
~~~~~~~~~~~
So what did the client send to create <bug1> ?
Would POSTing this not have been enough?
~~~~~POST~~~~~~
<> dct:title "Product A and B doesn't interoperate ";
dct:created "2013-05-05T10:00"^^xsd:dateTime;
dct:creator </users/johndoe#i>;
foaf:primaryTopic <#bug> .
<#bug> bt:relatedProduct <../products/Ace#p>;
bt:relatedProduct <../products/Base#p>;
bt:isInState "New" .
~~~~~~~~~~~~~~~~
The client would know what to post just by looking at the
definition of the BugReportContainer . Some of these
descriptions will need a vodabulary to devine the types
of documents. Perhaps the rdf-val group will be able to
solve that....
https://www.w3.org/2012/12/rdf-val/Overview.php
We need it anyway.
Henry
Social Web Architect
http://bblfish.net/
Received on Tuesday, 21 May 2013 22:42:32 UTC