Excerpt | ||||
---|---|---|---|---|
|
Versioning in Fedora is composed of three specific types of resources - a versionable resource (a LDPRv), a versions container (a LDPCv), and the actual versioned resources resource (a LDPRm)- and a variety of strategies to interact with these resources. Each type of resource and the HTTP methods that can be used on them are discussed below.
...
Excerpt | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Working with a versionable resource (a LDPRv)A versionable resource is a type of (regular) resource - see RESTful HTTP API - Containers - but it is created by invoking a specific Link header and the GET method has an additional interaction model beyond the GET scenarios when interacting with non-versioned resources. All of the headers and methods for regular resources are applicable to a versionable resource. A resource can be declared versionable when it is created originally. This is achieved by including the following link header to your PUT or POST commands when creating the resource. When a versionable resource is created, the versions container will be created at the same time.
Request URI: /path/to/resource Methods: GET, PUT, POST
Status |
|
Code Block |
---|
curl -H "Accept: text/turtle" -H "Accept-Datetime: Wed, 29 Aug 2018 15:47:50 GMT" http://localhost:8080/rest/path/to/resource |
Response:
Code Block |
---|
HTTP/1.1 302 Found Date: Wed, 29 Aug 2018 22:09:28 GMT Set-Cookie: JSESSIONID=hrj5jm80kdjdw9attrozpy19;Path=/ Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Tue, 28-Aug-2018 22:09:28 GMT Link: <http://www.w3.org/ns/ldp#Resource>;rel="type" Link: <http://www.w3.org/ns/ldp#Container>;rel="type" Link: <http://www.w3.org/ns/ldp#BasicContainer>;rel="type" Link: <http://localhost:8080/static/constraints/ContainerConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy" Link: <http://localhost:8080/rest/path/to/resource6>; rel="timegate" Link: <http://localhost:8080/rest/path/to/resource>; rel="original" Link: <http://localhost:8080/rest/path/to/resource/fcr:versions>; rel="timemap" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Accept-Patch: application/sparql-update Accept-Post: text/turtle,text/rdf+n3,text/n3,application/rdf+xml,application/n-triples,application/ld+json Allow: MOVE,COPY,DELETE,POST,HEAD,GET,PUT,PATCH,OPTIONS Link: <http://localhost:8080/rest/path/to/resource/fcr:acl>; rel="acl" Preference-Applied: return=representation Vary: Prefer Vary: Accept Vary: Range Vary: Accept-Encoding Vary: Accept-Language Vary: Accept-Datetime Location: http://localhost:8080/rest/path/to/resource/fcr:versions/20180829154750 Content-Length: 0 Server: Jetty(9.3.1.v20150714) |
Status:
Status | ||||||
---|---|---|---|---|---|---|
|
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Examples:
Code Block |
---|
#PUT curl -X PUT -H "Link: <http://mementoweb.org/ns#OriginalResource>; rel=\"type\"" http://localhost:8080/rest/path/to/resource #POST curl -X POST -H "Link: <http://mementoweb.org/ns#OriginalResource>; rel=\"type\"" -H "Slug: resource" http://localhost:8080/rest/path/to |
...
Excerpt | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Working with a versions container (a LDPCv)Request URI: /path/to/resource/fcr:versions Methods: GET, POST, DELETE
Status |
|
Code Block |
---|
curl -H "Accept: text/turtle" http://localhost:8080/rest/path/to/resource/fcr:versions |
Response:
Code Block |
---|
Status: HTTP/1.1 200 OK Headers: ETag: W/"671df2a47622331ffb6b70b6156526a67e5ab760" Last-Modified: Wed, 30 May 2018 21:03:54 GMT Link: <http://www.w3.org/ns/ldp#Resource>;rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>;rel="type" Link: <http://localhost:8080/rest/path/to/resource/fcr:versions/fcr:acl>; rel="acl" Link: <http://mementoweb.org/ns#TimeMap>; rel="type" Link: <http://localhost:8080/rest/path/to/resource>; rel="original" Link: <http://localhost:8080/rest/path/to/resource>; rel="timegate" Link: <http://localhost:8080/rest/path/to/resource/fcr:versions>; rel="timemap" Vary-Post: Memento-Datetime Allow: POST,HEAD,GET,OPTIONS,DELETE Preference-Applied: return=representation Vary: Prefer Vary: Accept Vary: Range Vary: Accept-Encoding Vary: Accept-Language Content-Type: text/turtle;charset=utf-8 Content-Length: 1944 Body: @prefix memento: <http://mementoweb.org/ns#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix fedora: <http://fedora.info/definitions/v4/repository#> . @prefix ldp: <http://www.w3.org/ns/ldp#> . <http://localhost:8080/rest/path/to/resource/fcr:versions> rdf:type fedora:TimeMap ; rdf:type fedora:Resource ; fedora:lastModifiedBy "bypassAdmin" ; fedora:createdBy "bypassAdmin" ; fedora:created "2018-05-30T21:00:48.169Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:lastModified "2018-05-30T21:03:54.88Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; memento:original <http://localhost:8080/rest/path/to/resource> ; rdf:type ldp:RDFSource ; fedora:writable true ; ldp:contains <http://localhost:8080/rest/path/to/resource/fcr:versions/20180530210300> ; ldp:contains <http://localhost:8080/rest/path/to/resource/fcr:versions/20180530210354> . |
Status:
Status | ||||||
---|---|---|---|---|---|---|
|
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Status colour Blue title POST
Create a new
version colour | Blue |
---|---|
title | POST |
versioned resource (a
memento of an object).new LDPRm)
Versions can by created in one of two ways, with a Memento-Datetime header and request body or with neither. If the Memento-Datetime header is omitted, the current time will be used by default and the current state of the versionable resource will be preserved. Any specified body will be ignored. If, however, the Memento-Datetime header is included, the versioned resource will be stored at this time marker and the request body will be stored as the versioned resource.
Request Headers
MEMENTO-DATETIME (Optional) An RFC-1123 Date. (E.g. "Wed, 30 May 2018 23:02:44 GMT")
Example 1 (Create a new version resource 'now.' Its state is that of the current versionable resource.):
Code Block |
---|
# Create version from current state of the object curl -X POST http://localhost:8080/rest/path/to/resource/fcr:versions |
Response:
Code Block |
---|
HTTP/1.1 201 Created Date: Wed, 29 Aug 2018 21:21:34 GMT Set-Cookie: JSESSIONID=dmqpuv06yty7b0tf9y94z3rx;Path=/ Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Tue, 28-Aug-2018 21:21:34 GMT ETag: W/"f7c04eb7e3f04c17d1fc852bef5f6b030ea271e7" Last-Modified: Wed, 29 Aug 2018 20:22:11 GMT Link: <http://localhost:8080/static/constraints/ContainerConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy" Link: <http://localhost:8080/rest/path/to/resource>; rel="timegate" Link: <http://localhost:8080/rest/path/to/resource>; rel="original" Link: <http://localhost:8080/rest/path/to/resource/fcr:versions>; rel="timemap" Memento-Datetime: Wed, 29 Aug 2018 21:21:34 GMT Link: <http://mementoweb.org/ns#Memento>; rel="type" Location: http://localhost:8080/rest/path/to/resource/fcr:versions/20180829212134 Content-Type: text/plain Content-Length: 68 Server: Jetty(9.3.1.v20150714) http://localhost:8080/rest/versioning/v9/fcr:versions/20180829212134 |
Status:
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Example 2 (Create a new version versioned resource at the supplied time marker. Its state is supplied as the request body.):
Code Block |
---|
# Create version by supplying body and Memento-Datetime curl -X GET http://localhost:8080/rest/path/to/resource > resource.ttl curl -X POST -H "Memento-Datetime: Wed, 30 May 2018 23:02:44 GMT" -H "Content-Type: text/turtle" --data-binary "@resource.ttl" http://localhost:8080/rest/path/to/resource/fcr:versions |
Response:
Code Block |
---|
HTTP/1.1 201 Created Date: Wed, 29 Aug 2018 21:38:01 GMT Set-Cookie: JSESSIONID=7bs7ddtba9l110261g9qyyotq;Path=/ Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Tue, 28-Aug-2018 21:38:01 GMT ETag: W/"a6b6c76b16935d00bcd1b5f259cfd2ecb225e3bd" Last-Modified: Wed, 29 Aug 2018 20:22:11 GMT Link: <http://localhost:8080/static/constraints/ContainerConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy" Link: <http://localhost:8080/rest/path/to/resource>; rel="timegate" Link: <http://localhost:8080/rest/path/to/resource>; rel="original" Link: <http://localhost:8080/rest/path/to/resource/fcr:versions>; rel="timemap" Memento-Datetime: Wed, 30 May 2018 23:02:44 GMT Link: <http://mementoweb.org/ns#Memento>; rel="type" Location: http://localhost:8080/rest/path/to/resource/fcr:versions/20180530230244 Content-Type: text/plain Content-Length: 68 Server: Jetty(9.3.1.v20150714) http://localhost:8080/rest/versioning/v9/fcr:versions/20180530230244 |
Status:
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Status | ||||||
---|---|---|---|---|---|---|
|
Status | ||||||
---|---|---|---|---|---|---|
|
Status colour Red title DELETE
Remove
a previous version of an objectcolour | Red |
---|---|
title | DELETE |
the versions container and all versioned resources
NB: In addition to deleting all versioned resources, the parent - or versionable resource - will no longer be versionable, meaning the parent resource cannot be versioned until made versionable again. |
---|
Example:
Code Block |
---|
curl -X DELETE http://localhost:8080/rest/path/to/resource/fcr:versions |
Response:
Code Block |
---|
HTTP/1.1 204 No Content Date: Wed, 29 Aug 2018 21:41:54 GMT Set-Cookie: JSESSIONID=1hfa3law3t4kp3z3wjps3qw84;Path=/ Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Tue, 28-Aug-2018 21:41:54 GMT Server: Jetty(9.3.1.v20150714) |
Status:
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Excerpt | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Working with a versioned resource (a LDPRm)Request URI: /path/to/resource/fcr:versions/<timestamp> Methods: GET, DELETE
Status |
|
Code Block |
---|
curl -H "Accept: text/turtle" http://localhost:8080/rest/path/to/resource/fcr:versions/20180829154750 |
Response:
Code Block |
---|
Status: HTTP/1.1 200 OK HeadersDate: ETag: W/"671df2a47622331ffb6b70b6156526a67e5ab760" Last-Modified: Wed Thu, 30 MayAug 2018 2114:0331:5430 GMT Link: <http://www.w3.org/ns/ldp#Resource>;rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>;rel="type" Link: <http://localhost:8080/rest/path/to/resource/fcr:versions/fcr:acl>; rel="acl" Link: <http://mementoweb.org/ns#TimeMap>; rel="type" Set-Cookie: JSESSIONID=yb9ppso27n221q1xdvu4cqzi5;Path=/ Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Wed, 29-Aug-2018 14:31:30 GMT ETag: W/"e766f5e674845e72f7d589e346b6a96a7735336e" Last-Modified: Wed, 29 Aug 2018 15:47:31 GMT Link: <http://localhost:8080/rest/path/to/resource>; www.w3.org/ns/ldp#Resource>;rel="originaltype" Link: <http://localhost:8080/rest/path/to/resource>; rel="timegate" www.w3.org/ns/ldp#Container>;rel="type" Link: <http://www.w3.org/ns/ldp#BasicContainer>;rel="type" Link: <http://localhost:8080/reststatic/path/to/resource/fcr:versions>constraints/ContainerConstraints.rdf>; rel="timemaphttp://www.w3.org/ns/ldp#constrainedBy" Vary-Post: Memento-Datetime Allow: POST,HEAD,GET,OPTIONS,DELETE Preference-Applied: return=representation Vary: Prefer Vary: Accept Vary: Range Vary: Accept-Encoding Vary: Accept-Language Content-Type: text/turtle;charset=utf-8 Content-Length: 1944 Body: @prefix mementoLink: <http://localhost:8080/rest/path/to/resource>; rel="timegate" Link: <http://localhost:8080/rest/path/to/resource>; rel="original" Link: <http://localhost:8080/rest/path/to/resource/fcr:versions>; rel="timemap" Allow: GET,HEAD,OPTIONS,DELETE Memento-Datetime: Wed, 29 Aug 2018 15:47:50 GMT Link: <http://mementoweb.org/ns#Memento>; rel="type" Preference-Applied: return=representation Vary: Prefer Vary: Accept Vary: Range Vary: Accept-Encoding Vary: Accept-Language Content-Type: text/turtle;charset=utf-8 Content-Length: 1754 Server: Jetty(9.3.1.v20150714) @prefix premis: <http://mementoweb.www.loc.gov/premis/rdf/v1#> . @prefix test: <info:fedora/test/> . @prefix memento: <http://mementoweb.org/ns#> . @prefix rdfrdfs: <http://www.w3.org/19992000/0201/22-rdf-syntax-ns#>schema#> . @prefix fedorawebac: <http://fedora.info/definitions/v4/repository#>webac#> . @prefix ldpacl: <http://www.w3.org/ns/auth/ldp#>acl#> . @prefix ns001: <http://localhost:8080/rest/path/to/resource/fcr:versions> rdf:type fedora:TimeMap ; rdf:type fedora:Resource ; fedora:lastModifiedBy "bypassAdmin" ; fedora:createdBy "bypassAdmin" ;ktest/> . @prefix xsi: <http://www.w3.org/2001/XMLSchema-instance> . @prefix xmlns: <http://www.w3.org/2000/xmlns/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix fedora: <http://fedora.info/definitions/v4/repository#> . @prefix xml: <http://www.w3.org/XML/1998/namespace> . @prefix ebucore: <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#> . @prefix ldp: <http://www.w3.org/ns/ldp#> . @prefix xs: <http://www.w3.org/2001/XMLSchema> . @prefix fedoraconfig: <http://fedora.info/definitions/v4/config#> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix dc: <http://purl.org/dc/elements/1.1/> . <http://localhost:8080/rest/path/to/resource> fedora:createdrdf:type "2018-05-30T21:00:48.169Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ldp:RDFSource ; fedora:lastModifiedrdf:type "2018-05-30T21:03:54.88Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>ldp:Container ; mementordf:originaltype <http://localhost:8080/rest/path/to/resource> fedora:Resource ; rdf:type ldp:RDFSourceBasicContainer ; fedorardf:writabletype true ; ldp:contains <http://localhost:8080/rest/path/to/resource/fcr:versions/20180530210300>fedora:Container ; ldpfedora:containscreated <http://localhost:8080/rest/path/to/resource/fcr:versions/20180530210354> . |
Status:
Status | ||||||
---|---|---|---|---|---|---|
|
Versions can by created in one of two ways. If the Memento-Datetime header is omitted, the current time will be used by default and the current state of the versionable resource will be preserved. Any specified body will be ignored. If, however, the Memento-Datetime header is included, the versioned resource will be stored at this time marker and the request body will be stored as the versioned resource.
Request Headers
MEMENTO-DATETIME (Optional) An RFC-1123 Date. (E.g. "Wed, 30 May 2018 23:02:44 GMT")
Example 1 (Create a new version resource 'now.' Its state is that of the current versionable resource.):
Code Block |
---|
# Create version from current state of the object
curl -X POST http://localhost:8080/rest/path/to/resource/fcr:versions
|
Response:
Code Block |
---|
HTTP/1.1 201 Created
Date: Wed, 29 Aug 2018 21:21:34 GMT
Set-Cookie: JSESSIONID=dmqpuv06yty7b0tf9y94z3rx;Path=/
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Tue, 28-Aug-2018 21:21:34 GMT
ETag: W/"f7c04eb7e3f04c17d1fc852bef5f6b030ea271e7"
Last-Modified: Wed, 29 Aug 2018 20:22:11 GMT
Link: <http://localhost:8080/static/constraints/ContainerConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy"
Link: <http://localhost:8080/rest/path/to/resource>; rel="timegate"
Link: <http://localhost:8080/rest/path/to/resource>; rel="original"
Link: <http://localhost:8080/rest/path/to/resource/fcr:versions>; rel="timemap"
Memento-Datetime: Wed, 29 Aug 2018 21:21:34 GMT
Link: <http://mementoweb.org/ns#Memento>; rel="type"
Location: http://localhost:8080/rest/path/to/resource/fcr:versions/20180829212134
Content-Type: text/plain
Content-Length: 68
Server: Jetty(9.3.1.v20150714)
http://localhost:8080/rest/versioning/v9/fcr:versions/20180829212134 |
Status:
Example 2 (Create a new version resource at the supplied time marker. Its state is supplied as the request body.):
Code Block |
---|
# Create version by supplying body and Memento-Datetime
curl -X GET http://localhost:8080/rest/path/to/resource > resource.ttl
curl -X POST -H "Memento-Datetime: Wed, 30 May 2018 23:02:44 GMT" -H "Content-Type: text/turtle" --data-binary "@resource.ttl" http://localhost:8080/rest/path/to/resource/fcr:versions |
Response:
Code Block |
---|
HTTP/1.1 201 Created Date: Wed, 29 Aug 2018 21:38:01 GMT Set-Cookie: JSESSIONID=7bs7ddtba9l110261g9qyyotq;Path=/ Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Tue, 28-Aug-2018 21:38:01 GMT ETag: W/"a6b6c76b16935d00bcd1b5f259cfd2ecb225e3bd" Last-Modified: Wed, 29 Aug 2018 20:22:11 GMT Link: <http://localhost:8080/static/constraints/ContainerConstraints.rdf>; rel="http"2018-08-29T15:47:31.041Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:writable true ; fedora:lastModified "2018-08-29T15:47:31.041Z"^^<http://www.w3.org/ns/ldp#constrainedBy" Link: <http://localhost:8080/rest/path/to/resource>; rel="timegate" Link: <http://localhost:8080/rest/path/to/resource>; rel="original" Link: <http://localhost:8080/rest/path/to/resource/fcr:versions>; rel="timemap" Memento-Datetime: Wed, 30 May 2018 23:02:44 GMT Link: <http://mementoweb.org/ns#Memento>; rel="type" Location: http://localhost:8080/rest/path/to/resource/fcr:versions/20180530230244 Content-Type: text/plain Content-Length: 68 Server: Jetty(9.3.1.v20150714) http://localhost:8080/rest/versioning/v9/fcr:versions/20180530230244 |
Status:
2001/XMLSchema#dateTime> ;
fedora:lastModifiedBy "fedoraAdmin" ;
fedora:createdBy "fedoraAdmin" ;
rdf:type ldp:RDFSource ;
rdf:type ldp:Container ;
fedora:writable true .
|
Status: Status
Status | ||||||
---|---|---|---|---|---|---|
|
|
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Request URI: /path/to/some/resource/fcr:versions/<timestamp>
|
Status colour Red title DELETE
Remove a previous version of an object
colour | Red |
---|---|
title | DELETE |
Example:
Code Block |
---|
curl -i -X DELETE http://localhost:8080/rest/path/to/resource/fcr:versions/<timestamp>20180829154750 |
Response:
Code Block |
---|
Status:HTTP/1.1 204 No Content Headers: Date: Wed, 30 May 2018 23:58:28 GMT Date: Thu, 30 Aug 2018 14:35:21 GMT Set-Cookie: JSESSIONID=1w3ta3umg5nai1q4mtfp5qn48p;Path=/ Expires: Thu, 01 Jan 1970 00:00:00 GMT Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Wed, 29-Aug-2018 14:35:21 GMT Server: Jetty(9.3.1.v20150714) |
Status:
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|
Status | ||||||||
---|---|---|---|---|---|---|---|---|
|