...
Prerequisites
Fedora requires Java 8 11 and Maven 3 (only for building the project). Check that you have them installed before proceeding:
Code Block |
---|
$ java -version
javaopenjdk version "111.80.0_73"
Java(TM) SE5" 2019-10-15
OpenJDK Runtime Environment AdoptOpenJDK (build 111.8.0_73-b02)
Java HotSpot(TM)0.5+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 25.73-b0211.0.5+10, mixed mode)
$ mvn -version
Apache Maven 3.6.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T10:41:47-06:00)
Maven home: /Users/kford1/Programscecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/opt/apache-maven-3.6.3.9
Java version: 111.80.0_735, vendor: Oracle Corporation
Java homeAdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_73.adoptopenjdk-11.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.1315.6", arch: "x86_64", family: "mac" |
...
Code Block |
---|
$ git clone https://github.com/fcrepo4fcrepo/fcrepo4fcrepo.git
Cloning into 'fc4fcrepo'...
remote: Counting objects: 40152, done.
remote: Compressing objects: 100% (12759/12759), done.
Receiving objects: 14% (5622/40152), 3.68 MiB | 912 KiB/s
[...]
$ cd fcrepo4fcrepo |
And build the project (the first time you build Fedora may take some time and bandwidth to download all the development dependencies):
Info |
---|
Running mvn -Pfast-build clean install builds Fedora quickly by skipping all tests. Run mvn clean install if you want to run the tests. |
Code Block |
---|
$ mvn -Pfast-build |
Code Block |
---|
$ 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[pom]
[INFO] Fedora RepositoryCommons 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] [pom]
[INFO] Fedora Repository Common Module [bundle]
[INFO] Fedora Repository Configurations Module
[INFO] ------------------------------------------------------------------------
[INFO] Building Fedora Commons 4 :: Parent POM 5.0.0-SNAPSHOT [bundle]
[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
Fedora Repository Kernel API [bundle]
[INFO] Fedora Repository Persistence API Module [bundle]
[INFO] Fedora Repository Persistence Common Module [bundle]
[INFO] Fedora Repository Kernel Implementation [bundle]
[INFO] Fedora Repository Search API [bundle]
[INFO] Fedora Repository OCFL Persistence Impl [bundle]
[INFO] Fedora Repository Search Impl [bundle]
[INFO] Fedora Repository HTTP Commons Module [bundle]
[INFO] Fedora Event Serialization [bundle]
[INFO] Fedora Repository JMS Module [bundle]
[INFO] Fedora Repository Authorization Commons Module [bundle]
[INFO] Fedora Repository HTTP API Module [bundle]
[INFO] Fedora Repository WebAC Authorization Module [bundle]
[INFO] Fedora Repository Deployable Web Application [war]
[INFO] Fedora Repository LDP integration tests Module [jar]
[INFO] Fedora Repository RDF integration tests Module [jar]
[INFO]
[INFO] ----------------------< org.fcrepo:fcrepo-parent >----------------------
[INFO] Building Fedora Commons :: Parent POM 6.0.0-SNAPSHOT [1/20]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[....] |
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)
Code Block |
---|
$ cd fcrepo-webapp
$ mvn jetty:run
[...] |
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)
Code Block |
---|
$ 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:
Code Block |
---|
$ 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:
Code Block |
---|
$ 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
Code Block |
---|
$ 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
Code Block |
---|
$ 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
Code Block |
---|
$ curl -X DELETE http://localhost:8080/rest/39965e35-4cad-4b96-b826-0c8612f773d5 -ufedoraAdmin:fedoraAdmin |