Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Expand

3.1 General (Jared Whiklo)

  • Empty section

3.1.1 LDP Containers

  • (tick) MUST be able to create LDP Containers: Tested in 3.3
  • (tick)  MUST distinguish between triple types OR MUST return 409 with constrainedBy Link in headers for ldp:contains membership predicate if server cannot distinguish between triple types
    • We return a 409 because we can't distinguish and therefore the next 2 tests are not applicable.
  • (minus) MAY permit ldp:contains membership predicate if server can distinguish between triple types
  • (minus) SHOULD allow Prefer header in request to distinguish triple types if server can distinguish triple types

3.1.2 LDP-NR creation

  • (tick) SHOULD create an LDP-NR if creation request includes NonRDFSource type Link in headers, regardless of Content-Type headers

3.2 HTTP GET

  • (tick) MUST return describes Link to LDP-NR if request is to associated LDP-RS

3.2.1 Additional values for the Prefer header

3.2.2 LDP-RSs

  • (tick) MUST return Preference-Applied header if request's Prefer header is honored (Always applied)

3.2.3 LDP-NRs

  • (tick) MUST return Digest header as directed by request's Want-Digest header

3.3 HTTP HEAD

  • (tick) MUST NOT return a body
  • (error)(/) SHOULD return same headers as if the request was a GET
    • Almost perfect: Binary resources have duplicate headers that are not seen on HEAD
      Jira
      serverDuraSpace JIRA
      serverIdc815ca92-fd23-34c2-8fe3-956808caf8c5
      keyFCREPO-2714
  • (tick) MUST return a Digest header if the same request as a GET would have
  • (minus) MAY omit payload headers from response

3.4 HTTP OPTIONS (Yinlin Chen)

  • (tick) Any LDPR must support OPTIONS per [LDP] 4.2.8. 4.2. LDP servers must support the HTTP OPTIONS method. 

  • (tick) Any LDPR must support OPTIONS per [LDP] 4.2.8. LD servers must indicate their support for HTTP Methods by responding to a HTTP OPTIONS request on the LDPR’s URL with the HTTP Method tokens in the HTTP respons header Allow. 

3.5 HTTP POST

  • (tick) MUST be supported on LDP Collections
  • (tick) MUST include default interaction model in constrainedBy Link header
    • Correct for both LDP-RS and LDP-NR
  • (tick) MUST support creation of LDP-NRs
  • (tick) MUST create and associate an LDP-RS when an LDP-NR is created

3.5.1 LDP-NRs

  • (tick) MUST return 409 if request Digest header does not match calculated value for content of new LDP-NR
  • (tick) SHOULD return 400 if request Digest header's type is not supported (Should 'type' be 'algorithm', like the RFC?)

3.6 HTTP PUT

(Danny Bernstein)

  • (tick) MAY include type Link header in request
  • (tick) MUST return 409 if request's type Link is not resource's current type or subtype thereof, or not in LDP namespace
  • (minus) MUST change resource's type if request's type Link is a subtype of resource's current type
  • (minus)  MUST change resource's interaction model if request's type Link has an LDP interaction model

3.6.1 LDP-RSs

  • (question) MUST be supported on LDP-RSs for non-server-managed triples
  • (tick)  MUST return 4xx (409), with more info in body and constrainedBy Link in headers if request modifies server-managed triples (Are triples different than resource statements?) on a LDP-RS
    • (warning) Currently we allow the use of the -Dfcrepo.properties.management=relaxed option to allow updating server managed triples. Is that something that we will continue to support and if so is the current impl in conflict with the spec?

3.6.2 LDP-NRs (Danny Bernstein)

  • (tick) MUST be supported on LDP-NRs to replace binary content
  • (tick) MUST return 409 if request Digest header does not match calculated value for new content of target LDP-NR
  • (tick) SHOULD return 400 if request Digest header's type is not supported (Should 'type' be 'algorithm', like the RFC?)

3.6.3 Creating resources with HTTP PUT

  • Non-normative section

3.7 HTTP PATCH (Jared Whiklo)

  • (tick) MUST be supported on LDP-RSs
  • (tick) MUST support sparqlupdate
  • (question) MAY support other update types
  • (question) MUST return 4xx (409), with more info in body and constrainedBy Link in headers when modifying protected resource statements
  • (tick) MUST return 2xx if successful

3.7.1 Interaction models

  • (tick) MUST return 409 when modifying the interaction model to a type that is not a subtype of the current type (LDP-NR to LDP-RS or opposite?)

3.8 HTTP DELETE (Yinlin Chen)

  • (warning) MAY be supported
  • (tick) An implementation that cannot recurse should not adverti DELETE in response to OPTIONS requests for container with contained resources. 
  • (tick) An implementation must not return a 200 (OK) or 204 (N Content) response unless the entire operation successfully completed. 
  • (tick) An implementation must not emit a message that implies successful DELETE of a resource until the resource has b successfully removed. 
  • (question) Compliance with LDP 5.2.5.1 When a contained LDPR is deleted, the LDPC server must also remove the corresponding containment triple, which has the effect of removing the deleted LDPR from the containing LDPC.
    (question) Compliance with LDP 5.2.5.2 When a contained LDPR is deleted, and the LDPC server created an associated LDP-RS (see the LDPC POST section), the LDPC server must also delete the associated LDP-RS it created.

3.8.1 Depth header ( Danny Bernstein: This section is no longer in the spec.)

  • (tick) MUST support a Depth header in the request, if DELETE is implemented
  • (question) MAY support only certain Depth header values: (How to query?)
  • (question) MUST return 400 if request includes Depth header and unsupported Depth header value: (How to query?)
  • (question) MUST use LDP containment relations for recursive deletion, if recursive deletion is supported: (How to query?)


3.9 External Binary Content

  • (tick) MUST return message/external-body in Accept-Post header (for each supported access-type param of supported Content-Types) if external binary content is supported
    • (In response to what?)
    • Danny Bernstein: a GET on the resource to be POSTed to I believe.
  • (minus) MUST return 415 for LDP-NR create or update if request has message/external-body and an unsupported access-type, or if external binary content is not supported
  • (minus) MUST NOT accept request (return 4xx???) for LDP-NR create or update if request has message/external-body and the server cannot return all the required response headers
  • (question) SHOULD return a Content-Location header for LDP-NR GET or HEAD (read? to match create or update above) with a URI to the content if the server is proxying: (How to query for proxying?)
  • (question)  MAY support an expiration parameter (for LDP-NR create or update?) if the request has a message/external-body Content-Type header
    • (warning) Expiration parameter is possibly up in the air now ? possibly replace with "Prefer" header syntax.
  • (question) SHOULD copy content (for LDP-NR create or update?) if the request has a message/external-body Content-Type header and the expiration parameter is set
  • (question) MUST return 4xx or 5xx (for LDP-NR create or update?) if the request has a message/external-body Content-Type header and the expiration parameter cannot be accommodated
  • (tick) MUST return a contrainedBy Link header (for LDP-NR create or update?) if the response status is 4xx: Tested in 3.2 and 3.3

3.9.1 Referenced RDF content in mandataory LDP serializations

  • Non-normative section

3.8.2 Proxied content vs. redirected content

  • Non-normative section

...

Expand

4.1 Versioned Resources

4.1.1 HTTP GET  (LDPRv)

4.1.2 HTTP PUT (Danny Bernstein)

  • (tick) An implementation must support PUT, as is the case for any LDPR.

4.2 Version Resources (LDPRm)

  • (error) An LDPRm may be deleted;
  • (error) (/) however, it must not be modified once created.


4.2.1 HTTP GET §

  • (tick) An implementation must support GET, as is the case for any LDPR (LDP-RS memento)
  • (error) An implementation must support GET, as is the case for any LDPR. (LDP-NR memento)
  • (error) The headers for GET requests and responses on this resource must conform to [RFC7089section 2.1. Particularly it should be noted that the relevant TimeGate for an LDPRm is the original versioned LDPRv.
  • (error) In addition, any response to a GET request must include a <http://mementoweb.org/ns#Memento>; rel="type" link in the Link header.

4.2.2 HTTP OPTIONS §

  • (error) (tick) An implementation must support OPTIONS.
  • (error) (tick) A response to an OPTIONS request must include Allow: GET, HEAD, OPTIONS as per [LDP].
  • (error) (tick) An implementation may include Allow: DELETE if clients can remove a version from the version history, as noted in 3.8 HTTP DELETE.

4.2.3 HTTP POST 

  • (error) (tick) An implementation must not support POST for LDPRms.

4.2.4 HTTP PUT 

  • (error) (tick) An implementation must not support PUT for LDPRms.

4.2.5 HTTP PATCH 

  • (error) (tick) An implementation must not support PATCH for LDPRms.

4.2.6 HTTP DELETE 

  • (error) (tick) An implementation may support DELETE for LDPRms. If DELETE is supported, the server is responsible for all behaviors implied by the LDP-containment of the LDPRm.

4.3 Version Containers (LDPCv) (Jared Whiklo)

4.3.1 HTTP GET (Jared Whiklo)

  • (error) (tick) An implementation must support GET, as is the case for any LDPR. Any response to a GET request must include a <http://mementoweb.org/ns#TimeMap>; rel="type" link in the Link header.
    • Uses the URI in above 4.3 point 1, needs updating
  • (tick) An LDPCv must respond to GET Accept: application/link-format as indicated in [RFC7089section 5 and specified in [RFC6690section 7.3.
  • (tick) An implementation must include the Allow header as outlined in 4.3.2 HTTP OPTIONS.
  • (warning) If an LDPCv supports POST, then it must include the Accept-Post header described in 4.3.3 HTTP POST.
    • 4.3.3 does not reference an Accept-Post header.

  • (warning) If an LDPCv supports PATCH, then it must include the Accept-Patch header.
    • Accept-Patch it is not mentioned in the spec.

4.3.2 HTTP OPTIONS (Jared Whiklo)

  • (tick) An implementation must Allow: GET, HEAD, OPTIONS as per [LDP].
  • (tick) An implementation may Allow: DELETE if the versioning behavior is removable by deleting the LDPCv. See 4.3.4HTTP DELETE for requirements on DELETE if supported.
  • (tick) An implementation may Allow: PATCH if the LDPCv has mutable properties. See 3.7.1 Containment Triples for requirements on PATCH if supported.
    • NB: it does not allow PATCH
  • (tick) An implementation may Allow: POST if versions can be explicitly minted by a client. See 4.3.3 HTTP POST for requirements on POST if supported.
  • (warning) Currently PUT is allowed. The spec doesn't explicitly ban it, but perhaps it should?
    • Esmé Cowles : an update to the spec should specify that LDPCv may disallow PATCH and PUT. Esme will do that.
    • We will need a JIRA to disallow PATCH and PUT and remove from OPTIONS.

4.3.3 HTTP POST 

  • (error) (minus)Although an LDPCv is both a TimeMap and an LDPC, it may disallow POST requests.
  • (error) (tick)If an LDPCv supports POST, a POST that does not contain a Memento-Datetime header should be understood to create a new LDPRm contained by the LDPCv, reflecting the state of the LDPRv at the time of the POST. Any request body must be ignored.
  • (error) (tick)If an LDPCv supports POST, a POST with a Memento-Datetime header should be understood to create a new LDPRm contained by the LDPCv, with the state given in the request body and the datetime given in the Memento-Datetime request header.
  • (minus) If an implementation does not support one or both of POST cases above, it must respond to such requests with a 4xx range status code and a link to an appropriate constraints document (see [LDP4.2.1.6).


4.3.4 HTTP DELETE 

  • (error) (tick) An implementation may support DELETE.
  • (warning) DELETE is advertised, but not currently implemented: do we plan to implement ?
  • (warning) (tick) An implementation that does support DELETE should do so by both removing the LDPCv and removing the versioning interaction model from the original LDPRv.

4.4 Vary 

(error) Non-normative note: When a POST to an LDPCv, or a PUT or PATCH to an LDPRv creates a new LDPRm, the response indicates this by using a Vary header as appropriate. When an LDPCv supports POST, and allows clients to specify a datetime for created URI-Ms, Vary-Post/Vary-Put: Memento-Datetime.

4.5 Implementation Patterns 

Non-normative note: This section describes the way the normative specification might be applied to implement discoverable versioning patterns. If an implementation of an LDPCv does not support POST to mint versions, that must be advertised via OPTIONS as described in 4.3.2 HTTP OPTIONS. This allows a client to perform an OPTIONS request on an LDPCv to determine if it can explicitly mint versions. If the LDPCv does not support POST, the client should assume some other mechanism is used to mint versions, for example, the implementation may automatically mint versions instead, but that is outside the requirements of this specification. This document specifies normatively only how LDPCvs and LDPRms can be discovered, and how they should act.

4.5.1 Server-Managed Version Creation §

(warning) Non-normative note: Upon PUT or PATCH to an LDPRv, a new LDPRm is created in an appropriate LDPCv. This LDPRm is the version of the original LDPRv that was just created.

4.5.2 Client-Managed Version Creation §

(warning) Non-normative note: An LDPRm for a particular LDPRv is created on POST to any LDPCv associated with that LDPRv. The new LDPRm is contained in the LDPCv to which the POST was made and features in that LDPCv-as-a-TimeMap. This pattern is very flexible and might be useful for migration from other systems into Fedora implementations. Responses from requests to the LDPRv include a rel="timemap" link in the Linkheader that references the same LDPCv as per [RFC7089section 5.

4.5.3 Replacing Contents from Mementos §

Non-normative note: Using the ingest-by-reference mechanism, one can replace the contents of an LDPRvwith that of an LDPRm by providing it's URL as the URL parameter in a Content-Type: message/external-body header. For example, given an LDPRm with URL http://example.org/some/memento, the full header would be 
Content-Type: message/external-body; access-type=URL; expiration=1;
    URL="http://example.org/some/memento"

...