SOW: SWORD v2 Integration
Opened this issue · 8 comments
Summary
SoftServ will integrate SWORD v2, a protocol which enables clients and servers to communicate around complex digital objects, into the Hyku application. Although there is precedent for SWORD integration into Hyrax, it was developed and documented for Hyrax 2. Since the current version of Hyku runs on a later version of Hyrax, custom work will be required. This is especially so considering the Valkyrie migration from Fedora.
SoftServ’s approach to this will be to update the existing or create a new SWORD gem that would be both applicable to Hyku Commons as well as broadly usable for Hyrax and Hyku applications.
SoftServ allocates one 1-week sprint (apprx. 90 hours) including one midlevel and one senior engineer, project management, and QA resources to accomplish these goals.
Acceptance Criteria
- SWORD v2 has been integrated into Hyku Commons
- SWORD v2 integration is usable for Hyrax and Hyku applications
- All functionality illustrated here should work: https://github.com/CottageLabs/willow_sword/wiki/Usage#contents
Ref
Testing Instructions
These are a summary of the instructions found in the wiki: https://github.com/CottageLabs/willow_sword/wiki/Usage
Adjust URL to match your set up.
Test files:
swordv2_test_files.zip
Unzip the test files into a directory. Open a terminal from that directory and run the following commands:
1. Get service document
curl --request GET \
--url https://demo.hyku-demo.notch8.cloud/sword/service_document \
--header 'Content-Type: application/xml'
2. Get collection
curl --request GET \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/87d777f1-1081-43ff-96b6-3f61499531ee \
--header 'Content-Type: application/xml'
3. Add New work: metadata only
i. Add new work: Metadata only (binary)
curl --request POST \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works \
--header 'Content-Disposition: attachment; filename=metadata.xml' \
--header 'Content-Type: application/xml' \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: admin@example.com' \
--header 'Packaging: application/atom+xml;type=entry' \
--data-binary @dc.xml
3. Add New work: metadata only
ii. Add new work: Metadata only (form-data)
curl --request POST \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: admin@example.com' \
-F metadata=@dc.xml
4. Add new work: Zip file with metadata and file
i. Add new work: Zip file with metadata and file (binary)
curl --request POST \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/ \
--header 'Content-Disposition: attachment; filename=testPackage.zip' \
--header 'Content-Type: application/zip' \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: admin@example.com' \
--header 'Packaging: http://purl.org/net/sword/package/BagIt' \
--data-binary @testPackage.zip
4. Add new work: Zip file with metadata and file
ii. Add new work: metadata and zip payload (form-data)
curl --request POST \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/ \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: admin@example.com' \
-F metadata=@testPackage2b/metadata/metadata.xml \
-F payload=@testPackage2b.zip
4. Add new work: Zip file with metadata and file
iii. Add new work: zip payload with file and metadata (form-data)
curl --request POST \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/ \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: admin@example.com' \
-F payload=@testPackage2b.zip
5. Add new work: Metadata and file in bagit zip file
i. Add new work: Metadata and file in bagit zip file (binary)
curl --request POST \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/ \
--header 'Content-Disposition: attachment; filename=testPackage1InBagit.zip' \
--header 'Content-MD5: 71b5839b60c2ab183ecf522771f48023' \
--header 'Content-Type: application/zip' \
--header 'Packaging: http://purl.org/net/sword/package/BagIt' \
--data-binary @testPackageInBagit.zip
5. Add new work: Metadata and file in bagit zip file
ii. Add new work: payload containing metadata and file in bagit zip (form-data)
curl --request POST \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/ \
--header 'Content-MD5: 71b5839b60c2ab183ecf522771f48023' \
--header 'Packaging: http://purl.org/net/sword/package/BagIt' \
-F payload=@testPackage2InBagit.zip
6. Get work with only metadata
curl --request GET \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/5a8b69c3-0a5c-4dd8-a4ad-d0c6c7b54d1c
7. Get work with file and metadata
curl --request GET \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/5a8b69c3-0a5c-4dd8-a4ad-d0c6c7b54d1c
8. Get work that doesn't exist
curl --request GET \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/invalid_id
9. Get file metadata
curl --request GET \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/5a8b69c3-0a5c-4dd8-a4ad-d0c6c7b54d1c/file_sets/3a176473-46b8-4467-85ce-84a380271402
10. Add file to existing work (binary)
curl --request POST \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/5a8b69c3-0a5c-4dd8-a4ad-d0c6c7b54d1c/file_sets/ \
--header 'Content-Disposition: attachment; filename=cat_scan.pdf' \
--header 'Content-MD5: b89d04a5afefdfe3ee11a9de8b230320' \
--header 'Content-Type: application/pdf' \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: admin@example.com' \
--header 'Packaging: http://purl.org/net/sword/package/Binary' \
--data-binary @cat_scan.pdf
11. Update file metadata (binary)
curl --request PUT \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/5a8b69c3-0a5c-4dd8-a4ad-d0c6c7b54d1c/file_sets/3a176473-46b8-4467-85ce-84a380271402 \
--header 'Content-Disposition: attachment; filename=metadata.xml' \
--header 'Content-Type: application/xml' \
--header 'Packaging: application/atom+xml;type=entry' \
--data-binary @dc.xml
12. Authorizing sword requests (Currently not implemented)
13. Update work
curl --request PUT \
--url https://demo.hyku-demo.notch8.cloud/sword/collections/default/works/5a8b69c3-0a5c-4dd8-a4ad-d0c6c7b54d1c/ \
--header 'Content-Disposition: attachment; filename=metadata.xml' \
--header 'Content-Type: application/xml' \
--header 'Packaging: application/atom+xml;type=entry' \
--data-binary @dc.xml
The TOC here could make for a good checklist of expected functionality:
https://github.com/CottageLabs/willow_sword/wiki/Usage#contents
We can use Hyku up to start development on this, while pals knapsack is still underway.
For ref, this is the gem we would essentially be updating https://github.com/CottageLabs/willow_sword
CalState currently uses SWORD
TODO: Test - how do we handle different tenants?
- https://github.com/notch8/willow_sword there is a notch8 fork of willow_sword, might want to get it caught up to their
master
branch - samvera/bulkrax#565 removed the forked version from Bulkrax
Can we add this list to the acceptance criteria for clarity of expected functionality? https://github.com/CottageLabs/willow_sword/wiki/Usage#contents
Tested functionalities on staging, here are the results
Files used:
files_for_testing_willow_sword.zip
1. Get service document
curl --request GET \
--url https://demo.palni-palci-staging.notch8.cloud/sword/service_document \
--header 'Api-key: some-api-key' \
--header 'Content-Type: application/xml'
response:
<service xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:sword="http://purl.org/net/sword/terms/" xmlns="http://www.w3.org/2007/app">
<sword:version>2.0</sword:version>
<workspace collections="1">
<atom:title>Hyrax Sword V2 server</atom:title>
<collection href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default">
<atom:title>Default collection</atom:title>
<accept>*/*</accept>
<accept alternate="multipart-related">
*/* </accept>
<sword:collectionPolicy>TODO: Collection Policy</sword:collectionPolicy>
<dcterms:abstract></dcterms:abstract>
<sword:mediation>true</sword:mediation>
<sword:treatment>TODO: Treatment description</sword:treatment>
<sword:acceptPackaging>http://purl.org/net/sword/package/SimpleZip</sword:acceptPackaging>
<sword:acceptPackaging>http://purl.org/net/sword/package/BagIt</sword:acceptPackaging>
<sword:acceptPackaging>http://purl.org/net/sword/package/Binary</sword:acceptPackaging>
</collection>
</workspace>
</service>
2. Get collection
curl --request GET \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/36b01b98-de55-4cf1-9328-f53c4ca05dd0 \
--header 'Api-key: some-api-key' \
--header 'Content-Type: application/xml'
response:
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Kirk's Collection</title>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/36b01b98-de55-4cf1-9328-f53c4ca05dd0/works"/>
</feed>
3. Add New work: metadata only
i. Add new work: Metadata only (binary)
curl --request POST \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works \
--header 'Api-key: some-api-key' \
--header 'Content-Disposition: attachment; filename=metadata.xml' \
--header 'Content-Type: application/xml' \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: support@notch8.com' \
--header 'Packaging: application/atom+xml;type=entry' \
--data-binary @dc.xml
response:
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Test record</title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works//file_sets"/>
</feed>
3. Add New work: metadata only
ii. Add new work: Metadata only (form-data)
curl --request POST \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works \
--header 'Api-key: some-api-key' \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: support@notch8.com' \
-F metadata=@dc.xml
response:
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Test record</title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works//file_sets"/>
</feed>
4. Add new work: Zip file with metadata and file
i. Add new work: Zip file with metadata and file (binary)
curl --request POST \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/ \
--header 'Api-key: some-api-key' \
--header 'Content-Disposition: attachment; filename=testPackage.zip' \
--header 'Content-Type: application/zip' \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: support@notch8.com' \
--header 'Packaging: http://purl.org/net/sword/package/BagIt' \
--data-binary @testPackage.zip
response:
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Test record</title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works//file_sets"/>
</feed>
4. Add new work: Zip file with metadata and file
ii. Add new work: metadata and zip payload (form-data)
curl --request POST \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/ \
--header 'Api-key: some-api-key' \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: support@notch8.com' \
-F metadata=@testPackage2b/metadata/metadata.xml \
-F payload=@testPackage2b.zip
response:
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Test record</title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works//file_sets"/>
</feed>
4. Add new work: Zip file with metadata and file
iii. Add new work: zip payload with file and metadata (form-data)
curl --request POST \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/ \
--header 'Api-key: some-api-key' \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: support@notch8.com' \
-F payload=@testPackage2b.zip
response:
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Test record</title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works//file_sets"/>
</feed>
5. Add new work: Metadata and file in bagit zip file
i. Add new work: Metadata and file in bagit zip file (binary)
curl --request POST \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/ \
--header 'Api-key: some-api-key' \
--header 'Content-Disposition: attachment; filename=testPackage1InBagit.zip' \
--header 'Content-MD5: 72722575f682e2b459604db51def039f' \
--header 'Content-Type: application/zip' \
--header 'Packaging: http://purl.org/net/sword/package/BagIt' \
--data-binary @testPackageInBagit.zip
response:
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Test record</title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works//file_sets"/>
</feed>
5. Add new work: Metadata and file in bagit zip file
ii. Add new work: payload containing metadata and file in bagit zip (form-data)
curl --request POST \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/ \
--header 'Api-key: some-api-key' \
--header 'Content-MD5: 72722575f682e2b459604db51def039f' \
--header 'Packaging: http://purl.org/net/sword/package/BagIt' \
-F payload=@testPackage2InBagit.zip
response:
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Test record</title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works//file_sets"/>
</feed>
6. Get work with only metadata
curl --request GET \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/36425f03-462b-447c-b23c-0b37ab40cc04 \
--header 'Api-key: some-api-key'
response:
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<title>test</title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/36425f03-462b-447c-b23c-0b37ab40cc04"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/36425f03-462b-447c-b23c-0b37ab40cc04/file_sets"/>
<dc:title>test</dc:title>
<dc:depositor>support@notch8.com</dc:depositor>
<dc:admin_set_id>5ff17259-9147-43dd-a0b1-ee7aebd0a2fc</dc:admin_set_id>
<dc:member_of_collection_ids>a974a5ee-bc6c-4ea9-87f0-1f92fbd0614f</dc:member_of_collection_ids>
<dc:member_of_collection_ids>f2766aed-8999-47f1-a610-64617e1b3290</dc:member_of_collection_ids>
<dc:creator>0~test</dc:creator>
<dc:keyword>test</dc:keyword>
<dc:rights>http://rightsstatements.org/vocab/NKC/1.0/</dc:rights>
<dc:type>Article</dc:type>
<dc:admin_note></dc:admin_note>
<dc:show_pdf_viewer></dc:show_pdf_viewer>
<dc:show_pdf_download_button></dc:show_pdf_download_button>
<dc:video_embed></dc:video_embed>
</feed>
7. Get work with file and metadata
curl --request GET \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c \
--header 'Api-key: some-api-key'
response:
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<title>Test record</title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets"/>
<entry>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/1d63cd3f-81ef-47c9-8a7e-228c0c200f66"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/1d63cd3f-81ef-47c9-8a7e-228c0c200f66"/>
</entry>
<entry>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/3b8354f2-0338-4e55-82a8-02148ed586bb"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/3b8354f2-0338-4e55-82a8-02148ed586bb"/>
</entry>
<entry>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/8962a3ae-e93a-4b78-bec8-5d1433d10c0d"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/8962a3ae-e93a-4b78-bec8-5d1433d10c0d"/>
</entry>
<dc:title>Test record</dc:title>
<dc:depositor>support@notch8.com</dc:depositor>
<dc:admin_set_id>5ff17259-9147-43dd-a0b1-ee7aebd0a2fc</dc:admin_set_id>
<dc:member_ids>1d63cd3f-81ef-47c9-8a7e-228c0c200f66</dc:member_ids>
<dc:member_ids>3b8354f2-0338-4e55-82a8-02148ed586bb</dc:member_ids>
<dc:member_ids>8962a3ae-e93a-4b78-bec8-5d1433d10c0d</dc:member_ids>
<dc:representative_id>1d63cd3f-81ef-47c9-8a7e-228c0c200f66</dc:representative_id>
<dc:thumbnail_id>1d63cd3f-81ef-47c9-8a7e-228c0c200f66</dc:thumbnail_id>
<dc:creator>0~User, Some</dc:creator>
<dc:keyword>Test</dc:keyword>
<dc:keyword>Another</dc:keyword>
<dc:rights>http://rightsstatements.org/vocab/InC/1.0/</dc:rights>
<dc:type>Article</dc:type>
<dc:contributor>The dublin core generator</dc:contributor>
<dc:created>05/29/2024</dc:created>
<dc:description>This is a test to create a test record for Hyku Commons</dc:description>
<dc:language>English</dc:language>
<dc:publisher>Digital Nest</dc:publisher>
<dc:source>http://sword.digitalnest.com</dc:source>
<dc:subject>Sword</dc:subject>
<dc:subject>Crosswalk</dc:subject>
<dc:show_pdf_viewer>1</dc:show_pdf_viewer>
<dc:show_pdf_download_button>1</dc:show_pdf_download_button>
</feed>
8. Get work that doesn't exist
curl --request GET \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/invalid_id \
--header 'Api-key: some-api-key'
response:
<sword:error xmlns:sword="http://purl.org/net/sword/" xmlns:arxiv="http://arxiv.org/schemas/atom" xmlns="http://www.w3.org/2005/Atom" href="http://purl.org/net/sword/error/ErrorBadRequest">
<author>
<name>Sword v2 server</name>
</author>
<title>ERROR</title>
<updated>2024-05-31T16:28:20Z</updated>
<generator uri="https://example.org/sword-app/" version="0.1">
sword@example.org </generator>
<summary>Server cannot find work with id invalid_id</summary>
<sword:treatment>processing failed</sword:treatment>
</sword:error>
9. Get file metadata
curl --request GET \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/395282cb-830e-42d3-ad6d-cf8b7bde326b \
--header 'Api-key: some-api-key'
response:
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<title>Swordv2Spec.pdf</title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/395282cb-830e-42d3-ad6d-cf8b7bde326b"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/395282cb-830e-42d3-ad6d-cf8b7bde326b"/>
<dc:title>Swordv2Spec.pdf</dc:title>
<dc:creator>support@notch8.com</dc:creator>
</feed>
10. Add file to existing work (binary)
curl --request POST \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/ \
--header 'Api-key: some-api-key' \
--header 'Content-Disposition: attachment; filename=cat_scan.pdf' \
--header 'Content-MD5: b89d04a5afefdfe3ee11a9de8b230320' \
--header 'Content-Type: application/pdf' \
--header 'In-Progress: false' \
--header 'On-Behalf-Of: support@notch8.com' \
--header 'Packaging: http://purl.org/net/sword/package/Binary' \
--data-binary @cat_scan.pdf
response:
<feed xmlns="http://www.w3.org/2005/Atom">
<title></title>
<content rel="src" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/30d666fd-5a74-416a-8172-f4c9612bcad1"/>
<link rel="edit" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/30d666fd-5a74-416a-8172-f4c9612bcad1"/>
</feed>
11. Update file metadata (binary)
curl --request PUT \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/file_sets/395282cb-830e-42d3-ad6d-cf8b7bde326b \
--header 'Api-key: some-api-key' \
--header 'Content-Disposition: attachment; filename=metadata.xml' \
--header 'Content-Type: application/xml' \
--header 'Packaging: application/atom+xml;type=entry' \
--data-binary @file_dc.xml
No reponse
12. Authorizing sword requests (Currently not implemented)
13. Update work
curl --request PUT \
--url https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c/ \
--header 'Api-key: some-api-key' \
--header 'Content-Disposition: attachment; filename=metadata.xml' \
--header 'Content-Type: application/xml' \
--header 'Packaging: application/atom+xml;type=entry' \
--data-binary @updated_work_dc.xml
response:
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Update Success</title>
<updated>2024-05-31T16:40:30+00:00</updated>
<atom:title>Hyrax Sword V2 server</atom:title>
<link rel="self" href="https://demo.palni-palci-staging.notch8.cloud/sword/collections/default/works/09d32f64-8a1c-424b-9320-ff46f63faf0c"/>
<entry>
<id>09d32f64-8a1c-424b-9320-ff46f63faf0c</id>
<title>Updated Test record</title>
<content type="text">
<text>The work has been successfully updated.</text>
</content>
<updated>2024-05-31T16:33:55Z</updated>
</entry>
</feed>
@Jill Is sharing the gem's wiki enough?
scientist-softserv/amigos#29
https://github.com/CottageLabs/willow_sword/wiki/Usage#authorizing-sword-requests
one difference is that Hyku is not limited to dc terms.