Excerpt |
---|
Warning |
This feature is unreleased, and only available by downloading and building Fedora 4 from Github. |
---|
This page provides detailed steps for creating repository content via the REST API, and SPARQL queries to demonstrate that content |
...
has 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: |
...
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: container-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 POSTPUT "http://localhost:8080/rest/objects/101?mixin=fedora:object"
curl -X PATCH -H "Content-type: application/sparql-update" --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:contentmetadata"
curl -X POSTPUT "http://localhost:8080/rest/objects/102?mixin=fedora:object"
curl -X PATCH -H "Content-type: application/sparql-update" --data-binary "@object-indexing.rdf" "http://localhost:8080/rest/objects/102"
curl -X POSTPUT -H "Content-type: text/plain" --data-binary "@test.txt \
http" "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 POSTPUT "http://localhost:8080/rest/objects/103?mixin=fedora:object"
curl -X POSTPATCH -H "Content-type: application/pdfsparql-update" --data-binary @test.pdf \
"@object-indexing.rdf" "http://localhost:8080/rest/objects/103"
curl -X PUT -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" "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 POSTPUT http://localhost:8080/rest/objects/201?mixin=fedora:object
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 PATCH --upload-file - http://localhost:8080/rest/objects/201
echo "prefix dc: <http://purl.org/dc/elements/terms1.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/terms1.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?mixin=fedora:object
curl -X PUT http://localhost:8080/rest/objects/col2
curl -X PUT http://localhost:8080/rest/objects/col3
curl -X POSTPUT http://localhost:8080/rest/objects/col2?mixin=fedora:objectobj1
curl -X PUT http://localhost:8080/rest/objects/obj2
curl -X POSTPUT http://localhost:8080/rest/objects/col3?mixin=fedora:object
/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 POSTPATCH --upload-file - http://localhost:8080/rest/objects/obj1?mixin=fedora:object
echo "insert data { <> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/indexing#indexable> . }" \
| curl -X POST PATCH --upload-file - http://localhost:8080/rest/objects/obj2?mixin=fedora:object
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/obj3
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?mixin=fedora:object /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://fedorasome-vocabulary.infoorg/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/v4some-vocabulary.org/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://fedorasome-vocabulary.infoorg/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 |
---|
language | bash |
---|
title | 3c3d. Linking Collections In A Hierarchy |
---|
|
echo 'insert data { <http://localhost:8080/rest/objects/col1> <http://fedora.info/definitions/v4some-vocabulary.org/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/v4some-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
objects containers 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://fedorasome-vocabulary.infoorg/definitions/v4/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/col1> }
UNION
{ ?obj rels:isMemberOfCollection ?c .
<http/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 { <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 <http://localhost:8080/rest/objects/proj1>col1> rels:hasPart ?c }
UNION
{ ?obj rels:isMemberOfCollection <http://localhost:8080/rest/objects/col2> }
} |
Expected Results
obj |
---|
<http://localhost:8080/rest/objects/obj1> |
<http://localhost:8080/rest/objects/obj2> |
Count containers instead of listing them:
Code Block |
---|
language | sql |
---|
title | 3i. Count the Containers Linked to a Collection or a Project |
---|
|
prefix ?c .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/col1> rels:hasPart ?c1 . ?c1proj1> }
UNION
{ ?obj rels:hasPart ?cisMemberOfCollection <http://localhost:8080/rest/objects/col2> }
} |
Expected Results
count |
---|
"2"^^< |
obj |
---|
<http://localhost:8080/rest/objects/obj1www.w3.org/2001/XMLSchema#integer> |