Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

F4 alpha 2

Table of Contents

This page provides detailed steps for creating repository content via the REST API, and SPARQL queries to demonstrate that content in the triplestore.  Much more information about the REST API is available at: REST API and Another Take on the REST API .

1. Finding Objects by Datastream Name or MIME Type

Create a few sample objects with either a PDF or a text file, or both attached as datastreams (these commands assume you have two files named test.pdf and test.txt in your current working directory, please substitute working filenames as needed):

Code Block
languagebash
title1a. Creating Sample Objects
curl -X POST http://localhost:8080/rest/objects/101?mixin=fedora:object
curl -X POST -H "Content-type: application/pdf" --data-binary @test.pdf \
    http://localhost:8080/rest/objects/101/master/fcr:content
curl -X POST http://localhost:8080/rest/objects/102?mixin=fedora:object
curl -X POST -H "Content-type: text/plain" --data-binary @test.txt \
    http://localhost:8080/rest/objects/102/master/fcr:content
curl -X POST http://localhost:8080/rest/objects/103?mixin=fedora:object
curl -X POST -H "Content-type: application/pdf" --data-binary @test.pdf \
    http://localhost:8080/rest/objects/103/master/fcr:content
curl -X POST -H "Content-type: text/plain" --data-binary @test.txt \
    http://localhost:8080/rest/objects/103/text/fcr:content

Find objects with a datastream named "text":

Code Block
languagesql
title1b. Selecting Objects With Datastreams Named "text"
prefix fcrepo: <http://fedora.info/definitions/v4/repository#>
select ?object where { ?ds fcrepo:mixinTypes "fedora:datastream" .
    ?ds fcrepo:hasParent ?object . filter(str(?ds)=concat(str(?object),'/text')) }
Expected Results
object
<http://localhost:8080/rest/objects/103>

Find objects with a PDF datastream:

Code Block
languagesql
title1c. Selecting Objects With PDF Datastreams
prefix fcrepo: <http://fedora.info/definitions/v4/repository#>
select ?object where { ?ds fcrepo:mixinTypes "fedora:datastream" .
    ?ds fcrepo:hasParent ?object . ?ds fcrepo:hasContent ?content .
    ?content fcrepo:mimeType "application/pdf" }
Expected Results
object
<http://localhost:8080/rest/objects/101>
<http://localhost:8080/rest/objects/103>

2. Attach metadata properties directly to objects

Create an object and attach the dc:title property:

Code Block
languagebash
title2a. Creating Sample Objects
curl -X POST http://localhost:8080/rest/objects/201?mixin=fedora:object
echo "prefix dc: <http://purl.org/dc/terms/>
insert data { <http://localhost:8080/rest/objects/201> dc:title 'Foo' . }" \
| curl -X PATCH --upload-file - http://localhost:8080/rest/objects/201

Find objects with titles:

Code Block
languagesql
title2b. Selecting Objects With Titles
prefix dc: <http://purl.org/dc/terms/>
select ?object ?title where { ?object dc:title ?title }
Expected Results
object     title
<http://localhost:8080/rest/objects/201>"Foo"

Find Objects By Collection Membership

Create three objects and three collections:

Code Block
languagebash
title3a. Creating Sample Objects And Collections
curl -X POST http://localhost:8080/rest/objects/col1?mixin=fedora:object
curl -X POST http://localhost:8080/rest/objects/col2?mixin=fedora:object
curl -X POST http://localhost:8080/rest/objects/col3?mixin=fedora:object
curl -X POST http://localhost:8080/rest/objects/obj1?mixin=fedora:object
curl -X POST http://localhost:8080/rest/objects/obj2?mixin=fedora:object
curl -X POST http://localhost:8080/rest/objects/obj3?mixin=fedora:object 

Link each object to a collection:

Code Block
languagebash
title3b. Linking Objects To Collections
echo 'insert data { <http://localhost:8080/rest/objects/obj1> <http://fedora.info/definitions/v4/rels-ext#isMemberOfCollection> <http://localhost:8080/rest/objects/col1> . }' | curl -X PATCH --upload-file - http://localhost:8080/rest/objects/obj1
echo 'insert data { <http://localhost:8080/rest/objects/obj2> <http://fedora.info/definitions/v4/rels-ext#isMemberOfCollection> <http://localhost:8080/rest/objects/col2> . }' | curl -X PATCH --upload-file - http://localhost:8080/rest/objects/obj2
echo 'insert data { <http://localhost:8080/rest/objects/obj3> <http://fedora.info/definitions/v4/rels-ext#isMemberOfCollection> <http://localhost:8080/rest/objects/col3> . }' | curl -X PATCH --upload-file - http://localhost:8080/rest/objects/obj3

Link the collections in a hierarchy:

Code Block
languagebash
title3c. Linking Collections In A Hierarchy
echo 'insert data { <http://localhost:8080/rest/objects/col1> <http://fedora.info/definitions/v4/rels-ext#hasPart> <http://localhost:8080/rest/objects/col2> . }' | curl -X PATCH --upload-file - http://localhost:8080/rest/objects/col1
echo 'insert data { <http://localhost:8080/rest/objects/col2> <http://fedora.info/definitions/v4/rels-ext#hasPart> <http://localhost:8080/rest/objects/col3> . }' | curl -X PATCH --upload-file - http://localhost:8080/rest/objects/col2

Find objects directly attached to a collection:

Code Block
languagesql
title3d. Selecting Objects Directly Linked To A Collection
select ?obj ?col where { ?obj <http://fedora.info/definitions/v4/rels-ext#isMemberOfCollection> ?col }
Expected Results
objcol
<http://localhost:8080/rest/objects/obj1><http://localhost:8080/rest/objects/col1>
<http://localhost:8080/rest/objects/obj2><http://localhost:8080/rest/objects/col2>
<http://localhost:8080/rest/objects/obj3><http://localhost:8080/rest/objects/col3>

Find objects directly or indirectly attached (down to the third level):

Code Block
languagesql
title3d. Select Objects Directly Or Indirectly Linked To A Collection
prefix rels: <http://fedora.info/definitions/v4/rels-ext#>
select ?obj where {
  { ?obj rels:isMemberOfCollection <http://localhost:8080/rest/objects/col1> }
  UNION
  { ?obj rels:isMemberOfCollection ?c .
    <http://localhost:8080/rest/objects/col1> rels:hasPart ?c }
  UNION
  { ?obj rels:isMemberOfCollection ?c .
    <http://localhost:8080/rest/objects/col1> rels:hasPart ?c1 . ?c1 rels:hasPart ?c }
}
Expected Results
obj
<http://localhost:8080/rest/objects/obj1>
<http://localhost:8080/rest/objects/obj2>
<http://localhost:8080/rest/objects/obj3>