Excerpt |
---|
This page provides detailed steps for creating repository content via the REST API, and SPARQL queries to demonstrate that content in the triplestorehas been synchronized to an external triplestore. For more details on setting up triplestore sync, see External Triplestore. Much more information about the REST API is available at: RESTful HTTP API and Another Take on the REST API . |
1. Finding
...
Containers by
...
Binary Name or MIME Type
Create a few sample objects containers with either a PDF or a text file, or both attached as datastreams binaries (these the following 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 |
---|
title | File: objectcontainer-indexing.rdf |
---|
|
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX indexing: <http://fedora.info/definitions/v4/indexing#>
DELETE { }
INSERT {
<> indexing:hasIndexingTransformation "default";
rdf:type indexing:indexable }
WHERE { } |
Code Block |
---|
language | bash |
---|
title | 1a. Creating Sample ObjectsContainers |
---|
|
curl -X PUT "http://localhost:8080/rest/objects/101"
curl -X POSTPATCH -H "Content-type: application/sparql-update" -d-data-binary "@object-indexing.rdf" "http://localhost:8080/rest/objects/101"
curl -X POSTPUT -H "Content-type: application/pdf" --data-binary "@test.pdf" "http://localhost:8080/rest/objects/101/master"
curl -X PATCH -H "Content-type: application/sparql-update" --data-binary "@object-indexing.rdf" "http://localhost:8080/rest/objects/101/master/fcr:content:metadata"
curl -X PUT "http://localhost:8080/rest/objects/102"
curl -X POSTPATCH -H "Content-type: application/sparql-update" --data-dbinary "@object-indexing.rdf" "http://localhost:8080/rest/objects/102"
curl -X POSTPUT -H "Content-type: text/plain" --data-binary "@test.txt" "http://localhost:8080/rest/objects/102/master"
curl -X PATCH -H "Content-type: application/sparql-update" --data-binary "@object-indexing.rdf" "http://localhost:8080/rest/objects/102/master/fcr:contentmetadata"
curl -X PUT "http://localhost:8080/rest/objects/103"
curl -X POSTPATCH -H "Content-type: application/sparql-update" --data-dbinary "@object-indexing.rdf" "http://localhost:8080/rest/objects/103"
curl -X POSTPUT -H "Content-type: application/pdf" --data-binary "@test.pdf" "http://localhost:8080/rest/objects/103/master/fcr:content"
curl -X POSTPUT -H "Content-type: text/plain" --data-binary "@test.txt" "http://localhost:8080/rest/objects/103/text"
curl -X PATCH -H "Content-type: application/sparql-update" --data-binary "@object-indexing.rdf" "http://localhost:8080/rest/objects/103/master/fcr:metadata"
curl -X PATCH -H "Content-type: application/sparql-update" --data-binary "@object-indexing.rdf" "http://localhost:8080/rest/objects/103/text/fcr:contentmetadata" |
Find objects containers with a datastream binary named "text":
Code Block |
---|
language | sql |
---|
title | 1b. Selecting Objects Containers With Datastreams Binaries Named "text" |
---|
|
prefix fcrepo: <http://fedora.info/definitions/v4/repository#>
select ?object where {
?ds fcrepo:mixinTypes "fedora:datastreamNonRdfSourceDescription" .
?ds fcrepo:hasParent ?object .
filter(str(?ds)=concat(str(?object),'/text/fcr:metadata'))
} |
Expected Results
objectcontainer |
---|
<http://localhost:8080/rest/objects/103> |
Find objects containers with a PDF datastreambinary:
Code Block |
---|
language | sql |
---|
title | 1c. Selecting Objects Containers With PDF DatastreamsBinaries |
---|
|
prefix fcrepo: <http://fedora.info/definitions/v4/repository#>
prefix relation: <http://www.iana.org/assignments/relation/>
select ?object where {
?ds fcrepo:mixinTypes "fedora:datastreamNonRdfSourceDescription" .
?ds fcrepo:hasParent ?object .
?ds fcreporelation:hasContentdescribes ?content .
?content fcrepo:mimeType "application/pdf"
} |
Expected Results
objectcontainer |
---|
<http://localhost:8080/rest/objects/101> |
<http://localhost:8080/rest/objects/103> |
2. Attach metadata properties directly to
...
containers
Create an object container and attach the dc:title property:
Code Block |
---|
language | bash |
---|
title | 2a. Creating Sample ObjectsContainers |
---|
|
curl -X PUT http://localhost:8080/rest/objects/201
echo "prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> prefix index: <http://fedora.info/definitions/v4/indexing#> insert data { <> rdf:type index:indexable . }" \
| curl -X POST PATCH --upload-file - http://localhost:8080/rest/objects/201
echo "prefix dc: <http://purl.org/dc/elements/1.1/> insert data { <http://localhost:8080/rest/objects/201> dc:title 'Foo' . }" \
| curl -X PATCH --upload-file - http://localhost:8080/rest/objects/201 |
Find objects containers with titles:
Code Block |
---|
language | sql |
---|
title | 2b. Selecting Objects Containers With Titles |
---|
|
prefix dc: <http://purl.org/dc/elements/1.1/>
select ?object ?title where { ?object dc:title ?title } |
Expected Results
object container | title |
---|
<http://localhost:8080/rest/objects/201> | "Foo" |
3. Find
...
Containers By Collection Membership
Create three objects containers and three collections:
Code Block |
---|
language | bash |
---|
title | 3a. Creating Sample Objects Containers And Collections |
---|
|
curl -X POSTPUT http://localhost:8080/rest/objects/col1
curl -X POSTPUT http://localhost:8080/rest/objects/col2
curl -X POSTPUT http://localhost:8080/rest/objects/col3
curl -X PUT http://localhost:8080/rest/objects/obj1
curl -X PUT http://localhost:8080/rest/objects/obj2
curl -X POST PUT http://localhost:8080/rest/objects/obj3 |
Mark the containers indexable:
Code Block |
---|
language | bash |
---|
title | 3b. Marking containers indexable |
---|
|
echo "insert data { <> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/indexing#indexable> . }" \
| curl -X PATCH --upload-file - http://localhost:8080/rest/objects/obj1
echo "insert data { <> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/indexing#indexable> . }" \
| curl -X POSTPATCH --upload-file - http://localhost:8080/rest/objects/obj2
echo "insert data { <> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/indexing#indexable> . }" \
| curl -X POSTPATCH --upload-file - http://localhost:8080/rest/objects/obj3
echo "insert data { <> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/indexing#indexable> . }" \
| curl -X PATCH --upload-file - http://localhost:8080/rest/objects/col1
echo "insert data { <> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/indexing#indexable> . }" \
| curl -X PATCH --upload-file - http://localhost:8080/rest/objects/col2
echo "insert data { <> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/indexing#indexable> . }" \
| curl -X PATCH --upload-file - http://localhost:8080/rest/objects/col3 |
Link each container Link each object to a collection:
Code Block |
---|
language | bash |
---|
title | 3b3c. Linking Objects Containers To Collections |
---|
|
echo 'insert data { <http://localhost:8080/rest/objects/obj1> <http://fedora.info/definitions/v4some-vocabulary.org/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://fedorasome-vocabulary.infoorg/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/some-vocabulary.org/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 |
---|
language | bash |
---|
title | 3c3d. Linking Collections In A Hierarchy |
---|
|
echo 'insert data { <http://localhost:8080/rest/objects/col1> <http://fedorasome-vocabulary.infoorg/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/some-vocabulary.org/rels-ext#hasPart> <http://localhost:8080/rest/objects/col3> . }' | curl -X PATCH --upload-file - http://localhost:8080/rest/objects/col2 |
Find objects containers directly attached to a collection:
Code Block |
---|
language | sql |
---|
title | 3d3e. Selecting Objects Containers Directly Linked To A Collection |
---|
|
select ?obj ?col where { ?obj <http://fedora.info/definitions/v4some-vocabulary.org/rels-ext#isMemberOfCollection> ?col } |
...
obj | col |
---|
<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 containers Find objects directly or indirectly attached (
down to the third level):recursive retrieval along the rels:hasPart chain). Applications developed using Fedora 3 may use Mulgara's walk() function for queries that navigate a hierarchy. That functionality is now part of standard SPARQL 1.1 (Jena's property paths documentation provides some good examples). Code Block |
---|
language | sql |
---|
title | 3d3f. Select Objects Containers Directly Or Indirectly Linked To A Collection |
---|
|
prefix rels: <http://fedora.info/definitions/v4some-vocabulary.org/rels-ext#>
select ?obj where {
{<http://localhost:8080/rest/objects/col1> rels:hasPart* ?col
. ?obj rels:isMemberOfCollection <http?col
} |
Expected Results
containers |
---|
<http://localhost:8080/rest/objects/obj1> |
<http://localhost:8080/rest/objects/obj2> |
<http://localhost:8080/rest/objects/obj3> |
Also link a container to a project:
Code Block |
---|
language | bash |
---|
title | 3g. Link Containers To A Project |
---|
|
curl -X PUT http://localhost:8080/rest/objects/proj1
echo "insert data { <> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/indexing#indexable> . }" \
| curl -X PATCH --upload-file - http://localhost:8080/rest/objects/proj1
echo "prefix ex: <http://example.org/> insert data { col1> }
UNION
{ ?obj rels:isMemberOfCollection ?c .
<http://localhost:8080/rest/objects/obj1> ex:project <http://localhost:8080/rest/objects/proj1> . }" \
| curl -X PATCH --upload-file - http://localhost:8080/rest/objects/obj1 |
Find containers in a collection or linked to a project:
Code Block |
---|
language | sql |
---|
title | 3h. Select Containers Linked To A Collection or A Project |
---|
|
prefix rels: <http://some-vocabulary.org/rels-ext#>
prefix ex: <http://example.org/>
select ?obj where {
{ ?obj ex:project col1> rels:hasPart ?c }
UNION
{ ?obj rels:isMemberOfCollection ?c .
<http://localhost:8080/rest/objects/col1> rels:hasPart ?c1 . ?c1proj1> }
UNION
{ ?obj rels:hasPart ?cisMemberOfCollection <http://localhost:8080/rest/objects/col2> }
} |
Expected Results
obj |
---|
<http://localhost:8080/rest/objects/obj1> |
<http://localhost:8080/rest/objects/obj2><http |
Count containers instead of listing them:
Code Block |
---|
language | sql |
---|
title | 3i. Count the Containers Linked to a Collection or a Project |
---|
|
prefix rels: <http://some-vocabulary.org/rels-ext#>
prefix ex: <http://example.org/>
select (count(distinct ?obj) as ?count) where {
{ ?obj ex:project <http://localhost:8080/rest/objects/proj1> }
UNION
{ ?obj rels:isMemberOfCollection <http://localhost:8080/rest/objects/col2> }
} |
Expected Results
count |
---|
"2"^^<http://www.w3.org/2001/XMLSchema#integerobj3> |