From 91c18898bb8cef6b01cbcf921c7d74708bd5acf9 Mon Sep 17 00:00:00 2001 From: Micke Nordin Date: Fri, 13 Jun 2025 09:40:17 +0200 Subject: [PATCH 1/2] ResourceDiscovery: This patch adds a new resource discovery mechanism. The intention is to allow for a way to advertise the existence of resources at the OCM server. Signed-off-by: Micke Nordin --- IETF-RFC.md | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ spec.yaml | 4 +++ 2 files changed, 82 insertions(+) diff --git a/IETF-RFC.md b/IETF-RFC.md index 9c37444f..4119b786 100644 --- a/IETF-RFC.md +++ b/IETF-RFC.md @@ -243,6 +243,7 @@ The JSON response body offered by the Discoverable Server SHOULD contain the fol * REQUIRED: apiVersion (string) - The OCM API version this endpoint supports. Example: `"1.2.0"` * REQUIRED: endPoint (string) - The URI of the OCM API available at this endpoint. Example: `"https://my-cloud-storage.org/ocm"` * OPTIONAL: provider (string) - A friendly branding name of this endpoint. Example: `"MyCloudStorage"` +* OPTIONAL: resourceAdvertismentUri (string) - A URI that, if accessed, will advertise available resources at this endpoint. * REQUIRED: resourceTypes (array) - A list of all resource types this server supports in both the Sending Server role and the Receiving Server role, with their access protocols. Each item in this list should itself be an object containing the following fields: * name (string) - A supported resource type (file, folder, calendar, contact, ...). @@ -644,6 +645,83 @@ A third-party Directory Service is a back-end service used to federate multiple } ``` +# Appendix D: Resource Discovery Service + +An OCM Server MAY publicly advertise available resources. This is done via the `resourceAdvertismentUri`. It is expected to expose, via anonymous HTTP GET, a JSON document with the following format: + + * REQUIRED: `server` - a human-readable name for the Servers providing the Resource Discovery Service + * REQUIRED: `resources` - a JSON array of objects to describe the list of OCM Servers with the following fields: + * OPTIONAL: `displayName` - the human-readable name of the OCM Server + * OPTIONAL: `publicUrl` - an public URL that can be used for direct download via anonymous HTTP GET + * OPTIONAL: `rocrate` - an embedded JSON object following the [ROCRATE](https://www.researchobject.org/ro-crate/specification/1.1/data-entities.html) data-entities specification. + * REQUIRED: `id` - the unique identifier of the resource at the OCM Server + Example: + ```json + { + "server": "OCM Server 1", + "resources": [ + { + "publicUrl": "https://ocm-server-1.fqdn/s/1234567890abcdef", + "displayName": "Public Dataset 1", + "id": "1234567890abcdef", + "rocrate": { + "@context": "https://w3id.org/ro/crate/1.1/context", + "@graph": [ + { + "@id": "ro-crate-metadata.json", + "@type": "CreativeWork", + "conformsTo": { + "@id": "https://w3id.org/ro/crate/1.1" + }, + "about": { + "@id": "./" + } + }, + { + "@id": "./", + "@type": "Dataset", + "name": "A RO-Crate embedded in OCM" + }, + { + "@id": "https://ocm-server-1.fqdn/s/1234567890abcdef", + "@type": "File", + "name": "Public data file" + } + ] + } + }, + { + "displayName": "Private Data Set 1", + "id": "0987654321fedcba", + "rocrate": { + "@context": "https://w3id.org/ro/crate/1.1/context", + "@graph": [ + { + "@id": "ro-crate-metadata.json", + "@type": "CreativeWork", + "conformsTo": { + "@id": "https://w3id.org/ro/crate/1.1" + }, + "about": { + "@id": "./" + } + }, + { + "@id": "./", + "@type": "Dataset", + "name": "A RO-Crate embedded in OCM" + }, + { + "@id": "0987654321fedcba", + "@type": "File", + "name": "Private data file" + } + ] + } + } + ] + } +``` # Acknowledgements diff --git a/spec.yaml b/spec.yaml index 3ceb8729..ee79b665 100644 --- a/spec.yaml +++ b/spec.yaml @@ -342,6 +342,10 @@ components: type: string description: A friendly branding name of this endpoint example: MyCloudStorage + resourceadvertismenturi: + type: string + description: the uri of the ocm resources advertised at this endpoint + example: https://my-cloud-storage.org/ocm/resources resourceTypes: type: array description: | From 2dc3a53a1c5d13b1c4265f0aa4f0bbdb042dda5a Mon Sep 17 00:00:00 2001 From: Micke Nordin Date: Fri, 22 Aug 2025 17:07:46 +0200 Subject: [PATCH 2/2] Update IETF-RFC.md Co-authored-by: Mahdi Baghbani --- IETF-RFC.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IETF-RFC.md b/IETF-RFC.md index 472dc845..c8d977f9 100644 --- a/IETF-RFC.md +++ b/IETF-RFC.md @@ -1223,7 +1223,7 @@ a JSON document with the following format: * OPTIONAL: `rocrate` - an embedded JSON object following the [ROCRATE](https://www.researchobject.org/ro-crate/specification/1.1/data-entities.html) data-entities specification. - * REQUIRED: `id` - the unique identifier of the resource at the OCM Server + * REQUIRED: `providerId` - the unique identifier of the resource at the OCM Server Example: ```json