RO-Crate Excel Server Logo

RO-Crate Excel Server

A small HTTP service that converts an Excel workbook into RO-Crate JSON-LD using ro-crate-excel. This service is maintained by Danny Kennedy of BKRLCC and Light Garden. It is open-source (GPL), but is NOT an official service associated with RO-Crate.

Currently this service is in active development and may change without notice. If you have any questions or encounter issues, please reach out to the maintainers.

Code is at github.com/light-garden-projects/ro-crate-excel-server

POST/convert

Upload one or more .xlsx workbooks as multipart/form-data, each in a field named file. Set every part's filename to that workbook's path relative to the archive root (POSIX / separators), for example Collection A/Videos/metadata.xlsx. When several workbooks are uploaded together they are merged into one crate: the master collection (the workbook whose root declares no parent) stays at ./, every other workbook is folded in under it, and each sheet's folder prefix rebases its file references.

Membership convention. To link objects to their collection, give each RepositoryObject row an isRef_pcdm:memberOf value of ./ (its own collection root). The merge rewrites that to the collection's identifier and synthesises the inverse pcdm:hasMember automatically. Contextual entities (Person, Place, Language, Organization) must not carry pcdm:memberOf — they are linked through property references such as creator, inLanguage, and publisher.

Request

Field Type Notes
file file (.xlsx) Required, repeatable. The RO-Crate metadata spreadsheet. Its filename is treated as the archive-root-relative path and must be a relative POSIX path: no leading /, no .. or . segments, and unique across the upload.

Example

# Single workbook
curl -X POST \
  -F "file=@ro-crate-metadata.xlsx" \
  https://ro-crate-excel-api.light.garden/convert

# Multiple workbooks, each carrying its archive-root-relative path
curl -X POST \
  -F "file=@root.xlsx;filename=ro-crate-metadata.xlsx" \
  -F "file=@videos.xlsx;filename=Collection A/Videos/metadata.xlsx" \
  https://ro-crate-excel-api.light.garden/convert

Add ?report=1 to receive an application/json envelope { "crate": { ... }, "warnings": [ ... ] } instead of the bare crate (single-workbook uploads). Each warning has a source, a level (warning or error), and a message. Warnings with source: "check" flag { "@id" } references that point to an entity not defined in the crate (for example, an entity described in another sheet or workbook).

Responses

Status Meaning
200 A single RO-Crate JSON-LD document (application/ld+json) — the converted workbook, or the merged crate when several are uploaded. With ?report=1 the response is instead a { crate, warnings } envelope, whose warnings include any source: "merge" entries from the merge step.
400 No file, a non-.xlsx file, an absolute or traversal-containing (..) path, a duplicate path, or a workbook that could not be parsed.
413 A file exceeds the size limit, or too many files were uploaded.
Try it

Upload an .xlsx workbook and convert it right here in your browser.

POST/validate

Validate an RO-Crate JSON-LD document against the RO-Crate specification. Send the crate as the request body with a Content-Type of application/json or application/ld+json.

Example

curl -X POST \
  -H "Content-Type: application/ld+json" \
  --data-binary @ro-crate-metadata.json \
  https://ro-crate-excel-api.light.garden/validate

Response

200 with a JSON body { "valid": boolean, "results": [ ... ] }. Each result has an id, a status of success, warning, or error, a message, and a spec clause. valid is false when any result is an error. A body that is missing or not a JSON object returns 400.

Try it

Paste RO-Crate JSON-LD below, or load a .json / .jsonld file, then check it against the RO-Crate specification.

GET/health

Liveness check. Returns { "status": "ok" }.