You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 24 Next »

POST request to LDPCv to create new

Specification

  • 4.1.2 The Fcrepo spec doesn't mention it directly, but is there a conflict between the Memento "Content-Location" header and External File's "Content-Location"?  Can they both appear in the same response?
    • External File Content-Location header just appears on LDP-NR HEAD/GET requests, while Memento uses the header for responses from LDPRm and maybe LDPRv, both of which are LDP-RS's.  So the headers should not both appear on the same response
  • 4.1.3.1 In supporting PUT to LDPRv in order to create a LDPRm, is this just included for server managed versions?  Or is PUT to an LDPRv intended to be addressable separately from a LDPR so as to trigger this behavior?
  • 4.3.1 How do you determine what serializations are available for TimeMaps?  HEAD is not currently supported and is not in the Memento spec.
  • 4.3.1 What is the default serialization for GET requests to LDPCv?  The only required encoding is application/linked-format.
  • 4.3.5 What is the expected behavior if a POST to an LDPCv is made which specifies a Memento-Datetime that is already in use by an existing LDPRm for that LDPRv?
    • Having two memento's with the same datetime would result in datetime negotiation yielding indeterminate results.  
    • Ignore request and return a 412 response?  Delete and replace the existing version?
    • This could be something we decide - perhaps the new one overwrites the existing one?
  • 4.5  Does the modeshape fcrepo currently have a server managed option for versioning? 
    • We need to make sure that a server managed scenario knows how to handle an LDPCv correctly - in that it doesn't version that resource if a user issues a PUT against it (as a user would if they want the original resource LDPRv to get versioned).

Delta

With Fedora API Specification:

  • 4.1.1 Add HTTP header Link: rel="timegate" referencing itself
    • versions will need to be accessible via the TimeGate, which is the LDPRv.  The timemap will still include the regular path to the LDPRm. 
  • 4.1.2.1 include 'Vary: Accept-Datetime' header in response
  • 4.2.3 When requesting a Memento or a TimeGate, a Link header must be returned with type of "original" which points to the URI of the original.  See 2.2.1. Link Relation Type "original"
  • 4.2.3 "Memento-Datetime" should be returned when making a GET against a memento, indicating the timestamp of the memento
  • 4.1.2.2 The TimeMap link may include "from" and "until" attributes, do we want to provide these?  See 2.2.3. Link Relation Type "timemap"
  • 4.1.2.1 How is fedora going to handle Accept-Datetime negotiation?  nearest version?  nearest version before requested time?  Or is it even going to be used this way?  See 3.1. Datetime Negotiation (first paragraph after example steps)
  • 4.3.5 Are we going to continue allowing the "slug" header on requests to create versions?
  • It would be helpful to record which Datetime Negotiation pattern the modeshape implementation uses in documentation

With Memento Specification:


  • 2.2.1  - noted above in 4.2.3: on a GET/HEAD request to a LDPRm or TimeGate (the LDPRv, in this case) a Link header must be returned with relation type of 'original' which points to URI of the original resource (LDPRv)
  • 2.2.2  - on a GET/HEAD request to a LDPR or LDPRm, a Link header must be returned with the relation type of 'timegate', which points to the the timegate for the resource.
    • multiple timegate Links are possible
  • 2.2.3 - on a GET/HEAD request to a LDPR or LDPRm or TimeGate(which is the LDPR, in this case), a Link header must be returned with the relation type of 'timemap', which points to the timemap for the resource.
    • support "from" and "until" attributes?  These would cause the returned representation of the time map to only include the interval requested.
    • the link should make use the 'type' attribute to indicate the mime type of the timemap. 

Other questions

LDPCv Example Response


# GET request to LDPCv
curl http://localhost/rest/a/fcr:versions -H "Accept: application/linked-format" -v

< HTTP/1.1 200 OK
< Date: Thu, 21 Jun 2017 00:06:50 GMT
< Server: Apache
< Content-Type: application/link-format
< Allow: GET, HEAD, OPTIONS, POST, PATCH, DELETE
< Accept-Post: text/turtle,text/rdf+n3,text/n3,application/rdf+xml,application/n-triples,application/ld+json,multipart/form-data,application/sparql-update
< Accept-Patch: application/sparql-update
< Connection: close

<http://localhost/rest/a>;rel="original",
<http://localhost/rest/a/fcr:versions>
; rel="self";type="application/link-format"
; from="Tue, 20 Jun 2016 18:02:59 GMT"
; until="Wed, 09 Apr 2017 20:30:51 GMT",
<http://localhost/rest/a>
; rel="timegate",
<http://localhost/rest/a/fcr:versions/20160620180259356>
; rel="memento";datetime="Tue, 20 Jun 2016 18:02:59 GMT",
<http://localhost/rest/a/fcr:versions/version_1>
; rel="memento";datetime="Fri, 06 Jan 2017 18:50:11 GMT",
<http://localhost/rest/a/fcr:versions/20170409203051112>
; rel="memento";datetime="Wed, 09 Apr 2017 20:30:51 GMT",


Draft Tickets

Add versioning response headers to LDPRv HEAD/GET responses

Responses to HEAD and GET requests to LDPRv's (regular LDPR's which are or can be versioned) should return the following headers:

  • Vary: accept-datetime
  • Include 'Link: rel="timegate"' referencing itself. This is always present for versionable LDPR's.
  • Include 'Link: rel="timemap"' on versioned resource pointing to LDPCv. This is only present if this LDPRv has been previously versioned/has a LDPCv.
  • Since the LDPRv is also its own timegate, it must return an 'original' link header referencing itself
  • Include 'Content-Location' header ?
  • Add 'Memento-Datetime' header ?

See Pattern 1.2 in https://tools.ietf.org/html/rfc7089#page-18 for details.

Support Datetime negiotation for LDPRv's

Implement support for datetime negotiation for the retrieval of previous versions of a resource as follows:

  • GET requests to LDPRv URIs must support the 'Accept-Datetime' header
  • It must follow the syntax outlined in https://tools.ietf.org/html/rfc7089#section-2.1.1
  • The response must contain headers as outlined in ticket <LDPRm GET response>
  • When a datetime is provided, Fedora will respond with the LDPRm chronologically nearest to the given header as follows:
    • Returns nearest LDPRm with Memento-Datetime <= provided Accept-Datetime
    • otherwise, return nearest LDPRm with Memento-Datetime > Accept-Datetime
    • If no LDPRm's exist, then the LDPRv is returned

Add versioning headers for LDPRm HEAD/GET responses

Responses to LDPRm HEAD and GET requests must include headers as outlined below. A resource is a LDPRm if it is of type http://fedora.info/definitions/fcrepo#VersionedResource

  • Add HTTP header Link: rel="timegate" to the LDPRv
  • Include 'Link: rel="timemap"' on versioned resource pointing to LDPCv
  • add 'original' link header referencing LDPRv
  • Add 'Content-Location' header
  • Add 'Memento-Datetime' header

Support OPTIONS request on LDPRms

Response to include header 'Allow: GET, HEAD, OPTIONS, DELETE'

Prevent modification requests to LDPRm

PATCH/POST/PUT requests should all return 405 responses

DELETE -  If a resource is deleted from the repository, it appears as if all triples across the repository that have that resource as an object will get removed.  Even in a versioned resource.  According to the API spec, mementos need to be immutable.  This particular behavior of cleaning up will have to change where mementos are concerned.  

PUT requests to LDPRv (work in progress)

See https://fcrepo.github.io/fcrepo-specification/#httpput

If a Accept-Datetime is provided on a regular PUT request to an LDPRv

  • A new LDPRm is created from the LDPRv
  • The LDPRm will have a Memento-Datetime matching the provided Accept-Datetime
  • Response includes 'Link: rel=timemap' pointing to LDPCv for versioned resources
  • include 'Vary: Accept-Datetime' header in response
  • If the LDPCv for the LDPRv does not already exist, then it will be created and contain the new LDPRm

POST request to LDPCv to create new LDPRm (work in progress)

Update POST to LDPCv to include support for versioning headers.  In practice, the LDPCv for object with uri <http://localhost/rest/a> would be <http://localhost/rest/a/fcr:versions>

See: https://fcrepo.github.io/fcrepo-specification/#ldpcvpost

  • Creates LDPRm from the current LDPRv, as is the current behavior in fcrepo
  • If the LDPCv does not already exist, then it will be created and contain the new LDPRm
  • If a Memento-Datetime header is provided as part of this POST request, then the newly created LDPRm must honor
  • Does this need to support body requests? (QUESTION)

Create an LDPCv

Implement the creation of a LDPCv.  

Delete an LDPCv

See: https://fcrepo.github.io/fcrepo-specification/#ldpcvdelete

  • Deletes the LDPCv, which has the affect of also deleting all of the LDPRm's contained by it.
  • The Timemap reference from the LDPRv should no longer appear in its response headers.

Delete and LDPRv

(this one might not actually be a ticket, since the behavior, though not totally correct, is in line with what we're targeting.)

DELETE of a LDPR is part of the fedora implementation currently, and will stay part of it.  Per discussion on the fedora-tech list, linking the lifecycle of a LDPR and it's corresponding LDPRm's is okay. When the LDPRv is deleted, the mementos will also be deleted.   

There is the concern about deleting LDPRs and LDPRm's that are referenced by other resources or versions of resources. 

See: https://fcrepo.github.io/fcrepo-specification/#general-3

Requests to an LDPCv/TimeMap for a LDPRv must support a "application/link-format" response type, as shown in the example https://tools.ietf.org/html/rfc7089#page-37 

  • This response type is NOT required to include all statements in the LDPCv's graph, only those that are required by the link-format, outlined https://tools.ietf.org/html/rfc7089#page-36
    • Including: URI of LDPRv for this timemap, all LDPRms in this LDPCv with their memento date times, timegate link, link to the LDPCv

Make application/link-format the default serialization for TimeMaps


Answered questions

  • 4.1.1 Should the "timegate" link only be present when an object is versioned or should all LDPR that could be versioned provide this link?
    • Yes, it should always be present
    • This seems to imply that all resources are LDPRv's from the start 
  • 4.3.1 Why does each memento need a separate TimeMap to be created, rather than sharing one for all of the LDPRv and LDPRm of one LDPR?
    • This was a misinterpretation.  In the modeshape implementation, currently the timemap is the fcr:versions endpoint.
  • 4.3.1 LDPCv must not be contained by the LDPRv
    • does that mean that fcr:versions will no longer be a subpath of the LDPR?
    • This only applies to ldp:contains, the uri is irrelevant


  • No labels