Differences between revisions 8 and 9
Revision 8 as of 2014-03-12 15:33:29
Size: 8075
Editor: JakobFrank
Revision 9 as of 2014-03-13 08:31:50
Size: 8086
Editor: JakobFrank
Comment: fixed a link
Deletions are marked like this. Additions are marked like this.
Line 22: Line 22:
   {{{Link: <http://wiki.apache.org/marmotta/LDPImplementationReport>; rel="describedby"}}}    {{{Link: <http://wiki.apache.org/marmotta/LDPImplementationReport/2014-03-11>; rel="describedby"}}}

LDP Implementation Report (2014-03-11)

Implementation Report based on the WD-ldp-20140311.

General Implementation Restrictions

  • Identifiers

    • trailing slash is ignored (removed) for URI generation.
    • query part of an URL will never be used as part of a URI.
      • query parameters might be used for some LDP operations such as non-membership triples (tbd)
    • resources with fragments can't be addressed directly, but can be accessed via their container (URL without fragment)
  • Storage

    • internally every LDPR will be stored in its own (Sesame) context (as could be interpreted from sec

    • that would allow us to extend the Resource concept beyond the common understanding in triplestores (just one level of outgoing triples)
  • Paging and Sorting is not supported

    • Anyway the WG has resolved (Feb 17, 2014) to move out paging and ordering into a separate spec: 2014-02-17#r5

  • ETags for LDP-RS are weak and soley based on the dcterms:modified value, while ETags for LDP-NR are based on the md5sum of the file content.

  • We will provide support to the full LDP hierarchy (discussion on the mailing-list).

    • Our interpretation of Sec. implements that POST of content types not managed by the platform (i.e., not suitable Rio parser registered) adds a LDP-RS as member of the container, linking (dct:hasFormat/dct:isFormatOf) to the actual LDP-NR (URI is build by appending the file extension according the content type)

  • Sec. (rel='describedby'-Link) will be fulfilled by pointing to this page.

    • Link: <http://wiki.apache.org/marmotta/LDPImplementationReport/2014-03-11>; rel="describedby"

  • Creating new resources using HTTP PUT is not allowed (Sec. 4.2.4, Sec. 5.2.4)

  • For the time beeing, only LDP-BCs are supported

  • PATCH accepts application/rdf-patch only

    • Patches with the predicate ldp:contains will result in a HTTP 409 Conflict


4.2 Resource

  • HTTP/1.1 conforms
  • Resource mixture: supported
  • ETag: conforms (weak tags for LDP-RS, strong for LDP-NR)
  • Link type ldp:Resource: conforms
  • base-URI: conforms
  • Link describedby conforms: link to implementation report
  • 4.2.2 GET supported
  • GET to LDPR supported
  • LDP-R Headers: see 4.2.8
  • 4.2.3 POST supported (will turn LDPR into LDPC)
  • 4.2.4 PUT work-in-progress
  • 4.2.5 DELETE supported
  • 4.2.6 HEAD supported
  • HEAD to LDPR supported
  • 4.2.7 PATCH supported
  • Accept-Patch: application/rdf-patch supported
  • 4.2.8 OPTIONS supported
  • OPTIONS to LDPR supported
  • Allow Header: conforms

4.3 RDF Source

  • ldp:!RDFSource is materialized: conforms
  • ldp:!Resource and specific type: conforms
  • (pending)
  • RDF-representation: supported
  • Reuse Vocabularies: RDF, DCTERMS, LDP: conforms
  • Reuse Predicates: conforms Overlapping with
  • multiple rdf:type: supported
  • changing rdf:type: supported
  • open predicates: supported
  • no inferrence required by client: conforms
  • Client Requirement: does not apply
  • Prefer Header: not-supported
  • Client Requirement: does not apply
  • Client Requirement: does not apply
  • 4.3.2 GET supported
  • text/turtle: supported

4.4 Non-RDF Source

  • ldp:NonRDFSource is materialized: conforms


5.2 Container

  • ldp:Container and ldp:RDFSource are materialized: conforms
  • only ldp:BasicContainer supported: conforms

  • RDF-Containers are not used: conforms
  • Advertise LDPC type: conforms
  • Prefer Header: not yet supported
  • 5.2.2 GET supported
  • 5.2.3 POST supported
  • add member resources by POST: supported (LDPC created on demand)
  • ldp:contains (to binary if present): conforms
  • LDP-NR: supported
  • LDP Interaction Model: work-in-progress
  • text/turtle supported
  • Content-Type Consideration: supported
  • base-URI for parsing is the created Resource: conforms
  • UUID for resource names: conforms
  • No specific constraints on creation: conforms
  • Slug: Header supported: conforms
  • Do not reuse URIs: (pending)
  • LDP-NR and associated LDP-SR are created: conforms
  • Accept-Post is provided on OPTIONS: conforms
  • 5.2.4 PUT not yet supported
  • 5.2.5 DELETE supported
  • delete containment triples: conforms
  • delete associated LDP-RS for LDP-NR: conforms
  • 5.2.6 HEAD supported
  • 5.2.7 PATCH supported
  • PATCH method supported: conforms
  • 5.2.8 OPTIONS
  • Link with type "describedby" is provided for LDP-NR: conforms

5.3 BasicContainer

  • ldp:Container is materialized: conforms

5.4 DirectContainer

ldp:DirectContainers are not yet supported.

5.5 IndirectContainer

ldp:IndirectContainers are not yet supported.

6 Notable information from normative references

6.1 Architecture

  • 6.1.1 Only LDP-BC supported, so does not apply.
  • 6.1.2 see, clarification pending

6.2 HTTP/1.1

  • 6.2.1 Support other RDF representations: Default Sesame Parser/Serializer Formats supported
  • 6.2.2 SPARQL 1.1 supported
  • 6.2.3 404 returned after DELETE
  • 6.2.4 All triples under server-control where the Resource occurs as subject or object are deleted, further clarification pending
  • 6.2.5 PATCH (application/rdf-patch) supported
  • 6.2.6 not supported

6.3 RDF

  • 6.3.1 LDPR can contain arbitrary triples
  • 6.3.2 Containment not inlined
  • 6.3.3 arbitrary number of rdf:type is allowed

7 HTTP Headers

7.1 Accept-Post Header


7.2 Prefer Header

see and

8 Security

HTTP Basic Auth is supported

Open Issues and Questions

Missing Things

  1. Update LDP Ontology http://www.w3.org/ns/ldp# with the terms missing from the Spec:

    • ldp:BasicContainer

    • ldp:contains
    • ldp:DirectContainer

    • ldp:hasMemberRelation
    • ldp:IndirectContainer

    • ldp:insertedContentRelation
    • ldp:isMemberOfRelation
    • ldp:member
    • ldp:membershipResource
    • ldp:MemberSubject

    • ldp:PreferContainment

    • ldp:PreferEmptyContainer

    • ldp:PreferMembership

    • ldp:RDFSource
  2. Add ldp:NonRdfResource to the Spec. and LDP-Ontology

    • (URI is never explicitly used in the Spec)
  3. Extra Link: Headers on Requests to LDP-R
    • LDP-NR: Link with href of the corresponding RDF-RS with type "meta"
    • LDP-RS: Link with href of the corresponding RDF-NR with type "content" (if present)


  1. Is using an URI that was previously DELETEd considered "re-using"? (see also 6.1.2)
  2. (also Link to the LDP-RS rel should be "meta" or "describedby"? (ISSUE-15)
  3. Is the LDP-RS also "ldp:contains" by the LDPC?
  4. 4.2.5 When an LDP-RS is deleted and the LDP-RS is associated with an LDP-NR, should the LDP-NR be deleted too? (see also
  5. (also 4.2.7) Is it allowed for the LDP Server to restrict the properties changed by a PATCH request (analoguous to
  6. 6.2.4 Is it allowed to modify properties of a LDPC where a LDPR was deleted from, e.g. dct:modified?

LDPImplementationReport/2014-03-11 (last edited 2014-03-13 08:31:50 by JakobFrank)