Table of Contents
Overview
Introduction
The Fedora RDF-based responses may be serialized as:
- application/ld+json
- application/n-triples
- application/rdf+xml
- text/n3 (or text/rdf+n3)
- text/plain
- text/turtle (or application/x-turtle)
The text/html response also includes embedded RDFa markup.
Fedora implements the Linked Data Platform 1.0 Architecture, which:
[...] describes the use of HTTP for accessing, updating, creating and deleting resources from servers that expose their resources as Linked Data. It provides clarifications and extensions of the rules of Linked Data [LINKED-DATA]:
- Use URIs as names for things
- Use HTTP URIs so that people can look up those names
- When someone looks up a URI, provide useful information, using the standards (RDF*, SPARQL)
- Include links to other URIs, so that they can discover more things
Endpoints
Resources
Repository objects can be loosely divided into two classes of resources:
- Containers ("fedora:Container"), containing RDF properties and 0 or more child resources
- Binaries, containing any binary payload (roughly corresponding to Fedora 3 datastreams)
Containers
Request URI: /path/to/some/resource
Methods: GET, POST, PUT, PATCH, HEAD, OPTIONS, DELETE
GET Retrieve the content of the resource
Request Headers:
RANGE Byte range of content to retrieve, of the form: "Range: bytes=500-999"
ACCEPT RDF sources support content negotiation with these formats: application/ld+json, application/n-triples, application/rdf+xml, application/x-turtle, text/html, text/n3, text/plain, text/rdf+n3, text/turtle
Note: JSON-LD profiles can be requested by using the following Accept
headers:
Accept: application/ld+json; profile=\"http://www.w3.org/ns/json-ld#expanded\"" - default
Accept: application/ld+json; profile=\"http://www.w3.org/ns/json-ld#compacted\""
Accept: application/ld+json; profile=\"http://www.w3.org/ns/json-ld#flattened\""
LIMIT Number of child resources to list. If paired with Accept: (X)HTML, the default is 100. Otherwise, the default is -1
(all children are listed)
IF-NONE-MATCH IF-MODIFIED-SINCE
PREFER
return=representation
return=representation; include=" URIs "
return=representation; omit=" URIs "
where representation indicates that links to other resources and their properties should also be included. URIs is a space-separate list of LDP defined preferences, and also:
URI | Description |
---|---|
http://fedora.info/definitions/fcrepo#PreferInboundReferences | Include assertions from other Fedora resources to this node (excluded from representation by default) |
http://fedora.info/definitions/fcrepo#ServerManaged | Embed server managed properties in the representation (enabled by default) |
http://www.w3.org/ns/oa#PreferContainedDescriptions | Embed "child" resources in the returned representation |
http://www.w3.org/ns/ldp#PreferContainment | Include/Exclude "ldp:contains" assertions to contained resources (enabled by default) |
http://www.w3.org/ns/ldp#PreferMembership | Include/Exclude assertions to member resources established by the Direct and Indirect containers (enabled by default) |
http://www.w3.org/ns/ldp#PreferMinimalContainer | Include/Exclude triples that would be present when the container is empty (enabled by default) |
Example (1): Turtle
curl -H "Accept: text/turtle" "http://localhost:8080/rest/path/to/resource"
Response:
Status: 200 OK Headers: ETag: W/"51FA3512608877FD9197C8701F986014" X-State-Token: 0366B7A7332BADF807F473D5579CD1E5 Last-Modified: Thu, 04 Mar 2021 14:23:46 GMT 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" Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Container>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Container>; rel="type" Accept-External-Content-Handling: copy,redirect,proxy Accept-Patch: application/sparql-update Accept-Post: text/turtle,text/rdf+n3,text/n3,application/rdf+xml,application/n-triples,application/ld+json Allow: 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 Content-Type: text/turtle;charset=utf-8 Content-Length: 822 Body: @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> fedora:created "2021-03-04T14:23:46.625848Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:lastModified "2021-03-04T14:23:46.625848Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:createdBy "fedoraAdmin" ; fedora:lastModifiedBy "fedoraAdmin" ; rdf:type ldp:BasicContainer ; rdf:type ldp:Resource ; rdf:type fedora:Resource ; rdf:type ldp:RDFSource ; rdf:type ldp:Container ; rdf:type fedora:Container .
Example (2): RDF/XML
curl -H "Accept: application/rdf+xml" "http://localhost:8080/rest/path/to/resource"
Response:
Status: 200 OK Headers: ETag: W/"2295E7A75138993E8EB9A961F053FAC7" X-State-Token: 0366B7A7332BADF807F473D5579CD1E5 Last-Modified: Thu, 04 Mar 2021 14:23:46 GMT 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" Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Container>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Container>; rel="type" Accept-External-Content-Handling: copy,redirect,proxy Accept-Patch: application/sparql-update Accept-Post: text/turtle,text/rdf+n3,text/n3,application/rdf+xml,application/n-triples,application/ld+json Allow: 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 Content-Type: application/rdf+xml Content-Length: 1096 Body: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:fedora="http://fedora.info/definitions/v4/repository#" xmlns:ldp="http://www.w3.org/ns/ldp#" > <rdf:Description rdf:about="http://localhost:8080/rest/path/to/resource"> <rdf:type rdf:resource="http://fedora.info/definitions/v4/repository#Container"/> <fedora:createdBy>fedoraAdmin</fedora:createdBy> <fedora:created rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2021-03-04T14:23:46.625848Z</fedora:created> <fedora:lastModifiedBy>fedoraAdmin</fedora:lastModifiedBy> <rdf:type rdf:resource="http://www.w3.org/ns/ldp#BasicContainer"/> <rdf:type rdf:resource="http://www.w3.org/ns/ldp#Resource"/> <rdf:type rdf:resource="http://fedora.info/definitions/v4/repository#Resource"/> <fedora:lastModified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2021-03-04T14:23:46.625848Z</fedora:lastModified> <rdf:type rdf:resource="http://www.w3.org/ns/ldp#Container"/> <rdf:type rdf:resource="http://www.w3.org/ns/ldp#RDFSource"/> </rdf:Description> </rdf:RDF>
Example (3): Prefer headers
curl -i -u fedoraAdmin:fedoraAdmin http://localhost:8080/rest/collection -H 'Prefer: return=representation; include="http://fedora.info/definitions/fcrepo#PreferInboundReferences"; omit="http://www.w3.org/ns/ldp#PreferMembership http://www.w3.org/ns/ldp#PreferContainment"'
Response:
Status: 200 OK Headers: ETag: W/"16E9753D375AB3E9306140DA1AD24193" X-State-Token: EE5D77CFC717FF045DB3F9821AB25472 Last-Modified: Thu, 04 Mar 2021 14:28:00 GMT Link: <http://localhost:8080/rest/collection>; rel="timegate" Link: <http://localhost:8080/rest/collection>; rel="original" Link: <http://localhost:8080/rest/collection/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Container>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Container>; rel="type" Accept-External-Content-Handling: copy,redirect,proxy Accept-Patch: application/sparql-update Accept-Post: text/turtle,text/rdf+n3,text/n3,application/rdf+xml,application/n-triples,application/ld+json Allow: DELETE,POST,HEAD,GET,PUT,PATCH,OPTIONS Link: <http://localhost:8080/rest/collection/fcr:acl>; rel="acl" Preference-Applied: return=representation; include="http://fedora.info/definitions/fcrepo#PreferInboundReferences"; omit="http://www.w3.org/ns/ldp#PreferMembership http://www.w3.org/ns/ldp#PreferContainment" Vary: Prefer Vary: Accept Vary: Range Vary: Accept-Encoding Vary: Accept-Language Vary: Accept-Datetime Content-Type: text/turtle;charset=utf-8 Content-Length: 927 Body: @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/collection> fedora:created "2021-03-04T14:28:00.682730Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:lastModified "2021-03-04T14:28:00.682730Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:createdBy "fedoraAdmin" ; fedora:lastModifiedBy "fedoraAdmin" ; rdf:type ldp:BasicContainer ; rdf:type ldp:Resource ; rdf:type fedora:Resource ; rdf:type ldp:RDFSource ; rdf:type ldp:Container ; rdf:type fedora:Container . <http://localhost:8080/rest/item> ldp:isMemberOfCollection <http://localhost:8080/rest/collection> .
Example (4): Non-RDF Source
curl "http://localhost:8080/rest/path/to/binary/resource"
Response:
Status: 200 OK Headers: ETag: "0DFF05D21B40AF6576241DB58A91A7E3" X-State-Token: 0DFF05D21B40AF6576241DB58A91A7E3 Last-Modified: Thu, 04 Mar 2021 14:32:03 GMT Content-Type: text/plain Accept-Ranges: bytes Content-Disposition: attachment; filename=""; creation-date="Thu, 04 Mar 2021 14:32:03 GMT"; modification-date="Thu, 04 Mar 2021 14:32:03 GMT"; size=20 Link: <http://localhost:8080/rest/path/to/binary/resource/fcr:metadata>; rel="describedby" Link: <http://localhost:8080/rest/path/to/binary/resource>; rel="timegate" Link: <http://localhost:8080/rest/path/to/binary/resource>; rel="original" Link: <http://localhost:8080/rest/path/to/binary/resource/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Binary>; rel="type" Accept-External-Content-Handling: copy,redirect,proxy Allow: DELETE,HEAD,GET,PUT,OPTIONS Link: <http://localhost:8080/rest/path/to/binary/resource/fcr:acl>; rel="acl" Cache-Control: no-transform, must-revalidate, max-age=0 Content-Length: 20 Body: {binary content}
Status:
200 OK
304 Not Modified
404 Not Found
406 Not Acceptable (the 'Accept' request-header media type is either invalid or unsupported)
POST Create new resources within a LDP container
Request Headers:
CONTENT-DISPOSITION (Optional) The filename provided in the content disposition header will be stored in a ebucore:filename property. (See 'Example (6): Uploaded file with filename')
CONTENT-TYPE (Optional) MIME type of the uploaded binary or RDF content (See ' Example (2): Create a new child binary resource with empty content ')
If the MIME type corresponds to a supported RDF format, the uploaded content will be parsed as RDF and used to populate the child node properties.
RDF will be interpreted using the current resource as the base URI (e.g. <> will be expanded to the current URI). Namespaces must be declared in full.
If the MIME type corresponds to a supported RDF format, and you also provide a Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type"
header. Then the contents will be stored as a binary resource with the provided MIME type as Content-type.
For other MIME types, the uploaded content will be used to create a binary resource.
Supported RDF formats: text/turtle, text/rdf+n3, application/n3, text/n3, application/rdf+xml, application/n-triples, application/ld+json
SLUG (Optional) A suggested name for the new child resource, which the repository may ignore.
The slug you provide does not guarantee the location of the created resource. Clients must check the Location header for the path to the created resource.
DIGEST (Optional) A way of providing one or more checksums (SHA-1, SHA-256, MD5) which will be checked against the uploaded content to ensure error-free transfer. The header is interpreted according to RFC-3230 (see 'Example (4): Uploaded file with checksum', 'Example (4b): Uploaded file with multiple checksum' and 'Example (5): Uploaded file with checksum mismatch'). If the provided checksum does not match the calculated value for the uploaded file a 409 Conflict will be returned. See PATCH example for documentation on how to change the default algorithm used during on-demand fixity checking. Valid `Digest` algorithms/values are: sha, sha-256, sha-512, sha-512/256 or md5.
LINK With a value containing subfield rel= http://fedora.info/definitions/fcrepo#ExternalContent
the client may provide binary content from an external path. See the external content documentation for details about syntax and handling options (note, this is disabled by default), and Example 7 for usage. With a rel="type" and a URI of http://fedora.info/definitions/v4/repository#ArchivalGroup
the client may create an Archival Group container. See the Fedora OCFL Object Structure for more information about how this affects the OCFL structure and see Example 2b
Example (1a): Create a new child node
curl -X POST "http://localhost:8080/rest/"
Response:
Status: 201 Created Headers: ETag: W/"0AA840C9923E2DCAE850E70E56575771" X-State-Token: 56AEFC5E47294A2D336BDC23727BEC2A Last-Modified: Thu, 04 Mar 2021 14:34:00 GMT Link: <http://localhost:8080/rest/64b9d374-5e20-4b06-964a-d4724528d1e2>; rel="timegate" Link: <http://localhost:8080/rest/64b9d374-5e20-4b06-964a-d4724528d1e2>; rel="original" Link: <http://localhost:8080/rest/64b9d374-5e20-4b06-964a-d4724528d1e2/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Container>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Container>; rel="type" Link: <http://localhost:8080/rest/64b9d374-5e20-4b06-964a-d4724528d1e2/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/64b9d374-5e20-4b06-964a-d4724528d1e2 Body: http://localhost:8080/rest/64b9d374-5e20-4b06-964a-d4724528d1e2
Example (1b): Create a new Archival Group node
See definition of archival group.
curl -X POST -u fedoraAdmin:fedoraAdmin -H "Slug: my-archival-group" -H "Link: <http://fedora.info/definitions/v4/repository#ArchivalGroup>;rel=\"type\"" http://localhost:8080/rest
Status: 201 Created Headers: ETag: W/"2012C77920D7115A29671223FB5C78CC" X-State-Token: B39C9CC391FE7CEEA41F88F62189ED92 Last-Modified: Thu, 04 Mar 2021 14:36:39 GMT Link: <http://localhost:8080/rest/my-archival-group>; rel="timegate" Link: <http://localhost:8080/rest/my-archival-group>; rel="original" Link: <http://localhost:8080/rest/my-archival-group/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#ArchivalGroup>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Container>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Container>; rel="type" Link: <http://localhost:8080/rest/my-archival-group/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/my-archival-group Content-Type: text/plain Content-Length: 44 Body: http://localhost:8080/rest/my-archival-group
Note any subsequent posts to the above created ArchivalGroup endpoint will cause those new resources to be nested within that Archival Group. For details on the structure and workings of Archival Groups see Fedora OCFL Object Structure.
Example (2): Create a new child binary resource with empty content
curl -i -X POST -H "Content-Type:text/plain" "http://localhost:8080/rest"
Response:
Status: 201 Created Headers: ETag: "842E0D598779799191CE1D8D79F8E812" X-State-Token: 842E0D598779799191CE1D8D79F8E812 Last-Modified: Thu, 04 Mar 2021 14:38:38 GMT Link: <http://localhost:8080/rest/40a0d656-1f70-4135-b6a8-ee956dfb1903/fcr:metadata>; rel="describedby"; anchor="http://localhost:8080/rest/40a0d656-1f70-4135-b6a8-ee956dfb1903" Link: <http://localhost:8080/rest/40a0d656-1f70-4135-b6a8-ee956dfb1903>; rel="timegate" Link: <http://localhost:8080/rest/40a0d656-1f70-4135-b6a8-ee956dfb1903>; rel="original" Link: <http://localhost:8080/rest/40a0d656-1f70-4135-b6a8-ee956dfb1903/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Binary>; rel="type" Link: <http://localhost:8080/rest/40a0d656-1f70-4135-b6a8-ee956dfb1903/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/40a0d656-1f70-4135-b6a8-ee956dfb1903 Content-Type: text/plain Content-Length: 63 Body: http://localhost:8080/rest/40a0d656-1f70-4135-b6a8-ee956dfb1903
Example (3): Create a new container with RDF properties
curl -i -u fedoraAdmin:fedoraAdmin -X POST -H "Content-Type: text/turtle" --data-binary "PREFIX dc: <http://purl.org/dc/elements/1.1/> <> dc:title \"some-resource-title\"" http://localhost:8080/rest/
Response:
Status: 201 Created Headers: ETag: W/"541702CF94C0D6BD8B2423DED7687BC1" X-State-Token: B9F8FBFA0B1D724160181298C299242C Last-Modified: Thu, 04 Mar 2021 14:42:02 GMT Link: <http://localhost:8080/rest/febddb7c-4526-4c0d-90dc-c83c11921586>; rel="timegate" Link: <http://localhost:8080/rest/febddb7c-4526-4c0d-90dc-c83c11921586>; rel="original" Link: <http://localhost:8080/rest/febddb7c-4526-4c0d-90dc-c83c11921586/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Container>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Container>; rel="type" Link: <http://localhost:8080/rest/febddb7c-4526-4c0d-90dc-c83c11921586/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/febddb7c-4526-4c0d-90dc-c83c11921586 Content-Type: text/plain Content-Length: 63 Body: http://localhost:8080/rest/febddb7c-4526-4c0d-90dc-c83c11921586
Example (4): Uploaded file with checksum
curl -i -u fedoraAdmin:fedoraAdmin -X POST --data-binary "@picture.jpg" -H"digest: sha=cb1a576f22e8e3e110611b616e3e2f5ce9bdb941" "http://localhost:8080/rest/parent"
Response:
Status: 201 Created Headers: ETag: "1F819784173CD233B8EA9691778E1BB0" X-State-Token: 1F819784173CD233B8EA9691778E1BB0 Last-Modified: Thu, 04 Mar 2021 14:45:55 GMT Link: <http://localhost:8080/rest/parent/e4b7add5-7860-4130-a6a6-42391e86248b/fcr:metadata>; rel="describedby"; anchor="http://localhost:8080/rest/parent/e4b7add5-7860-4130-a6a6-42391e86248b" Link: <http://localhost:8080/rest/parent/e4b7add5-7860-4130-a6a6-42391e86248b>; rel="timegate" Link: <http://localhost:8080/rest/parent/e4b7add5-7860-4130-a6a6-42391e86248b>; rel="original" Link: <http://localhost:8080/rest/parent/e4b7add5-7860-4130-a6a6-42391e86248b/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Binary>; rel="type" Link: <http://localhost:8080/rest/parent/e4b7add5-7860-4130-a6a6-42391e86248b/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/parent/e4b7add5-7860-4130-a6a6-42391e86248b Content-Type: text/plain Content-Length: 70 Body: http://localhost:8080/rest/parent/e4b7add5-7860-4130-a6a6-42391e86248b
Example (4b): Uploaded file with multiple checksum
curl -i -u fedoraAdmin:fedoraAdmin -X POST --data-binary "@picture.jpg" -H"digest: sha=cb1a576f22e8e3e110611b616e3e2f5ce9bdb941, sha-256=95331b60710d0400ee4913b5613c78f54" "http://localhost:8080/rest/parent"
Response:
Status: 201 Created Headers: ETag: "C19921567DCDD99C9E17A9151005824A" X-State-Token: C19921567DCDD99C9E17A9151005824A Last-Modified: Thu, 04 Mar 2021 14:48:10 GMT Link: <http://localhost:8080/rest/parent/b9216b25-bc78-4417-9587-43dbefa8dbd7/fcr:metadata>; rel="describedby"; anchor="http://localhost:8080/rest/parent/b9216b25-bc78-4417-9587-43dbefa8dbd7" Link: <http://localhost:8080/rest/parent/b9216b25-bc78-4417-9587-43dbefa8dbd7>; rel="timegate" Link: <http://localhost:8080/rest/parent/b9216b25-bc78-4417-9587-43dbefa8dbd7>; rel="original" Link: <http://localhost:8080/rest/parent/b9216b25-bc78-4417-9587-43dbefa8dbd7/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Binary>; rel="type" Link: <http://localhost:8080/rest/parent/b9216b25-bc78-4417-9587-43dbefa8dbd7/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/parent/b9216b25-bc78-4417-9587-43dbefa8dbd7 Content-Type: text/plain Content-Length: 70 Body: http://localhost:8080/rest/parent/b9216b25-bc78-4417-9587-43dbefa8dbd7
Example (5): Uploaded file with checksum mismatch
curl -i -u fedoraAdmin:fedoraAdmin -X POST --data-binary "@picture.jpg" -H"digest: sha=checksumdoesntmatch" "http://localhost:8080/rest/parent/object"
Response:
Status: 409 Conflict Body: Checksum mismatch, computed SHA digest 726956f62748a7976ddb58e0ff72ae3856a0af7a did not match expected value checksumdoesntmatch
Example (6): Uploaded file with filename
curl -i -u fedoraAdmin:fedoraAdmin -X POST --data-binary "@picture.jpg" -H "Content-Disposition: attachment; filename=\"picture.jpg\"" "http://localhost:8080/rest/parent"
Response:
Status: 201 Created Headers: ETag: "8695FEA5692396C39D84333EADEBC2C2" X-State-Token: 8695FEA5692396C39D84333EADEBC2C2 Last-Modified: Thu, 04 Mar 2021 14:50:55 GMT Link: <http://localhost:8080/rest/parent/ae434c08-f505-433b-b353-35e9021bd0ea/fcr:metadata>; rel="describedby"; anchor="http://localhost:8080/rest/parent/ae434c08-f505-433b-b353-35e9021bd0ea" Link: <http://localhost:8080/rest/parent/ae434c08-f505-433b-b353-35e9021bd0ea>; rel="timegate" Link: <http://localhost:8080/rest/parent/ae434c08-f505-433b-b353-35e9021bd0ea>; rel="original" Link: <http://localhost:8080/rest/parent/ae434c08-f505-433b-b353-35e9021bd0ea/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Binary>; rel="type" Link: <http://localhost:8080/rest/parent/ae434c08-f505-433b-b353-35e9021bd0ea/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/parent/ae434c08-f505-433b-b353-35e9021bd0ea Content-Type: text/plain Content-Length: 70 Body: http://localhost:8080/rest/parent/ae434c08-f505-433b-b353-35e9021bd0ea
Example (7): Creating a new binary resource using proxied external content
curl -i -u fedoraAdmin:fedoraAdmin -X POST -H"Link: <http://example.org/path/to/picture.jpg>; rel=\"http://fedora.info/definitions/fcrepo#ExternalContent\"; handling=\"proxy\"; type=\"image/jpg\"" "http://localhost:8080/rest/parent"
Response:
Status: 201 Created Headers: ETag: "E77D53C833121E2930A7F057B91A8C26" X-State-Token: E77D53C833121E2930A7F057B91A8C26 Last-Modified: Thu, 04 Mar 2021 14:59:29 GMT Link: <http://localhost:8080/rest/parent/42bebbb3-c0b7-425c-90c4-8584c399db21/fcr:metadata>; rel="describedby"; anchor="http://localhost:8080/rest/parent/42bebbb3-c0b7-425c-90c4-8584c399db21" Link: <http://localhost:8080/rest/parent/42bebbb3-c0b7-425c-90c4-8584c399db21>; rel="timegate" Link: <http://localhost:8080/rest/parent/42bebbb3-c0b7-425c-90c4-8584c399db21>; rel="original" Link: <http://localhost:8080/rest/parent/42bebbb3-c0b7-425c-90c4-8584c399db21/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Binary>; rel="type" Content-Location: http://example.org/path/to/picture.jpg Link: <http://localhost:8080/rest/parent/42bebbb3-c0b7-425c-90c4-8584c399db21/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/parent/42bebbb3-c0b7-425c-90c4-8584c399db21 Content-Type: text/plain Content-Length: 70 Body: http://localhost:8080/rest/parent/42bebbb3-c0b7-425c-90c4-8584c399db21
Status:
201 Created
404 Not Found (resource does not exist – use PUT to specify a new resource name)
409 Conflict (checksum mismatch)
PUT Create a resource with a specified path, or replace the binary content or triples associated with a resource with the binary content or triples provided in the request body.
For RDFSource resources
Some resource properties are repository managed and cannot be removed or modified. Any attempt to do so may result in a 4xx error.
Request Headers:
CONTENT-DISPOSITION (Optional) The filename provided in the content disposition header will be stored in a ebucore:filename property. (See 'Example (6): Uploaded file with filename' in POST above)
CONTENT-TYPE (Optional) MIME type of the uploaded binary or RDF content
If the MIME type corresponds to a supported RDF format, the uploaded content will be parsed as RDF and used to populate the child node properties.
RDF will be interpreted using the current resource as the base URI (e.g. <> will be expanded to the current URI). Namespaces must be declared in full.
If the MIME type corresponds to a supported RDF format, and you also provide a Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type"
header. Then the contents will be stored as a binary resource with the provided MIME type as Content-type.
For other MIME types, the uploaded content will be used to create a binary resource.
Supported RDF formats: text/turtle, text/rdf+n3, application/n3, text/n3, application/rdf+xml, application/n-triples, application/ld+json
IF-MATCH
IF-UNMODIFIED-SINCE
X-IF-STATE-TOKEN Allows the client to specify a state token as defined in section 3.10 of the Fedora API
DIGEST (Optional) A way of providing one or more checksums (SHA-1, SHA-256, MD5) which will be checked against the uploaded content to ensure error-free transfer. The header is interpreted according to RFC-3230 (see 'Example (3): Creating new binary resource at a specified path'). If the provided checksum does not match the calculated value for the uploaded file a 409 Conflict will be returned. See Fixity Service for documentation on how to change the default algorithm used during on-demand fixity checking. Valid `Digest` algorithms/values are: sha, sha-256, sha-512, sha-512/256, or md5.
PREFER With the value
handling=lenient
allows replacing the properties of a container without having to provide all of the server-managed triples.
LINK With a value containing subfield rel=http://fedora.info/definitions/fcrepo#ExternalContent
the client may provide binary content from an external path . See the external content documentation for details about syntax and handling options (note, this is disabled by default), and Example 4 for usage. With a rel="type" and a URI of http://fedora.info/definitions/v4/repository#ArchivalGroup
the client may create an Archival Group container. See the Fedora OCFL Object Structure for more information about how this affects the OCFL structure.
Example (1): Updating properties with RDF content
1.1 Perform a GET to the current container's RDF content
curl -u fedoraAdmin:fedoraAdmin -X GET -H "Accept: text/turtle" "http://localhost:8080/rest/path/to/resource" Response Body: @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> fedora:created "2021-03-04T14:23:46.625848Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:lastModified "2021-03-04T14:23:46.625848Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:createdBy "fedoraAdmin" ; fedora:lastModifiedBy "fedoraAdmin" ; rdf:type ldp:BasicContainer ; rdf:type ldp:Resource ; rdf:type fedora:Resource ; rdf:type ldp:RDFSource ; rdf:type ldp:Container ; rdf:type fedora:Container .
1.2 Add your updates (e.g. <> dc:title "some-resource-title" .) under the full result of the GET response in 1.1 and PUT back
curl -u fedoraAdmin:fedoraAdmin -i -X PUT -H "Content-Type: text/turtle" -H"Prefer: handling=lenient" --data-binary "@new-triples.rdf" "http://localhost:8080/rest/path/to/resource" Request Body: @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> <http://purl.org/dc/elements/1.1/title> "some-resource-title" ; fedora:created "2021-03-04T14:23:46.625848Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:lastModified "2021-03-04T14:23:46.625848Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora:createdBy "fedoraAdmin" ; fedora:lastModifiedBy "fedoraAdmin" ; rdf:type ldp:BasicContainer ; rdf:type ldp:Resource ; rdf:type fedora:Resource ; rdf:type ldp:RDFSource ; rdf:type ldp:Container ; rdf:type fedora:Container .
Response:
Status: 204 No Content Headers: ETag: W/"8CE776D040FAAA4641C0E44706DA6747" X-State-Token: 62D5EAC8EE143FAB049E2485BC1A4122 Last-Modified: Thu, 04 Mar 2021 15:09:20 GMT 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" Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Container>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Container>; rel="type" Link: <http://localhost:8080/rest/path/to/resource/fcr:acl>; rel="acl"
Note the handling=lenient
prefer header instructs the server to ignore any server managed triples in the request.
Without this prefer header the same request body would result in the following
curl -u fedoraAdmin:fedoraAdmin -i -X PUT -H "Content-Type: text/turtle" --data-binary "@new-triples.rdf" "http://localhost:8080/rest/path/to/resource" Status: 409 Conflict Headers: Content-Type: text/plain;charset=utf-8 Link: <http://localhost:8080/static/constraints/ServerManagedTypeException.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy" Link: <http://localhost:8080/static/constraints/ServerManagedPropertyException.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy" Content-Length: 1099 Body: The server managed type (http://fedora.info/definitions/v4/repository#Container) cannot be modified by the client. The server managed predicate (http://fedora.info/definitions/v4/repository#createdBy) cannot be modified by the client. The server managed predicate (http://fedora.info/definitions/v4/repository#created) cannot be modified by the client. The server managed predicate (http://fedora.info/definitions/v4/repository#lastModifiedBy) cannot be modified by the client. The server managed type (http://www.w3.org/ns/ldp#BasicContainer) cannot be modified by the client. The server managed type (http://www.w3.org/ns/ldp#Resource) cannot be modified by the client. The server managed type (http://fedora.info/definitions/v4/repository#Resource) cannot be modified by the client. The server managed predicate (http://fedora.info/definitions/v4/repository#lastModified) cannot be modified by the client. The server managed type (http://www.w3.org/ns/ldp#Container) cannot be modified by the client. The server managed type (http://www.w3.org/ns/ldp#RDFSource) cannot be modified by the client.
Note that to prevent conflicts, the value of the fedora:lastModified
triple in the request must match its current counterpart in the repository. The way to ensure this is to base the changes in a PUT request on the RDF content obtained in an immediately prior GET request, and never try to PUT consecutively, as this will result in a 400 error.
Example (2): Creating a new resource at a specified path
curl -i -X PUT "http://localhost:8080/rest/node/to/create"
Response:
Status: 201 Created Response Headers: ETag: W/"D386215480648929F3BFCA2854D9EF7E" X-State-Token: D0F20662F78E1C4D063E9512F9068785 Last-Modified: Thu, 04 Mar 2021 15:15:35 GMT Link: <http://localhost:8080/rest/node/to/create>; rel="timegate" Link: <http://localhost:8080/rest/node/to/create>; rel="original" Link: <http://localhost:8080/rest/node/to/create/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Container>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Container>; rel="type" Link: <http://localhost:8080/rest/node/to/create/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/node/to/create Content-Type: text/plain Content-Length: 41 Body: http://localhost:8080/rest/node/to/create
Example (3): Creating new binary resource at a specified path
curl -X PUT --upload-file image.jpg -H"Content-Type: image/jpeg" -H"digest: sha=cb1a576f22e8e3e110611b616e3e2f5ce9bdb941" "http://localhost:8080/rest/new/image"
Response:
Status: 201 Created Headers: ETag: "DA0CCC5486A2C7E2551AAA1E528799D0" X-State-Token: DA0CCC5486A2C7E2551AAA1E528799D0 Last-Modified: Thu, 04 Mar 2021 15:16:56 GMT Link: <http://localhost:8080/rest/new/image/fcr:metadata>; rel="describedby"; anchor="http://localhost:8080/rest/new/image" Link: <http://localhost:8080/rest/new/image>; rel="timegate" Link: <http://localhost:8080/rest/new/image>; rel="original" Link: <http://localhost:8080/rest/new/image/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Binary>; rel="type" Link: <http://localhost:8080/rest/new/image/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/new/image Content-Type: text/plain Content-Length: 36 Body: http://localhost:8080/rest/new/image
Note that once a resource is created as an RDF or non-RDF source, it must remain an RDF or non-RDF source. In order to change the type of resource, you must DELETE and then re-create the resource.
Status:
204 No Content
412 Precondition Failed
Example (4): Creating a new binary resource at a specified path redirecting to external content
curl -i -u fedoraAdmin:fedoraAdmin -X PUT -H"Link: <http://www.example.com/file>; rel=\"http://fedora.info/definitions/fcrepo#ExternalContent\"; handling=\"redirect\"; type=\"text/plain\"" "http://localhost:8080/rest/node/to/redirect"
Response:
Status: 201 Created Headers: ETag: "D3400C2CA6018C1DC996BFBB68A65BAF" X-State-Token: D3400C2CA6018C1DC996BFBB68A65BAF Last-Modified: Thu, 04 Mar 2021 15:19:28 GMT Link: <http://localhost:8080/rest/node/to/redirect/fcr:metadata>; rel="describedby"; anchor="http://localhost:8080/rest/node/to/redirect" Link: <http://localhost:8080/rest/node/to/redirect>; rel="timegate" Link: <http://localhost:8080/rest/node/to/redirect>; rel="original" Link: <http://localhost:8080/rest/node/to/redirect/fcr:versions>; rel="timemap" Link: <http://www.w3.org/ns/ldp#NonRDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Binary>; rel="type" Content-Location: http://www.example.com/file Link: <http://localhost:8080/rest/node/to/redirect/fcr:acl>; rel="acl" Location: http://localhost:8080/rest/node/to/redirect Content-Type: text/plain Content-Length: 43 Body: http://localhost:8080/rest/node/to/redirect
PATCH Modify the triples associated with a resource with SPARQL-Update
Request Headers:
IF-MATCH
IF-UNMODIFIED-SINCE
CONTENT-TYPE
Example (1):
curl -X PATCH -H "Content-Type: application/sparql-update" --data-binary "@body.rdf" "http://localhost:8080/rest/node/to/update" Request Body: PREFIX dc: <http://purl.org/dc/elements/1.1/> INSERT { <> dc:title "some-resource-title" . } WHERE { }
Response:
Status: 204 No Content
Example (2) Update default fixity algorithm of a binary's description:
curl -X PATCH -H "Content-Type: application/sparql-update" --data-binary "@body.rdf" "http://localhost:8080/rest/binary/resource/to/binary/fcr:metadata" Request Body: PREFIX fedoraconfig: <http://fedora.info/definitions/v4/config#> INSERT { <> fedoraconfig:defaultDigestAlgorithm "sha-256" } WHERE { }
Response:
Status: 204 No Content
Status:
204 No Content
412 Precondition Failed
DELETE Delete a resource
Example:
curl -X DELETE "http://localhost:8080/rest/resource/to/delete"
Response:
Status: 204 No Content
All child resources of a deleted resource will also be removed. Delete requests create "tombstone" resources which need to be removed before you can reuse a URI.
Example:
curl -X GET "http://localhost:8080/rest/some/deleted/resource"
Status: 410 Gone Link: <http://localhost:8080/rest/some/deleted/resource/fcr:tombstone>; rel="hasTombstone" Body: Discovered tombstone resource at /some/deleted/resource, departed: 2016-11-14T17:26:17.334-06:00
curl -X DELETE "http://localhost:8080/rest/some/deleted/resource/fcr:tombstone"
Status: 204 No Content
Create a new node and reuse the deleted URL
curl -X PUT "http://localhost:8080/rest/some/deleted/resource"
Status: 201 Created
Status:
204 No Content
404 Not Found
HEAD Retrieve the resource headers
Example:
curl -u fedoraAdmin:fedoraAdmin -i -X HEAD "http://localhost:8080/rest/resource/to/head"
Response:
Status: 200 OK Headers: ETag: W/"8CE776D040FAAA4641C0E44706DA6747" X-State-Token: 62D5EAC8EE143FAB049E2485BC1A4122 Last-Modified: Thu, 04 Mar 2021 15:09:20 GMT 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" Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Container>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Container>; rel="type" Accept-External-Content-Handling: copy,redirect,proxy Accept-Patch: application/sparql-update Accept-Post: text/turtle,text/rdf+n3,text/n3,application/rdf+xml,application/n-triples,application/ld+json Allow: 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 Content-Type: text/turtle;charset=utf-8 Content-Length: 0
Status:
200 OK
404 Not Found
OPTIONS Outputs information about the supported HTTP methods, etc.
Example:
curl -i -X OPTIONS "http://localhost:8080/rest/node/to/options"
Response:
Status: 200 OK Headers: 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" Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" Link: <http://www.w3.org/ns/ldp#Resource>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Resource>; rel="type" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Link: <http://www.w3.org/ns/ldp#RDFSource>; rel="type" Link: <http://www.w3.org/ns/ldp#Container>; rel="type" Link: <http://fedora.info/definitions/v4/repository#Container>; rel="type" Accept-External-Content-Handling: copy,redirect,proxy Accept-Patch: application/sparql-update Accept-Post: text/turtle,text/rdf+n3,text/n3,application/rdf+xml,application/n-triples,application/ld+json Allow: DELETE,POST,HEAD,GET,PUT,PATCH,OPTIONS Content-Length: 0
Status:
200 OK
Versioning
Services
Backup and Restore
Fixity
Request URI: /path/to/some/binary
Methods: HEAD, GET
HEAD Request the fixity checksum for a given digest algorithm
Checking fixity requires retrieving the content from the binary store and may take some time.
Request Headers:
WANT-DIGEST md5, sha, sha-256, sha-512, sha-512/256
Example:
curl -I -H "Want-Digest: sha-256" "http://localhost:8080/rest/path/to/some/binary"
Response (fixity success):
Status: 200 OK Headers: ETag: "51c5ed5fff4b6c79233cc7573a387902f7d171e7" Last-Modified: Fri, 04 May 2018 18:14:47 GMT Content-Type: image/jpeg Accept-Ranges: bytes Content-Disposition: attachment; filename="IMG_4023.JPG.jpg"; creation-date="Fri, 04 May 2018 18:14:47 GMT"; modification-date="Fri, 04 May 2018 18:14:47 GMT"; size=47021 Link: <http://www.w3.org/ns/ldp#Resource>;rel="type" Link: <http://www.w3.org/ns/ldp#NonRDFSource>;rel="type" Link: <http://localhost:8080/rest/examples/binary/fcr:acl>; rel="acl" Link: <http://localhost:8080/rest/examples/binary/fcr:metadata>; rel="describedby" Link: <http://localhost:8080/static/constraints/NonRDFSourceConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy" Link: <http://localhost:8080/rest/examples/binary>; rel="timegate" Link: <http://localhost:8080/rest/examples/binary>; rel="original" Link: <http://localhost:8080/rest/examples/binary/fcr:versions>; rel="timemap" Link: <http://mementoweb.org/ns#OriginalResource>; rel="type" Link: <http://mementoweb.org/ns#TimeGate>; rel="type" Accept-External-Content-Handling: copy,redirect,proxy Allow: DELETE,HEAD,GET,PUT,OPTIONS Digest: sha-256=08692ca74dc1e08c84f90feda5e64c72617be850a7c7adca88b03f6ccd3db406 Content-Length: 47021
Status:
200 OK
400 Bad request (the 'Want-Digest' request-header algorithm type is either invalid or unsupported)
404 Resource not found
Request URI: /path/to/some/resource/fcr:fixity
Methods: GET
GET Get the fixity report for an object
Checking fixity requires retrieving the content from the binary store and may take some time.
The /fcr:fixity endpoint is not part of the Fedora API Specification at this time.
Request Headers:
ACCEPT application/ld+json, application/n-triples, application/rdf+xml, application/x-turtle, text/html, text/n3, text/plain, text/rdf+n3, text/turtle
Example:
curl -H "Accept: text/turtle" "http://localhost:8080/rest/path/to/some/resource/fcr:fixity"
Response (fixity success):
Status: 200 OK Headers: Content-Type: text/turtle Body: @prefix premis: <http://www.loc.gov/premis/rdf/v1#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . <http://localhost:8080/rest/path/to/some/resource> premis:hasFixity <http://localhost:8080/rest/path/to/some/resource#fixity/1494431303920> . <http://localhost:8080/rest/path/to/some/resource#fixity/1494431303920> rdf:type premis:Fixity ; rdf:type premis:EventOutcomeDetail ; premis:hasEventOutcome "SUCCESS" ; premis:hasMessageDigestAlgorithm "SHA-1" ; premis:hasMessageDigest <urn:sha1:ca3392593351ef8e6554bdabfbd8bdc1002ecb6f> ; premis:hasSize "1277811"^^<http://www.w3.org/2001/XMLSchema#long> .
Response (fixity failure):
Status: 200 OK Headers: Content-Type: text/turtle Body: @prefix premis: <http://www.loc.gov/premis/rdf/v1#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . <http://localhost:8080/rest/path/to/some/resource> premis:hasFixity <http://localhost:8080/rest/path/to/some/resource#fixity/1494445619308> . <http://localhost:8080/rest/path/to/some/resource#fixity/1494445619308> rdf:type premis:Fixity ; rdf:type premis:EventOutcomeDetail ; premis:hasEventOutcome "BAD_CHECKSUM" ; premis:hasEventOutcome "BAD_SIZE" ; premis:hasMessageDigestAlgorithm "SHA-1" ; premis:hasMessageDigest <urn:sha1:1d3d03c656cf0a944c393bf9257c6cecdba5263f> ; premis:hasSize "1287509"^^<http://www.w3.org/2001/XMLSchema#long> .
Status:
200 OK
404 Resource not found
Note: Default Fixity Algorithm
When ingesting a binary resource, one or more checksums may be provided, see API reference (POST example 4, POST example 4b, PUT example 3). The supported algorithms are: SHA-1, SHA-256 and MD5.
By default, the algorithm used by the /fcr:fixity endpoint is SHA-1. However, that may be changed - per resource - to one of the other supported algorithms by configuring the property: fedoraconfig:defaultDigestAlgorithm
. See API reference (PATCH example 2).
Transactions
POST Create a new transaction
After retrieving a transaction URI from the "Location" header in the response to the following HTTP request, the client can execute any POST/PUT/PATCH/DELETE/GET REST API method within the transaction scope by including the transaction URI in the "Atomic-ID" request header.
Transactions are automatically closed and rolled back after 3 minutes of inactivity. Transactions can be refreshed by POSTing to the transaction URI
Example:
curl -i -X POST "http://localhost:8080/rest/fcr:tx"
Response:
Status: 201 Created Headers: Location: http://localhost:8080/rest/fcr:tx/ce4bb2bf-8ced-4c7d-b281-f2132e3064bb Atomic-Expires: Thu, 07 May 2020 17:34:37 GMT
Usage:
When a transaction has been created, it will return a Location header. Use this location (transaction URI) as the value of the "Atomic-ID" request header for performing REST API operations within the transaction. When you are done with the transaction, either commit the transaction to the repository by making a PUT request to the transaction URI, or discard the changes and rollback the transaction by making a DELETE request to the transaction URI.
For further examples of the usage of Transactions, see: Transactions
Status:
201 Created: if the transaction is created successfully
GET Get the current status of the repository in a transaction
To get the status of a transaction, perform a GET request on the transaction URI that was previously returned as the value of the "Location" header from the transaction creation request. The "Atomic-Expires" header indicates the time at which the transaction will auto-rollback.
Example:
curl -i -X GET "http://localhost:8080/rest/fcr:tx/ce4bb2bf-8ced-4c7d-b281-f2132e3064bb"
Response:
Status: 204 No Content Headers: Expires: Thu, 7 May 2020 17:46:17 GMT
Status:
204 No Content: If the request was successful
404 Not Found: Transaction not found
410 Gone: Transaction expired
POST Keep an existing transaction alive
By performing a POST request on an existing transaction URI, the transaction's expiration time is extended by the value of the session timeout duration (default: 3 minutes)
Example:
curl -i -X POST "http://localhost:8080/rest/fcr:tx/ce4bb2bf-8ced-4c7d-b281-f2132e3064bb"
Response:
Status: 204 No Content Headers: Atomic-Expires: Thu, 7 May 2020 18:00:38 GMT
Status:
204 No Content: if the transaction is renewed successfully
404 Not Found: if the transaction doesn't exist
410 Gone: Transaction expired
PUT Commit an open transaction
Any operations you made within the scope of the transaction will be applied together, meaning if any of them fail, the whole transaction will fail.
Example:
curl -X PUT "http://localhost:8080/rest/fcr:tx/ce4bb2bf-8ced-4c7d-b281-f2132e3064bb"
Response:
Status: 204 No Content
Status:
204 No Content: if the transaction is committed successfully
404 Not Found: if the transaction doesn't exist
409 Conflict: Transaction did not commit successfully
410 Gone: Transaction expired
DELETE Rollback and close an open transaction
Example:
curl -i -X DELETE "http://localhost:8080/rest/fcr:tx/ce4bb2bf-8ced-4c7d-b281-f2132e3064bb"
Response:
Status: 204 No Content
Status:
204 No Content: if the transaction is discarded successfully
410 Gone: if the transaction has already been committed or rolled back
404 Not Found: if the transaction does not exist