Issue-90

From Linked Data Platform
Jump to: navigation, search

1 PROPOSAL 1: define hierarchy of resources

This proposal is about labelling the kind of resources managed by LDP.

LDPRs and LDPCs are defined as disjunctions of other kind of resources:

LDPR ::=   # LDP Resource: is either an LDPG, LDPC or LDPB
| LDPG     # LDP Graph: representation is RDF
| LDPC     # LDP Container: representation is RDF + ldp:Container as rel="type" Link header
| LDPB     # LDP Binary: representation is anything but RDF

LDPC ::=               # ldp:Container is explicitly made the common parent for all Container types
| SimpleContainer      # members and contained LDPRs are aligned
| DirectContainer      # membership subject and predicate are application specific
| IndirectContainer    # membership triples are application specific

An LDP-managed resource (LDPR) is a Web resource with a rel="type" Link header of value <http://www.w3.org/ns/ldp#Resource> or <http://www.w3.org/ns/ldp#Container>.

A special kind of LDPR (outside of the hierarchy) is the ldp:ContainerResource, the object of the ldp:containerResource property for a Container.

Remarks:

  • not all Web resources are LDPR
  • this doesn't force an LDPR to be contained by some Container eg. root Container
  • LDPR becomes LDPG
  • non-LDPR becomes LDPB
  • LDPC is not a subtype of LDPG

2 PROPOSAL 2: LDP Named Graphs

Any LDPG/LDPC is a Named Graph. This proposal describes to what Named Graph the protocol-related triples belong.

The membership triples belong to the representation of the hashless-ContainerResource.

The containment triples belong to the representation of the LDPC.

The successful creation of an LDPG/LDPC results in a new Named Graph (modulo the interpretation of relative URIs through 5.4.7).

  • creation via POST
    • URI is the value of the Location header at successful creation
    • RDF Graph depends on how the Container interprets the POSTed content (no garanty it's the same as the POSTed one)
  • creation via PUT
    • URI is the one used for the PUT
    • RDF Graph is exactly what was sent

Remarks:

  • this proposal does not prevent application data to co-exist with server-managed data in same Named Graph
  • if an LDPC is also a ContainerResource, then it contains both the containment triples and the membership, which could be the same triples

3 Examples

Here are some examples, where

  • both membership and containment triples are represented
  • the LDPR interactions are advertised through the rel-Link headers
  • the Named Graphs are explicit in the interactions using curl

Revisiting Example 3:

$ curl -i http://example.org/container1/
...
Content-Type: text/turtle; charset=UTF-8
Link: <http://www.w3.org/ns/ldp#Container>; rel="type"
...
@prefix dcterms: <http://purl.org/dc/terms/>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix ldp: <http://www.w3.org/ns/ldp#>.

<>
   a ldp:SimpleContainer;
   dcterms:title "A very simple container";
   ldp:contains <member1>, <member2>, <member3>.

Re-visiting Example 5:

$ curl -i http://example.org/netWorth/nw1/
...
Content-Type: text/turtle; charset=UTF-8
Link: <http://www.w3.org/ns/ldp#Resource>; rel="type"
...
<>
   a o:NetWorth;
   o:netWorthOf <http://example.org/users/JohnZSmith>;
   o:asset
      <assetContainer/a1>,
      <assetContainer/a2>;
   o:liability
      <liabilityContainer/l1>,
      <liabilityContainer/l2>,
      <liabilityContainer/l3>.

$ curl -i http://example.org/netWorth/nw1/assetContainer/
...
Content-Type: text/turtle; charset=UTF-8
Link: <http://www.w3.org/ns/ldp#Container>; rel="type"
...
<>
   a ldp:Container;
   dcterms:title "The assets of JohnZSmith";
   ldp:containerResource <..>;
   ldp:containsRelation o:asset;
   ldp:insertedContentRelation ldp:MemberSubject;
   ldp:contains <a1>, <a2>.
$ curl -i http://example.org/netWorth/nw1/liabilityContainer/
...
Content-Type: text/turtle; charset=UTF-8
Link: <http://www.w3.org/ns/ldp#Container>; rel="type"
...
<>
   a ldp:Container;
   dcterms:title "The liabilities of JohnZSmith";
   ldp:containerResource <..>;
   ldp:containsRelation o:liability;
   ldp:insertedContentRelation ldp:MemberSubject;
   ldp:contains <l1>, <l2>, <l3>.