Current Release

This documentation covers the current version of Fedora. Looking for another version? See all documentation.

This document will walk you through getting the code, building the webapp, and exercising the REST API. 

Prerequisites

Fedora requires Java 8 and Maven 3 (only for building the project). Check that you have them installed before proceeding:

$ java -version
java version "1.8.0_73"
Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)
 
$ mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T10:41:47-06:00)
Maven home: /Users/kford1/Programs/apache-maven-3.3.9
Java version: 1.8.0_73, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.13.6", arch: "x86_64", family: "mac"

Building Fedora

You can download pre-compiled binaries and run Fedora in an existing Tomcat or Jetty instance or pre-packaged Jetty instances, or build Fedora from source (it's not difficult or time consuming).

Clone the latest code from Github:

$ git clone https://github.com/fcrepo4/fcrepo4.git
Cloning into 'fc4'...
remote: Counting objects: 40152, done.
remote: Compressing objects: 100% (12759/12759), done.
Receiving objects:  14% (5622/40152), 3.68 MiB | 912 KiB/s  
[...]
 
$ cd fcrepo4

And build the project (the first time you build Fedora may take some time and bandwidth to download all the development dependencies):

$ MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=256m" mvn clean install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Fedora Commons 4 :: Parent POM
[INFO] Fedora Commons 4
[INFO] Fedora Repository BOM
[INFO] Fedora Repository JCR BOM
[INFO] Fedora Repository BOMs
[INFO] Fedora Repository Kernel API
[INFO] Fedora Repository Configurations Module
[INFO] Fedora Repository Kernel Implementation (ModeShape)
[INFO] Fedora Event Serialization
[INFO] Fedora Repository JMS Module
[INFO] Fedora Repository HTTP Commons Module
[INFO] Fedora Repository Authorization Commons Module
[INFO] Fedora Repository HTTP API Module
[INFO] Fedora Repository WebAC Authorization Module
[INFO] Fedora Repository Deployable Web Application
[INFO] Fedora Repository LDP integration tests Module
[INFO] Fedora Repository RDF integration tests Module
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Fedora Commons 4 :: Parent POM 5.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ fcrepo ---
[INFO] Deleting /Volumes/TempStorage/fedora4/fcrepo4/target
[INFO] 
[INFO] --- maven-enforcer-plugin:1.2:enforce (enforce-maven) @ fcrepo ---
[INFO] 
[INFO] --- maven-enforcer-plugin:1.2:enforce (default) @ fcrepo ---
[INFO] 
[INFO] --- jacoco-maven-plugin:0.6.3.201306030806:prepare-agent (pre-unit-test) @ fcrepo ---
[....]

Running the Fedora webapp

The webapp can be run from a bundled instance of jetty. The application will listen on port 8080 by default.
If you would like to run the webapp on a different port, you can add the "jetty.port" option in your maven command (e.g. mvn -Djetty.port=8181 jetty:run)

$ cd fcrepo-webapp
$ MAVEN_OPTS="-Xmx512m" mvn jetty:run
[...]
TRACE 10:50:43.845 (SessionProvider) Returning new InjectableSession...
DEBUG 10:50:43.845 (InjectableSession) Initializing an InjectableSession with SessionFactory org.fcrepo.session.SessionFactory@5a3c8525.
TRACE 10:50:43.846 (SessionProvider) Returning new InjectableSession...
DEBUG 10:50:43.846 (InjectableSession) Initializing an InjectableSession with SessionFactory org.fcrepo.session.SessionFactory@5a3c8525.
2013-07-01 10:50:44.027:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 2 seconds.

There's a nice, friendly HTML interface waiting for you at  http://localhost:8080/rest/  (the default username and password is fedoraAdmin)

REST API Examples

The REST API documentation provides a full listing of the features and functions of the REST API. Here are some examples to get you started:

$ curl "http://localhost:8080/rest/" -ufedoraAdmin:fedoraAdmin
@prefix premis:  <http://www.loc.gov/premis/rdf/v1#> .
@prefix test:  <info:fedora/test/> .
@prefix memento:  <http://mementoweb.org/ns#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix webac:  <http://fedora.info/definitions/v4/webac#> .
@prefix acl:  <http://www.w3.org/ns/auth/acl#> .
@prefix ns001:  <http://localhost:8080/rest/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/>
        fedora:lastModified            "2018-05-30T20:51:11.833Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ;
        rdf:type                       ldp:RDFSource ;
        rdf:type                       ldp:Container ;
        rdf:type                       ldp:BasicContainer ;
        fedora:writable                true ;
        rdf:type                       fedora:RepositoryRoot ;
        rdf:type                       fedora:Resource ;
        rdf:type                       fedora:Container ;
        ldp:contains                   <http://localhost:8080/rest/ktest> ;
        ldp:contains                   <http://localhost:8080/rest/91/86/4c/e0/91864ce0-9ad2-49cd-b2c3-85b0c6b204e5> ;
        ldp:contains                   <http://localhost:8080/rest/examples> ;
        ldp:contains                   <http://localhost:8080/rest/t1> ;
        fedora:hasTransactionProvider  <http://localhost:8080/rest/fcr:tx> .

The REST API supports a variety of RDF serialization formats, including:

$ curl http://localhost:8080/rest/ -H "Accept: application/rdf+xml" -ufedoraAdmin:fedoraAdmin
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:acl="http://www.w3.org/ns/auth/acl#"
    xmlns:ldp="http://www.w3.org/ns/ldp#"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:webac="http://fedora.info/definitions/v4/webac#"
    xmlns:ns001="http://localhost:8080/rest/ktest/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:ebucore="http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#"
    xmlns:premis="http://www.loc.gov/premis/rdf/v1#"
    xmlns:test="info:fedora/test/"
    xmlns:fedora="http://fedora.info/definitions/v4/repository#"
    xmlns:memento="http://mementoweb.org/ns#"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:fedoraconfig="http://fedora.info/definitions/v4/config#" > 
  <rdf:Description rdf:about="http://localhost:8080/rest/">
    <rdf:type rdf:resource="http://fedora.info/definitions/v4/repository#Resource"/>
    <ldp:contains rdf:resource="http://localhost:8080/rest/examples"/>
    <ldp:contains rdf:resource="http://localhost:8080/rest/91/86/4c/e0/91864ce0-9ad2-49cd-b2c3-85b0c6b204e5"/>
    <fedora:hasTransactionProvider rdf:resource="http://localhost:8080/rest/fcr:tx"/>
    <ldp:contains rdf:resource="http://localhost:8080/rest/ktest"/>
    <fedora:lastModified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2018-05-30T20:51:11.833Z</fedora:lastModified>
    <fedora:writable rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">true</fedora:writable>
    <rdf:type rdf:resource="http://www.w3.org/ns/ldp#RDFSource"/>
    <rdf:type rdf:resource="http://fedora.info/definitions/v4/repository#RepositoryRoot"/>
    <rdf:type rdf:resource="http://www.w3.org/ns/ldp#Container"/>
    <ldp:contains rdf:resource="http://localhost:8080/rest/t1"/>
    <rdf:type rdf:resource="http://fedora.info/definitions/v4/repository#Container"/>
    <rdf:type rdf:resource="http://www.w3.org/ns/ldp#BasicContainer"/>
  </rdf:Description>
</rdf:RDF>

or

$ curl http://localhost:8080/rest/ -H "Accept: application/n-triples" -ufedoraAdmin:fedoraAdmin
<http://localhost:8080/rest/> <http://fedora.info/definitions/v4/repository#lastModified> "2018-05-30T20:51:11.833Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> .
<http://localhost:8080/rest/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/ldp#RDFSource> .
<http://localhost:8080/rest/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/ldp#Container> .
<http://localhost:8080/rest/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/ldp#BasicContainer> .
<http://localhost:8080/rest/> <http://fedora.info/definitions/v4/repository#writable> "true"^^<http://www.w3.org/2001/XMLSchema#boolean> .
<http://localhost:8080/rest/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/repository#RepositoryRoot> .
<http://localhost:8080/rest/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/repository#Resource> .
<http://localhost:8080/rest/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/repository#Container> .
<http://localhost:8080/rest/> <http://www.w3.org/ns/ldp#contains> <http://localhost:8080/rest/ktest> .
<http://localhost:8080/rest/> <http://www.w3.org/ns/ldp#contains> <http://localhost:8080/rest/91/86/4c/e0/91864ce0-9ad2-49cd-b2c3-85b0c6b204e5> .
<http://localhost:8080/rest/> <http://www.w3.org/ns/ldp#contains> <http://localhost:8080/rest/examples> .
<http://localhost:8080/rest/> <http://www.w3.org/ns/ldp#contains> <http://localhost:8080/rest/t1> .
<http://localhost:8080/rest/> <http://fedora.info/definitions/v4/repository#hasTransactionProvider> <http://localhost:8080/rest/fcr:tx> .

Create a new object

$ curl http://localhost:8080/rest/ -X POST -v -ufedoraAdmin:fedoraAdmin
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
* Server auth using Basic with user 'fedoraAdmin'
> POST /rest/ HTTP/1.1
> Host: localhost:8080
> Authorization: Basic ZmVkb3JhQWRtaW46ZmVkb3JhQWRtaW4=
> User-Agent: curl/7.60.0
> Accept: */*
> 
< HTTP/1.1 201 Created
< Date: Thu, 02 Aug 2018 14:50:46 GMT
< Set-Cookie: JSESSIONID=1aftnonavsnvk1q6ln4jtleda4;Path=/
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Wed, 01-Aug-2018 14:50:46 GMT
< ETag: W/"187414816f9004f45508769998bec981ca90bea4"
< Last-Modified: Thu, 02 Aug 2018 14:50:46 GMT
< Link: <http://localhost:8080/static/constraints/ContainerConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy"
< Link: <http://localhost:8080/rest/39965e35-4cad-4b96-b826-0c8612f773d5/fcr:acl>; rel="acl"
< Location: http://localhost:8080/rest/39965e35-4cad-4b96-b826-0c8612f773d5
< Content-Type: text/plain
< Content-Length: 63
< Server: Jetty(9.3.1.v20150714)
< 
* Connection #0 to host localhost left intact
http://localhost:8080/rest/39965e35-4cad-4b96-b826-0c8612f773d5
 
$ curl http://localhost:8080/rest/7f/50/8e/82/7f508e82-15f7-48de-92a3-2575a1b749cf -ufedoraAdmin:fedoraAdmin
@prefix premis:  <http://www.loc.gov/premis/rdf/v1#> .
@prefix test:  <info:fedora/test/> .
@prefix memento:  <http://mementoweb.org/ns#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix webac:  <http://fedora.info/definitions/v4/webac#> .
@prefix acl:  <http://www.w3.org/ns/auth/acl#> .
@prefix ns001:  <http://localhost:8080/rest/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/39965e35-4cad-4b96-b826-0c8612f773d5>
        rdf:type               fedora:Container ;
        rdf:type               fedora:Resource ;
        rdf:type               ldp:BasicContainer ;
        fedora:lastModifiedBy  "fedoraAdmin" ;
        fedora:createdBy       "fedoraAdmin" ;
        fedora:created         "2018-08-02T14:50:46.121Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ;
        fedora:lastModified    "2018-08-02T14:50:46.121Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ;
        rdf:type               ldp:RDFSource ;
        rdf:type               ldp:Container ;
        fedora:writable        true .

Delete an object

$ curl -X DELETE http://localhost:8080/rest/39965e35-4cad-4b96-b826-0c8612f773d5 -ufedoraAdmin:fedoraAdmin


  • No labels