From b883a68ff955a487368c7cec27a4295bfc6aae20 Mon Sep 17 00:00:00 2001 From: sebbader-sap <107036549+sebbader-sap@users.noreply.github.com> Date: Tue, 6 Feb 2024 16:57:46 +0100 Subject: [PATCH] Editorial Rework (#184) * adjust wording in the readme and summary * adjust wording in the transfer process chapter * fix the transfer protocol resources * keep shacl messages for dspace:code consistent also in the negotiation msgs * remove the unneeded message shape * adjust the wording in the transfer protocol binding * revert data plane / control plane deletion * resort terms and terminology statements * resolve remaining conflicts * aligning chapter title pattern * fixing inconsistencies in the dcat:Catalog descriptions * adjust wording in the readme and summary * adjust wording in the transfer process chapter * fix the transfer protocol resources * keep shacl messages for dspace:code consistent also in the negotiation msgs * remove the unneeded message shape * adjust the wording in the transfer protocol binding * revert data plane / control plane deletion * resort terms and terminology statements * resolve remaining conflicts * aligning chapter title pattern * fixing inconsistencies in the dcat:Catalog descriptions * chore: add linkage for provider term * chore: add linkage for consumer term * chore: remove reference to OpenAPI spec * fix missing attributes from catalog, dataset, distribution etc. * minor fixes in the negotiation section * chore: update terminology * chore: cleanup protocol document (CN) * refactor: move .json files to example folders * chore: align transfer terminology * chore: clean up negotiation http binding * docs: update README * chore: restructure catalog procotol * chore: update common .md files * chore(CN-binding): remove connector, add callback from/to URL * chore(CN): update response type description * chore: clean up catalog http binding * chore: fix JSON snippets * chore: update formatting of model.md * chore: revert removing credential issuer * chore(CN): resolve leftover copy&paste mistakes * chore: restructure transfer protocol document * chore: move protocol figures to sub-folder * chore: clean up transfer http binding * chore: align documents * chore(catalog): change section hierarchy * chore: add ToCs to protocol & binding documents * chore: update broken/missing links in list files * chore(CN-termination): align type of `code` with spec documents * chore(CN): clean up diagram files * chore: update terminology.md * switch links for the catalog and dataset resources * correct dcat:keyword in the catalog example * replace UUID with "identifier" in model.md * add example as the schema for the catalog example uuid * fix the dataset-request-message diagram * Editorial rework merge (#2) (#209) * adding DCAT into JSON schema * catalog schema DCAT fix * fix catalog schema - DCAT * fix catalog schema type error - DCAT * DCAT catalog-shape added for Catalog class * fix typo in DCAT of catalog schema * fix type of dct:modified in DCAT of catalog schema * DCAT dcat:CatalogRecord class added to catalog shape * fix DCAT referecen in Resource catalog * DCAT wrong property of Resource removed * Fix DCAT catalog property of Resource * ResourceShape added to catalog-shape.ttl * RelationshipShape added to catalog-shape.ttl * DCAT fix issue in skos:Concept * DCAT ConceptShape ConceptSchemeShape and AgentShape added * DCAT fix of Dataset property * DCAT DatasetShape added * DCAT DataServiceShape added * DCAT Distribution catalog issue in type * DCAT typo in property * DCAT DataServiceShape added * add references for reused classes & datatypes * clean up on schema * properties changed * refactoring * refactoring * change dct:issued from string to dateTime * fix dct:language from xsd:string to referencing a resource * correcting hasPolicy declarations * reviewing the catalog json schema * refactor catalog json schema * add odrl policy json schema * fix syntax bugs in catalog json schema and adding foaf to the context.json * fix bugs in catalog and contract json schemas * fix examples to match to the catalog and contract json schemas * replace relative reference to the contract-schema.json with an absolute url * fix findings from mkollenstart's review * testing negotiation-subtask-1.1 branch * removing the test change * unwnated characters * Task #1: fix schemas and examples in "negotiation" * correct references to GitHub raw files * making 'required' field compatible to json 2019-09 * changes suggested by Sebastian * changes to processId, correcting ref, removing Sec * chnages since last review * left over change * missing s in dspace * removing RightOperand property * chnage in Permission, Json validated * catalog subtask changes * reverting dspace:filter type to object * re-introducing updates to the json schemas * fix filter in contract-request-message-schema * fixing schema in "Transfer" * Trying Shapes validation with Json-LD * debugging catalog shapes * fixing shapes in Catalog * Negotiation Shapes validation * Remove the ContractAgreement shape * add the AgreementShape * Negotiation shapes correction * conflict merge * schema and shapes re-validating after merge * change assigner and assignee to string * introduve verifiable credential structure to agreement msg * adjust agreement msg example to vc pattern * comment error * Catalog shapes changes * Shapes and schema validation for Transfer * Introduce sh:IRI pattern for agreementId * correction for dspace:reason and others * dataset schema and puml * Update catalog-error-schema.json - remove "dspace:code" and "dspace:reason" as mandatory * Update dataset-schema.json - remove "dct:title" and "dct:description" as mandatory * agreement verification change * Transfer Messages - shapes and schema validation * removing "@id" from transfer messages * correction for catalog schema * error handling * pull request #11 changes * pull request changes * new chnages to editorial-rework * merge editorial-rework to shapes-and-schemas * fix last findings --------- Co-authored-by: Thomas Ryborz Co-authored-by: tr-sap <123447934+tr-sap@users.noreply.github.com> Co-authored-by: SimantVerma-Bcone Co-authored-by: simantvermasap <143084974+simantvermasap@users.noreply.github.com> * fix typo in contract negotiation binding * revert changes to the release folder * add note on callback paths * chore: update broken ToCs * chore: markdown inspection * fix: revert changes to release folder * chore: apply minor improvements --------- Co-authored-by: Julia Pampus Co-authored-by: Thomas Ryborz Co-authored-by: tr-sap <123447934+tr-sap@users.noreply.github.com> Co-authored-by: SimantVerma-Bcone Co-authored-by: simantvermasap <143084974+simantvermasap@users.noreply.github.com> --- README.md | 47 +- SUMMARY.md | 5 + catalog/catalog.binding.https.md | 126 ++--- catalog/catalog.protocol.md | 270 +++++----- catalog/message/diagram/catalog.png | Bin 4461 -> 132124 bytes catalog/message/diagram/catalog.puml | 72 ++- .../diagram/dataset-request-message.png | Bin 0 -> 10285 bytes .../diagram/dataset-request-message.puml | 15 + catalog/message/diagram/dataset.png | Bin 4854 -> 67146 bytes catalog/message/diagram/dataset.puml | 50 +- .../message/{ => example}/catalog-error.json | 0 .../catalog-request-message.json | 0 catalog/message/{ => example}/catalog.json | 15 +- .../dataset-request-message.json | 0 catalog/message/{ => example}/dataset.json | 10 +- .../message/schema/catalog-error-schema.json | 17 +- .../catalog-request-message-schema.json | 1 - catalog/message/schema/catalog-schema.json | 294 +---------- catalog/message/schema/dataset-schema.json | 141 +++++- catalog/message/shape/catalog-error-shape.ttl | 8 +- .../shape/catalog-request-message-shape.ttl | 1 + catalog/message/shape/dataset-shape.ttl | 78 +++ catalog/message/shape/dcat-shapes.ttl | 462 +++--------------- common/common.binding.https.md | 14 +- common/common.protocol.md | 4 +- common/schema/context.json | 40 +- common/shape/message-shape.ttl | 41 -- model/model.md | 39 +- model/terminology.md | 93 ++-- .../contract.negotiation.binding.https.md | 388 ++++++++++----- negotiation/contract.negotiation.protocol.md | 416 +++++++--------- .../contract.negotiation.state.machine.png | Bin .../contract.negotiation.state.machine.puml | 0 .../diagram/contract-agreement-message.png | Bin 21113 -> 16997 bytes .../diagram/contract-agreement-message.puml | 5 +- ...ontract-agreement-verification-message.png | Bin 21096 -> 16599 bytes ...ntract-agreement-verification-message.puml | 1 - .../diagram/contract-negotiation-error.png | Bin 16862 -> 15769 bytes .../diagram/contract-negotiation-error.puml | 1 - .../contract-negotiation-event-message.png | Bin 15699 -> 14608 bytes .../contract-negotiation-event-message.puml | 1 - ...ntract-negotiation-termination-message.png | Bin 11186 -> 10855 bytes ...tract-negotiation-termination-message.puml | 2 +- .../message/diagram/contract-negotiation.png | Bin 23612 -> 17301 bytes .../message/diagram/contract-negotiation.puml | 1 - .../diagram/contract-offer-message.png | Bin 17132 -> 16169 bytes .../diagram/contract-offer-message.puml | 1 - .../contract-offer-message_initial.png | Bin 16602 -> 15654 bytes .../contract-offer-message_initial.puml | 1 - .../diagram/contract-request-message.png | Bin 17276 -> 16534 bytes .../diagram/contract-request-message.puml | 2 +- .../contract-request-message_initial.png | Bin 21886 -> 20712 bytes .../contract-request-message_initial.puml | 6 +- .../contract-agreement-message.json | 0 ...ntract-agreement-verification-message.json | 0 .../contract-negotiation-error.json | 0 .../contract-negotiation-event-message.json | 0 ...tract-negotiation-termination-message.json | 0 .../{ => example}/contract-negotiation.json | 0 .../{ => example}/contract-offer-message.json | 0 .../contract-offer-message_initial.json | 0 .../contract-request-message.json | 0 .../contract-request-message_initial.json | 0 .../message/schema/contract-schema.json | 9 +- ...-negotiation-termination-message-shape.ttl | 2 + .../contract-offer-message_initial.json | 1 + .../contract-request-message_initial.json | 1 + resources/list_common.md | 9 +- resources/list_messages.md | 40 +- resources/list_schemes.md | 2 +- resources/list_shapes.md | 3 +- .../{ => figures}/pull-transfer-process.png | Bin .../{ => figures}/pull-transfer-process.puml | 0 .../{ => figures}/push-transfer-process.png | Bin .../{ => figures}/push-transfer-process.puml | 0 .../transfer-process-state-machine.png | Bin .../transfer-process-state-machine.puml | 0 transfer/message/diagram/transfer-process.png | Bin 21431 -> 20553 bytes .../message/diagram/transfer-process.puml | 1 - .../transfer-completion-message.json | 0 .../message/{ => example}/transfer-error.json | 0 .../{ => example}/transfer-process.json | 0 .../transfer-request-message.json | 0 .../example/transfer-start-message.json | 18 + .../transfer-suspension-message.json | 0 .../transfer-termination-message.json | 0 .../message/schema/transfer-error-schema.json | 5 +- .../schema/transfer-process-schema.json | 2 +- .../transfer-suspension-message-schema.json | 4 +- .../transfer-completion-message-shape.ttl | 5 +- .../message/shape/transfer-error-shape.ttl | 10 +- .../message/shape/transfer-process-shape.ttl | 5 +- .../shape/transfer-request-message-shape.ttl | 9 +- .../shape/transfer-start-message-shape.ttl | 9 +- .../transfer-suspension-message-shape.ttl | 13 +- .../transfer-termination-message-shape.ttl | 12 +- transfer/message/transfer-start-message.json | 7 - transfer/transfer.process.binding.https.md | 371 +++++++++++--- transfer/transfer.process.protocol.md | 283 +++++------ 99 files changed, 1722 insertions(+), 1767 deletions(-) create mode 100644 catalog/message/diagram/dataset-request-message.png create mode 100644 catalog/message/diagram/dataset-request-message.puml rename catalog/message/{ => example}/catalog-error.json (100%) rename catalog/message/{ => example}/catalog-request-message.json (100%) rename catalog/message/{ => example}/catalog.json (81%) rename catalog/message/{ => example}/dataset-request-message.json (100%) rename catalog/message/{ => example}/dataset.json (92%) create mode 100644 catalog/message/shape/dataset-shape.ttl delete mode 100644 common/shape/message-shape.ttl rename negotiation/{ => figures}/contract.negotiation.state.machine.png (100%) rename negotiation/{ => figures}/contract.negotiation.state.machine.puml (100%) rename negotiation/message/{ => example}/contract-agreement-message.json (100%) rename negotiation/message/{ => example}/contract-agreement-verification-message.json (100%) rename negotiation/message/{ => example}/contract-negotiation-error.json (100%) rename negotiation/message/{ => example}/contract-negotiation-event-message.json (100%) rename negotiation/message/{ => example}/contract-negotiation-termination-message.json (100%) rename negotiation/message/{ => example}/contract-negotiation.json (100%) rename negotiation/message/{ => example}/contract-offer-message.json (100%) rename negotiation/message/{ => example}/contract-offer-message_initial.json (100%) rename negotiation/message/{ => example}/contract-request-message.json (100%) rename negotiation/message/{ => example}/contract-request-message_initial.json (100%) rename transfer/{ => figures}/pull-transfer-process.png (100%) rename transfer/{ => figures}/pull-transfer-process.puml (100%) rename transfer/{ => figures}/push-transfer-process.png (100%) rename transfer/{ => figures}/push-transfer-process.puml (100%) rename transfer/{ => figures}/transfer-process-state-machine.png (100%) rename transfer/{ => figures}/transfer-process-state-machine.puml (100%) rename transfer/message/{ => example}/transfer-completion-message.json (100%) rename transfer/message/{ => example}/transfer-error.json (100%) rename transfer/message/{ => example}/transfer-process.json (100%) rename transfer/message/{ => example}/transfer-request-message.json (100%) create mode 100644 transfer/message/example/transfer-start-message.json rename transfer/message/{ => example}/transfer-suspension-message.json (100%) rename transfer/message/{ => example}/transfer-termination-message.json (100%) delete mode 100644 transfer/message/transfer-start-message.json diff --git a/README.md b/README.md index 250005f4..d6094792 100644 --- a/README.md +++ b/README.md @@ -2,26 +2,19 @@ > __NOTE:__ These specifications are working drafts and subject to change. -> __NOTE:__ For GitHub users, The link to the rendered content is https://docs.internationaldataspaces.org/dataspace-protocol/ +> __NOTE:__ For GitHub users, the link to the rendered content is https://docs.internationaldataspaces.org/dataspace-protocol/. -> __NOTE:__ The human-friendly version of this specification in the -> [IDSA Knowledge base](https://docs.internationaldataspaces.org/dataspace-protocol/) -> will always show the latest version of the document. -> The version history and changes are provided via the [GitHub Repository](https://github.com/International-Data-Spaces-Association/ids-specification/). +> __NOTE:__ The human-friendly version of this specification in the [IDSA Knowledge base](https://docs.internationaldataspaces.org/dataspace-protocol/) will always show the latest version of the document. The version history and changes are provided via the [GitHub Repository](https://github.com/International-Data-Spaces-Association/ids-specification/). ## About versions of the Dataspace Protocol -The specification of the Dataspace Protocol is work in progress and subject to change. -Since [version 0.8](https://github.com/International-Data-Spaces-Association/ids-specification/releases/tag/v0.8) the specification is stable with changes in details. -All changes made to the specification can be reviewed in the [GitHub repository](https://github.com/International-Data-Spaces-Association/ids-specification/). +The specification of the Dataspace Protocol is work in progress and subject to change. Since [version 0.8](https://github.com/International-Data-Spaces-Association/ids-specification/releases/tag/v0.8) the specification is stable with changes in details. All changes made to the specification can be reviewed in the [GitHub repository](https://github.com/International-Data-Spaces-Association/ids-specification/). > __NOTE:__ A versioning scheme beside the commits to the repository is not available but will be provided in the future. ## Abstract -The __Dataspace Protocol__ is a set of specifications designed to facilitate interoperable data sharing between entities governed by usage control and based on Web technologies. These specifications -define the schemas and protocols required for entities to publish data, negotiate [Agreements](./model/terminology.md#agreement), and access data as part of a federation of technical systems termed a -[Dataspace](./model/terminology.md#dataspace). +The __Dataspace Protocol__ is a set of specifications designed to facilitate interoperable data sharing between entities governed by usage control and based on Web technologies. These specifications define the schemas and protocols required for entities to publish data, negotiate [Agreements](./model/terminology.md#agreement), and access data as part of a federation of technical systems termed a [Dataspace](./model/terminology.md#dataspace). ## Introduction @@ -30,42 +23,44 @@ The __Dataspace Protocol__ defines how this metadata is provisioned: 1. How [Datasets](./model/terminology.md#dataset) are deployed as [DCAT Catalogs](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) and usage control is expressed as [ODRL Policies](https://www.w3.org/TR/odrl-model/). 2. How [Agreements](./model/terminology.md#agreement) that govern data usage are syntactically expressed and electronically negotiated. -3. How [Datasets](./model/terminology.md#dataset) are accessed using Transfer Process Protocols. +3. How [Datasets](./model/terminology.md#dataset) are accessed using [Transfer Process Protocols](./model/terminology.md#transfer-process-protocol). -These specifications build on protocols located in the [ISO OSI model (ISO/IEC 7498-1:1994)](https://www.iso.org/standard/20269.html) layers, like HTTPS. +These specifications build on protocols located in the [ISO OSI model (ISO/IEC 7498-1:1994)](https://www.iso.org/standard/20269.html) layers, like HTTPS. The purpose of this specification is to define interactions between systems independent of such protocols, but describing how to implement it in an unambiguous and extensible way. To do so, the messages that are exchanged during the process are described in this specification and the states and their transitions are specified as state machines, based on the key terms and concepts of a [Dataspace](./model/terminology.md#dataspace). -On this foundation the binding to Transfer Process Protocols, like HTTPS, is described. +On this foundation the bindings to data transfer protocols, like HTTPS, are described. The specifications are organized into the following documents: -* __*Dataspace Model*__ and __*Dataspace Terminology*__ documents that define key terms. -* __*Catalog Protocol*__ and __*Catalog HTTPS Binding*__ documents that define how [DCAT Catalogs](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) are published and accessed as HTTPS endpoints respectively. -* __*Contract Negotiation Protocol*__ and __*Contract Negotiation HTTPS Binding*__ documents that define how [Contract Negotiations](./model/terminology.md#contract-negotiation) are conducted and requested via HTTPS endpoints. -* __*Transfer Process Protocol*__ and __*Transfer Process HTTPS Binding*__ documents that define how [Transfer Processes](./model/terminology.md#transfer-process) using a given data transfer protocol are governed via HTTPS +* [__*Dataspace Model*__](./model/model.md) and [__*Dataspace Terminology*__](./model/terminology.md) documents that define key terms. +* [__*Common Functionalities*__](./common/common.protocol.md) and their [__*Binding in HTTPS*__](./common/common.binding.https.md) declares cross-cutting functions as, e.g., the declaration of supported versions of this Dataspace Protocol. +* [__*Catalog Protocol*__](./catalog/catalog.protocol.md) and [__*Catalog HTTPS Binding*__](./catalog/catalog.binding.https.md) documents that define how [DCAT Catalogs](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) are published and accessed as HTTPS endpoints respectively. +* [__*Contract Negotiation Protocol*__](./negotiation/contract.negotiation.protocol.md) and [__*Contract Negotiation HTTPS Binding*__](./negotiation/contract.negotiation.binding.https.md) documents that define how [Contract Negotiations](./model/terminology.md#contract-negotiation) are conducted and requested via HTTPS endpoints. +* [__*Transfer Process Protocol*__](./transfer/transfer.process.protocol.md) and [__*Transfer Process HTTPS Binding*__](./transfer/transfer.process.binding.https.md) documents that define how [Transfer Processes](./model/terminology.md#transfer-process) using a given data transfer protocol are governed via HTTPS endpoints. This specification does not cover the data transfer process as such. -While the data transfer is controlled by the __*Transfer Process Protocol*__ mentioned above, the data transfer itself and especially the handling of technical exceptions is an obligation to the Transport Protocol. +While the data transfer is controlled by the __*Transfer Process Protocol*__ mentioned above, e.g. the initation of the transfer channels or their decomissioning, the data transfer itself and especially the handling of technical exceptions is an obligation to the Transport Protocol. As an implication, the data transfer can be conducted in a separated process if required, as long as this process is to the specified extend controlled by the __*Transfer Process Protocol*__. + ### Context of this specification The __Dataspace Protocol__ is used in the context of [Dataspaces](./model/terminology.md#dataspace) as described and defined in the subsequent sections with the purpose to support interoperability. -In this context, the specification provides fundamental technical interoperability for [Participants](./model/terminology.md#participant) in [Dataspaces](./model/terminology.md#dataspace) and therefore the protocol specified here is required to join any [Dataspace](./model/terminology.md#dataspace). -Beyond the technical interoperability measures described in this specification, semantic interoperability should also be addressed by the [Participants](./model/terminology.md#participant). On the perspective of the [Dataspace](./model/terminology.md#dataspace), interoperability needs to be addressed also on the level of trust, on organizational level and on legal level. -The aspect of cross [Dataspace](./model/terminology.md#dataspace) communication is not subject of this document, as this is addressed by the [Dataspaces'](./model/terminology.md#dataspace) organizational and legal agreements. +In this context, the specification provides fundamental technical interoperability for [Participants](./model/terminology.md#participant) in [Dataspaces](./model/terminology.md#dataspace). +Beyond the technical interoperability measures described in this specification, semantic interoperability should also be addressed by the [Participants](./model/terminology.md#participant). On the perspective of the [Dataspace](./model/terminology.md#dataspace), interoperability needs to be addressed also on the level of trust, on organizational levels, and on legal levels. +The aspect of cross-dataspace communication is not subject of this document, as this is addressed by the [Dataspaces'](./model/terminology.md#dataspace) organizational and legal agreements. The interaction of [Participants](./model/terminology.md#participant) in a [Dataspace](./model/terminology.md#dataspace) is conducted by the [Participant Agents](./model/terminology.md#participant-agent), so-called [Connectors](./model/terminology.md#connector--data-service-), which implement the protocols described above. While most interactions take place between [Connectors](./model/terminology.md#connector--data-service-), some interactions with other systems are required. The figure below provides an overview on the context of this specification. -An [Identity Provider](./model/terminology.md#identity-provider) realizes the required interfaces and provides required information to implement Trust Framework of a [Dataspace](./model/terminology.md#dataspace). -The validation of the identity of a given [Participant Agent](./model/terminology.md#participant-agent) and the validation of additional claims is the fundamental mechanism. The structure and content of such claims and identity may vary between different [Dataspaces](./model/terminology.md#dataspace), as well as the structure of such an Identity Provider, e.g. a centralized system, a decentralized system or a federated system. +An [Identity Provider](./model/terminology.md#identity-provider) realizes the required interfaces and provides required information to implement the Trust Framework of a [Dataspace](./model/terminology.md#dataspace). +The validation of the identity of a given [Participant Agent](./model/terminology.md#participant-agent) and the validation of additional claims is a fundamental mechanism. The structure and content of such claims and identities may, however, vary between different [Dataspaces](./model/terminology.md#dataspace), as well as the structure of such an [Identity Provider](./model/terminology.md#identity-provider), e.g. a centralized system, a decentralized system or a federated system. Other specifications, like the Identity and Trust Protocol ([IATP](https://github.com/eclipse-tractusx/identity-trust)), define the respective functions. -A [Connector](./model/terminology.md#connector--data-service-) will implement additional internal functionalities, like monitoring or policy engines, as appropriate. It is not covered by this specification, if a [Connector](./model/terminology.md#connector--data-service-) implements such or how. +A [Connector](./model/terminology.md#connector--data-service-) will implement additional internal functionalities, like monitoring or policy engines, as appropriate. It is not covered by this specification if a [Connector](./model/terminology.md#connector--data-service-) implements such or how. -The same applies for the data, which is transferred between the systems. While this document does not define the transport protocol, the structure, syntax and semantics of the data, a specification for those aspects is required and subject to the agreements of the [Participants](./model/terminology.md#participant) or the [Dataspace](./model/terminology.md#dataspace). +The same applies for the actual data that is transferred between the systems. While this document does not define the transport protocol, the structure, syntax or semantics of the data, a specification for those aspects is required and subject to the agreements of the [Participants](./model/terminology.md#participant) or the [Dataspace](./model/terminology.md#dataspace). ![Overview on protocol and context](./resources/figures/ProtocolOverview.png) diff --git a/SUMMARY.md b/SUMMARY.md index cb9e35d2..e571f795 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -6,6 +6,11 @@ * [Terminology](./model/terminology.md) * [Information Model](./model/model.md) +## Common Functionalities + +* [Specification](./common/common.protocol.md) +* [Binding: HTTPS](./common/common.binding.https.md) + ## Catalog * [Specification](./catalog/catalog.protocol.md) diff --git a/catalog/catalog.binding.https.md b/catalog/catalog.binding.https.md index 4ad6b0be..b154171d 100644 --- a/catalog/catalog.binding.https.md +++ b/catalog/catalog.binding.https.md @@ -1,36 +1,52 @@ # Catalog HTTPS Binding +This specification defines a RESTful API over HTTPS for the [Catalog Protocol](./catalog.protocol.md). + +* [1 Introduction](#1-introduction) + * [1.1 Prerequisites](#11-prerequisites) + * [1.2 Catalog Error](#12-catalog-error) + * [1.3 Authorization](#13-authorization) +* [2 Path Bindings](#2-path-bindings) + * [2.1 The `catalog/request` Endpoint (Provider-side)](#21-the-catalogrequest-endpoint--provider-side-) + * [2.2 The `catalog/datasets/:id` Endpoint (Provider-side)](#22-the-catalogdatasetsid-endpoint--provider-side-) +* [3 Technical Considerations](#3-technical-considerations) + * [3.1 Versioning](#31-versioning) + * [3.2 Pagination](#32-pagination) + * [3.3 Compression](#33-compression) +* [4 The Well-Known Proof Metadata Endpoint](#4-the-well-known-proof-metadata-endpoint) + ## 1 Introduction -This specification defines a RESTful API over HTTPS for the [Catalog Protocol]. +### 1.1 Prerequisites -The OpenAPI definitions for this specification can be accessed [here](TBD). +1. The `` notation indicates the base URL for a [Catalog Service](../model/terminology.md#catalog-service) endpoint. For example, if the base [Catalog](../model/terminology.md#catalog) URL is `api.example.com`, the URL `https:///catalog/request` will map to `https//api.example.com/catalog/request`. -## 2 Path Bindings +2. All request and response messages must use the `application/json` media type. -### 2.1 Prerequisites +### 1.2 Catalog Error -1. The `` notation indicates the base URL for a [Catalog Service](../model/terminology.md#catalog-service) endpoint. For example, if the base [Catalog](../model/terminology.md#catalog) URL is `api.example.com`, the URL `https:///catalog/request` - will map to `https//api.example.com/catalog/request`. +In the event of a request error, the [Catalog Service](../model/terminology.md#catalog-service) must return an appropriate HTTP code and a [Catalog Error](./catalog.protocol.md#33-error---catalog-error) in the response body. -2. All request and response messages must use the `application/json` media type. +### 1.3 Authorization -### 2.2 CatalogError +A [Catalog Service](../model/terminology.md#catalog-service) may require authorization. If the [Catalog Service](../model/terminology.md#catalog-service) requires authorization, requests must include an HTTP `Authorization` header with a token. The semantics of such tokens are not part of this specification. -In the event of a request error, the [Catalog Service](../model/terminology.md#catalog-service) must return an appropriate HTTP code and a [CatalogError](./catalog.protocol.md#) in the response body. +## 2 Path Bindings -| Field | Type | Description | -|---------|---------------|-------------------------------------------------------------| -| code | string | An optional implementation-specific error code. | -| reasons | Array[object] | An optional array of implementation-specific error objects. | +| Endpoint | Method | Description | +|:------------------------------------------|:-------|:---------------------------| +| https://provider.com/catalog/request | `POST` | Section [2.1.1](#211-post) | +| https://provider.com/catalog/datasets/:id | `GET` | Section [2.2.1](#221-get) | -### 2.3 The `catalog/request` endpoint +### 2.1 The `catalog/request` Endpoint (Provider-side) -#### 2.3.1 POST +#### 2.1.1 POST -The [CatalogRequestMessage](catalog.protocol.md#21-catalogrequestmessage) corresponds to `POST https:///catalog/request`: +##### Request -``` +The [Catalog Request Message](./catalog.protocol.md#21-catalog-request-message) corresponds to `POST https:///catalog/request`: + +```http request POST https://provider.com/catalog/request Authorization: ... @@ -42,101 +58,95 @@ Authorization: ... } ``` -The `Authorization` header is optional if the [Catalog Service](../model/terminology.md#catalog-service) does not require authorization. If present, the contents of the `Authorization` header are detailed in the -[Authorization section](#31-authorization). +- The `Authorization` header is optional if the [Catalog Service](../model/terminology.md#catalog-service) does not require authorization. If present, the contents of the `Authorization` header are detailed in the [Authorization section](#13-authorization). -The `filter` property is optional. If present, the `filter` property can contain an implementation-specific filter expression or query to be executed as part of the [Catalog](../model/terminology.md#catalog) -request. +- The `filter` property is optional. If present, the `filter` property can contain an implementation-specific filter expression or query to be executed as part of the [Catalog](../model/terminology.md#catalog) request. -#### 2.3.2 OK (200) Response +##### Response -If the request is successful, the [Catalog Service](../model/terminology.md#catalog-service) must return a response body containing a [Catalog](./message/catalog.json) which is a profiled [DCAT `Catalog`](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) type -described by the [Catalog Protocol Specification](catalog.protocol.md). +If the request is successful, the [Catalog Service](../model/terminology.md#catalog-service) must return an HTTP 200 (OK) with a response body containing a [Catalog](./catalog.protocol.md#31-ack---catalog) (which is a profiled [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) type described by the [Catalog Protocol](catalog.protocol.md)). -### 2.4 The `catalog/datasets/{id}` endpoint +### 2.2 The `catalog/datasets/:id` Endpoint (Provider-side) -#### 2.3.1 GET +#### 2.2.1 GET -The [DatasetRequestMessage](catalog.protocol.md#24-datasetrequestmessage) corresponds to `GET https:///catalog/datasets/{id}}`: +##### Request -``` +The [Dataset Request Message](./catalog.protocol.md#22-dataset-request-message) corresponds to `GET https:///catalog/datasets/:id}`: + +```http request GET https://provider.com/catalog/datasets/{id} Authorization: ... +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:DatasetRequestMessage", + "dspace:dataset": "urn:uuid:3dd1add8-4d2d-569e-d634-8394a8836a88" +} ``` -The `Authorization` header is optional if the [Catalog Service](../model/terminology.md#catalog-service) does not require authorization. If present, the contents of the `Authorization` header are detailed in the -[Authorization section](#31-authorization). +- The `Authorization` header is optional if the [Catalog Service](../model/terminology.md#catalog-service) does not require authorization. If present, the contents of the `Authorization` header are detailed in the [Authorization section](#13-authorization). -#### 2.4.2 OK (200) Response +##### Response -If the request is successful, the [Catalog Service](../model/terminology.md#catalog-service) must return a response body containing a [Dataset](./message/dataset.json) which is a [DCAT `Dataset`](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset) type -described by the [Catalog Protocol Specification](catalog.protocol.md). +If the request is successful, the [Catalog Service](../model/terminology.md#catalog-service) must return an HTTP 200 (OK) with a response body containing a [Dataset](./catalog.protocol.md#32-ack---dataset) (which is a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset) type described by the [Catalog Protocol](catalog.protocol.md)). ## 3 Technical Considerations -### 3.1 Authorization - -A [Catalog Service](../model/terminology.md#catalog-service) may require authorization. If the [Catalog Service](../model/terminology.md#catalog-service) requires authorization, requests must include an HTTP `Authorization` header with a token. The semantics of -such tokens are not part of this specification. - -### 3.2 Versioning +### 3.1 Versioning - Versioning will be done via URLs. TBD. -### 3.3 Pagination +### 3.2 Pagination -A [Catalog Service](../model/terminology.md#catalog-service) may paginate the results of a `CatalogRequestMessage`. Pagination data is specified using [Web Linking](https://datatracker.ietf.org/doc/html/rfc5988) -and the HTTP `Link` header. The `Link` header will contain URLs for navigating to previous and subsequent results. The following request sequence demonstrates pagination: +A [Catalog Service](../model/terminology.md#catalog-service) may paginate the results of a [Catalog Request Message](./catalog.protocol.md#21-catalog-request-message). Pagination data is specified using [Web Linking](https://datatracker.ietf.org/doc/html/rfc5988) and the HTTP `Link` header. The `Link` header will contain URLs for navigating to previous and subsequent results. The following request sequence demonstrates pagination: -``` +```http request Link: ; rel="next" + { "@context": "https://w3id.org/dspace/v0.8/context.json", - "@type": "dcat:Catalog" + "@type": "dcat:Catalog", ... } - ``` Second page response: -``` +```http request Link: ; rel="previous" Link: ; rel="next" { - "@type": "dcat:Catalog" + "@type": "dcat:Catalog", ... } ``` Last page response: -``` +```http request Link: ; rel="previous" { - "@type": "dcat:Catalog" + "@type": "dcat:Catalog", ... } ``` -### 3.4 Compression +### 3.3 Compression -[Catalog Services](../model/terminology.md#catalog-service) MAY compress responses to a [Catalog](../model/terminology.md#catalog) request by setting the `Content-Encoding` header to `gzip` as described in -the [HTTP 1.1 Specification](https://www.rfc-editor.org/rfc/rfc9110.html#name-gzip-coding). +[Catalog Services](../model/terminology.md#catalog-service) MAY compress responses to a [Catalog Request](./catalog.protocol.md#21-catalog-request-message) by setting the `Content-Encoding` header to `gzip` as described in the [HTTP 1.1 Specification](https://www.rfc-editor.org/rfc/rfc9110.html#name-gzip-coding). ## 4 The Well-Known Proof Metadata Endpoint -When an implementation supports protected [Datasets](../model/terminology.md#dataset), it may offer a proof metadata endpoint clients can use to determine proof requirements. If the implementation -offers a proof data endpoint, it must use the `dspace-trust` [Well-Known Uniform Resource Identifier](https://www.rfc-editor.org/rfc/rfc8615.html) at the top of the -path hierarchy: +When an implementation supports protected [Datasets](../model/terminology.md#dataset), it may offer a proof metadata endpoint clients can use to determine proof requirements. If the implementation offers a proof data endpoint, it must use the `dspace-trust` [Well-Known Uniform Resource Identifier](https://www.rfc-editor.org/rfc/rfc8615.html) at the top of the path hierarchy: -`/.well-known/dspace-trust` +``` +/.well-known/dspace-trust +``` The contents of the response is a JSON object defined by individual trust specifications and not defined here. -Note that if multiple [Connectors](../model/terminology.md#connector--data-service-) are hosted under the same base URL, a path segment appended to the base well-known URL can be used, for example, -`https://example.com/.well-known/dspace-trust/connector1.` +Note that if multiple [Connectors](../model/terminology.md#connector--data-service-) are hosted under the same base URL, a path segment appended to the base well-known URL can be used, for example, `https://example.com/.well-known/dspace-trust/connector1.` diff --git a/catalog/catalog.protocol.md b/catalog/catalog.protocol.md index 72525024..2495fe0e 100644 --- a/catalog/catalog.protocol.md +++ b/catalog/catalog.protocol.md @@ -1,207 +1,187 @@ # Catalog Protocol -## 1 Introduction: Terms +This document outlines the [Catalog Protocol](../model/terminology.md#catalog-protocol). The used terms are described [here](../model/terminology.md). + +* [Catalog Protocol](#catalog-protocol) + * [1 Introduction](#1-introduction) + * [1.1 DCAT Vocabulary Mapping](#11-dcat-vocabulary-mapping) + * [1.1.1 Dataset](#111-dataset) + * [odrl:hasPolicy](#odrl--haspolicy) + * [1.1.2 Distributions](#112-distributions) + * [1.1.3 Data Service](#113-data-service) + * [dspace:dataServiceType](#dspace--dataservicetype) + * [dcat:servesDataset](#dcat--servesdataset) + * [1.2 DCAT and ODRL Profiles](#12-dcat-and-odrl-profiles) + * [2 Message Types](#2-message-types) + * [2.1 Catalog Request Message](#21-catalog-request-message) + * [2.2 Dataset Request Message](#22-dataset-request-message) + * [3 Response Types](#3-response-types) + * [3.1 ACK - Catalog](#31-ack---catalog) + * [3.2 ACK - Dataset](#32-ack---dataset) + * [3.3 ERROR - Catalog Error](#33-error---catalog-error) + * [4 Technical Considerations](#4-technical-considerations) + * [4.1 Queries and Filter Expressions](#41-queries-and-filter-expressions) + * [4.2 Replication Protocol](#42-replication-protocol) + * [4.3 Security](#43-security) + * [4.3.1 The Proof Metadata Endpoint](#431-the-proof-metadata-endpoint) + * [4.4 Catalog Brokers](#44-catalog-brokers) + +## 1 Introduction + +The Catalog Protocol defines how a [Catalog](../model/terminology.md#catalog) is requested from a [Catalog Service](../model/terminology.md#catalog-service) by a [Consumer](../model/terminology.md#consumer) using an abstract message exchange format. The concrete message exchange wire format is defined in the binding specifications. + +### 1.1 DCAT Vocabulary Mapping + +This section describes how the DSP Information Model maps to [DCAT](https://www.w3.org/TR/vocab-dcat-3/) resources. + +#### 1.1.1 Dataset -This document outlines the Catalog Protocol. The following terms are used: - -- A _**message type**_ defines the structure of a _message_. -- A _**message**_ is an instantiation of a _message type_. -- A _**catalog**_ is a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) offered by a _provider_. -- a _**catalog service**_ is a provider [Participant Agent](../model/terminology.md#participant-agent) that advertises offered [Datasets](../model/terminology.md#dataset). -- A _**consumer**_ is a [Participant Agent](../model/terminology.md#participant-agent) that requests access to an offered [Datasets](../model/terminology.md#dataset). - -The Catalog Protocol defines a how a [Catalog](../model/terminology.md#catalog) is requested from a [Catalog Service](../model/terminology.md#catalog-service) by a consumer using an abstract message exchange format. The concrete message exchange wire -format is defined in Catalog Binding Specifications. - -## 2 Message Types - -All messages must be serialized in JSON-LD compact form as specified in the [JSON-LD 1.1 Processing Algorithms and API](https://www.w3.org/TR/json-ld11-api/#compaction-algorithms). -Future IDS specifications may define additional optional serialization formats. - -### 2.1 CatalogRequestMessage - -![](./message/diagram/catalog-request-message.png) - -**Sent by**: Consumer - -**Example**: [CatalogRequestMessage](./message/catalog-request-message.json) - -**Response**: [Catalog](#22-catalog) containing the [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog). - -**Schema**: [CatalogRequestMessageShape](./message/shape/catalog-request-message-shape.ttl) and the [CatalogRequestMessage JSON Schema](./message/schema/catalog-request-message-schema.json) - -#### Description - -The `CatalogRequestMessage` is message sent by a consumer to a [Catalog Service](../model/terminology.md#catalog-service). The [Catalog Service](../model/terminology.md#catalog-service) must respond with a [Catalog](../model/terminology.md#catalog), which is a -valid instance of a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog). - -The `CatalogRequestMessage` may have a `filter` property which contains an implementation-specific query or filter expression type supported by the [Catalog Service](../model/terminology.md#catalog-service). - -The [Catalog Service](../model/terminology.md#catalog-service) may require an authorization token. Details for including that token can be found in the relevant Catalog Binding Specification. Similarly, pagination may -be defined in the relevant Catalog Binding Specification. - - -### 2.2 Catalog - -![](./message/diagram/catalog.png) - -**Sent by**: Provider - -**Example**: [Catalog](./message/catalog.json) - - -**Response**: OK or ERROR - -**Schema**: [CatalogShape](./message/shape/dcat-shapes.ttl) and the [Catalog JSON Schema](./message/schema/catalog-schema.json) - -#### Description - -The [Catalog](../model/terminology.md#catalog) contains all [Datasets](#31-dataset) which the requester shall see. - -#### 2.2.1 odrl:hasPolicy - -A [Catalog](../model/terminology.md#catalog) may have `hasPolicy` attributes that contain an [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) defining the [Usage Policy](../model/terminology.md#policy) associated with the [Catalog](../model/terminology.md#catalog). Offers must NOT contain any -explicit `target` attributes. The `target` of an [Offer](../model/terminology.md#offer) is the associated [Catalog](../model/terminology.md#catalog). This is in line with the semantics of `hasPolicy` as defined in the [ODRL Information Model](https://www.w3.org/TR/odrl-model/#policy-has), explaining that the subject (here the Catalog) is automatically the `target` of each Rule. To prevent conflicts, the `target` attribute must not be set explicitely, for example, in the Offer or Rules. - -### 2.3 CatalogError - -![](./message/diagram/catalog-error.png) - -**Sent by**: Consumer or Provider - -**Example**: [CatalogError](./message/catalog-error.json) +A [Dataset](../model/terminology.md#dataset) is a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset) with the following attributes: -**Response**: OK or ERROR +##### odrl:hasPolicy -**Schema**: [CatalogErrorShape](./message/shape/catalog-error-shape.ttl) and the [CatalogError JSON Schema](./message/schema/catalog-error-schema.json) +A [Dataset](../model/terminology.md#dataset) must have 1..N `hasPolicy` attributes that contain an [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) defining the [Usage Policy](../model/terminology.md#policy) associated with the [Catalog](../model/terminology.md#catalog). Offers must NOT contain any +explicit `target` attributes. The `target` of an [Offer](../model/terminology.md#offer) is the associated [Dataset](../model/terminology.md#dataset). This is in line with the semantics of `hasPolicy` as defined in the [ODRL Information Model](https://www.w3.org/TR/odrl-model/#policy-has), explaining that the subject (here the Dataset) is automatically the `target` of each Rule. To prevent conflicts, the `target` attribute must not be set explicitely, for example, in the [Offer](../model/terminology.md#offer) or Rules. -#### Description +#### 1.1.2 Distributions -A Catalog Error Message is used when an error occurred after a `CatalogRequestMessage` and the provider can not provide its [Catalog](../model/terminology.md#catalog) to the requester. +A [Dataset](../model/terminology.md#dataset) may contain 0..N [DCAT Distributions](https://www.w3.org/TR/vocab-dcat-3/#Class:Distribution). Each distribution must have at least one `DataService` which specifies where the distribution is obtained. Specifically, a `DataService` specifies the endpoint for initiating a [Contract Negotiation](../model/terminology.md#contract-negotiation) and [Transfer Process](../model/terminology.md#transfer-process). -### 2.4 DatasetRequestMessage +A Distribution may have 0..N `hasPolicy` attributes that contain an [ODRL Offer](https://www.w3.org/TR/odrl-vocab/#term-Offer) defining the [Usage Policy](../model/terminology.md#policy) associated with the [Dataset](../model/terminology.md#dataset) and this explicit `Distribution`. [Offers](../model/terminology.md#offer) must NOT contain any target attributes. The target of an [Offer](../model/terminology.md#offer) is the [Dataset](../model/terminology.md#dataset) that contains the distribution. -**Sent by**: Consumer +Support for `hasPolicy` attributes on a `Distribution` is optional. Implementations may choose not to support this feature, in which case they should return an appropriate error message to clients. -**Example**: [DatasetRequestMessage](./message/dataset-request-message.json) +#### 1.1.3 Data Service -**Response**: [Dataset](#25-dataset) containing the [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset). +A Data Service may specify an endpoint supporting the Dataspace Protocol such as a [Connector](../model/terminology.md#connector--data-service-). -**Schema**: [DatasetRequestMessageShape](./message/shape/dataset-request-message-shape.ttl) and the [DatasetRequestMessage JSON Schema](./message/schema/dataset-request-message-schema.json) +##### dspace:dataServiceType -#### Description +If the Data Service refers to an endpoint that supports the Dataspace Protocol, it must include the property `dspace:dataServiceType`: -The `DatasetRequestMessage` is message sent by a consumer to a [Catalog Service](../model/terminology.md#catalog-service). The [Catalog Service](../model/terminology.md#catalog-service) must respond with a `Dataset,` which is a -valid instance of a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset). +| Category | Description | +|------------|----------------------------------------------------------------------------| +| Definition | Specifies the service type | +| Domain | [dcat:DataService](https://www.w3.org/TR/vocab-dcat-2/#Class:Data_Service) | +| Type | xsd:string | +| Note | The value of this field is left intentionally open for future extension. | -The `DatasetRequestMessage` must have a [Dataset](../model/terminology.md#dataset) property which contains the id of the [Dataset](../model/terminology.md#dataset). +The following table lists well-know endpoint types: -The [Catalog Service](../model/terminology.md#catalog-service) may require an authorization token. Details for including that token can be found in the relevant Catalog Binding Specification. +| Value | Description | +|--------------------|---------------------------------------------------------------------------| +| `dspace:connector` | A [Connector](../model/terminology.md#connector--data-service-) endpoint. | +| | | +##### dcat:servesDataset -### 2.5 Dataset +Note that the property `dcat:servesDataset` should be omitted from the `DataService` since [Datasets](../model/terminology.md#dataset) are included as top-level entries. Clients are not required to process the contents of `dcat:servesDataset`. -![](./message/diagram/dataset.png) +### 1.2 DCAT and ODRL Profiles -**Sent by**: Provider +The [Catalog](../model/terminology.md#catalog) is a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) with the following restrictions: -**Example**: [Dataset](./message/dataset.json) +1. Each [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) must be unique to a [Dataset](../model/terminology.md#dataset) since the target of the [Offer](../model/terminology.md#offer) is derived from its enclosing context. +2. Each [ODRL Offer](https://www.w3.org/TR/odrl-vocab/#term-Offer) linked from a [Catalog](../model/terminology.md#catalog) must NOT include an explicit `target` attribute. +## 2 Message Types -**Response**: OK or ERROR +All messages must be serialized in JSON-LD compact form as specified in the [JSON-LD 1.1 Processing Algorithms and API](https://www.w3.org/TR/json-ld11-api/#compaction-algorithms). Further [Dataspace](../model/terminology.md#dataspace) specifications may define additional optional serialization formats. -**Schema**: [DatasetShape](./message/shape/dcat-shapes.ttl) and the [Dataset JSON Schema](./message/schema/dataset-schema.json) +### 2.1 Catalog Request Message -## 3 DCAT Vocabulary Mapping +| | | +|---------------------|-------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer) | +| **Resulting state** | `TERMINATED` | +| **Response** | [ACK](#31-ack---catalog) or [ERROR](#33-error---catalog-error) | +| **Schema** | [TTL Shape](./message/shape/catalog-request-message-shape.ttl), [JSON Schema](./message/schema/catalog-request-message-schema.json) | +| **Example** | [Message](./message/example/catalog-request-message.json) | +| **Diagram(s)** | ![](./message/diagram/catalog-request-message.png) | -This section describes how the DSP Information Model maps to DCAT resources. +The Catalog Request Message is message sent by a [Consumer](../model/terminology.md#consumer) to a [Catalog Service](../model/terminology.md#catalog-service). The [Catalog Service](../model/terminology.md#catalog-service) must respond with a [Catalog](#31-ack---catalog), which is a valid instance of a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog). -### 3.1 Dataset +- The message may have a `filter` property which contains an implementation-specific query or filter expression type supported by the [Catalog Service](../model/terminology.md#catalog-service). -A [Dataset](../model/terminology.md#dataset) is a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset) with the following attributes: +- The [Catalog Service](../model/terminology.md#catalog-service) may require an authorization token. Details for including that token can be found in the protocol binding, e.g., [Catalog HTTPS Binding](./catalog.binding.https.md). Similarly, pagination may be defined in the protocol binding. -#### 3.1.1 odrl:hasPolicy +### 2.2 Dataset Request Message -A [Dataset](../model/terminology.md#dataset) must have 1..N `hasPolicy` attributes that contain an [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) defining the [Usage Policy](../model/terminology.md#policy) associated with the [Dataset](../model/terminology.md#dataset). Offers must NOT contain any -explicit `target` attributes. The `target` of an [Offer](../model/terminology.md#offer) is the associated [Dataset](../model/terminology.md#dataset). This is in line with the semantics of `hasPolicy` as defined in the [ODRL Information Model](https://www.w3.org/TR/odrl-model/#policy-has), explaining that the subject (here the Dataset) is automatically the `target` of each Rule. To prevent conflicts, the `target` attribute must not be set explicitely, neither in the Offer itself or in its Rules. +| | | +|---------------------|-------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer) | +| **Resulting state** | `TERMINATED` | +| **Response** | [ACK](#31-ack---catalog) or [ERROR](#33-error---catalog-error) | +| **Schema** | [TTL Shape](./message/shape/dataset-request-message-shape.ttl), [JSON Schema](./message/schema/dataset-request-message-schema.json) | +| **Example** | [Message](./message/example/dataset-request-message.json) | +| **Diagram(s)** | ![](./message/diagram/dataset-request-message.png) | -> Note: As ODRL defines that `odrl:hasPolicy rdfs:domain odrl:Asset`, each [Dataset](../model/terminology.md#dataset) is also an `odrl:Asset` from an ODRL perspective. +The Dataset Request Message is message sent by a [Consumer](../model/terminology.md#consumer) to a [Catalog Service](../model/terminology.md#catalog-service). The [Catalog Service](../model/terminology.md#catalog-service) must respond with a [Dataset](#32-ack---dataset), which is a valid instance of a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset). -### 3.2 Distributions +- The message must have a `dataset` property which contains the id of the [Dataset](../model/terminology.md#dataset). -A [Dataset](../model/terminology.md#dataset) may contain 0..N [DCAT Distributions](https://www.w3.org/TR/vocab-dcat-3/#Class:Distribution). Each distribution must have at least one `DataService` which specifies where -the distribution is obtained. Specifically, a `DataService` specifies the endpoint for initiating a [Contract Negotiation](../model/terminology.md#contract-negotiation) and [Transfer Process](../model/terminology.md#transfer-process). +- The [Catalog Service](../model/terminology.md#catalog-service) may require an authorization token. Details for including that token can be found in the protocol binding, e.g., [Catalog HTTPS Binding](./catalog.binding.https.md). -A Distribution may have 0..N `hasPolicy` attributes that contain an [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) defining the [Usage Policy](../model/terminology.md#policy) associated with the [Dataset](../model/terminology.md#dataset) and this explicit `Distribution`. -[Offers](../model/terminology.md#offer) must NOT contain any target attributes. The target of an [Offer](../model/terminology.md#offer) is the [Dataset](../model/terminology.md#dataset) that contains the distribution. +## 3 Response Types -Support for `hasPolicy` attributes on a `Distribution` is optional. Implementations may choose not to support this feature, in which case they should return an appropriate error -message to clients. +The `ACK` and `ERROR` response types are mapped onto a protocol such as HTTPS. A description of an error might be provided in protocol-dependent forms, e.g., for an HTTPS binding in the request or response body. -### 3.3 DataService +### 3.1 ACK - Catalog -A DataService may specify an IDS service endpoint such as a [Connector](../model/terminology.md#connector--data-service-). +| | | +|-----------------|---------------------------------------------------------------------------------------------------| +| **Sent by** | [Provider](../model/terminology.md#provider) | +| **Schema** | [TTL Shape](./message/shape/dcat-shapes.ttl), [JSON Schema](./message/schema/catalog-schema.json) | +| **Example** | [Catalog Example](./message/example/catalog.json) | +| **Diagram(s)** | ![](./message/diagram/catalog.png) | -#### 3.3.1 dspace:dataServiceType +The [Catalog](../model/terminology.md#catalog) contains all [Datasets](#111-dataset) which the requester shall see. -If the DataService refers to an IDS service endpoint, it must include the property `dspace:dataServiceType`: +### 3.2 ACK - Dataset -| Category | Description | -|------------|----------------------------------------------------------------------------| -| Definition | Specifies the IDS service type | -| Domain | [dcat:DataService](https://www.w3.org/TR/vocab-dcat-2/#Class:Data_Service) | -| Type | xsd:string | -| Note | The value of this field is left intentionally open for future extension. | +| | | +|-----------------|---------------------------------------------------------------------------------------------------| +| **Sent by** | [Provider](../model/terminology.md#provider) | +| **Schema** | [TTL Shape](./message/shape/dcat-shapes.ttl), [JSON Schema](./message/schema/dataset-schema.json) | +| **Example** | [Dataset Example](./message/example/dataset.json) | +| **Diagram(s)** | ![](./message/diagram/dataset.png) | -The following table lists well-know IDS endpoint types: +### 3.3 ERROR - Catalog Error -| Value | Description | -|---------------|----------------------| -| dspace:connector | A [Connector](../model/terminology.md#connector--data-service-) endpoint | -| | | +| | | +|-----------------|-----------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer), [Provider](../model/terminology.md#provider) | +| **Schema** | [TTL Shape](./message/shape/catalog-error-shape.ttl), [JSON Schema](./message/schema/catalog-error-schema.json) | +| **Example** | [Error](./message/example/catalog-error.json) | +| **Diagram(s)** | ![](./message/diagram/catalog-error.png) | -#### 3.3.2 dcat:servesDataset +A Catalog Error is used when an error occurred after a [Catalog Request Message](#21-catalog-request-message) or a [Dataset Request Message](#22-dataset-request-message) and the [Provider](../model/terminology.md#provider) cannot provide its [Catalog](../model/terminology.md#catalog) to the requester. -Note that the property `dcat:servesDataset` should be omitted from the `DataService` since [Datasets](../model/terminology.md#dataset) are included as top-level entries. Clients are not required to process the -contents of `dcat:servesDataset`. +| Field | Type | Description | +|-----------|---------------|-------------------------------------------------------------| +| `code` | String | An optional implementation-specific error code. | +| `reasons` | Array[object] | An optional array of implementation-specific error objects. | ## 4 Technical Considerations ### 4.1 Queries and Filter Expressions -A [Catalog Service](../model/terminology.md#catalog-service) may support [Catalog](../model/terminology.md#catalog) queries or filter expressions as an implementation-specific feature. However, it is expected that query capabilities will be implemented -by the consumer against the results of a `CatalogRequestMessage,` as the latter is an RDF vocabulary. Client-side querying can be scaled by periodically crawling provider catalog -services, caching the results, and executing queries against the locally-stored [Catalogs](../model/terminology.md#catalog). +A [Catalog Service](../model/terminology.md#catalog-service) may support [Catalog](../model/terminology.md#catalog) queries or filter expressions as an implementation-specific feature. However, it is expected that query capabilities will be implemented by the [Consumer](../model/terminology.md#consumer) against the results of a [Catalog Request Message](#21-catalog-request-message), as the latter is an RDF vocabulary. Client-side querying can be scaled by periodically crawling the [Provider's](../model/terminology.md#provider) [Catalog Services](../model/terminology.md#catalog-service), caching the results, and executing queries against the locally-stored [Catalogs](../model/terminology.md#catalog). ### 4.2 Replication Protocol -The Catalog Protocol is designed to be used by federated services without the need for a replication protocol. Each consumer is responsible for issuing requests -to 1..N [Catalog Services](../model/terminology.md#catalog-service), and managing the results. It follows that a specific replication protocol is not needed, or more precisely, each consumer replicates data from catalog -services by issuing `CatalogRequestMessages`. +The [Catalog Protocol](../model/terminology.md#catalog-protocol) is designed to be used by federated services without the need for a replication protocol. Each [Consumer](../model/terminology.md#consumer) is responsible for issuing requests to 1..N [Catalog Services](../model/terminology.md#catalog-service), and managing the results. It follows that a specific replication protocol is not needed, or more precisely, each [Consumer](../model/terminology.md#consumer) replicates data from catalog services by issuing [Catalog Request Messages](#21-catalog-request-message). -The discovery protocol adopted by a particular [Dataspace](../model/terminology.md#dataspace) defines how a consumer discovers [Catalog Services](../model/terminology.md#catalog-service). +The discovery protocol adopted by a particular [Dataspace](../model/terminology.md#dataspace) defines how a [Consumer](../model/terminology.md#consumer) discovers [Catalog Services](../model/terminology.md#catalog-service). ### 4.3 Security -It is expected (although not required) that [Catalog Services](../model/terminology.md#catalog-service) implement access control. A [Catalog](../model/terminology.md#catalog) as well as individual [Datasets](../model/terminology.md#dataset) may be restricted to trusted parties. -The [Catalog Service](../model/terminology.md#catalog-service) may require consumers to include a security token along with a `CatalogRequestMessage.` The specifics of how this is done can be found in the relevant -Catalog Binding Specification. The semantics of such tokens are not part of this specification. +It is expected (although not required) that [Catalog Services](../model/terminology.md#catalog-service) implement access control. A [Catalog](../model/terminology.md#catalog) as well as individual [Datasets](../model/terminology.md#dataset) may be restricted to trusted parties. The [Catalog Service](../model/terminology.md#catalog-service) may require [Consumers](../model/terminology.md#consumer) to include a security token along with a [Catalog Request Message](#21-catalog-request-message). The specifics of how this is done can be found in the relevant protocol binding, e.g., [Catalog HTTPS Binding](./catalog.binding.https.md). The semantics of such tokens are not part of this specification. #### 4.3.1 The Proof Metadata Endpoint -When a [Catalog](../model/terminology.md#catalog) contains protected [Datasets](../model/terminology.md#dataset) the provider has two options: include all [Datasets](../model/terminology.md#dataset) in the [Catalog](../model/terminology.md#catalog) response and restrict access when a contract is negotiated; -or, require one or more proofs when the [Catalog](../model/terminology.md#catalog) request is made and filter the [Datasets](../model/terminology.md#dataset) accordingly. The latter option requires a mechanism for clients to discover -the type of proofs that may be presented at request time. The specifics of proof types and presenting a proof during a [Catalog](../model/terminology.md#catalog) request is outside the scope of the -Dataspace Protocol Specifications. However, Catalog Binding Specifications should define a proof data endpoint for obtaining this information. +When a [Catalog](../model/terminology.md#catalog) contains protected [Datasets](../model/terminology.md#dataset) the [Provider](../model/terminology.md#provider) has two options: include all [Datasets](../model/terminology.md#dataset) in the [Catalog](../model/terminology.md#catalog) response and restrict access when a contract is negotiated; or, require one or more proofs when the [Catalog Request](#21-catalog-request-message) is made and filter the [Datasets](../model/terminology.md#dataset) accordingly. The latter option requires a mechanism for clients to discover the type of proofs that may be presented at request time. The specifics of proof types and presenting a proof during a [Catalog](../model/terminology.md#catalog) request is outside the scope of the Dataspace Protocol. However, [Catalog Protocol](../model/terminology.md#catalog-protocol) bindings should define a proof data endpoint for obtaining this information. ### 4.4 Catalog Brokers -A [Dataspace](../model/terminology.md#dataspace) may include _**catalog brokers**_. A catalog broker is a consumer that has trusted access to 1..N upstream [Catalog Services](../model/terminology.md#catalog-service) and advertises their respective [Catalogs](../model/terminology.md#catalog) as -a single [Catalog Service](../model/terminology.md#catalog-service). The broker is expected to honor upstream access control requirements. - -## 5 DCAT and ODRL Profiles - -The [Catalog](../model/terminology.md#catalog) is a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) with the following restrictions: - -1. Each [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) must be unique to a [Dataset](../model/terminology.md#dataset) since the target of the [Offer](../model/terminology.md#offer) is derived from its enclosing context. -2. Each [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) must NOT include an explicit `target` attribute. +A [Dataspace](../model/terminology.md#dataspace) may include Catalog Brokers. A Catalog Broker is a [Consumer](../model/terminology.md#consumer) that has trusted access to 1..N upstream [Catalog Services](../model/terminology.md#catalog-service) and advertises their respective [Catalogs](../model/terminology.md#catalog) as a single [Catalog Service](../model/terminology.md#catalog-service). The broker is expected to honor upstream access control requirements. \ No newline at end of file diff --git a/catalog/message/diagram/catalog.png b/catalog/message/diagram/catalog.png index f360b4c3f972eda18fa21786d826a129bae52447..b0ffdf8e25d7de1dcc4401052db7f016840a0ff4 100644 GIT binary patch literal 132124 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 z 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 z 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 F{{YI^^uz!F literal 4461 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 + dcat:keyword : Array + dct:conformsTo : String + dct:creator : String + dct:identifier : String + dct:issued : String + dct:modified : String + dct:title : String + dct:description : Array ... } +"dcat:Catalog" "0" *-- "*" "dcat:Dataset" : "dcat:dataset" + +"dcat:Catalog" "0" *-- "*" "dcat:DataService" : "dcat:service" + +"dcat:Catalog" "0" --> "*" "odrl:Offer" : "odrl:hasPolicy" + + +class dcat:Dataset { + @type : "dcat:Dataset", + dcat:theme : Array + dcat:keyword : Array + dct:conformsTo : String + dct:creator : String + dct:identifier : String + dct:issued : String + dct:modified : String + dct:title : String + dct:description : Array + ... +} + +"dcat:Dataset" "1" --> "*" "odrl:Offer" : "odrl:hasPolicy" + +"dcat:Dataset" "0" --> "*" "dcat:Distribution" : "dcat:distribution" + +class dcat:DataService { + dcat:endpointDescription : String + dcat:endpointURL : String + dcat:theme : Array + dcat:keyword : Array + dct:conformsTo : String + dct:creator : String + dct:identifier : String + dct:issued : String + dct:modified : String + dct:title : String + dct:description : Array + ... +} + +"dcat:DataService" "0" --> "*" "dcat:Dataset" : "dcat:servesDataset" + +"dcat:DataService" "0" --> "*" "odrl:Offer" : "odrl:hasPolicy" + + +class dcat:Distribution { + @type : "dcat:Distribution", + dct:title : String + dct:description : Array + dct:issued : String + dct:modified : String + ... +} + +"dcat:Distribution" "0" --> "*" "odrl:Offer" : "odrl:hasPolicy" + +"dcat:Distribution" "1" --> "*" "dcat:DataService" : "dcat:accessService" + + @enduml \ No newline at end of file diff --git a/catalog/message/diagram/dataset-request-message.png b/catalog/message/diagram/dataset-request-message.png new file mode 100644 index 0000000000000000000000000000000000000000..5838db697a81bdbb935941ddd16cbb01c3e09f3e GIT binary patch literal 10285 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�`hA7JO4vb7C#uk)`GJ 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 WdDf2glI+@XmMWAm_Wgeq?19t( literal 4854 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 diff --git a/catalog/message/diagram/dataset.puml b/catalog/message/diagram/dataset.puml index 5aed7311..97002eeb 100644 --- a/catalog/message/diagram/dataset.puml +++ b/catalog/message/diagram/dataset.puml @@ -5,10 +5,56 @@ hide empty description - class dcat:Dataset { + @context : "https://w3id.org/dspace/v0.8/context.json" @type : "dcat:Dataset", - ... # TODO + dcat:theme : Array + dcat:keyword : Array + dct:conformsTo : String + dct:creator : String + dct:identifier : String + dct:issued : String + dct:modified : String + dct:title : String + dct:description : Array + ... +} + +class dcat:Distribution { + @type : "dcat:Distribution", + dct:title : String + dct:description : Array + dct:issued : String + dct:modified : String + ... +} + +"dcat:Distribution" "0" --> "*" "odrl:Offer" : "odrl:hasPolicy" + +"dcat:Distribution" "1" --> "*" "dcat:DataService" : "dcat:accessService" + +"dcat:Dataset" "1" --> "*" "odrl:Offer" : "odrl:hasPolicy" + +"dcat:Dataset" "0" --> "*" "dcat:Distribution" : "dcat:distribution" + + +class dcat:DataService { + dcat:endpointDescription : String + dcat:endpointURL : String + dcat:theme : Array + dcat:keyword : Array + dct:conformsTo : String + dct:creator : String + dct:identifier : String + dct:issued : String + dct:modified : String + dct:title : String + dct:description : Array + ... } +"dcat:DataService" "0" --> "*" "dcat:Dataset" : "dcat:servesDataset" + +"dcat:DataService" "0" --> "*" "odrl:Offer" : "odrl:hasPolicy" + @enduml \ No newline at end of file diff --git a/catalog/message/catalog-error.json b/catalog/message/example/catalog-error.json similarity index 100% rename from catalog/message/catalog-error.json rename to catalog/message/example/catalog-error.json diff --git a/catalog/message/catalog-request-message.json b/catalog/message/example/catalog-request-message.json similarity index 100% rename from catalog/message/catalog-request-message.json rename to catalog/message/example/catalog-request-message.json diff --git a/catalog/message/catalog.json b/catalog/message/example/catalog.json similarity index 81% rename from catalog/message/catalog.json rename to catalog/message/example/catalog.json index 4be9a8e5..557ad9e5 100644 --- a/catalog/message/catalog.json +++ b/catalog/message/example/catalog.json @@ -4,9 +4,12 @@ "@type": "dcat:Catalog", "dct:title": "Data Provider A Catalog", "dct:description": [ - "A catalog of data items" + { + "@value": "A catalog of data items", + "@language": "en" + } ], - "dct:publisher": "Data Provider A", + "dct:publisher": "urn:example:DataProviderA", "dcat:keyword": [ "traffic", "government" @@ -57,7 +60,13 @@ "dcat:distribution": { "@type": "dcat:Distribution", "dct:format": "dspace:s3+push", - "dcat:accessService": "urn:uuid:4aa2dcc8-4d2d-569e-d634-8394a8834d77" + "dcat:accessService": [ + { + "@id": "urn:uuid:4aa2dcc8-4d2d-569e-d634-8394a8834d77", + "@type": "dcat:DataService", + "dcat:endpointURL": "https://provder-a.com/connector" + } + ] } } ] diff --git a/catalog/message/dataset-request-message.json b/catalog/message/example/dataset-request-message.json similarity index 100% rename from catalog/message/dataset-request-message.json rename to catalog/message/example/dataset-request-message.json diff --git a/catalog/message/dataset.json b/catalog/message/example/dataset.json similarity index 92% rename from catalog/message/dataset.json rename to catalog/message/example/dataset.json index a2d13ab8..d8e48844 100644 --- a/catalog/message/dataset.json +++ b/catalog/message/example/dataset.json @@ -10,10 +10,7 @@ } ], "dcat:keyword": [ - { - "@value": "traffic", - "@language": "en" - } + "traffic" ], "odrl:hasPolicy": { "@type": "odrl:Offer", @@ -39,9 +36,10 @@ }, "dcat:accessService": [ { - "@id": "urn:uuid:4aa2dcc8-4d2d-569e-d634-8394a8834d77" + "@id": "urn:uuid:4aa2dcc8-4d2d-569e-d634-8394a8834d77", + "dcat:endpointURL": "https://provder-a.com/connector" } ] } ] -} +} \ No newline at end of file diff --git a/catalog/message/schema/catalog-error-schema.json b/catalog/message/schema/catalog-error-schema.json index 800110e6..7a46929e 100644 --- a/catalog/message/schema/catalog-error-schema.json +++ b/catalog/message/schema/catalog-error-schema.json @@ -24,23 +24,10 @@ "type": "string" }, "dspace:reason": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@value": { - "type": "string" - }, - "@language": { - "type": "string" - } - }, - "required": ["@value", "@language"] - }, - "minItems": 1 + "type": "array" } }, "required": [ "@context", "@type" ] } } -} \ No newline at end of file +} diff --git a/catalog/message/schema/catalog-request-message-schema.json b/catalog/message/schema/catalog-request-message-schema.json index 82845d1d..bdeefbbd 100644 --- a/catalog/message/schema/catalog-request-message-schema.json +++ b/catalog/message/schema/catalog-request-message-schema.json @@ -23,7 +23,6 @@ "dspace:filter": { "type": "array", "items": { - "type": "string" } } }, diff --git a/catalog/message/schema/catalog-schema.json b/catalog/message/schema/catalog-schema.json index fad23769..5430461e 100644 --- a/catalog/message/schema/catalog-schema.json +++ b/catalog/message/schema/catalog-schema.json @@ -13,7 +13,7 @@ "type": "object", "allOf": [ { - "$ref": "#/definitions/Dataset" + "$ref": "https://w3id.org/dspace/schemas/v0.8/dataset-schema.json#/definitions/Dataset" }, { "properties": { @@ -28,308 +28,24 @@ "dcat:dataset": { "type": "array", "items": { - "$ref": "#/definitions/Dataset" + "$ref": "https://w3id.org/dspace/schemas/v0.8/dataset-schema.json#/definitions/Dataset" }, "minItems": 1 }, - "dcat:record": { - "$ref": "#/definitions/CatalogRecord" - }, "dcat:service": { "type": "array", "items": { - "$ref": "#/definitions/DataService" - }, - "minItems": 1 - }, - "dcat:themeTaxonomy": { - "$ref": "#/definitions/Reference" - }, - "dct:hasPart": { - "type": "array", - "items": { - "$ref": "#/definitions/ResourceChoice" + "$ref": "https://w3id.org/dspace/schemas/v0.8/dataset-schema.json#/definitions/DataService" }, "minItems": 1 }, "foaf:homepage": { - "$ref": "#/definitions/Reference" - } - } - } - ], - "required": [ - "@context", - "@type" - ], - "additionalProperties": false - }, - "ResourceChoice": { - "oneOf": [ - { - "$ref": "#/definitions/Catalog" - }, - { - "$ref": "#/definitions/Dataset" - }, - { - "$ref": "#/definitions/DataService" - } - ] - }, - "CatalogRecord": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "const": "dcat:CatalogRecord" - }, - "dct:conformsTo": { - "$ref": "#/definitions/Reference" - }, - "dct:description": { - "type": "array", - "items": { - "$ref": "#/definitions/Multilanguage" - } - }, - "dct:issued": { - "type": "string" - }, - "dct:modified": { - "type": "string" - }, - "dct:title": { - "type": "string" - }, - "foaf:primaryTopic": { - "$ref": "#/definitions/Resource" - } - } - }, - "Resource": { - "type": "object", - "properties": { - "dcat:contactPoint": { - "$ref": "#/definitions/Reference" - }, - "dcat:keyword": { - "type": "array", - "items": { - "$ref": "#/definitions/Multilanguage" - } - }, - "dcat:landingPage": { - "$ref": "#/definitions/Reference" - }, - "dcat:theme": { - "type": "array", - "items": { - "$ref": "#/definitions/Reference" - }, - "minItems": 1 - }, - "dct:conformsTo": { - "$ref": "#/definitions/Reference" - }, - "dct:creator": { - "$ref": "#/definitions/Reference" - }, - "dct:description": { - "type": "array", - "items": { - "$ref": "#/definitions/Multilanguage" - } - }, - "dct:identifier": { - "type": "string" - }, - "dct:isReferencedBy": { - "$ref": "#/definitions/Reference" - }, - "dct:issued": { - "type": "string" - }, - "dct:language": { - "$ref": "#/definitions/Reference" - }, - "dct:license": { - "$ref": "#/definitions/Reference" - }, - "dct:modified": { - "type": "string" - }, - "dct:publisher": { - "type": "string" - }, - "dct:relation": { - "$ref": "#/definitions/Reference" - }, - "dct:title": { - "type": "string" - }, - "dct:type": { - "type": "string" - }, - "odrl:hasPolicy": { - "type": "array", - "items": { - "$ref": "https://raw.githubusercontent.com/International-Data-Spaces-Association/ids-specification/dcat-catalog-schema-and-shape/negotiation/message/schema/contract-schema.json#/definitions/Offer" - }, - "minItems": 1 - } - } - }, - "DataService": { - "type": "object", - "allOf": [ - { - "$ref": "#/definitions/Resource" - }, - { - "properties": { - "dcat:endpointDescription": { - "$ref": "#/definitions/Reference" - }, - "dcat:endpointURL": { "type": "string" - }, - "dcat:servesDataset": { - "type": "array", - "items": { - "$ref": "https://w3id.org/dspace/schemas/v0.8/dataset-schema.json#/definitions/Dataset" - }, - "minItems": 1 } } } - ] - }, - "Distribution": { - "type": "object", - "properties": { - "dcat:accessService": { - "type": "array", - "items": { - "$ref": "#/definitions/DataService" - }, - "minItems": 1 - }, - "dcat:accessURL": { - "$ref": "#/definitions/Reference" - }, - "dcat:byteSize": { - "type": "string" - }, - "dcat:compressFormat": { - "$ref": "#/definitions/Reference" - }, - "dcat:downloadURL": { - "$ref": "#/definitions/Reference" - }, - "dcat:mediaType": { - "$ref": "#/definitions/Reference" - }, - "dcat:packageFormat": { - "$ref": "#/definitions/Reference" - }, - "dcat:spatialResolutionInMeters": { - "$ref": "#/definitions/decimal" - }, - "dcat:temporalResolution": { - "$ref": "#/definitions/duration" - }, - "dct:conformsTo": { - "$ref": "#/definitions/Reference" - }, - "dct:description": { - "type": "array", - "items": { - "$ref": "#/definitions/Multilanguage" - } - }, - "dct:format": { - "type": "string" - }, - "dct:issued": { - "type": "string" - }, - "dct:modified": { - "type": "string" - }, - "dct:title": { - "type": "string" - }, - "odrl:hasPolicy": { - "type": "array", - "items": { - "$ref": "https://raw.githubusercontent.com/International-Data-Spaces-Association/ids-specification/dcat-catalog-schema-and-shape/negotiation/message/schema/contract-schema.json#/definitions/Offer" - }, - "minItems": 1 - } - } - }, - "time": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "const": "xsd:dateTime" - }, - "@value": { - "type": "string", - "pattern": "-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?" - } - }, - "required": ["@value", "@type"] - }, - "duration": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "const": "xsd:duration" - }, - "@value": { - "type": "string", - "pattern": "^(-?)P(?=.)((\\d+)Y)?((\\d+)M)?((\\d+)D)?(T(?=.)((\\d+)H)?((\\d+)M)?(\\d*(\\.\\d+)?S)?)?$" - } - }, - "required": ["@value", "@type"] - }, - "decimal": { - "type": "object", - "properties": { - "@type": { - "type": "string", - "const": "xsd:decimal" - }, - "@value": { - "type": "string" - } - }, - "required": ["@value", "@type"] - }, - "Reference": { - "type": "object", - "properties": { - "@id": { - "type": "string" - } - }, - "required": ["@id"] - }, - "Multilanguage": { - "type": "object", - "properties": { - "@value": { - "type": "string" - }, - "@language": { - "type": "string" - } - }, - "required": ["@value", "@language"] + ], + "required": [ "@context", "@type" ] } } } diff --git a/catalog/message/schema/dataset-schema.json b/catalog/message/schema/dataset-schema.json index 59d68153..a76e9503 100644 --- a/catalog/message/schema/dataset-schema.json +++ b/catalog/message/schema/dataset-schema.json @@ -13,20 +13,155 @@ "type": "object", "allOf": [ { - "$ref": "https://w3id.org/dspace/schemas/v0.8/catalog-schema.json#/definitions/Resource" + "$ref": "#/definitions/Resource" }, { "properties": { + "odrl:hasPolicy": { + "type": "array", + "items": { + "$ref": "https://w3id.org/dspace/schemas/v0.8/contract-schema.json#/definitions/Offer" + }, + "minItems": 1 + }, "dcat:distribution": { "type": "array", "items": { - "$ref": "https://w3id.org/dspace/schemas/v0.8/catalog-schema.json#/definitions/Distribution" + "$ref": "#/definitions/Distribution" + }, + "minItems": 1 + } + } + } + ], + "required": [ + "odrl:hasPolicy" + ] + }, + "Resource": { + "type": "object", + "properties": { + "dcat:keyword": { + "type": "array", + "items": { + "type": "string" + } + }, + "dcat:theme": { + "type": "array", + "items": { + "$ref": "#/definitions/Reference" + }, + "minItems": 1 + }, + "dct:conformsTo": { + "type": "string" + }, + "dct:creator": { + "type": "string" + }, + "dct:description": { + "type": "array", + "items": { + "$ref": "#/definitions/Multilanguage" + } + }, + "dct:identifier": { + "type": "string" + }, + "dct:issued": { + "type": "string" + }, + "dct:modified": { + "type": "string" + }, + "dct:title": { + "type": "string" + } + } + }, + "Distribution": { + "type": "object", + "properties": { + "dct:title": { + "type": "string" + }, + "dct:description": { + "type": "array", + "items": { + "$ref": "#/definitions/Multilanguage" + } + }, + "dct:issued": { + "type": "string" + }, + "dct:modified": { + "type": "string" + }, + "odrl:hasPolicy": { + "type": "array", + "items": { + "$ref": "https://w3id.org/dspace/schemas/v0.8/contract-schema.json#/definitions/Offer" + }, + "minItems": 1 + }, + "dcat:accessService": { + "type": "array", + "items": { + "$ref": "#/definitions/DataService" + }, + "minItems": 1 + } + }, + "required": [ + "dcat:accessService" + ] + }, + "DataService": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/Resource" + }, + { + "properties": { + "dcat:endpointDescription": { + "type": "string" + }, + "dcat:endpointURL": { + "type": "string" + }, + "dcat:servesDataset": { + "type": "array", + "items": { + "$ref": "#/definitions/Dataset" }, "minItems": 1 } } } ] + }, + "Reference": { + "type": "object", + "properties": { + "@id": { + "type": "string" + } + }, + "required": [ "@id" ] + }, + "Multilanguage": { + "type": "object", + "properties": { + "@value": { + "type": "string" + }, + "@language": { + "type": "string" + } + }, + "required": [ "@value", "@language" ] } } -} +} \ No newline at end of file diff --git a/catalog/message/shape/catalog-error-shape.ttl b/catalog/message/shape/catalog-error-shape.ttl index 92a76648..22ed5a6f 100644 --- a/catalog/message/shape/catalog-error-shape.ttl +++ b/catalog/message/shape/catalog-error-shape.ttl @@ -33,6 +33,8 @@ dspace_shapes:CatalogErrorShape sh:datatype xsd:string ; ] ; sh:property [ - sh:path dspace:reason ; - sh:datatype rdf:langString ; - ] . \ No newline at end of file + sh:path dspace:reason ; + sh:datatype rdf:langString ; + ] ; + +. diff --git a/catalog/message/shape/catalog-request-message-shape.ttl b/catalog/message/shape/catalog-request-message-shape.ttl index 3bdbdc3c..ce3c8c72 100644 --- a/catalog/message/shape/catalog-request-message-shape.ttl +++ b/catalog/message/shape/catalog-request-message-shape.ttl @@ -33,4 +33,5 @@ dspace_shapes:CatalogRequestMessageShape a sh:PropertyShape ; sh:path dspace:filter ; ] ; + . \ No newline at end of file diff --git a/catalog/message/shape/dataset-shape.ttl b/catalog/message/shape/dataset-shape.ttl new file mode 100644 index 00000000..71faf5b6 --- /dev/null +++ b/catalog/message/shape/dataset-shape.ttl @@ -0,0 +1,78 @@ +@prefix owl: . +@prefix rdf: . +@prefix rdfs: . +@prefix xsd: . +@prefix dct: . +@prefix dcat: . +@prefix odrl: . +@prefix cred: . +@prefix sec: . +@prefix prov: . + +@prefix dspace: . +@prefix dspace_shapes: . + +@prefix sh: . + +dspace_shapes: + a owl:Ontology ; + sh:declare [ + sh:prefix "rdf" ; + sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + ] ; + sh:declare [ + sh:prefix "dspace" ; + sh:namespace "https://w3id.org/dspace/v0.8/"^^xsd:anyURI ; + ] ; +. + +dspace_shapes:DatasetShape + a sh:NodeShape ; + sh:targetClass dcat:Dataset ; + + sh:property [ + a sh:PropertyShape ; + sh:path dcat:distribution ; + sh:class dcat:Distribution ; + sh:minCount 0; + sh:severity sh:Violation ; + sh:message " (DatasetShape): A dcat:distribution property must point to a dcat:Distribution."@en ; + ] ; + + sh:property [ + a sh:PropertyShape ; + sh:path dcat:keyword ; + sh:datatype xsd:string ; + sh:minCount 0; + sh:severity sh:Violation ; + sh:message " (DatasetShape): A dcat:keyword property must point to a xsd:string field."@en ; + ] ; + + sh:property [ + a sh:PropertyShape ; + sh:path dct:description ; + sh:datatype rdf:langString ; + sh:minCount 0; + sh:severity sh:Violation ; + sh:message " (DatasetShape): A dct:description property must point to a rdf:langString field."@en ; + ] ; + + sh:property [ + a sh:PropertyShape ; + sh:path dct:title ; + sh:datatype xsd:string ; + sh:minCount 0; + sh:severity sh:Violation ; + sh:message " (DatasetShape): A dct:title property must point to a xsd:string field."@en ; + ] ; + + sh:property [ + a sh:PropertyShape ; + sh:path odrl:hasPolicy ; + sh:class odrl:Policy ; + sh:severity sh:Violation ; + sh:minCount 0; + sh:message " (DatasetShape): An odrl:hasPolicy property must point to an odrl:Policy."@en ; + ] ; + +. \ No newline at end of file diff --git a/catalog/message/shape/dcat-shapes.ttl b/catalog/message/shape/dcat-shapes.ttl index 859cf76d..f297bb30 100644 --- a/catalog/message/shape/dcat-shapes.ttl +++ b/catalog/message/shape/dcat-shapes.ttl @@ -33,28 +33,12 @@ dspace_shapes:ResourceShape a sh:NodeShape ; sh:targetClass dcat:Resource ; - sh:property [ - a sh:PropertyShape ; - sh:path dcat:contactPoint ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (ResourceShape): A dcat:contractPoint property must point to a xsd:string field."@en ; - ] ; - sh:property [ a sh:PropertyShape ; sh:path dcat:keyword ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (ResourceShape): A dcat:keyword property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:landingPage ; - sh:datatype xsd:string ; + sh:datatype xsd:string ; sh:severity sh:Violation ; - sh:message " (ResourceShape): A dcat:landingPage property must point to a xsd:string field."@en ; + sh:message " (ResourceShape): A dcat:keyword property must point to a xsd:string field."@en ; ] ; sh:property [ @@ -63,23 +47,15 @@ dspace_shapes:ResourceShape sh:class skos:Concept ; sh:minCount 0 ; sh:severity sh:Violation ; - sh:message " (ResourceShape): A dcat:theme property must point to a skos:Concept."@en ; + sh:message " (ResourceShape): A dcat:theme property must point to a skos:Concept."@en ; ] ; - sh:property [ - a sh:PropertyShape ; - sh:path dct:accessRights ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:accessRights property must point to a xsd:string field."@en ; - ] ; - sh:property [ a sh:PropertyShape ; sh:path dct:conformsTo ; sh:datatype xsd:string ; sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:accessconformsToRights property must point to a xsd:string field."@en ; + sh:message " (ResourceShape): A dct:accessconformsToRights property must point to a xsd:string field."@en ; ] ; sh:property [ @@ -87,7 +63,7 @@ dspace_shapes:ResourceShape sh:path dct:creator ; sh:datatype xsd:string ; sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:creator property must point to a xsd:string field."@en ; + sh:message " (ResourceShape): A dct:creator property must point to a xsd:string field."@en ; ] ; sh:property [ @@ -95,7 +71,7 @@ dspace_shapes:ResourceShape sh:path dct:description ; sh:datatype rdf:langString ; sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:description property must point to a rdf:langString field."@en ; + sh:message " (ResourceShape): A dct:description property must point to a rdf:langString field."@en ; ] ; sh:property [ @@ -103,99 +79,40 @@ dspace_shapes:ResourceShape sh:path dct:identifier ; sh:datatype xsd:string ; sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:identifier property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:isReferencedBy ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:isReferencedBy property must point to a xsd:string field."@en ; - ] ; + sh:message " (ResourceShape): A dct:identifier property must point to a xsd:string field."@en ; + ] ; sh:property [ a sh:PropertyShape ; sh:path dct:issued ; sh:datatype xsd:dateTime ; sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:issued property must point to a xsd:dateTime field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:language ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:language property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:license ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:license property must point to a xsd:string field."@en ; - ] ; + sh:message " (ResourceShape): A dct:issued property must point to a xsd:dateTime field."@en ; + ] ; sh:property [ a sh:PropertyShape ; sh:path dct:modified ; - sh:datatype xsd:boolean ; + sh:datatype xsd:dateTime ; sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:modified property must point to a xsd:dateTime field."@en ; - ] ; - - - sh:property [ - a sh:PropertyShape ; - sh:path dct:publisher ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:relation ; + sh:message " (ResourceShape): A dct:modified property must point to a xsd:dateTime field."@en ; ] ; - sh:property [ - a sh:PropertyShape ; - sh:path dct:rights ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:rights property must point to a xsd:string field."@en ; - ] ; - sh:property [ a sh:PropertyShape ; sh:path dct:title ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:title property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:type ; - sh:datatype xsd:string ; + sh:datatype rdf:langString ; sh:severity sh:Violation ; - sh:message " (ResourceShape): A dct:type property must point to a xsd:string field."@en ; - ] ; + sh:message " (ResourceShape): A dct:title property must point to a rdf:langString field."@en ; + ] ; sh:property [ a sh:PropertyShape ; sh:path odrl:hasPolicy ; - sh:class odrl:Policy ; + sh:class odrl:Offer ; sh:severity sh:Violation ; - sh:message " (ResourceShape): An odrl:hasPolicy property must point to an odrl:Policy."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path prov:qualifiedAttribution ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (ResourceShape): A prov:qualifiedAttribution property must point to a xsd:string field."@en ; - ] ; + sh:message " (ResourceShape): An odrl:hasPolicy property must point to an odrl:Offer."@en ; + ] ; . @@ -214,54 +131,6 @@ dspace_shapes:DatasetShape sh:message " (DatasetShape): A dcat:distribution property must point to a dcat:Distribution."@en ; ] ; - sh:property [ - a sh:PropertyShape ; - sh:path dcat:spatialResolutionInMeters ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DatasetShape): A dcat:spatialResolutionInMeters property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:temporalResolution ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DatasetShape): A dcat:temporalResolution property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:accrualPeriodicity ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DatasetShape): A dcat:accrualPeriodicity property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:spatial ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DatasetShape): A dcat:spatial property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:temporal ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DatasetShape): A dcat:temporal property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:wasGeneratedBy ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DatasetShape): A dcat:wasGeneratedBy property must point to a xsd:string field."@en ; - ] ; - . dspace_shapes:CatalogShape @@ -269,46 +138,20 @@ dspace_shapes:CatalogShape sh:targetClass dcat:Catalog ; rdfs:subClassOf dspace_shapes:DatasetShape ; - sh:property [ - a sh:PropertyShape ; - sh:path dcat:catalog ; - sh:class dcat:Catalog ; - sh:minCount 0 ; - sh:severity sh:Violation ; - sh:message " (CatalogShape): A dcat:catalog property must point to a dcat:Catalog."@en ; - ] ; - sh:property [ a sh:PropertyShape ; sh:path dcat:dataset ; sh:class dcat:Dataset ; sh:severity sh:Violation ; - sh:message " (CatalogShape): A dcat:dataset property must point to a dcat:Dataset."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:record ; - sh:class dcat:CatalogRecord ; - sh:severity sh:Violation ; - sh:message " (CatalogShape): A dcat:record property must point to a dcat:CatalogRecord."@en ; + sh:message " (CatalogShape): A dcat:dataset property must point to a dcat:Dataset."@en ; ] ; sh:property [ a sh:PropertyShape ; sh:path dcat:service ; sh:class dcat:DataService ; - sh:minCount 1 ; sh:severity sh:Violation ; - sh:message " (CatalogShape): A dcat:service property must point to a dcat:DataService."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:themeTaxonomy ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (CatalogShape): A dcat:record property must point to a xsd:string field."@en ; + sh:message " (CatalogShape): A dcat:service property must point to a dcat:DataService."@en ; ] ; sh:property [ @@ -316,125 +159,11 @@ dspace_shapes:CatalogShape sh:path foaf:homepage ; sh:datatype xsd:string ; sh:severity sh:Violation ; - sh:message " (CatalogShape): A foaf:homepage property must point to a xsd:string field."@en ; + sh:message " (CatalogShape): A foaf:homepage property must point to a xsd:string field."@en ; ] ; . -dspace_shapes:CatalogRecordShape - a sh:NodeShape ; - sh:targetClass dcat:CatalogRecord ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:conformsTo ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (CatalogShape): A dct:conformsTo property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:description ; - sh:datatype rdf:langString ; - sh:severity sh:Violation ; - sh:message " (CatalogShape): A dct:description property must point to a rdf:langString field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:issued ; - sh:datatype xsd:dateTime ; - sh:severity sh:Violation ; - sh:message " (CatalogShape): A dct:issued property must point to a xsd:dateTime field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:modified ; - sh:datatype xsd:dateTime ; - sh:severity sh:Violation ; - sh:message " (CatalogShape): A dct:modified property must point to a xsd:dateTime field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:title ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (CatalogShape): A dct:title property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path foaf:primaryTopic ; - sh:class dcat:Resource ; - sh:maxCount 1; - sh:severity sh:Violation ; - sh:message " (CatalogShape): A foaf:primaryTopic property must point to maximal one dcat:Resource."@en ; - ] ; - -. - - -dspace_shapes:ConceptShape - a sh:NodeShape ; - sh:targetClass skos:Concept ; - - sh:property [ - a sh:PropertyShape ; - sh:path skos:inScheme ; - sh:class dcat:Resource ; - sh:severity sh:Violation ; - sh:message " (ConceptShape): A skos:inScheme property must point to a dcat:Resource."@en ; - ] ; -. - -dspace_shapes:ConceptSchemeShape - a sh:NodeShape ; - sh:targetClass skos:ConceptScheme ; - -. - -dspace_shapes:AgentShape - a sh:NodeShape ; - sh:targetClass foaf:Agent ; - -. - - -dspace_shapes:DataServiceShape - a sh:NodeShape ; - sh:targetClass dcat:DataService ; - rdfs:subClassOf dcat:Resource ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:endpointDescription ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DataServiceShape): A dcat:endpointDescription property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:endpointURL ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DataServiceShape): A dcat:endpointURL property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:servesDataset ; - sh:class dcat:Dataset ; - sh:minCount 0; - sh:severity sh:Violation ; - sh:message " (DataServiceShape): A dcat:servesDataset property must point to a dcat:Distribution."@en ; - ] ; - -. - dspace_shapes:DistributionShape a sh:NodeShape ; @@ -442,156 +171,81 @@ dspace_shapes:DistributionShape sh:property [ a sh:PropertyShape ; - sh:path dcat:accessService ; - sh:class dcat:Dataset ; - sh:minCount 0; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dcat:accessService property must point to a dcat:Distribution."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:accessURL ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dcat:accessURL property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:byteSize ; - sh:datatype xsd:integer ; + sh:path dct:description ; + sh:datatype rdf:langString ; sh:severity sh:Violation ; - sh:message " (DistributionShape): A dcat:accessURL property must point to a xsd:integer field."@en ; + sh:message " (DistributionShape): A dct:description property must point to a rdf:langString field."@en ; ] ; sh:property [ a sh:PropertyShape ; - sh:path dcat:compressFormat ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dcat:compressFormat property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:downloadURL ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dcat:downloadURL property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:mediaType ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dcat:mediaType property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:packageFormat ; - sh:datatype xsd:string ; + sh:path dct:issued ; + sh:datatype xsd:dateTime ; sh:severity sh:Violation ; - sh:message " (DistributionShape): A dcat:packageFormat property must point to a xsd:string field."@en ; + sh:message " (DistributionShape): A dct:issued property must point to a xsd:dateTime field."@en ; ] ; sh:property [ a sh:PropertyShape ; - sh:path dcat:spatialResolutionInMeters ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dcat:spatialResolutionInMeters property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dcat:temporalResolution ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dcat:temporalResolution property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:accessRights ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dct:accessRights property must point to a xsd:string field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:conformsTo ; - sh:datatype xsd:string ; + sh:path dct:modified ; + sh:datatype xsd:dateTime ; sh:severity sh:Violation ; - sh:message " (DistributionShape): A dct:conformsTo property must point to a xsd:string field."@en ; + sh:message " (DistributionShape): A dct:modified property must point to a xsd:dateTime field."@en ; ] ; sh:property [ a sh:PropertyShape ; - sh:path dct:description ; + sh:path dct:title ; sh:datatype rdf:langString ; sh:severity sh:Violation ; - sh:message " (DistributionShape): A dct:description property must point to a rdf:langString field."@en ; - ] ; - - sh:property [ - a sh:PropertyShape ; - sh:path dct:format ; - sh:datatype xsd:string ; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dct:format property must point to a xsd:string field."@en ; + sh:message " (DistributionShape): A dct:title property must point to a rdf:langString field."@en ; ] ; - + sh:property [ - a sh:PropertyShape ; - sh:path dct:issued ; - sh:datatype xsd:dateTime ; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dct:issued property must point to a xsd:dateTime field."@en ; - ] ; + a sh:PropertyShape ; + sh:path dcat:accessService ; + sh:class dcat:DataService ; + sh:severity sh:Violation ; + sh:message " (DistributionShape): A dcat:accessService property must point to a dcat:DataService."@en ; + ] ; sh:property [ a sh:PropertyShape ; - sh:path dct:license ; - sh:datatype xsd:string ; + sh:path odrl:hasPolicy ; + sh:class odrl:Offer ; sh:severity sh:Violation ; - sh:message " (DistributionShape): A dct:license property must point to a xsd:string field."@en ; + sh:message " (DistributionShape): An odrl:hasPolicy property must point to an odrl:Offer."@en ; ] ; +. - sh:property [ - a sh:PropertyShape ; - sh:path dct:modified ; - sh:datatype xsd:dateTime ; - sh:severity sh:Violation ; - sh:message " (DistributionShape): A dct:modified property must point to a xsd:dateTime field."@en ; - ] ; +dspace_shapes:DataServiceShape + a sh:NodeShape ; + sh:targetClass dcat:DataService ; + rdfs:subClassOf dspace_shapes:ResourceShape ; sh:property [ a sh:PropertyShape ; - sh:path dct:rights ; + sh:path dcat:endpointDescription ; sh:datatype xsd:string ; sh:severity sh:Violation ; - sh:message " (DistributionShape): A dct:rights property must point to a xsd:string field."@en ; - ] ; + sh:message " (DataServiceShape): A dcat:endpointDescription property must point to a xsd:string field."@en ; + ] ; sh:property [ a sh:PropertyShape ; - sh:path dct:title ; + sh:path dcat:endpointURL ; sh:datatype xsd:string ; sh:severity sh:Violation ; - sh:message " (DistributionShape): A dct:title property must point to a xsd:string field."@en ; - ] ; + sh:message " (DataServiceShape): A dcat:endpointURL property must point to a xsd:string field."@en ; + ] ; sh:property [ a sh:PropertyShape ; - sh:path odrl:hasPolicy ; - sh:class odrl:Policy ; + sh:path dcat:servesDataset ; + sh:class dcat:Dataset ; + sh:minCount 0; sh:severity sh:Violation ; - sh:message " (DistributionShape): An odrl:hasPolicy property must point to an odrl:Policy."@en ; + sh:message " (DataServiceShape): A dcat:servesDataset property must point to a dcat:Dataset."@en ; ] ; - -. +. \ No newline at end of file diff --git a/common/common.binding.https.md b/common/common.binding.https.md index 373bb534..3a1d8a37 100644 --- a/common/common.binding.https.md +++ b/common/common.binding.https.md @@ -1,13 +1,13 @@ # General Binding Aspects -## 4 The Well-Known Version Metadata Endpoint +## 1 The Well-Known Version Metadata Endpoint -Each implementation must provide the version metadata endpoint, which must use the `dspace-version` [Well-Known Uniform Resource Identifier](https://www.rfc-editor.org/rfc/rfc8615.html) at the top of the -path hierarchy: +Each implementation must provide the version metadata endpoint, which must use the `dspace-version` [Well-Known Uniform Resource Identifier](https://www.rfc-editor.org/rfc/rfc8615.html) at the top of the path hierarchy: -`/.well-known/dspace-version` +``` +/.well-known/dspace-version +``` -The contents of the response is a JSON object defined in the [Dataspace Protocol](./common.protocol.md#exposure-of-dataspace-protocol-versions). +The contents of the response is a JSON object defined in the [Dataspace Protocol](./common.protocol.md#1-exposure-of-dataspace-protocol-versions). -Note that if multiple [Connectors](../model/terminology.md#connector--data-service-) are hosted under the same base URL, a path segment appended to the base well-known URL can be used, for example, -`https://example.com/.well-known/dspace-version/connector1.` \ No newline at end of file +Note that if multiple [Connectors](../model/terminology.md#connector--data-service-) are hosted under the same base URL, a path segment appended to the base well-known URL can be used, for example, `https://example.com/.well-known/dspace-version/connector1.` \ No newline at end of file diff --git a/common/common.protocol.md b/common/common.protocol.md index 6f204f37..4b490887 100644 --- a/common/common.protocol.md +++ b/common/common.protocol.md @@ -1,12 +1,12 @@ # General Requirements -## Exposure of Dataspace Protocol Versions +## 1 Exposure of Dataspace Protocol Versions [Connectors](../model/terminology.md#connector--data-service-) implementing the Dataspace Protocol may operate on different versions. Therefore, it is necessary that they can discover the supported versions of each other reliably and unambiguously. Each [Connector](../model/terminology.md#connector--data-service-) must expose information of at least one Dataspace Protocol Version it supports. The specifics of how this information is obtained its defined by specific protocol bindings. A [Connector](../model/terminology.md#connector--data-service-) must respond to a respective request by providing a JSON-LD object containing an array of supported versions with at least one item. The item connects the version tag (`version` attribute) with the absolute URL path segment of the root path for all endpoints of this version. The following example specifies that this [Connector](../model/terminology.md#connector--data-service-) offers version `1.0` endpoints at `/some/path/v1`. -``` +```json { "@context": "https://w3id.org/dspace/v0.8/context.json", "protocolVersions": [ diff --git a/common/schema/context.json b/common/schema/context.json index 9948961f..9df740b9 100644 --- a/common/schema/context.json +++ b/common/schema/context.json @@ -9,39 +9,47 @@ "dct": "http://purl.org/dc/terms/", "dcat": "http://www.w3.org/ns/dcat#", "dspace": "https://w3id.org/dspace/v0.8/", + "dct:title": { "@language": "en" }, - "dspace:timestamp": { "@type": "xsd:dateTime" }, + "dct:creator": { "@type": "@id" }, + "dct:description": { "@container": "@set" }, "dct:issued": { "@type": "xsd:dateTime" }, "dct:modified": { "@type": "xsd:dateTime" }, - "dct:created": { "@type": "xsd:dateTime" }, + "dcat:byteSize": { "@type": "xsd:decimal" }, + "dcat:theme": { "@type": "@id" }, + "dcat:conformsTo": { "@type": "@id" }, + "dcat:dataset": { "@container": "@set" }, "dcat:endpointURL": { "@type": "xsd:anyURI" }, + "dcat:endpointDescription": { "@type": "xsd:anyURI" }, + "dcat:keyword": { "@container": "@set" }, + "dcat:service": { "@container": "@set" }, + "dcat:accessService": { "@container": "@set" }, + "dspace:agreementId": { "@type": "@id" }, "dspace:dataset": { "@type": "@id" }, "dspace:transportType": { "@type": "@id" }, "dspace:state": { "@type": "@id" }, - "dct:publisher": { "@type": "@id" }, - "dct:format": { "@type": "@id" }, - "dct:type": { "@type": "@id" }, "dspace:providerId": { "@type": "@id" }, "dspace:consumerId": { "@type": "@id" }, - "odrl:action": { "@type": "@id" }, - "odrl:target": { "@type": "@id" }, - "odrl:leftOperand": { "@type": "@id" }, - "odrl:operator": { "@type": "@id" }, - "odrl:rightOperandReference": { "@type": "@id" }, - "odrl:profile": { "@type": "@id" }, "dspace:reason": { "@container": "@set" }, "dspace:catalog": { "@container": "@set" }, "dspace:filter": { "@container": "@set" }, - "dct:description": { "@container": "@set" }, - "dcat:keyword": { "@container": "@set" }, - "dcat:service": { "@container": "@set" }, - "dcat:dataset": { "@container": "@set" }, + "dspace:timestamp": { "@type": "xsd:dateTime" }, + "dspace:callbackAddress": { "@type": "xsd:anyURI" }, + + "foaf:homepage": { "@type": "xsd:anyURI" }, + "odrl:hasPolicy": { "@container": "@set" }, "odrl:permission": { "@container": "@set" }, "odrl:prohibition": { "@container": "@set" }, "odrl:duty": { "@container": "@set" }, - "odrl:constraint": { "@container": "@set" } + "odrl:constraint": { "@container": "@set" }, + "odrl:action": { "@type": "@id" }, + "odrl:target": { "@type": "@id" }, + "odrl:leftOperand": { "@type": "@id" }, + "odrl:operator": { "@type": "@id" }, + "odrl:rightOperandReference": { "@type": "@id" }, + "odrl:profile": { "@type": "@id" } } } \ No newline at end of file diff --git a/common/shape/message-shape.ttl b/common/shape/message-shape.ttl deleted file mode 100644 index 3d190162..00000000 --- a/common/shape/message-shape.ttl +++ /dev/null @@ -1,41 +0,0 @@ -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix xsd: . -@prefix dct: . -@prefix dcat: . -@prefix odrl: . -@prefix cred: . -@prefix sec: . - -@prefix dspace: . -@prefix dspace_shapes: . - -@prefix sh: . - -shapes: - a owl:Ontology ; - sh:declare [ - sh:prefix "rdf" ; - sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; - ] ; - sh:declare [ - sh:prefix "dspace" ; - sh:namespace "https://w3id.org/dspace/v0.8/"^^xsd:anyURI ; - ] ; -. - -shapes:MessageShape - a sh:NodeShape ; - sh:targetClass dspace:Message ; - - sh:property [ - a sh:PropertyShape ; - sh:path dspace:processId ; - sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:severity sh:Violation ; - sh:message " (MessageShape): An dspace:processId property must point to exactly one xsd:string."@en ; - ] ; -. \ No newline at end of file diff --git a/model/model.md b/model/model.md index 264f7985..504e0871 100644 --- a/model/model.md +++ b/model/model.md @@ -12,16 +12,10 @@ The relationships between the primary [Dataspace](./terminology.md#dataspace) en Note that all relationships are multiplicities unless specified. -- A [Dataspace Authority](./terminology.md#dataspace-authority) manages one or more [Dataspaces](./terminology.md#dataspace). This will include [Participant](./terminology.md#participant) registration and may entail mandating business and/or requirements. For example, a - [Dataspace Authority](./terminology.md#dataspace-authority) may require [Participants](./terminology.md#participant) to obtain some form of business certification. A [Dataspace Authority](./terminology.md#dataspace-authority) may also impose technical requirements such as support for the - technical enforcement of specific usage policies. +- A [Dataspace Authority](./terminology.md#dataspace-authority) manages one or more [Dataspaces](./terminology.md#dataspace). This will include [Participant](./terminology.md#participant) registration and may entail mandating business and/or technical requirements. For example, a [Dataspace Authority](./terminology.md#dataspace-authority) may require [Participants](./terminology.md#participant) to obtain some form of business certification. A [Dataspace Authority](./terminology.md#dataspace-authority) may also impose technical requirements such as support for the technical enforcement of specific usage policies. - A [Participant](./terminology.md#participant) is a member of one or more [Dataspaces](./terminology.md#dataspace). A [Participant](./terminology.md#participant) registers [Participant Agents](./terminology.md#participant-agent) that perform tasks on its behalf. -- A [Participant Agent](./terminology.md#participant-agent) performs tasks such as publishing a [Catalog](./terminology.md#catalog) or engaging in a [Transfer Process](./terminology.md#transfer-process). In order to accomplish these tasks, a [Participant Agent](./terminology.md#participant-agent) may - use a _**verifiable presentation**_ generated from a _**credential**_ obtained from a third-party [Credential Issuer](./terminology.md#credential-issuer). A [Participant Agent](./terminology.md#participant-agent) may also use an _**ID token**_ issued by a - third-party [Identity Provider](./terminology.md#identity-provider). Note that a [Participant Agent](./terminology.md#participant-agent) is a logical construct and does not necessarily correspond to a single runtime process. -- An [Identity Provider](./terminology.md#identity-provider) is a trust anchor that generates `ID tokens` used to verify the identity of a [Participant Agent](./terminology.md#participant-agent). Multiple identity providers may operate in - a [Dataspace](./terminology.md#dataspace). The types and semantics of ID tokens are not part of this specification. An [Identity Provider](./terminology.md#identity-provider) may be a third-party or a [Participant](./terminology.md#participant) itself (for example, in the case - of decentralized identifiers). +- A [Participant Agent](./terminology.md#participant-agent) performs tasks such as publishing a [Catalog](./terminology.md#catalog) or engaging in a [Transfer Process](./terminology.md#transfer-process). In order to accomplish these tasks, a [Participant Agent](./terminology.md#participant-agent) may use a _**verifiable presentation**_ generated from a _**credential**_ obtained from a third-party [Credential Issuer](./terminology.md#credential-issuer). A [Participant Agent](./terminology.md#participant-agent) may also use an _**ID token**_ issued by a third-party [Identity Provider](./terminology.md#identity-provider). Note that a [Participant Agent](./terminology.md#participant-agent) is a logical construct and does not necessarily correspond to a single runtime process. +- An [Identity Provider](./terminology.md#identity-provider) is a trust anchor that generates `ID tokens` used to verify the identity of a [Participant Agent](./terminology.md#participant-agent). Multiple identity providers may operate in a [Dataspace](./terminology.md#dataspace). The types and semantics of ID tokens are not part of this specification. An [Identity Provider](./terminology.md#identity-provider) may be a third-party or a [Participant](./terminology.md#participant) itself (for example, in the case of decentralized identifiers). - A [Credential Issuer](./terminology.md#credential-issuer) issues _verifiable credentials_ used by [Participant Agents](./terminology.md#participant-agent) to allow access to [Datasets](./terminology.md#dataset) and verify usage control. The diagram below depicts the relationships between [Participant Agent](./terminology.md#participant-agent) types: @@ -29,35 +23,29 @@ The diagram below depicts the relationships between [Participant Agent](./termin ![](./m.participant.entities.png) - A [Catalog Service](./terminology.md#catalog-service) is a [Participant Agent](./terminology.md#participant-agent) that makes a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) available to other [Participants](./terminology.md#participant). -- A [Catalog](./terminology.md#catalog) contains one or more [Datasets](./terminology.md#dataset), which are [DCAT Datasets](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset). A [Catalog](./terminology.md#catalog) also contains **_at least one_** - [DCAT DataService](https://www.w3.org/TR/vocab-dcat-3/#Class:Data_Service) that references a [Connector](./terminology.md#connector--data-service-) where [Datasets](./terminology.md#dataset) may be obtained. +- A [Catalog](./terminology.md#catalog) contains one or more [Datasets](./terminology.md#dataset), which are [DCAT Datasets](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset). A [Catalog](./terminology.md#catalog) also contains **_at least one_** [DCAT DataService](https://www.w3.org/TR/vocab-dcat-3/#Class:Data_Service) that references a [Connector](./terminology.md#connector--data-service-) where [Datasets](./terminology.md#dataset) may be obtained. - A [Dataset](./terminology.md#dataset) has **_at least one_** [Offer](./terminology.md#offer), which is an [ODRL Offer](https://www.w3.org/TR/odrl-model/#policy-offer) describing the [Usage Policy](./terminology.md#policy) associated with the [Dataset](./terminology.md#dataset). -- A [Connector](./terminology.md#connector--data-service-) is a [Participant Agent](./terminology.md#participant-agent) that performs [Contract Negotiation](./terminology.md#contract-negotiation) and [Transfer Process](./terminology.md#transfer-process) operations with another [Connector](./terminology.md#connector--data-service-). An outcome of a [Contract Negotiation](./terminology.md#contract-negotiation) may - be the production of an [Agreement](./terminology.md#agreement), which is an [ODRL Agreement](https://www.w3.org/TR/odrl-model/#policy-agreement) defining the [Usage Policy](./terminology.md#policy) agreed to for a [Dataset](./terminology.md#dataset). +- A [Connector](./terminology.md#connector--data-service-) is a [Participant Agent](./terminology.md#participant-agent) that performs [Contract Negotiation](./terminology.md#contract-negotiation) and [Transfer Process](./terminology.md#transfer-process) operations with another [Connector](./terminology.md#connector--data-service-). An outcome of a [Contract Negotiation](./terminology.md#contract-negotiation) may be the production of an [Agreement](./terminology.md#agreement), which is an [ODRL Agreement](https://www.w3.org/TR/odrl-model/#policy-agreement) defining the [Usage Policy](./terminology.md#policy) agreed to for a [Dataset](./terminology.md#dataset). ## 2.2 Classes -Not all [Dataspace](./terminology.md#dataspace) entities have a concrete _technical_ materialization; some entities may exist as purely logical constructs. For example, a [Dataspace Authority](./terminology.md#dataspace-authority) -and [Participant Agent](./terminology.md#participant-agent) have no representation in the protocol message flows that constitute [Dataspace](./terminology.md#dataspace) interactions. This section outlines the classes that comprise the concrete -elements of the model, i.e. those that are represented in protocol message flows. +Not all [Dataspace](./terminology.md#dataspace) entities have a concrete _technical_ materialization; some entities may exist as purely logical constructs. For example, a [Dataspace Authority](./terminology.md#dataspace-authority) and a [Participant Agent](./terminology.md#participant-agent) have no representation in the protocol message flows that constitute [Dataspace](./terminology.md#dataspace) interactions. This section outlines the classes that comprise the concrete elements of the model, i.e., those that are represented in protocol message flows. **_Note 1:_** -The classes and definitions used in the Dataspace Protocol are reused from different standards and specifications as much as possible, in particular, [DCAT](https://www.w3.org/TR/vocab-dcat-3) and [ODRL](https://www.w3.org/TR/odrl/). As, however, the external definitions allow different interpretations or provide more attributes than required, the dataspace protocol is leveraging _profiles_ of the original definitions rather than the complete original expressiveness. A _profile_ in this sense is a restriction or subset of an external definition, enforcing that every occurance of an externally defined class is always conformant with the original definition. However, not every standard-compliant class might be compliant to the dataspace profile. +The classes and definitions used in the Dataspace Protocol are reused from different standards and specifications as much as possible, in particular, [DCAT](https://www.w3.org/TR/vocab-dcat-3) and [ODRL](https://www.w3.org/TR/odrl/). As, however, the external definitions allow different interpretations or provide more attributes than required, the Dataspace Protocol is leveraging _profiles_ of the original definitions rather than the complete original expressiveness. A _profile_ in this sense is a restriction or subset of an external definition, enforcing that every occurrence of an externally defined class is always conformant with the original definition. However, not every standard-compliant class might be compliant to the dataspace profile. ### 2.2.1 Catalog A [Catalog](./terminology.md#catalog) is a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) with the following attributes: -- 0..N [Datasets](./terminology.md#dataset). Since a [Catalog](./terminology.md#catalog) may be dynamically generated for a request based on the requesting [Participant's](./terminology.md#participant) credentials it is possible for it to contain 0 matching - [Datasets](./terminology.md#dataset). (DCAT PROFILE) +- 0..N [Datasets](./terminology.md#dataset). Since a [Catalog](./terminology.md#catalog) may be dynamically generated for a request based on the requesting [Participant's](./terminology.md#participant) credentials it is possible for it to contain 0 matching [Datasets](./terminology.md#dataset). (DCAT PROFILE) - 1..N [DCAT DataService](https://www.w3.org/TR/vocab-dcat-3/#Class:Data_Service) that references a [Connector](./terminology.md#connector--data-service-) where [Datasets](./terminology.md#dataset) may be obtained. (DCAT PROFILE) ### 2.2.2 Dataset A [Dataset](./terminology.md#dataset) is a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset) with the following attributes: -- 1..N `hasPolicy` attributes that contain an [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) defining the [Usage Policy](./terminology.md#policy) associated with the [Dataset](./terminology.md#dataset). **_Offers must NOT contain any target attributes. The - target of an [Offer](./terminology.md#offer) is the associated [Dataset](./terminology.md#dataset)._** (ODRL PROFILE) +- 1..N `hasPolicy` attributes that contain an [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) defining the [Usage Policy](./terminology.md#policy) associated with the [Dataset](./terminology.md#dataset). **_Offers must NOT contain any target attributes. The target of an [Offer](./terminology.md#offer) is the associated [Dataset](./terminology.md#dataset)._** (ODRL PROFILE) - 1..N [DCAT Distributions](https://www.w3.org/TR/vocab-dcat-3/#Class:Distribution). Each distribution must have at least one `DataService` which specifies where the distribution is obtained. Specifically, a `DataService` specifies the endpoint for initiating a [Contract Negotiation](./terminology.md#contract-negotiation) and [Transfer Process](./terminology.md#transfer-process). (DCAT PROFILE) @@ -65,12 +53,13 @@ A [Dataset](./terminology.md#dataset) is a [DCAT Dataset](https://www.w3.org/TR/ An [Offer](./terminology.md#offer) is an [ODRL Offer](https://www.w3.org/TR/odrl-model/#policy-offer) with the following attributes: -- An ODRL `uid` is represented as an "@id" that is a unique UUID. (ODRL PROFILE) -- A `target` attribute that is the dataset id. Except if the Offer is used in an enclosing Catalog or Dataset, then the there must not be any `target` attribute set. +- An ODRL `uid` is represented as an "@id" that is a unique identifier. (ODRL PROFILE) +- The [Offer](./terminology.md#offer) must be unique to a [Dataset](./terminology.md#dataset) since the target of the [Offer](./terminology.md#offer) is derived from its enclosing context. +- The value of the `target` attribute is the dataset id. Except if the [Offer][Catalog](./terminology.md#offer) is used in an enclosing [Catalog](./terminology.md#catalog) or [Dataset](./terminology.md#dataset), then the there must not be any `target` attribute set. + ## 2.2.4 Agreement An [Agreement](./terminology.md#agreement) is an [ODRL Agreement](https://www.w3.org/TR/odrl-model/#policy-agreement) with the following attributes: -- The [Agreement](./terminology.md#agreement) class must include one `target` attribute that is the UUID of the [Dataset](./terminology.md#dataset) the [Agreement](./terminology.md#agreement) is associated with. An [Agreement](./terminology.md#agreement) is therefore associated with **EXACTLY - ONE** [Dataset](./terminology.md#dataset). (ODRL PROFILE) +- The [Agreement](./terminology.md#agreement) class must include one `target` attribute that is the identifier of the [Dataset](./terminology.md#dataset) the [Agreement](./terminology.md#agreement) is associated with. An [Agreement](./terminology.md#agreement) is therefore associated with **EXACTLY ONE** [Dataset](./terminology.md#dataset). (ODRL PROFILE) diff --git a/model/terminology.md b/model/terminology.md index 6e99fe21..bd59bb9d 100644 --- a/model/terminology.md +++ b/model/terminology.md @@ -1,72 +1,95 @@ -# 1 Terminology +# Terminology -This and the following section defines the core concepts, entities, and relationships that underpin a __dataspace__. +This and the following sections define the core concepts, entities, and relationships that underpin a __dataspace__ and its protocol. -## Dataspace +### Agreement -A `Dataspace` is a set of technical services that facilitate interoperable [Dataset](#dataset) sharing between entities. +A concrete [Policy](#policy) associated with a specific [Dataset](#dataset) that has been signed by both the [Provider](#provider) and consumer [Participants](#participant). An Agreement is a result of a [Contract Negotiation](../negotiation/contract.negotiation.protocol.md) and is associated with _exactly one_ [Dataset](#dataset). -## Dataspace Authority +### Catalog -A `Dataspace Authority` is an entity that manages a [Dataspace](#dataspace). +A collection of entries representing [Datasets](#dataset) and their [Offers](#offer) that is advertised by a [Provider](#provider) [Participant](#participant). -## Participant +### Catalog Protocol -A `Participant` is a [Dataspace](#dataspace) member that provides and/or consumes [Datasets](#dataset). +A set of allowable [Message Types](#message-type) that are used to request a [Catalog](#catalog) from a [Catalog Service](#catalog-service). -## Participant Agent +### Catalog Service -A `Participant Agent` is a technology system that performs operations on behalf of a [Participant](#participant). +A [Participant Agent](#participant-agent) that makes a [Catalog](#catalog) accessible to [Participants](#participant). -## Identity Provider +### Connector (Data Service) -An `Identity Provider` is a trusted technology system that creates, maintains, and manages identity information for a [Participant](#participant) and [Participant Agents](#participant-agent). +A [Participant Agent](#participant-agent) that produces [Agreements](#agreement) and manages [Dataset](#dataset) sharing. -## Credential Issuer +### Consumer -A `Credential Issuer` is a trusted technology system that issues verifiable credentials for a [Participant](#participant) and [Participant Agents](#participant-agent). +A [Participant Agent](#participant-agent) that requests access to an offered [Dataset](#dataset). -## Observability, Traceability and Audit Logging +### Contract Negotiation -`Observability, Traceability and Audit Logging` of transactions, e.g. [Contract Negotiation](#contract-negotiation), [Transfer Process](#transfer-process) and enforcement of access policies or usage policies, in a [Dataspace](#dataspace) can be a requirement. -If a trusted technology system is required that records and verifies those domain events. This is not in the scope of the current version of the document and is subject of future work. +A set of interactions between a [Provider](#provider) and [Consumer](#consumer) that establish an [Agreement](#agreement). It is an instantiation of the state machine of a [Contract Negotiation Protocol](#contract-negotiation-protocol). -## Dataspace Registration Service +### Contract Negotiation Protocol -A `Dataspace Registration Service` is a technology system that maintains the state of [Participants](#participant) in a [Dataspace](#dataspace). +A set of allowable [Message Type](#message-type) sequences defined as a state machine. + +## Credential Issuer -## Dataset +A Credential Issuer is a trusted technology system that issues verifiable credentials for a [Participant](#participant) and [Participant Agents](#participant-agent). + +### Dataset Data or a technical service that can be shared by a [Participant](#participant). -## Policy +### Dataspace + +A set of technical services that facilitate interoperable [Dataset](#dataset) sharing between entities. + +### Dataspace Authority + +An entity that manages a [Dataspace](#dataspace). -A set of rules, duties, and obligations that define the terms of use for a [Dataset](#dataset). Also referred to as `Usage Policy`. +### Dataspace Registration Service -## Offer +A technology system that maintains the state of [Participants](#participant) in a [Dataspace](#dataspace). + +### Identity Provider + +A trusted technology system that creates, maintains, and manages identity information for a [Participant](#participant) and [Participant Agents](#participant-agent). + +### Message + +An instantiation of a [Message Type](#message-type). + +### Message Type + +A definition of the structure of a [Message](#message). + +### Offer A concrete [Policy](#policy) associated with a specific [Dataset](#dataset). -## Agreement +### Participant -A concrete [Policy](#policy) associated with a specific [Dataset](#dataset) that has been signed by both the provider and consumer [Participants](#participant). +A [Dataspace](#dataspace) member that provides and/or consumes [Datasets](#dataset). -## Catalog +### Participant Agent -A collection of entries representing [Datasets](#dataset) and their [Offers](#offer) that is advertised by a provider [Participant](#participant). +A technology system that performs operations on behalf of a [Participant](#participant) that offers a [Dataset](#dataset). -## Catalog Service +### Policy -A [Participant Agent](#participant-agent) that makes a [Catalog](#catalog) accessible to [Participants](#participant). +A set of rules, duties, and obligations that define the terms of use for a [Dataset](#dataset). Also referred to as "Usage Policy". -## Connector (Data Service) +### Provider -A [Participant Agent](#participant-agent) that produces [Agreements](#agreement) and manages [Dataset](#dataset) sharing. +A [Participant Agent](#participant-agent) that offers a [Dataset](#dataset). -## Contract Negotiation +### Transfer Process -A set of interactions between a provider [Connector](#connector--data-service-) and consumer [Connector](#connector--data-service-) that establish an [Agreement](#agreement). +A set of interactions between a [Provider](#provider) and [Consumer](#consumer) that give access to a [Dataset](#dataset) under the terms of an [Agreement](#agreement). It is an instantiation of the state machine of a [Transfer Process Protocol](#transfer-process-protocol). -## Transfer Process +### Transfer Process Protocol -A set of interactions between a provider [Connector](#connector--data-service-) and consumer [Connector](#connector--data-service-) that give access to a [Dataset](#dataset) under the terms of an `[Agreement](#agreement). +A set of allowable [Message Type](#message-type) sequences defined as a state machine. diff --git a/negotiation/contract.negotiation.binding.https.md b/negotiation/contract.negotiation.binding.https.md index aa566b8b..8c51a852 100644 --- a/negotiation/contract.negotiation.binding.https.md +++ b/negotiation/contract.negotiation.binding.https.md @@ -1,57 +1,89 @@ # Contract Negotiation HTTPS Binding +This specification defines a RESTful API over HTTPS for the [Contract Negotiation Protocol](./contract.negotiation.protocol.md). + +* [Contract Negotiation HTTPS Binding](#contract-negotiation-https-binding) + * [1 Introduction](#1-introduction) + * [1.1 Prerequisites](#11-prerequisites) + * [1.2 Contract Negotiation Error](#12-contract-negotiation-error) + * [1.2.1 State Transition Errors](#121-state-transition-errors) + * [1.2.2 Object Not Found](#122-object-not-found) + * [1.2.3 Unauthorized Access](#123-unauthorized-access) + * [1.3 Authorization](#13-authorization) + * [2 Provider Path Bindings](#2-provider-path-bindings) + * [2.1 The `negotiations` Endpoint _(Provider-side)_](#21-the-negotiations-endpoint-provider-side) + * [2.2 The `negotiations/request` Endpoint _(Provider-side)_](#22-the-negotiationsrequest-endpoint-provider-side) + * [2.3 The `negotiations/:providerPid/request` Endpoint _(Provider-side)_](#23-the-negotiationsproviderpidrequest-endpoint-provider-side) + * [2.4 The `negotiations/:providerPid/events` Endpoint _(Provider-side)_](#24-the-negotiationsproviderpidevents-endpoint-provider-side) + * [2.5 The `negotiations/:providerPid/agreement/verification` Endpoint _(Provider-side)_](#25-the-negotiationsproviderpidagreementverification-endpoint-provider-side) + * [2.6 The `negotiations/:providerPid/termination` Endpoint _(Provider-side)_](#26-the-negotiationsproviderpidtermination-endpoint-provider-side) + * [3 Consumer Callback Path Bindings](#3-consumer-callback-path-bindings) + * [3.1 Prerequisites](#31-prerequisites) + * [3.2 The `negotiations/offers` Endpoint _(Consumer-side)_](#32-the-negotiationsoffers-endpoint-consumer-side) + * [3.3 The `negotiations/:consumerPid/offers` Endpoint _(Consumer-side)_](#33-the-negotiationsconsumerpidoffers-endpoint-consumer-side) + * [3.4 The `negotiations/:consumerPid/agreement` Endpoint _(Consumer-side)_](#34-the-negotiationsconsumerpidagreement-endpoint-consumer-side) + * [3.5 The `negotiations/:consumerPid/events` Endpoint _(Consumer-side)_](#35-the-negotiationsconsumerpidevents-endpoint-consumer-side) + * [3.6 The `negotiations/:consumerPid/termination` Endpoint _(Consumer-side)_](#36-the-negotiationsconsumerpidtermination-endpoint-consumer-side) + ## 1 Introduction -This specification defines a RESTful API over HTTPS for the [Contract Negotiation Protocol](./contract.negotiation.protocol.md). +### 1.1 Prerequisites -The OpenAPI definitions for this specification can be accessed [here](TBD). +1. The `` notation indicates the base URL for a [Connector](../model/terminology.md#connector--data-service-) endpoint. For example, if the base [Connector](../model/terminology.md#connector--data-service-) URL is `connector.example.com`, the URL `https:///negotiations/request` will map to `https//connector.example.com/negotiation/request`. -## 2 Provider Path Bindings +2. All request and response messages must use the `application/json` media type. Derived media types, e.g., `application/ld+json` may be exposed in addition. -### 2.1 Prerequisites +### 1.2 Contract Negotiation Error -1. The `` notation indicates the base URL for a [Connector](../model/terminology.md#connector--data-service-) endpoint. For example, if the base [Connector](../model/terminology.md#connector--data-service-) URL is `connector.example.com`, the - URL `https:///negotiation/request` will map to `https//connector.example.com/negotiation/request`. +In the event of a client request error, the [Connector](../model/terminology.md#connector--data-service-) must return an appropriate HTTP 4xx client error code. If an error body is returned it must be a [Contract Negotiation Error](./contract.negotiation.protocol.md#32-error---contract-negotiation-error). -2. All request and response messages must use the `application/json` media type. +#### 1.2.1 State Transition Errors -### 2.2 Contract Negotiation Error +If a client makes a request that results in an invalid [state transition as defined by the Contract Negotiation Protocol](./contract.negotiation.protocol.md#11-states), it must return an HTTP code 400 (Bad Request) with a [Contract Negotiation Error](./contract.negotiation.protocol.md#32-error---contract-negotiation-error) in the response body. -In the event of a client request error, the [Connector](../model/terminology.md#connector--data-service-) must return an appropriate HTTP 4xx client error code. If an error body is returned it must be -a [ContractNegotiationError](./message/contract-negotiation-error.json) with the following properties: +#### 1.2.2 Object Not Found -| Field | Type | Description | -|-------------|---------------|------------------------------------------------------------------------------------------------------| -| consumerPid | UUID | The [Contract Negotiation](../model/terminology.md#contract-negotiation) unique id on consumer side. | -| providerPid | UUID | The [Contract Negotiation](../model/terminology.md#contract-negotiation) unique id on provider side. | -| code | string | An optional implementation-specific error code. | -| reasons | Array[object] | An optional array of implementation-specific error objects. | +If the [Contract Negotiation](../model/terminology.md#contract-negotiation) (CN) does not exist, the [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) must return an HTTP 404 (Not Found) response. -### 2.2.1 State transition errors +#### 1.2.3 Unauthorized Access -If a client or provider [Connector](../model/terminology.md#connector--data-service-) makes a request that results in an invalid [Contract Negotiation's](./contract.negotiation.protocol.md#ack---contractnegotiation) state transition as defined by the Contract Negotiation Protocol, it must return -an HTTP code 400 (Bad Request) with an `ContractNegotiationError` in the response body. +If the client is not authorized, the [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) must return an HTTP 404 (Not Found) response. -### 2.3 Authorization +### 1.3 Authorization -All requests should use the `Authorization` header to include an authorization token. The semantics of such tokens are not part of this specification. The `Authorization` HTTP -header is optional if the [Connector](../model/terminology.md#connector--data-service-) does not require authorization. +All requests should use the `Authorization` header to include an authorization token. The semantics of such tokens are not part of this specification. The `Authorization` HTTP header is optional if the [Connector](../model/terminology.md#connector--data-service-) does not require authorization. -### 2.4 The provider `negotiations` resource +## 2 Provider Path Bindings -#### 2.4.1 GET +| Endpoint | Method | Description | +|:----------------------------------------------------------------------|:-------|:---------------------------| +| https://provider.com/negotiations/:providerPid | `GET` | Section [2.1.1](#211-get) | +| https://provider.com/negotiations/request | `POST` | Section [2.2.1](#221-post) | +| https://provider.com/negotiations/:providerPid/request | `POST` | Section [2.3.1](#231-post) | +| https://provider.com/negotiations/:providerPid/events | `POST` | Section [2.4.1](#241-post) | +| https://provider.com/negotiations/:providerPid/agreement/verification | `POST` | Section [2.5.1](#251-post) | +| https://provider.com/negotiations/:providerPid/termination | `POST` | Section [2.6.1](#261-post) | -``` -GET https://connector.provider.com/negotiations/:providerPid +### 2.1 The `negotiations` Endpoint _(Provider-side)_ + +#### 2.1.1 GET + +##### Request + +A CN can be accessed by a [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) sending a GET request to `negotiations/:providerPid`: + +```http request +GET https://provider.com/negotiations/:providerPid Authorization: ... ``` -If the [Contract Negotiation](../model/terminology.md#contract-negotiation) is found and the client is authorized, the provider [Connector](../model/terminology.md#connector--data-service-) must return an HTTP 200 (OK) response and a body containing -the [ContractNegotiation](./message/contract-negotiation.json): +##### Response -``` +If the CN is found and the client is authorized, the [Provider](../model/terminology.md#provider) must return an HTTP 200 (OK) response and a body containing the [Contract Negotiation](./contract.negotiation.protocol.md#31-ack---contract-negotiation): + +```json { "@context": "https://w3id.org/dspace/v0.8/context.json", "@type": "dspace:ContractNegotiation", @@ -61,63 +93,67 @@ the [ContractNegotiation](./message/contract-negotiation.json): } ``` -Predefined states are: `REQUESTED`, `OFFERED`, `ACCEPTED`, `AGREED`, `VERIFIED`, `FINALIZED`, and `TERMINATED`. +Predefined states are: `REQUESTED`, `OFFERED`, `ACCEPTED`, `AGREED`, `VERIFIED`, `FINALIZED`, and `TERMINATED` (see [here](./contract.negotiation.protocol.md#11-states). -If the [Contract Negotiation](../model/terminology.md#contract-negotiation) does not exist or the client is not authorized, the provider [Connector](../model/terminology.md#connector--data-service-) must return an HTTP 404 (Not Found) response. +### 2.2 The `negotiations/request` Endpoint _(Provider-side)_ -### 2.5 The provider `negotiations/request` resource +#### 2.2.1 POST -#### 2.5.1 POST +##### Request -A [Contract Negotiation](../model/terminology.md#contract-negotiation) is started and placed in the `REQUESTED` state when a consumer POSTs -a [ContractRequestMessage](./message/contract-request-message_initial.json) to `negotiations/request`: +A CN is started and placed in the `REQUESTED` state when a [Consumer](../model/terminology.md#consumer) POSTs an initiating [Contract Request Message](./contract.negotiation.protocol.md#21-contract-request-message) to `negotiations/request`: -``` -POST https://connector.provider.com/negotiations/request +```http request +POST https://provider.com/negotiations/request Authorization: ... { "@context": "https://w3id.org/dspace/v0.8/context.json", - "@type": "dspace:ContractRequest" + "@type": "dspace:ContractRequestMessage", "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", - "dspace:offerId": "urn:uuid:2828282:3dd1add8-4d2d-569e-d634-8394a8836a88", + "dspace:offer": { + "@type": "odrl:Offer", + "@id": "...", + "target": "urn:uuid:3dd1add8-4d2d-569e-d634-8394a8836a88" + }, "dspace:callbackAddress": "https://..." } ``` -The `callbackAddress` property specifies the base endpoint `URL` where the client receives messages associated with the [Contract Negotiation](../model/terminology.md#contract-negotiation). Support for the `HTTPS` scheme is -required. Implementations may optionally support other URL schemes. +- The `callbackAddress` property specifies the base endpoint `URL` where the client receives messages associated with the CN. Support for the `HTTPS` scheme is required. Implementations may optionally support other URL schemes. -Callback messages will be sent to paths under the base URL as described by this specification. Note that provider [Connectors](../model/terminology.md#connector--data-service-) should properly handle the cases where a trailing `/` -is included with or absent from the `callbackAddress` when resolving full URL. +- Callback messages will be sent to paths under the base URL as described by this specification. Note that [Providers](../model/terminology.md#provider) should properly handle the cases where a trailing `/` is included with or absent from the `callbackAddress` when resolving full URL. -The provider [Connector](../model/terminology.md#connector--data-service-) must return an HTTP 201 (Created) response with a body containing -the [ContractNegotiation](./message/contract-negotiation.json): +##### Response -``` +The [Provider](../model/terminology.md#provider) must return an HTTP 201 (Created) response with a body containing the [Contract Negotiation](./contract.negotiation.protocol.md#31-ack---contract-negotiation): + +```json { "@context": "https://w3id.org/dspace/v0.8/context.json", - "@type": "dspace:ContractNegotiation" + "@type": "dspace:ContractNegotiation", "dspace:providerPid": "urn:uuid:dcbf434c-eacf-4582-9a02-f8dd50120fd3", "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", "dspace:state" :"REQUESTED" } ``` -### 2.6 The provider `negotiations/:providerPid/request` resource +### 2.3 The `negotiations/:providerPid/request` Endpoint _(Provider-side)_ -#### 2.6.1 POST +#### 2.3.1 POST -A consumer may make an [Offer](../model/terminology.md#offer) by POSTing a [ContractRequestMessage](./message/contract-request-message.json) to `negotiations/:providerPid/request`: +##### Request -``` -POST https://connector.provider.com/negotiations/urn:uuid:dcbf434c-eacf-4582-9a02-f8dd50120fd3/offers +A [Consumer](../model/terminology.md#consumer) may make an [Offer](../model/terminology.md#offer) by POSTing a [Contract Request Message](./contract.negotiation.protocol.md#21-contract-request-message) to `negotiations/:providerPid/request`: + +```http request +POST https://provider.com/negotiations/:providerPid/request Authorization: ... { - "@context": "https://w3id.org/dspace/v0.8/context.jsonn", + "@context": "https://w3id.org/dspace/v0.8/context.json", "@type": "dspace:ContractRequestMessage", "dspace:providerPid": "urn:uuid:dcbf434c-eacf-4582-9a02-f8dd50120fd3", "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", @@ -129,163 +165,277 @@ Authorization: ... } ``` -The consumer must include the `providerPid` and `consumerPid`. The consumer must include either the `offer` or `offerId` property. +##### Response -If the message is successfully processed, the provider [Connector](../model/terminology.md#connector--data-service-) must return and HTTP 200 (OK) response. The response body is not specified and clients are not required to process -it. +If the message is successfully processed, the [Provider](../model/terminology.md#provider) must return an HTTP 200 (OK) response. The response body is not specified and clients are not required to process it. -### 2.7 The provider `negotiations/:providerPid/events` resource +### 2.4 The `negotiations/:providerPid/events` Endpoint _(Provider-side)_ -#### 2.7.1 POST +#### 2.4.1 POST -A consumer [Connector](../model/terminology.md#connector--data-service-) can POST a [ContractNegotiationEventMessage](./message/contract-negotiation-event-message.json) to `negotiations/:providerPid/events` to accept the current -provider [Offer](../model/terminology.md#offer). If the [Contract Negotiation's](./contract.negotiation.protocol.md#ack---contractnegotiation) state is successfully transitioned, the provider must return HTTP code 200 (OK). The response body is not specified and clients are not -required to process it. +##### Request -If the current [Offer](../model/terminology.md#offer) was created by the consumer, the provider must return HTTP code 400 (Bad Request) with an `NegotiationErrorMessage` in the response body. +A [Consumer](../model/terminology.md#consumer) can POST a [Contract Negotiation Event Message](./contract.negotiation.protocol.md#25-contract-negotiation-event-message) to `negotiations/:providerPid/events` to accept the current [Provider's](../model/terminology.md#provider) [Offer](../model/terminology.md#offer). -### 2.8 The provider `negotiations/:providerPid/agreement/verification` resource -#### 2.8.1 POST +```http request +POST https://provider.com/negotiations/:providerPid/events -The consumer [Connector](../model/terminology.md#connector--data-service-) can POST a [ContractAgreementVerificationMessage](./message/contract-agreement-verification-message.json) to verify an [Agreement](../model/terminology.md#agreement). If the [Contract Negotiation's](./contract.negotiation.protocol.md#ack---contractnegotiation) state is -successfully transitioned, the provider must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. +Authorization: ... +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:ContractNegotiationEventMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:eventType": "dspace:ACCEPTED" +} ``` -POST https://connector.provider.com/negotiations/urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab/agreement/verification + +##### Response + +If the CN's state is successfully transitioned, the [Provider](../model/terminology.md#provider) must return an HTTP code 200 (OK). The response body is not specified and clients are not required to process it. + +If the current [Offer](../model/terminology.md#offer) was created by the [Consumer](../model/terminology.md#consumer), the [Provider](../model/terminology.md#provider) must return an HTTP code 400 (Bad Request) with a [Contract Negotiation Error](./contract.negotiation.protocol.md#32-error---contract-negotiation-error) in the response body. + +### 2.5 The `negotiations/:providerPid/agreement/verification` Endpoint _(Provider-side)_ + +#### 2.5.1 POST + +##### Request + +The [Consumer](../model/terminology.md#consumer) can POST a [Contract Agreement Verification Message](./contract.negotiation.protocol.md#24-contract-agreement-verification-message) to verify an [Agreement](../model/terminology.md#agreement). + +```http request +POST https://provider.com/negotiations/:providerPid/agreement/verification Authorization: ... { - "@context": "https://w3id.org/dspace/v0.8/context.json", + "@context": "https://w3id.org/dspace/v0.8/context.json", "@type": "dspace:ContractAgreementVerificationMessage", - "dspace:providerPid": "urn:uuid:dcbf434c-eacf-4582-9a02-f8dd50120fd3", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:hashedMessage": { + ... + } } - ``` -### 2.9 The provider `negotiations/:providerPid/termination` resource +##### Response -#### 2.9.1 POST +If the CN's state is successfully transitioned, the [Provider](../model/terminology.md#provider) must return an HTTP code 200 (OK). The response body is not specified and clients are not required to process it. -The consumer [Connector](../model/terminology.md#connector--data-service-) can POST a [ContractNegotiationTerminationMessage](./message/contract-negotiation-termination-message.json) to terminate a [Contract Negotiation](../model/terminology.md#contract-negotiation). If the [Contract Negotiation's](../model/terminology.md#contract-negotiation) -state is successfully transitioned, the provider must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. + +### 2.6 The `negotiations/:providerPid/termination` Endpoint _(Provider-side)_ + +#### 2.6.1 POST + +##### Request + +The [Consumer](../model/terminology.md#consumer) can POST a [Contract Negotiation Termination Message](./contract.negotiation.protocol.md#26-contract-negotiation-termination-message) to terminate a CN. + +```http request +POST https://provider.com/negotiations/:providerPid/termination + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:ContractNegotiationTerminationMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:code": "...", + "dspace:reason": [ + ... + ] +} +``` + +##### Response + +If the CN's state is successfully transitioned, the [Provider](../model/terminology.md#provider) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. ## 3 Consumer Callback Path Bindings +| Endpoint | Method | Description | +|:---------------------------------------------------------------------|:-------|:---------------------------| +| https://consumer.com/negotiations/offers | `POST` | Section [3.2.1](#321-post) | +| https://consumer.com/:callback/negotiations/:consumerPid/offers | `POST` | Section [3.3.1](#331-post) | +| https://consumer.com/:callback/negotiations/:consumerPid/agreement | `POST` | Section [3.4.1](#341-post) | +| https://consumer.com/:callback/negotiations/:consumerPid/events | `POST` | Section [3.5.1](#351-post) | +| https://consumer.com/:callback/negotiations/:consumerPid/termination | `POST` | Section [3.6.1](#361-post) | + +**_Note:_** The `:callback` can be chosen freely by the implementations. + ### 3.1 Prerequisites -All callback paths are relative to the `callbackAddress` base URL specified in the `ContractRequestMessage` that initiated a [Contract Negotiation](../model/terminology.md#contract-negotiation). For example, if -the `callbackAddress` is specified as `https://connector.consumer/callback` and a callback path binding is `negotiations/:consumerPid/offers`, the resolved URL will -be `https://connector.consumer.com/callback/negotiations/:consumerPid/offers`. +All callback paths are relative to the `callbackAddress` base URL specified in the [Contract Request Message](./contract.negotiation.protocol.md#21-contract-request-message) that initiated a CN. For example, if the `callbackAddress` is specified as `https://consumer.com/callback` and a callback path binding is `negotiations/:consumerPid/offers`, the resolved URL will be `https://consumer.com/callback/negotiations/:consumerPid/offers`. -### 3.2 The consumer `negotiations/offers` resource +### 3.2 The `negotiations/offers` Endpoint _(Consumer-side)_ #### 3.2.1 POST -A [Contract Negotiation](../model/terminology.md#contract-negotiation) is started and placed in the `OFFERED` state when a provider POSTs a -[ContractOfferMessage](./message/contract-offer-message_initial.json) to `negotiations/offers`: +##### Request -``` -POST https://connector.provider.com/negotiations/offers +A CN is started and placed in the `OFFERED` state when a [Provider](../model/terminology.md#provider) POSTs a [Contract Offer Message](./contract.negotiation.protocol.md#22-contract-offer-message) to `negotiations/offers`: + +```http request +POST https://consumer.com/negotiations/offers Authorization: ... { "@context": "https://w3id.org/dspace/v0.8/context.json", - "@type": "dspace:ContractOfferMessage" + "@type": "dspace:ContractOfferMessage", "dspace:providerPid": "urn:uuid:dcbf434c-eacf-4582-9a02-f8dd50120fd3", "dspace:offer": { "@type": "odrl:Offer", "@id": "...", "target": "urn:uuid:3dd1add8-4d2d-569e-d634-8394a8836a88" - } + }, "dspace:callbackAddress": "https://..." } ``` -The `callbackAddress` property specifies the base endpoint URL where the client receives messages associated with the [Contract Negotiation](../model/terminology.md#contract-negotiation). Support for the HTTPS scheme is required. Implementations may optionally support other URL schemes. +- The `callbackAddress` property specifies the base endpoint URL where the client receives messages associated with the CN. Support for the HTTPS scheme is required. Implementations may optionally support other URL schemes. -Callback messages will be sent to paths under the base URL as described by this specification. Note that consumer [Connectors](../model/terminology.md#connector--data-service-) should properly handle the cases where a trailing / is included with or absent from the callbackAddress when resolving full URL. +- Callback messages will be sent to paths under the base URL as described by this specification. Note that [Consumers](../model/terminology.md#consumer) should properly handle the cases where a trailing / is included with or absent from the `callbackAddress` when resolving full URL. -The consumer [Connector](../model/terminology.md#connector--data-service-) must return an HTTP 201 (Created) response with a body containing the [Contract Negotiation](./contract.negotiation.protocol.md#ack---contractnegotiation): +##### Response -``` +The [Consumer](../model/terminology.md#consumer) must return an HTTP 201 (Created) response with a body containing the [Contract Negotiation](./contract.negotiation.protocol.md#31-ack---contract-negotiation): + +```json { "@context": "https://w3id.org/dspace/v0.8/context.json", - "@type": "dspace:ContractNegotiation" + "@type": "dspace:ContractNegotiation", "dspace:providerPid": "urn:uuid:dcbf434c-eacf-4582-9a02-f8dd50120fd3", "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", "dspace:state" :"OFFERED" } ``` -### 3.3 The consumer `negotiations/:consumerPid/offers` resource +### 3.3 The `negotiations/:consumerPid/offers` Endpoint _(Consumer-side)_ #### 3.3.1 POST -A provider may make an [Offer](../model/terminology.md#offer) by POSTing a [ContractOfferMessage](./message/contract-offer-message.json) to the `negotiations/:consumerPid/offers` callback: +##### Request -``` -POST https://connector.consumer.com/callback/negotiations/urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833/offers +A [Provider](../model/terminology.md#provider) may make an [Offer](../model/terminology.md#offer) by POSTing a [Contract Offer Message](./contract.negotiation.protocol.md#22-contract-offer-message) to the `negotiations/:consumerPid/offers` callback: + +```http request +POST https://consumer.com/:callback/negotiations/:consumerPid/offers Authorization: ... { - "@context": "https://w3id.org/dspace/v0.8/context.json", + "@context": "https://w3id.org/dspace/v0.8/context.json", "@type": "dspace:ContractOfferMessage", - "dspace:providerPid": "urn:uuid:dcbf434c-eacf-4582-9a02-f8dd50120fd3", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", "dspace:offer": { "@type": "odrl:Offer", - "@id": "...", - "target": "urn:uuid:3dd1add8-4d2d-569e-d634-8394a8836a88" - } + "@id": "urn:uuid:6bcea82e-c509-443d-ba8c-8eef25984c07", + "odrl:target": "urn:uuid:3dd1add8-4d2d-569e-d634-8394a8836a88", + "dspace:providerId": "urn:tsdshhs636378", + "dspace:consumerId": "urn:jashd766", + ... + }, + "dspace:callbackAddress": "https://......" } ``` -If the message is successfully processed, the consumer provider [Connector](../model/terminology.md#connector--data-service-) must return an HTTP 200 (OK) response. The response body is not specified and clients are not required to -process it. +##### Response + +If the message is successfully processed, the [Consumer](../model/terminology.md#consumer) must return an HTTP 200 (OK) response. The response body is not specified and clients are not required to process it. -### 3.4 The consumer `negotiations/:consumerPid/agreement` resource +### 3.4 The `negotiations/:consumerPid/agreement` Endpoint _(Consumer-side)_ #### 3.4.1 POST -The provider [Connector](../model/terminology.md#connector--data-service-) can POST a [ContractAgreementMessage](./message/contract-agreement-message.json) to the `negotiations/:consumerPid/agreement` callback to create an [Agreement](../model/terminology.md#agreement). If the -[Contract Negotiation's](./contract.negotiation.protocol.md#ack---contractnegotiation) state is successfully transitioned, the consumer must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. +##### Request -``` -POST https://connector.consumer.com/negotiations/urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833/agreement +The [Provider](../model/terminology.md#provider) can POST a [Contract Agreement Message](./contract.negotiation.protocol.md#23-contract-agreement-message) to the `negotiations/:consumerPid/agreement` callback to create an [Agreement](../model/terminology.md#agreement). + +```http request +POST https://consumer.com/:callback/negotiations/:consumerPid/agreement Authorization: ... { - "@context": "https://w3id.org/dspace/v0.8/context.json", + "@context": "https://w3id.org/dspace/v0.8/context.json", "@type": "dspace:ContractAgreementMessage", - "dspace:providerPid": "urn:uuid:dcbf434c-eacf-4582-9a02-f8dd50120fd3", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", "dspace:agreement": { + "@id": "urn:uuid:e8dc8655-44c2-46ef-b701-4cffdc2faa44", "@type": "odrl:Agreement", - "@id": "e8dc8655-44c2-46ef-b701-4cffdc2faa44", - "dspace:consumerId": "...", - "dspace:providerId": "...", - } - } + "odrl:target": "urn:uuid:3dd1add4-4d2d-569e-d634-8394a8836d23", + "dspace:timestamp": "2023-01-01T01:00:00Z", + "dspace:providerId": "urn:tsdshhs636378", + "dspace:consumerId": "urn:jashd766", + ... + }, + "dspace:callbackAddress": "https://......" } ``` -### 3.5 The consumer `negotiations/:consumerPid/events` resource +##### Response + +If the CN's state is successfully transitioned, the [Consumer](../model/terminology.md#consumer) must return an HTTP code 200 (OK). The response body is not specified and clients are not required to process it. + +### 3.5 The `negotiations/:consumerPid/events` Endpoint _(Consumer-side)_ #### 3.5.1 POST -A provider can POST a [ContractNegotiationEventMessage](./message/contract-negotiation-event-message.json) to the `negotiations/:consumerPid/events` callback with an `eventType` -of `FINALIZED` to finalize an [Agreement](../model/terminology.md#agreement). If the [Contract Negotiation's](./contract.negotiation.protocol.md#ack---contractnegotiation) state is successfully transitioned, the consumer must return HTTP code 200 (OK). The response body is not -specified and clients are not required to process it. +##### Request + +A [Provider](../model/terminology.md#provider) can POST a [Contract Negotiation Event Message](./contract.negotiation.protocol.md#25-contract-negotiation-event-message) to the `negotiations/:consumerPid/events` callback with an `eventType` of `FINALIZED` to finalize an [Agreement](../model/terminology.md#agreement). + +```http request +POST https://consumer.com/:callback/negotiations/:consumerPid/events + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:ContractNegotiationEventMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:eventType": "dspace:FINALIZED" +} +``` + +##### Response + +If the CN's state is successfully transitioned, the [Consumer](../model/terminology.md#consumer) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. -### 3.6 The consumer `negotiations/:consumerPid/termination` resource +### 3.6 The `negotiations/:consumerPid/termination` Endpoint _(Consumer-side)_ #### 3.6.1 POST -The provider [Connector](../model/terminology.md#connector--data-service-) can POST a [ContractNegotiationTerminationMessage](./message/contract-negotiation-termination-message.json) to terminate a [Contract Negotiation](../model/terminology.md#contract-negotiation). If the [Contract Negotiation's](./contract.negotiation.protocol.md#ack---contractnegotiation) -state is successfully transitioned, the consumer must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. +##### Request + +The [Provider](../model/terminology.md#provider) can POST a [Contract Negotiation Termination Message](./contract.negotiation.protocol.md#26-contract-negotiation-termination-message) to terminate a CN. + +```http request +POST https://consumer.com/negotiations/:consumerPid/termination + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:ContractNegotiationTerminationMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:code": "...", + "dspace:reason": [ + ... + ] +} +``` + +##### Response + +If the CN's state is successfully transitioned, the [Consumer](../model/terminology.md#consumer) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. diff --git a/negotiation/contract.negotiation.protocol.md b/negotiation/contract.negotiation.protocol.md index e115c224..ec7e2e38 100644 --- a/negotiation/contract.negotiation.protocol.md +++ b/negotiation/contract.negotiation.protocol.md @@ -1,264 +1,190 @@ # Contract Negotiation Protocol -## Introduction: Terms +This document outlines the key elements of the [Contract Negotiation Protocol](../model/terminology.md#contract-negotiation-protocol). The used terms are described [here](../model/terminology.md). -This document outlines the key elements of the Contract Negotiation Protocol. The following terms are used: +- [Contract Negotiation Protocol](#contract-negotiation-protocol) + - [1 Introduction](#1-introduction) + - [1.1 States](#11-states) + - [1.2 State Machine](#12-state-machine) + - [2 Message Types](#2-message-types) + - [2.1 Contract Request Message](#21-contract-request-message) + - [2.2 Contract Offer Message](#22-contract-offer-message) + - [2.3 Contract Agreement Message](#23-contract-agreement-message) + - [2.4 Contract Agreement Verification Message](#24-contract-agreement-verification-message) + - [2.5 Contract Negotiation Event Message](#25-contract-negotiation-event-message) + - [2.6 Contract Negotiation Termination Message](#26-contract-negotiation-termination-message) + - [3 Response Types](#3-response-types) + - [3.1 ACK - Contract Negotiation](#31-ack---contract-negotiation) + - [3.2 ERROR - Contract Negotiation Error](#32-error---contract-negotiation-error) -- A _**message type**_ defines the structure of a _message_. -- A _**message**_ is an instantiation of a _message type_. -- The _**contract negotiation protocol**_ is the set of allowable message type sequences and is defined as a state machine (CNP-SM). -- A _**contract negotiation (CN)**_ is an instantiation of the CNP-SM. -- A _**provider**_ is a [Participant Agent](../model/terminology.md#participant-agent) that offers a [Dataset](../model/terminology.md#dataset). -- A _**consumer**_ is a [Participant Agent](../model/terminology.md#participant-agent) that requests access to an offered [Dataset](../model/terminology.md#dataset). +## 1 Introduction -## Contract Negotiation Protocol +A [Contract Negotiation](../model/terminology.md#contract-negotiation) (CN) involves two parties, a [Provider](../model/terminology.md#provider) that offers one or more [Datasets](../model/terminology.md#dataset) under a usage contract and [Consumer](../model/terminology.md#consumer) that requests [Datasets](../model/terminology.md#dataset). A CN is uniquely identified through an [IRI](https://www.w3.org/International/articles/idn-and-iri/). Each CN requires a newly generated IRI, which may not be used in a CN after a terminal state has been reached. A CN progresses through a series of states, which are tracked by the [Provider](../model/terminology.md#provider) and [Consumer](../model/terminology.md#consumer) using messages. A CN transitions to a state in response to an acknowledged message from the counter-party. Both parties have the same state of the CN. In case the states differ, the CN is terminated and a new CN has to be initiated. -A [Contract Negotiation](../model/terminology.md#contract-negotiation) (CN) involves two parties, a _provider_ that offers one or more [Datasets](../model/terminology.md#dataset) under a usage contract and _consumer_ that requests [Datasets](../model/terminology.md#dataset). -A CN is uniquely identified through an [IRI](https://www.w3.org/International/articles/idn-and-iri/). Each CN requires a newly generated IRI, which may not be used in a CN after a terminal state has been reached. -A CN progresses through a series of states, which are tracked by the provider and consumer using messages. A CN transitions to a state in response to an acknowledged message from -the counter-party. Both parties have the same state of the CN. In case the states differ, the CN is terminated and a new CN has to be initiated. +### 1.1 States The CN states are: -- **REQUESTED** - A contract for a [Dataset](../model/terminology.md#dataset) has been requested by the consumer based on an [Offer](../model/terminology.md#offer) and the provider has sent an ACK response. -- **OFFERED** - The provider has sent an [Offer](../model/terminology.md#offer) to the consumer and the consumer has sent an ACK response. -- **ACCEPTED** - The consumer has accepted the latest [Offer](../model/terminology.md#offer) and the provider has sent an ACK response. -- **AGREED** - The provider has accepted the latest [Offer](../model/terminology.md#offer), sent an [Agreement](../model/terminology.md#agreement) to the consumer, and the consumer has sent an ACK response. -- **VERIFIED** - The consumer has sent an [Agreement](../model/terminology.md#agreement) verification to the provider and the provider has sent an ACK response. -- **FINALIZED** - The provider has sent a finalization message including his own [Agreement](../model/terminology.md#agreement) verification to the consumer and the consumer has sent an ACK response. Data is - now available to the consumer. -- **TERMINATED** - The provider or consumer has placed the [Contract Negotiation](../model/terminology.md#contract-negotiation) in a terminated state. A termination message has been sent by either of the [Participants](../model/terminology.md#participant) and the - other has sent an ACK response. This is a terminal state. +- **REQUESTED**: A contract for a [Dataset](../model/terminology.md#dataset) has been requested by the [Consumer](../model/terminology.md#consumer) based on an [Offer](../model/terminology.md#offer) and the [Provider](../model/terminology.md#provider) has sent an ACK response. +- **OFFERED**: The [Provider](../model/terminology.md#provider) has sent an [Offer](../model/terminology.md#offer) to the [Consumer](../model/terminology.md#consumer) and the [Consumer](../model/terminology.md#consumer) has sent an ACK response. +- **ACCEPTED**: The [Consumer](../model/terminology.md#consumer) has accepted the latest [Offer](../model/terminology.md#offer) and the [Provider](../model/terminology.md#provider) has sent an ACK response. +- **AGREED**: The [Provider](../model/terminology.md#provider) has accepted the latest [Offer](../model/terminology.md#offer), sent an [Agreement](../model/terminology.md#agreement) to the [Consumer](../model/terminology.md#consumer), and the [Consumer](../model/terminology.md#consumer) has sent an ACK response. +- **VERIFIED**: The [Consumer](../model/terminology.md#consumer) has sent an [Agreement](../model/terminology.md#agreement) verification to the [Provider](../model/terminology.md#provider) and the [Provider](../model/terminology.md#provider) has sent an ACK response. +- **FINALIZED**: The [Provider](../model/terminology.md#provider) has sent a finalization message including his own [Agreement](../model/terminology.md#agreement) verification to the [Consumer](../model/terminology.md#consumer) and the [Consumer](../model/terminology.md#consumer) has sent an ACK response. Data is now available to the [Consumer](../model/terminology.md#consumer). +- **TERMINATED**: The [Provider](../model/terminology.md#provider) or [Consumer](../model/terminology.md#consumer) has placed the CN in a terminated state. A termination message has been sent by either of the [Participants](../model/terminology.md#participant) and the other has sent an ACK response. This is a terminal state. -### Contract Negotiation State Machine +### 1.2 State Machine -The CN state machine is represented in the following diagram. Note that transitions to the `TERMINATED` state may occur from any other state and are not shown for simplicity: +The CN state machine is represented in the following diagram: -![](./contract.negotiation.state.machine.png) +![](./figures/contract.negotiation.state.machine.png) -Transitions marked with `C` indicate a message sent by the consumer, transitions marked with `P` indicate a provider message. Terminal states are final; the state machine may -not transition to another state. A new CN may be initiated if, for instance, the CN entered the `TERMINATED` state due to a network issue. +Transitions marked with `C` indicate a message sent by the [Consumer](../model/terminology.md#consumer), transitions marked with `P` indicate a [Provider](../model/terminology.md#provider) message. Terminal states are final; the state machine may not transition to another state. A new CN may be initiated if, for instance, the CN entered the `TERMINATED` state due to a network issue. -## Message Types +## 2 Message Types The CN state machine is transitioned upon receipt and acknowledgement of a message. This section details those messages as abstract message types. -### Notes - -- Concrete wire formats are defined by the protocol binding, e.g. HTTPS. -- All [Policy](../model/terminology.md#policy) types ([Offer](../model/terminology.md#offer), [Agreement](../model/terminology.md#agreement)) must contain a unique identifier in the form of a URI. GUIDs can also be used in the form of URNs, for instance following the - pattern . +- Concrete wire formats are defined by the protocol binding, e.g., [Contract Negotiation HTTPS Binding](contract.negotiation.binding.https.md).. +- All [Policy](../model/terminology.md#policy) types ([Offer](../model/terminology.md#offer), [Agreement](../model/terminology.md#agreement)) must contain an unique identifier in the form of a URI. GUIDs can also be used in the form of URNs, for instance following the pattern . - An [ODRL Agreement](https://www.w3.org/TR/odrl-vocab/#term-Agreement) must have a target property containing the [Dataset](../model/terminology.md#dataset) id. -### 1. ContractRequestMessage - -![](./message/diagram/contract-request-message.png) - -**Sent by**: Consumer - -**Resulting State**: REQUESTED, TERMINATED - -**Example**: [Initiating ContractRequestMessage](./message/contract-request-message_initial.json), [ContractRequestMessage](./message/contract-request-message.json) - -**Response**: [ACK or ERROR.](#response-types) - -**Schema**: [ContractRequestMessageShape](./message/shape/contract-request-message-shape.ttl), [ContractRequestMessage JSON Schema](./message/schema/contract-request-message-schema.json), [ContractNegotiationShape](./message/shape/contract-negotiation-shape.ttl) and [ContractNegotiation JSON Schema](./message/schema/contract-negotiation-schema.json) - -#### Description - -The `ContractRequestMessage` is sent by a consumer to initiate a [Contract Negotiation](../model/terminology.md#contract-negotiation) or to respond to a `ContractOfferMessage` sent by a provider. - -#### Notes - -- The consumer must include an `offer` property, which itself must have a `@id` property. If the message includes a `providerPid` property, the request will be associated with an existing [Contract Negotiation](../model/terminology.md#contract-negotiation) - and a consumer [Offer](../model/terminology.md#offer) will be created using either the `offer` or `offer.@id` properties. If the message does not include a `providerPid`, a new [Contract Negotiation](../model/terminology.md#contract-negotiation) - will be created on provider side using either the `offer` or `offer.@id` properties and the provider selects an appropriate `providerPid`. - -- An `offer.@id` will generally refer to an [Offer](../model/terminology.md#offer) contained in a [Catalog](../model/terminology.md#catalog). If the provider is not aware of the `offer.@id` value, it must respond with an error message. - -- The [Dataset](../model/terminology.md#dataset) id is not technically required but included to avoid an error where the [Offer](../model/terminology.md#offer) is associated with a different data set. - -- `callbackAddress` is a URL indicating where messages to the consumer should be sent in asynchronous settings. If the address is not understood, the provider MUST return an - UNRECOVERABLE error. - -- Different to a [Catalog](../catalog/catalog.protocol.md#221-odrlhaspolicy) or [Dataset](../catalog/catalog.protocol.md#311-odrlhaspolicy), the Offer inside a ContractRequestMessage must have an `odrl:target` attribute. However, it's contained Rules must not have any `odrl:target` attributes to prevent inconsistencies with the [ODRL inferencing rules for compact policies](https://www.w3.org/TR/odrl-model/#composition-compact). - - -### 2. ContractOfferMessage - -![](./message/diagram/contract-offer-message.png) - -**Sent by**: Provider - -**Resulting State**: OFFERED, TERMINATED - -**Example**: [Initiating ContractOfferMessage](./message/contract-offer-message_initial.json), [ContractOfferMessage](./message/contract-offer-message.json) - -**Response**: [ACK or ERROR.](#response-types) - -**Schema**: [ContractOfferMessageShape](./message/shape/contract-offer-message-shape.ttl) and [ContractOfferMessage JSON Schema](./message/schema/contract-offer-message-schema.json) - -#### Description - -The `ContractOfferMessage` is sent by a provider to initiate a [Contract Negotiation](../model/terminology.md#contract-negotiation) or to respond to a `ContractRequestMessage` sent by a consumer. - -### Notes - -- If the message includes a `consumerPid` property, the request will be associated with an existing [Contract Negotiation](../model/terminology.md#contract-negotiation). If the message does not include a `consumerPid`, a new [Contract Negotiation](../model/terminology.md#contract-negotiation) -will be created on consumer side and the consumer selects an appropriate `consumerPid`. - -- Different to a [Catalog](../catalog/catalog.protocol.md#221-odrlhaspolicy) or [Dataset](../catalog/catalog.protocol.md#311-odrlhaspolicy), the Offer inside a ContractOfferMessage must have an `odrl:target` attribute. However, it's contained Rules must not have any `odrl:target` attributes to prevent inconsistencies with the [ODRL inferencing rules for compact policies](https://www.w3.org/TR/odrl-model/#composition-compact). - -#### Notes - -- The [Dataset](../model/terminology.md#dataset) id is not required but can be included when the provider initiates a [Contract Negotiation](../model/terminology.md#contract-negotiation). - -### 3. ContractAgreementMessage - -![](./message/diagram/contract-agreement-message.png) - -**Sent by**: Provider - -**Resulting State**: AGREED, TERMINATED - -**Example**: [ContractAgreementMessage](./message/contract-agreement-message.json) - -**Response**: [ACK or ERROR.](#response-types) - -**Schema**: [ContractAgreementMessageShape](./message/shape/contract-agreement-message-shape.ttl) and [ContractAgreementMessage JSON Schema](./message/schema/contract-agreement-message-schema.json) - -#### Description - -The `ContractAgreementMessage` is sent by a provider when it agrees to a contract. It contains the complete [Agreement](../model/terminology.md#agreement). - -A `ContractAgreementMessage` must contain a `consumerPid` and a `providerPid`. - -A `ContractAgreementMessage` must contain an [ODRL `Agreement`](https://www.w3.org/TR/odrl-vocab/#term-Agreement). - -An [Agreement](../model/terminology.md#agreement) must contain a `dspace:timestamp` property defined as an XSD DateTime type. - -An [Agreement](../model/terminology.md#agreement) must contain a `dspace:consumerId` and `dspace:providerId`. The contents of these -properties are a [Dataspace](../model/terminology.md#dataspace)-specific unique identifier of the [Agreement](../model/terminology.md#agreement) parties. Note that these -identifiers are not necessarily the same as the identifiers of the [Participant Agents](../model/terminology.md#participant-agent) negotiating the -contract (i.e. the [Connectors](../model/terminology.md#connector--data-service-)). - - -An [Agreement](../model/terminology.md#agreement) must contain a `odrl:target` property. None of its Rules, however, must have any `odrl:target` attributes to prevent inconsistencies with the [ODRL inferencing rules for compact policies](https://www.w3.org/TR/odrl-model/#composition-compact). - -### 4. ContractAgreementVerificationMessage - - -![](./message/diagram/contract-agreement-verification-message.png) - -**Sent by**: Consumer - -**Resulting State**: VERIFIED, TERMINATED - -**Example**: [ContractAgreementVerificationMessage](./message/contract-agreement-verification-message.json) - -**Response**: [ACK or ERROR.](#response-types) - -**Schema**: [ContractAgreementVerificationMessageShape](./message/shape/contract-agreement-verification-message-shape.ttl) and the [ContractAgreementVerificationMessage JSON Schema](./message/schema/contract-agreement-verification-message-schema.json) - -#### Description - -The `ContractAgreementVerificationMessage` is sent by a consumer to verify the acceptance of an [Agreement](../model/terminology.md#agreement). A provider responds with an error if the contract cannot be -validated or is incorrect. - -A `ContractAgreementVerificationMessage` must contain a `consumerPid` and a `providerPid`. - -### 5. ContractNegotiationEventMessage - - -![](./message/diagram/contract-negotiation-event-message.png) - -**Sent by**: Provider or Consumer - -**Resulting State**: FINALIZED, ACCEPTED, TERMINATED - -**Example**: [ContractNegotiationEventMessage](./message/contract-negotiation-event-message.json) - -**Response**: [ACK or ERROR.](#response-types) - -**Schema**: [ContractNegotiationEventMessageShape](./message/shape/contract-negotiation-event-message-shape.ttl) and the [ContractNegotiationEventMessage JSON Schema](./message/schema/contract-negotiation-event-message-schema.json) - -#### Description - -When the `ContractNegotiationEventMessage` is sent by a provider with an `eventType` property set to `FINALIZED`, an [Agreement](../model/terminology.md#agreement) has been finalized and the associated [Dataset](../model/terminology.md#dataset) -is accessible. The state machine is transitioned to the `FINALIZED` state. Other event types may be defined in the future. A consumer responds with an error if the contract -cannot be validated or is incorrect. - -It is an error for a consumer to send a `ContractNegotiationEventMessage` with an eventType `FINALIZED` to the provider. - -When the `ContractNegotiationEventMessage` is sent by a consumer with an `eventType` set to `ACCEPTED`, the state machine is placed in the `ACCEPTED` state. - -It is an error for a provider to send a `ContractNegotiationEventMessage` with an eventType `ACCEPTED` to the consumer. - -Note that [Contract Negotiation](#ack---contractnegotiation) events are not intended for propagation of [Agreement](../model/terminology.md#agreement) state after a [Contract Negotiation](../model/terminology.md#contract-negotiation) has entered a terminal state. It is considered an error for a consumer or -provider to send an event after the [Contract Negotiation's](../model/terminology.md#contract-negotiation) state machine has entered a terminal state. - -A `ContractNegotiationEventMessage` must contain a `consumerPid` and a `providerPid`. - -### 6. ContractNegotiationTerminationMessage - -![](./message/diagram/contract-negotiation-termination-message.png) - -**Sent by**: Consumer or Provider - -**Resulting State**: TERMINATED - -**Example**: [ContractNegotiationTerminationMessage](./message/contract-negotiation-termination-message.json) - -**Response**: [ACK or ERROR.](#response-types) - -**Schema**: [ContractNegotiationTerminationMessageShape](./message/shape/contract-negotiation-termination-message-shape.ttl) and the [ContractNegotiationTerminationMessage JSON Schema](./message/schema/contract-negotiation-termination-message-schema.json) - -#### Description - -The `ContractNegotiationTerminationMessage` is sent by a consumer or provider indicating it has cancelled the [Contract Negotiation](../model/terminology.md#contract-negotiation) sequence. The message can be sent at any state of a [Contract Negotiation](../model/terminology.md#contract-negotiation) -without providing an explanation. Nevertheless, the sender may provide a description to help the receiver. - -A `ContractNegotiationTerminationMessage` must contain a `consumerPid` and a `providerPid`. - -#### Notes - -- A [Contract Negotiation](../model/terminology.md#contract-negotiation) may be terminated for a variety of reasons, for example, an unrecoverable error was encountered or one of the parties no longer wishes to continue. A - [Connector's](../model/terminology.md#connector--data-service-) operator may remove terminated [Contract Negotiation](../model/terminology.md#contract-negotiation) resources after it has reached the terminated state. - -- If an error is received in response to a `ContractNegotiationTerminationMessage`, the sending party may choose to ignore the error. - -## Response Types - -### Notes - -- The `ACK` and `ERROR` response message types are mapped onto a protocol such as HTTPS. A description of an error might be provided in protocol-dependent forms, e.g. for an HTTPS - binding in the request or response body. - -### ACK - ContractNegotiation - -![](./message/diagram/contract-negotiation.png) - -**Sent by**: Consumer or Provider - -**Example**: [ContractNegotiation](./message/contract-negotiation.json) - -**Schema**: [ContractNegotiationShape](./message/shape/contract-negotiation-shape.ttl) and the [ContractNegotiationErrorMessage JSON Schema](./message/schema/contract-negotiation-schema.json) - -#### Description - -The `ContractNegotiation` is an object returned by a consumer or provider indicating a successful state change happened. - -### ERROR - ContractNegotiationError - -![](./message/diagram/contract-negotiation-error.png) - -**Sent by**: Consumer or Provider - -**Example**: [NegotiationError](./message/contract-negotiation-error.json) - -**Schema**: [ContractNegotiationErrorShape](./message/shape/contract-negotiation-error-shape.ttl) and the [ContractNegotiationErrorMessage JSON Schema](./message/schema/contract-negotiation-error-schema.json) - -#### Description - -The `ContractNegotiationError` is an object returned by a consumer or provider indicating an error has occurred. It does not cause a state transition. - +### 2.1 Contract Request Message + +| | | +|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer) | +| **Resulting state** | `REQUESTED`, `TERMINATED` | +| **Response** | [ACK](#31-ack---contract-negotiation) or [ERROR](#32-error---contract-negotiation-error) | +| **Schema** | [TTL Shape](./message/shape/contract-request-message-shape.ttl), [JSON Schema](./message/schema/contract-request-message-schema.json) | +| **Example** | Initiating [Message](./message/example/contract-request-message_initial.json), [Message](./message/example/contract-offer-message.json) | +| **Diagram(s)** | ![](./message/diagram/contract-request-message.png) | + +The Contract Request Message is sent by a [Consumer](../model/terminology.md#consumer) to initiate a CN or to respond to a [Contract Offer Message](#22-contract-offer-message) sent by a [Provider](../model/terminology.md#provider). +- The [Consumer](../model/terminology.md#consumer) must include an `offer` property, which itself must have a `@id` property. If the message includes a `providerPid` property, the request will be associated with an existing CN and a [Consumer](../model/terminology.md#consumer) [Offer](../model/terminology.md#offer) will be created using either the `offer` or `offer.@id` properties. If the message does not include a `providerPid`, a new CN will be created on [Provider](../model/terminology.md#provider) side using either the `offer` or `offer.@id` properties and the [Provider](../model/terminology.md#provider) selects an appropriate `providerPid`. +- An `offer.@id` will generally refer to an [Offer](../model/terminology.md#offer) contained in a [Catalog](../model/terminology.md#catalog). If the [Provider](../model/terminology.md#provider) is not aware of the `offer.@id` value, it must respond with an error message. +- The `callbackAddress` is a URL indicating where messages to the [Consumer](../model/terminology.md#consumer) should be sent in asynchronous settings. If the address is not understood, the [Provider](../model/terminology.md#provider) MUST return an UNRECOVERABLE error. +- Different to a [Catalog](../model/terminology.md#catalog) or [Dataset](../model/terminology.md#dataset), the [Offer](../model/terminology.md#offer) inside a [Contract Request Message](#21-contract-request-message) must have an `odrl:target` attribute. However, it's contained Rules must not have any `odrl:target` attributes to prevent inconsistencies with the [ODRL inferencing rules for compact policies](https://www.w3.org/TR/odrl-model/#composition-compact). + + +### 2.2 Contract Offer Message + +| | | +|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Provider](../model/terminology.md#provider) | +| **Resulting state** | `OFFERED`, `TERMINATED` | +| **Response** | [ACK](#31-ack---contract-negotiation) or [ERROR](#32-error---contract-negotiation-error) | +| **Schema** | [TTL Shape](./message/shape/contract-offer-message-shape.ttl), [JSON Schema](./message/schema/contract-offer-message-schema.json) | +| **Example** | [Example Initial Message](./message/example/contract-offer-message_initial.json), [Example Message](./message/example/contract-offer-message.json) | +| **Diagram(s)** | ![](./message/diagram/contract-offer-message_initial.png) ![](./message/diagram/contract-offer-message.png) | + +The Contract Offer Message is sent by a [Provider](../model/terminology.md#provider) to initiate a CN or to respond to a [Contract Request Message](#21-contract-request-message) sent by a [Consumer](../model/terminology.md#consumer). +- If the message includes a `consumerPid` property, the request will be associated with an existing CN. If the message does not include a `consumerPid`, a new CN will be created on [Consumer](../model/terminology.md#consumer) side and the [Consumer](../model/terminology.md#consumer) selects an appropriate `consumerPid`. +- The [Dataset](../model/terminology.md#dataset) id is not required but can be included when the [Provider](../model/terminology.md#provider) initiates a CN. +- Different to a [Dataset](../model/terminology.md#dataset) (see [DCAT Vocabulry Mapping](../catalog/catalog.protocol.md#11-dcat-vocabulary-mapping)), the Offer inside a ContractOfferMessage must have an `odrl:target` attribute. However, it's contained Rules must not have any `odrl:target` attributes to prevent inconsistencies with the [ODRL inferencing rules for compact policies](https://www.w3.org/TR/odrl-model/#composition-compact). + + +### 2.3 Contract Agreement Message + +| | | +|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Provider](../model/terminology.md#provider) | +| **Resulting state** | `AGREED`, `TERMINATED` | +| **Response** | [ACK](#31-ack---contract-negotiation) or [ERROR](#32-error---contract-negotiation-error) | +| **Schema** | [TTL Shape](./message/shape/contract-agreement-message-shape.ttl), [JSON Schema](./message/schema/contract-agreement-message-schema.json) | +| **Example** | [Message](./message/example/contract-agreement-message.json) | +| **Diagram(s)** | ![](./message/diagram/contract-agreement-message.png) | + +The Contract Agreement Message is sent by a [Provider](../model/terminology.md#provider) when it agrees to a contract. It contains the complete [Agreement](../model/terminology.md#agreement). +- The message must contain a `consumerPid` and a `providerPid`. +- The message must contain an [ODRL Agreement](https://www.w3.org/TR/odrl-vocab/#term-Agreement). +- An [Agreement](../model/terminology.md#agreement) must contain a `timestamp` property defined as an [XSD DateTime](https://www.w3schools.com/XML/schema_dtypes_date.asp) type. +- An [Agreement](../model/terminology.md#agreement) must contain a `consumerId` and `providerId`. The contents of these properties are a dataspace-specific unique identifier of the [Agreement](../model/terminology.md#agreement) parties. Note that these identifiers are not necessarily the same as the identifiers of the [Participant Agents](../model/terminology.md#participant-agent) negotiating the contract (e.g., [Connectors](../model/terminology.md#connector--data-service-)). +- An [Agreement](../model/terminology.md#agreement) must contain a `odrl:target` property. None of its Rules, however, must have any `odrl:target` attributes to prevent inconsistencies with the [ODRL inferencing rules for compact policies](https://www.w3.org/TR/odrl-model/#composition-compact). + + +### 2.4 Contract Agreement Verification Message + +| | | +|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer) | +| **Resulting state** | `VERIFIED`, `TERMINATED` | +| **Response** | [ACK](#31-ack---contract-negotiation) or [ERROR](#32-error---contract-negotiation-error) | +| **Schema** | [TTL Shape](./message/shape/contract-agreement-verification-message-shape.ttl), [JSON Schema](./message/schema/contract-agreement-verification-message-schema.json) | +| **Example** | [Message](./message/example/contract-agreement-verification-message.json) | +| **Diagram(s)** | ![](./message/diagram/contract-agreement-verification-message.png) | + +The Contract Agreement Verification Message is sent by a [Consumer](../model/terminology.md#consumer) to verify the acceptance of an [Agreement](../model/terminology.md#agreement). +- A [Provider](../model/terminology.md#provider) responds with an error if the contract cannot be validated or is incorrect. +- The message must contain a `consumerPid` and a `providerPid`. + +### 2.5 Contract Negotiation Event Message + +| | | +|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer), [Provider](../model/terminology.md#provider) | +| **Resulting state** | `FINALIZED`, `ACCEPTED`, `TERMINATED` | +| **Response** | [ACK](#31-ack---contract-negotiation) or [ERROR](#32-error---contract-negotiation-error) | +| **Schema** | [TTL Shape](./message/shape/contract-negotiation-event-message-shape.ttl), [JSON Schema](./message/schema/contract-negotiation-event-message-schema.json) | +| **Example** | [Message](./message/example/contract-negotiation-event-message.json) | +| **Diagram(s)** | ![](./message/diagram/contract-negotiation-event-message.png) | + +When the Contract Negotiation Event Message is sent by a [Provider](../model/terminology.md#provider) with an `eventType` property set to `FINALIZED`, an [Agreement](../model/terminology.md#agreement) has been finalized and the associated [Dataset](../model/terminology.md#dataset) is accessible. The state machine is transitioned to the `FINALIZED` state. +- Other event types may be defined in the future. +- A [Consumer](../model/terminology.md#consumer) responds with an error if the contract cannot be validated or is incorrect. +- The message must contain a `consumerPid` and a `providerPid`. +- When the message is sent by a [Consumer](../model/terminology.md#consumer) with an `eventType` set to `ACCEPTED`, the state machine is placed in the `ACCEPTED` state. +- It is an error for a [Consumer](../model/terminology.md#consumer) to send the message with an event type `FINALIZED` to the [Provider](../model/terminology.md#provider). +- It is an error for a [Provider](../model/terminology.md#provider) to send the message with an event type `ACCEPTED` to the [Consumer](../model/terminology.md#consumer). + +Note that CN events are not intended for propagation of an [Agreement](../model/terminology.md#agreement) state after a CN has entered a terminal state. It is considered an error for a [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) to send an event after the CN state machine has entered a terminal state. + +### 2.6 Contract Negotiation Termination Message + +| | | +|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer), [Provider](../model/terminology.md#provider) | +| **Resulting state** | `TERMINATED` | +| **Response** | [ACK](#31-ack---contract-negotiation) or [ERROR](#32-error---contract-negotiation-error) | +| **Schema** | [TTL Shape](./message/shape/contract-negotiation-termination-message-shape.ttl), [JSON Schema](./message/schema/contract-negotiation-termination-message-schema.json) | +| **Example** | [Message](./message/example/contract-negotiation-termination-message.json) | +| **Diagram(s)** | ![](./message/diagram/contract-negotiation-termination-message.png) | + +The Contract Negotiation Termination Message is sent by a [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) indicating it has cancelled the CN sequence. The message can be sent at any state of a CN without providing an explanation. Nevertheless, the sender may provide a description to help the receiver. +- The message must contain a `consumerPid` and a `providerPid`. +- If an error is received in response to the message, the sending party may choose to ignore the error. + +Note that a CN may be terminated for a variety of reasons, for example, an unrecoverable error was encountered or one of the parties no longer wishes to continue. A [Connector's](../model/terminology.md#connector--data-service-) operator may remove terminated CN resources after it has reached the terminated state. + +## 3 Response Types + +The `ACK` and `ERROR` response types are mapped onto a protocol such as HTTPS. A description of an error might be provided in protocol-dependent forms, e.g., for an HTTPS binding in the request or response body. + +### 3.1 ACK - Contract Negotiation + +| | | +|-----------------|-------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer), [Provider](../model/terminology.md#provider) | +| **Schema** | [TTL Shape](./message/shape/contract-negotiation-shape.ttl), [JSON Schema](./message/schema/contract-negotiation-schema.json) | +| **Example** | [Process](./message/example/contract-negotiation.json) | +| **Diagram(s)** | ![](./message/diagram/contract-negotiation.png) | + +The Contract Negotiation is an object returned by a [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) indicating a successful state change happened. + +### 3.2 ERROR - Contract Negotiation Error + +| | | +|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer), [Provider](../model/terminology.md#provider) | +| **Schema** | [TTL Shape](./message/shape/contract-negotiation-error-shape.ttl), [JSON Schema](./message/schema/contract-negotiation-error-schema.json) | +| **Example** | [Error](./message/example/contract-negotiation-error.json) | +| **Diagram(s)** | ![](./message/diagram/contract-negotiation-error.png) | + +The Contract Negotiation Error is an object returned by a [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) indicating an error has occurred. It does not cause a state transition. + +| Field | Type | Description | +|---------------|---------------|------------------------------------------------------------------------| +| `consumerPid` | UUID | The CN unique id on [Consumer](../model/terminology.md#consumer) side. | +| `providerPid` | UUID | The CN unique id on [Provider](../model/terminology.md#provider) side. | +| `code` | String | An optional implementation-specific error code. | +| `reason` | Array[object] | An optional array of implementation-specific error objects. | diff --git a/negotiation/contract.negotiation.state.machine.png b/negotiation/figures/contract.negotiation.state.machine.png similarity index 100% rename from negotiation/contract.negotiation.state.machine.png rename to negotiation/figures/contract.negotiation.state.machine.png diff --git a/negotiation/contract.negotiation.state.machine.puml b/negotiation/figures/contract.negotiation.state.machine.puml similarity index 100% rename from negotiation/contract.negotiation.state.machine.puml rename to negotiation/figures/contract.negotiation.state.machine.puml diff --git a/negotiation/message/diagram/contract-agreement-message.png b/negotiation/message/diagram/contract-agreement-message.png index 9f1f22b24b6a175706414e30bd924de3e5d3c3dc..11fb4935e148ee58f35ba6fa3997a096083e410d 100644 GIT binary patch literal 16997 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 literal 21096 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 Cl7N)} diff --git a/negotiation/message/diagram/contract-negotiation-error.puml b/negotiation/message/diagram/contract-negotiation-error.puml index 34f62322..30b4ee33 100644 --- a/negotiation/message/diagram/contract-negotiation-error.puml +++ b/negotiation/message/diagram/contract-negotiation-error.puml @@ -13,7 +13,6 @@ class "dspace:ContractNegotiationError" { dspace:consumerPid : String dspace:code : String dspace:reason : Array - dct:description : MultilanguageProperty } class "MultilanguageProperty" { diff --git a/negotiation/message/diagram/contract-negotiation-event-message.png b/negotiation/message/diagram/contract-negotiation-event-message.png index ac00613f18336e50c93c9b4e7a8e89bbbc4d3739..82d017f37267d461d1d4243933ebac1a93ad8e65 100644 GIT binary patch literal 14608 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 literal 11186 zcma)ibyQT{_dcRX3rMHZozf{IEg~I5Nem_3-OZ2=9STU7bb~YuQqnCkNT+oDF7GGS z`+nE2{yAsXU32d_JI>zEe$I|iR+7cWAj3dHLc*4plTt-OdK3lxEV1|K~ZJ`i_4O(~ospe8pH%p$FBcM`u!dIaGYtFQCTvW%9%(EsB%&(S4TH4z zNhweyxDH;x&?tIIq}_YeLQEA2%o-rCgLxzr9tSE`f4aR8jS|c@AnDs}n!}iv+Z`C+5a7 zk5eqlpFoVz{cCul-H-#O4)^v0E{X~8o&;%zV~2b%NjlQ1m_#w^@RW~^!YTiF)-MZx zj)fwXaHD{J5@BGe{QWZpl|z6G-q{P?-r%KA=n&Ixl$jCG;%NcyV;%xgh$N8&$(erN zsUzdOq7V%UUjKHINyraW^VU}d%Oz6nxD>q4qrv+4cMIsU>gl)$M!>z{M3+$iwXTM|>pFd^yZvET~y+xFMBCHHmgo!QmW#c{Rzfcd#1 zhc)AngKwoAb!#59ZhBEfCv#%c4yD4@=5wSOkGIF49Mr1NopTP0N<2#Tr_W1W%=RVI zX{C*ru@V;y6V6O77Fr#7Me$@5J8sb?uHg}jIZY|^{s@YODW}F7&zfrm`C73$v)wLb zY>V*yuaYNoSIo7ED9g2kMU71PV%0AV{)PWpKg9ljEzVtdR^8D`5a(SWo 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 diff --git a/negotiation/message/diagram/contract-negotiation-termination-message.puml b/negotiation/message/diagram/contract-negotiation-termination-message.puml index a85a4050..79297e3a 100644 --- a/negotiation/message/diagram/contract-negotiation-termination-message.puml +++ b/negotiation/message/diagram/contract-negotiation-termination-message.puml @@ -11,7 +11,7 @@ class "dspace:ContractNegotiationTerminationMessage" { @type : "dspace:ContractNegotiationTerminationMessage" dspace:providerPid : String dspace:consumerPid : String - dspace:code : Object + dspace:code : String dspace:reason : Array } diff --git a/negotiation/message/diagram/contract-negotiation.png b/negotiation/message/diagram/contract-negotiation.png index dafcefff7057585ad8c6d8896b0aad8812383536..64cec83286a9bbfca7e9875eeb70a541e1a31d14 100644 GIT binary patch literal 17301 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 cx?c`)X7r%LEaR2}S literal 23612 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

I5Jt%PUa3Y?9AG?Z zCP6cNOqkzs{d3B*LCb)aP~6hl7TvbH$>&|BW+~wUeIYj>gYcn$ybT)^mAj9%KJ+zF zt#<=-*LWTlCeZip870u&^C#k>h9(0ObsAVxKHY+) z9_)AaMWuv5W&vfB76mHJ21TQFeqj5)KEm2<$#}*DemC12D3@}y?d1})BOAApED%@A z71B%6cv<~*BtW?C^MAeU}`fIKBv2oLy~-tNCXt znb69hR38Vpcbzrw6-Lc7Vl&S#N7Jc|B0#-K{^2AzAP@zylj(2@u0L`IGX(l2nw{St_>O(-sH?MY1fAkeo&a7S*p8!pSjtstiQXcp|pFt ze;3EEu&8XB4G^1aY|bmo1g`)mF>2r2Z0<4Z0uTJg2hhyV9-NS?+TjU3J8p!hpZ8{2 z%gibYzNBC)|GR%)A^;veu$ zTO?G5i?#7W<=oDkjn(JusOR5`=G?X;zp$H*e40VS=;b+Dhyuv@W^)u!8U=%325+Er z>zyr2JUXKGk{frH-5dDg$ii;`Go9x}!<@ivu<#Bd`2KD8a;$jPwf=U1!EvhrcA ziZ6mPF@pDF_Wl@u+foSxT`BUo-dZozVZS`vOIEnTAVxnq2x|W1KrEI90VoUc5k<*D zK1g@#c&-TFkRvmU&7#gOt*=EnsLG+R>W-Q0pOnxwOSE(24@zP{9GQ}_+ific9xO5m zMbIf6&jFvle)Nxy%F`k7Ju;H}QVU@zU$`Vm!p_$mp>=%VSf8|m72!Y&2&|gKXehN^ zNTv2VDh;ZJc4kBbf0Xk;@&+TyzyUtI7XeUP43K6?ehr?-6WCD1%%zASP-)(BN(^bz z{ggMPY0@n`PE^gMB4~&1hq0AfC+MA%Cl%U1Nw|0Ku3oM+y6!7Wm5Jdvr!-XcIt5~X z_xS1IM$jrd* z$sM=vD{U=2{WAl}G z&Pp!qr^!7>UA+v@xJ|^8WVe7QEuP(+xlXS}^9haH$|6whHgp-PV=BgJ**_qV)tE7^ zY22kV(@IEdy>6!m?f)!|O5@G?=a`VE!*$ywYoOtG+a1==;PGLiqUt^omLBT-!e!_G ze0oM^i2w^qA)ScO7=BS+Ae_!NYA^hVcn)67Y;An>*frRtC&MRMv)a`Mti+X%zahHL zAZ~m(cz;P({UP7@d-wMN?}I^<-`*`(5wJmk^JX%T_HZN~FenBx#1c7=+ z^JRDZXGK)(Ax{=gNwPEI8|@Kd#eW<#Ey$liLZeGf@Fu--m3Ej}arvFbP5t#FFof(zO?Zc7WGTx~WcetBn6b22l8|K*BFs!#8zZVuqE5-0N+H|WMzp9*WS3-* zCcE=Y#^jvuoZtDK|K`Wc`##J4-1l`q_jTR7#F{xG9lwq~@ZbOJB_MkY0Y;2|3dgG> z?d2L5WrfYPB5*B_%vX*zg>1DSUFiD;5X`EBC{g zXpVfFehue)6gOA+J`JiP?XubIc21UB7=C&sc7nv!fiY4`BZ;V9P1E4H+YJjTw@3gb zTbvD0VDoBUNy9zcRDjUe{9*;XTYuM#n#UXUnmyfoRucbNeyNrZSU&Y61Lw)8GsU)Y zAmaw2bJ`Oc=BVq>O4XM?7#r)GZb8=^bB(Ak{pw=4h46%XnZArN9o1}dUcfj_v(NWu z^m0gR?s4S9*{k!mp-;wJ9T&=*e7fjyj?M*?Q+C%W*D_O-FNL4k`z_b@#StVtpS6Y2 zFx3uWMnW6yB4?C~PP-ML@c@H#da;;Rnlkd5brKZ_KXz)QKN^Z?ZU_<`5McR_+X#%=6E+wK zA~_3ECaHJ{WK$j^F#d8Y+lR+(&*`TK9rCcs&-WeJO{}a+ubKG1>vND~QTG;sY_FBw zD+JurO~?K)glNv#)FRh`$|~vWP-*GmpX%`rEh50@PIqgG27N6a`QVN`(#2wbcU^Dop2G4&@td9e3BN)_556|7&|f$}|v zE*fQ?IRAQ*2yhAicw~2H$+&?*0}4bJ=Y86dk&!XFZPp_{;PWa#V?!V02J~Vne!CjT zF2_XT;o;e5k(RP6@Y#eA#M><#2HT->YD4ulP|cZRXgg(_C2_^1s<@36SapTjg_!|j zvKa&OsZPhWhu{9`Xfhycsy)ZQ`j9$xEME)wO?~dU>Jv(KC5If}y9i+tR(1iY=q_BL ztdc2P$O|GSRpN}tT-T}3!aJnTf%_3(#kdf`eLtttX6o>2B71p7=eBlv{N(j{@t|h9 zPLd?Ois?+Zb_?fQ@~4JNIZOb3mN@$SKy&rk8`?mRWJ3Kad}bp3&ijxpn<1R$J-Ek> zXg(A_29lYnM)0pDFu<~t4cuKp;i)=nShuhDLdnMq$eUCPF-^Q$i{kOJk3M{_lo(R? z;5RUGAmJX!8UYs%pb1W;#OgfKEs*h1DcgFJ$jZ{g9@>GkIO3G}0KR>=G8=?D-weUlAlfOB?8 zY~vjUY-G=UXWyGKM}WNyCpX(97lI&eb6rup?O%UW1M*esgQ?>3%hztsT?wk|?EA_^ z?74gb`zE?`Y(E~O^sv*zR_e;V`B+@sLAW6+yy!tPVVSa9cTDOaYL^WwcqgP1IC+kP zrZ^T9U;)X7Cm9l&SJ93J|1c(7mF;`0!^q&Gjywo%s#;xseF7&~ebej*$MU?sjiz%x zOjsWMspGC}lh@VYU4^@;XsuBS5_qj5T%I%|V<2t=rGVm3)eVicw-gMSZDSkhucLPO z&L@CZJv+}C^R|rRmFb{i0W5iBo*NKrR7byvGy^#67;8Sv8eyOW``ydbnGVgl%+re z?suxI7TV7W~eMGNMj3}Db1_)CCbeWBqqXu%g$D3coI0p>H+1*vqX3bN8 zpq)Dj68~Tzfq_}>;@^S|j#=ncN|A)5DUQ#zjCj5oV}n_aOaT_s)Jw$n#GaOH$0#tH zP>f}KPt2kb;?5Bt$APs_0_OR99N?(5^%0BDyt8bIdk?vv@J!1?bS?Yv`$p7jrO90{ zJPNK~L-*&)OB&!lKU4VX*Z5&P%gRG|XBEMah* zT%L{h6cRbzg^%Uqut{of?xGA5xo3IyX-|3I zPHUVl%BJJwS>a<%1_)ZO*>}p@B=ctw8`Bl_Ffk&0K zdTQkAY*ykor6wG3C-$K_URs+cNOSTbgii0|X;R9e#9H9aHGR_hlHudR#u0x=I5qjS zjK7v^jWg5fm|+-^CD`BQwycby}Ic*b|7y0r*8q`y6@nW)*!n2E8D>v=+u8$p@u$%3w-ci>cElQqsR zef2*EP~lnjbT!Ta$zMF-LkcwX*(rvL+h0R{V_g=$jDy-gWfA0R^t#7tu zVm`BqCMvq!W?#8=lzsfpMBf)c3PbhFd)< zOaRWJ${DnVZR8cL9Gm#$FZsdxC4PK&-a@knW#B0ENZwQ*?;D^o+}bjX&s7 zlROoO*ehGycy|*H63J(s73B#TOA(y6tD5QsFU>!E9$Mf#2H^f4YYi>XzDx-Hq42Nt zB?{;7M>Jp;)}asI5l5QB^q1n}x3#u}o_4(hpVyu>x@~G?U*bEs{p^e4oUTONSzeJL z{?K>ccCS&3=eYkeUOg;H;`NsNZU~h$1ke-Jfy!-gTapxC2<{GC^zaIFD3a>|RmUK0 z@(&uUJ>;t&s6*ZgDOZVU;gPTAAgnQ0xr98S)DfIW1n#RW`6?(Z0|96(Oh5PvuZaC) z@3>JQn1CpRA0c<)LU);LTjK;AU_Rpx7PvIXhOvMTfWu)%he&=xv~4ie-sR1<51UP- zsTIN>1i}O{L|e|HZn2ykUU31c&P*WpnFVMi_ifU@cRY75wQXJ`I*0DJ7xt~ zna+*WnjLk{e+k4QJ1p+PHcqyd>?rk}-tYs4|9;xkxP-na=3CjnZS@giKthozt4VT; z37%2%djSZV_oqPbzdd3na?bqtlwAnAi_~^L?V6`tcdPHKa!9n%2_CtZU1rgVpWVYF zAI;v6cpR7EA=&+`V2!>RhD_8f}c-P7Lcu2?kqYSR{r50v}d&?HkvSJL>2!f(KKYCo;82c#S*%bsfH|2}` zCCG4XbCLT64QzKQk?Fv>mFnJXU#WMYc(`rLMF{}CLrPo+>~&X_DlT zQsYtQT49%48vZ(SrP$$6=*`%b zHsc<8_vI_)mm~0)>iZkKKKmzUIlNf3C+E-|4iicqOQ%2~?dKtF4wt0ut7y3&VFU6u z65U?Nhj8Rp`D?*Ty1Uw`V~0l<=eCg}8Z1HMi+FD%Xtds~sgu!>EOBbhyncm&B5|G( zX*@&#VuSVWS?0G7@@l*R0=)y@8t&b~D%$#!^K7%QeP04#@2)x2j(D{kf$=bc9AJ^-L5U-I-;{oF;9|(>x|EW+Ft7P${d2O30bfQ z0&-NXa`?(P++LBz%k*x_nWPNx9DTxLtqCp+&H#SKS3nPt)X>Pyrep|~km&8VXfU4p ze;>y8y)AF)gzt-d3K_5i$T6ICmFX4_&Bt3+da{fNBArG`E{rFG+0zGzM_54@T$FWB zQYmF_e`K~*cMA#Lf!diO=`QMhHC$^nucp=K3rXk<%F_fIrED}PtWKU4EKm!puqfy7(}SvMzgAwWg1u(|V*3ILH}YNl#=8Ong4@e$ z_78Ra0ynQ5aI%F!$_~1G5WUvt!4=yXNBdFkXG5A#aCv&7Sg6Vvy4*`lxcUD=oHb<| z5DhS;+E=Cf>)x*HBRD-*14Bd&>*KQ6$VYUNp+<<`X~M?ZYQ3YUVN$we_SrgJ)BX;j z7m8$uFqx!c*5@^m?SFpUs>lH33(z&OdfgJ;E2&|%5-LRnim^f863|D`%5&|X0VkO? zhX1FMwC20%=LIgTFu=kUMx_Zu%%ao{;(w}Y1$$IqoHdY5D!%$RPS^H-=X8A&-~+v8 zTMSWlEgC64Z0gn;-k9GiZ%iZ8I2gQlxLJ2O)a@5TTR|>$q(kG9k5G?;G$@jhB^PH0 zyFlmauf+?UJ3Pk9M9$wf4e(A^)j037)QyyuGx#69bssISC+&A%x|KH24%&Eg95OUB J$klU>_$POP>U{tJ diff --git a/negotiation/message/diagram/contract-negotiation.puml b/negotiation/message/diagram/contract-negotiation.puml index cd9b5932..a28176af 100644 --- a/negotiation/message/diagram/contract-negotiation.puml +++ b/negotiation/message/diagram/contract-negotiation.puml @@ -11,7 +11,6 @@ class "dspace:ContractNegotiation" { @type : "dspace:ContractNegotiation" dspace:providerPid : String dspace:consumerPid : String - dspace:state : dspace:NegotiationState } enum dspace:NegotiationState { diff --git a/negotiation/message/diagram/contract-offer-message.png b/negotiation/message/diagram/contract-offer-message.png index 8d0300573c1854dc63c3691cde4b2f7251a32413..eed5f07c5f98d2fbaf61cd7843277de6fa3b7220 100644 GIT binary patch literal 16169 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 P>%5E=EQxGhGWidvh}eeM@r;CQd>a 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 LB~&b^9J}RGeu2)TsuUF_<9YE4 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 literal 17276 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 OfuyLMNQscH_x}Mj=I`tP diff --git a/negotiation/message/diagram/contract-request-message.puml b/negotiation/message/diagram/contract-request-message.puml index fd3d0b95..9aeb4fe8 100644 --- a/negotiation/message/diagram/contract-request-message.puml +++ b/negotiation/message/diagram/contract-request-message.puml @@ -11,7 +11,6 @@ class "dspace:ContractRequestMessage" { @type : dspace:ContractRequestMessage dspace:providerPid : String dspace:consumerPid : String - dspace:offer : odrl:Offer dspace:callbackAddress : String } @@ -19,6 +18,7 @@ class odrl:Offer { @type : odrl:Offer, @id: String odrl:target : xsd:anyURI + ... } "dspace:ContractRequestMessage" "1" *-- "1" "odrl:Offer" : "dspace:offer" diff --git a/negotiation/message/diagram/contract-request-message_initial.png b/negotiation/message/diagram/contract-request-message_initial.png index 6cde3262f61fdd4bac906968cf211cb58f613555..510170afe8bc65400eccc9614740d60c52a02884 100644 GIT binary patch literal 20712 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

McxYNQQ-z8;-{hjWC*0hb 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 Y>^|Ef#Upza3_|6wu{>;X*9;Z+AF6d3sQ>@~ diff --git a/negotiation/message/diagram/contract-request-message_initial.puml b/negotiation/message/diagram/contract-request-message_initial.puml index 66357d6e..f211b272 100644 --- a/negotiation/message/diagram/contract-request-message_initial.puml +++ b/negotiation/message/diagram/contract-request-message_initial.puml @@ -1,4 +1,4 @@ -@startuml "contract-request-message" +@startuml "contract-request-message_initial" !pragma layout smetana !include ../../../common/style/diagram.styles.puml @@ -10,7 +10,6 @@ class "dspace:ContractRequestMessage" { @context : "https://w3id.org/dspace/v0.8/context.json" @type : dspace:ContractRequestMessage dspace:consumerPid : String - dspace:offer : odrl:Offer dspace:callbackAddress : String } @@ -18,8 +17,9 @@ class odrl:Offer { @type : odrl:Offer, @id: String odrl:target : xsd:anyURI + ... } -"dspace:ContractRequestMessage" "1" *-- "1" "odrl:Offer" : "dspace:offer" +"dspace:ContractRequestMessage" "1" *-- "*" "odrl:Offer" : "dspace:offer" @enduml diff --git a/negotiation/message/contract-agreement-message.json b/negotiation/message/example/contract-agreement-message.json similarity index 100% rename from negotiation/message/contract-agreement-message.json rename to negotiation/message/example/contract-agreement-message.json diff --git a/negotiation/message/contract-agreement-verification-message.json b/negotiation/message/example/contract-agreement-verification-message.json similarity index 100% rename from negotiation/message/contract-agreement-verification-message.json rename to negotiation/message/example/contract-agreement-verification-message.json diff --git a/negotiation/message/contract-negotiation-error.json b/negotiation/message/example/contract-negotiation-error.json similarity index 100% rename from negotiation/message/contract-negotiation-error.json rename to negotiation/message/example/contract-negotiation-error.json diff --git a/negotiation/message/contract-negotiation-event-message.json b/negotiation/message/example/contract-negotiation-event-message.json similarity index 100% rename from negotiation/message/contract-negotiation-event-message.json rename to negotiation/message/example/contract-negotiation-event-message.json diff --git a/negotiation/message/contract-negotiation-termination-message.json b/negotiation/message/example/contract-negotiation-termination-message.json similarity index 100% rename from negotiation/message/contract-negotiation-termination-message.json rename to negotiation/message/example/contract-negotiation-termination-message.json diff --git a/negotiation/message/contract-negotiation.json b/negotiation/message/example/contract-negotiation.json similarity index 100% rename from negotiation/message/contract-negotiation.json rename to negotiation/message/example/contract-negotiation.json diff --git a/negotiation/message/contract-offer-message.json b/negotiation/message/example/contract-offer-message.json similarity index 100% rename from negotiation/message/contract-offer-message.json rename to negotiation/message/example/contract-offer-message.json diff --git a/negotiation/message/contract-offer-message_initial.json b/negotiation/message/example/contract-offer-message_initial.json similarity index 100% rename from negotiation/message/contract-offer-message_initial.json rename to negotiation/message/example/contract-offer-message_initial.json diff --git a/negotiation/message/contract-request-message.json b/negotiation/message/example/contract-request-message.json similarity index 100% rename from negotiation/message/contract-request-message.json rename to negotiation/message/example/contract-request-message.json diff --git a/negotiation/message/contract-request-message_initial.json b/negotiation/message/example/contract-request-message_initial.json similarity index 100% rename from negotiation/message/contract-request-message_initial.json rename to negotiation/message/example/contract-request-message_initial.json diff --git a/negotiation/message/schema/contract-schema.json b/negotiation/message/schema/contract-schema.json index adb09900..ffeda39f 100644 --- a/negotiation/message/schema/contract-schema.json +++ b/negotiation/message/schema/contract-schema.json @@ -100,10 +100,7 @@ ] } ], - "required": [ - "@type", - "dspace:providerId" - ] + "required": [ "@type", "dspace:providerId" ] }, "#/definitions/Offer": { "type": "object", @@ -133,8 +130,8 @@ "type": "string" }, "dspace:timestamp": { - "type": "string", - "pattern": "-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?" + "type": "string", + "pattern": "-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?" } } }, diff --git a/negotiation/message/shape/contract-negotiation-termination-message-shape.ttl b/negotiation/message/shape/contract-negotiation-termination-message-shape.ttl index f3ad5f71..7b3d6032 100644 --- a/negotiation/message/shape/contract-negotiation-termination-message-shape.ttl +++ b/negotiation/message/shape/contract-negotiation-termination-message-shape.ttl @@ -52,6 +52,8 @@ dspace_shapes:ContractNegotiationTerminationMessageShape a sh:PropertyShape ; sh:path dspace:code ; sh:datatype xsd:string ; + sh:severity sh:Violation ; + sh:message " (ContractNegotiationTerminationMessageShape): An dspace:code property must point to an xsd:string value."@en ; ] ; sh:property [ a sh:PropertyShape ; diff --git a/releases/v0.8/negotiation/message/contract-offer-message_initial.json b/releases/v0.8/negotiation/message/contract-offer-message_initial.json index fc704cde..0bda4919 100644 --- a/releases/v0.8/negotiation/message/contract-offer-message_initial.json +++ b/releases/v0.8/negotiation/message/contract-offer-message_initial.json @@ -2,6 +2,7 @@ "@context": "https://w3id.org/dspace/v0.8/context.json", "@type": "dspace:ContractOfferMessage", "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:dataset": "urn:uuid:3dd1add8-4d2d-569e-d634-8394a8836a88", "dspace:offer": { "@type": "odrl:Offer", "@id": "urn:uuid:d526561f-528e-4d5a-ae12-9a9dd9b7a518", diff --git a/releases/v0.8/negotiation/message/contract-request-message_initial.json b/releases/v0.8/negotiation/message/contract-request-message_initial.json index f4966599..54626058 100644 --- a/releases/v0.8/negotiation/message/contract-request-message_initial.json +++ b/releases/v0.8/negotiation/message/contract-request-message_initial.json @@ -1,6 +1,7 @@ { "@context": "https://w3id.org/dspace/v0.8/context.json", "@type": "dspace:ContractRequestMessage", + "dspace:dataset": "urn:uuid:3dd1add8-4d2d-569e-d634-8394a8836a88", "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", "dspace:offer": { "@type": "odrl:Offer", diff --git a/resources/list_common.md b/resources/list_common.md index ec200336..e67aa248 100644 --- a/resources/list_common.md +++ b/resources/list_common.md @@ -1,7 +1,8 @@ # Common * [Context (json)](./../common/schema/context.json) -* [Definitions Scheme (json)](./../common/schema/definitions.schema.json) -* [Message Shape (ttl)](./../common/shape/message-shape.ttl) -* [ODRL Shape (ttl)](./../common/shape/odrl-shapes.ttl) -* [Diagram Style (puml)](./../common/style/diagram.styles.puml) \ No newline at end of file +* [Definitions schema (json)](./../common/schema/definitions.schema.json) +* [Version schema (json)](./../common/schema/version-schema.json) +* [ODRL shape (ttl)](./../common/shape/odrl-shapes.ttl) +* [Version shape (ttl)](./../common/shape/odrl-shapes.ttl) +* [Diagram styles (puml)](./../common/style/diagram.styles.puml) \ No newline at end of file diff --git a/resources/list_messages.md b/resources/list_messages.md index b0010041..5847325c 100644 --- a/resources/list_messages.md +++ b/resources/list_messages.md @@ -1,27 +1,27 @@ # Messages ## Catalog -* [Catalog (json)](./../catalog/message/catalog.json) -* [Catalog error message (json)](./../catalog/message/catalog-error.json) -* [Catalog request message (json)](./../catalog/message/catalog-request-message.json) -* [Dataset (json)](./../catalog/message/dataset.json) -* [Dataset request message (json)](./../catalog/message/dataset-request-message.json) +* [Catalog (json)](./../catalog/message/example/catalog.json) +* [Catalog error message (json)](./../catalog/message/example/catalog-error.json) +* [Catalog request message (json)](./../catalog/message/example/catalog-request-message.json) +* [Dataset (json)](./../catalog/message/example/dataset.json) +* [Dataset request message (json)](./../catalog/message/example/dataset-request-message.json) ## Contract Negotiation -* [Contract agreement message (json)](./../negotiation/message/contract-agreement-message.json) -* [Contract agreement verification message (json)](./../negotiation/message/contract-agreement-verification-message.json) -* [Contract negotiation (json)](./../negotiation/message/contract-negotiation.json) -* [Contract negotiation error (json)](./../negotiation/message/contract-negotiation-error.json) -* [Contract negotiation event message (json)](./../negotiation/message/contract-negotiation-event-message.json) -* [Contract negotiation termination message (json)](./../negotiation/message/contract-negotiation-termination-message.json) -* [Contract offer message (json)](./../negotiation/message/contract-offer-message.json) -* [Contract request message (json)](./../negotiation/message/contract-request-message.json) +* [Contract agreement message (json)](./../negotiation/message/example/contract-agreement-message.json) +* [Contract agreement verification message (json)](./../negotiation/message/example/contract-agreement-verification-message.json) +* [Contract negotiation (json)](./../negotiation/message/example/contract-negotiation.json) +* [Contract negotiation error (json)](./../negotiation/message/example/contract-negotiation-error.json) +* [Contract negotiation event message (json)](./../negotiation/message/example/contract-negotiation-event-message.json) +* [Contract negotiation termination message (json)](./../negotiation/message/example/contract-negotiation-termination-message.json) +* [Contract offer message (json)](./../negotiation/message/example/contract-offer-message.json) +* [Contract request message (json)](./../negotiation/message/example/contract-request-message.json) ## Transfer Process -* [Transfer completion message (json)](./../transfer/message/transfer-completion-message.json) -* [Transfer error (json)](./../transfer/message/transfer-error.json) -* [Transfer prcess (json)](./../transfer/message/transfer-process.json) -* [Transfer request message (json)](./../transfer/message/transfer-request-message.json) -* [Transfer start message (json)](./../transfer/message/transfer-start-message.json) -* [Transfer suspension message (json)](./../transfer/message/transfer-suspension-message.json) -* [Transfer termination message (json)](./../transfer/message/transfer-termination-message.json) \ No newline at end of file +* [Transfer completion message (json)](./../transfer/message/example/transfer-completion-message.json) +* [Transfer error (json)](./../transfer/message/example/transfer-error.json) +* [Transfer prcess (json)](./../transfer/message/example/transfer-process.json) +* [Transfer request message (json)](./../transfer/message/example/transfer-request-message.json) +* [Transfer start message (json)](./../transfer/message/example/transfer-start-message.json) +* [Transfer suspension message (json)](./../transfer/message/example/transfer-suspension-message.json) +* [Transfer termination message (json)](./../transfer/message/example/transfer-termination-message.json) \ No newline at end of file diff --git a/resources/list_schemes.md b/resources/list_schemes.md index 15286c1c..d8d9d2e2 100644 --- a/resources/list_schemes.md +++ b/resources/list_schemes.md @@ -3,10 +3,10 @@ ## Catalog * [Catalog error schema (json)](./../catalog/message/schema/catalog-error-schema.json) -* [Catalog message schema (json)](./../catalog/message/schema/catalog-message-schema.json) * [Catalog request message schema (json)](./../catalog/message/schema/catalog-request-message-schema.json) * [Catalog schema (json)](./../catalog/message/schema/catalog-schema.json) * [Dataset request message schema (json)](./../catalog/message/schema/dataset-request-message-schema.json) +* [Dataset schema (json)](./../catalog/message/schema/dataset-schema.json) ## Contract Negotiation * [Contract agreement schema (json)](./../negotiation/message/schema/contract-agreement-message-schema.json) diff --git a/resources/list_shapes.md b/resources/list_shapes.md index eab9d5de..8c174e2d 100644 --- a/resources/list_shapes.md +++ b/resources/list_shapes.md @@ -2,10 +2,9 @@ ## Catalog * [Catalog error shape (ttl)](./../catalog/message/shape/catalog-error-shape.ttl) -* [Catalog message shape (ttl)](./../catalog/message/shape/catalog-message-shape.ttl) * [Catalog request message shape (ttl)](./../catalog/message/shape/catalog-request-message-shape.ttl) -* [Catalog shape (ttl)](./../catalog/message/shape/catalog-shape.ttl) * [Dataset request message shape (ttl)](./../catalog/message/shape/dataset-request-message-shape.ttl) +* [DCAT shapes (ttl)](./../catalog/message/shape/dcat-shapes.ttl) ## Contract Negotiation * [Contract agreement shape (ttl)](./../negotiation/message/shape/contract-agreement-message-shape.ttl) diff --git a/transfer/pull-transfer-process.png b/transfer/figures/pull-transfer-process.png similarity index 100% rename from transfer/pull-transfer-process.png rename to transfer/figures/pull-transfer-process.png diff --git a/transfer/pull-transfer-process.puml b/transfer/figures/pull-transfer-process.puml similarity index 100% rename from transfer/pull-transfer-process.puml rename to transfer/figures/pull-transfer-process.puml diff --git a/transfer/push-transfer-process.png b/transfer/figures/push-transfer-process.png similarity index 100% rename from transfer/push-transfer-process.png rename to transfer/figures/push-transfer-process.png diff --git a/transfer/push-transfer-process.puml b/transfer/figures/push-transfer-process.puml similarity index 100% rename from transfer/push-transfer-process.puml rename to transfer/figures/push-transfer-process.puml diff --git a/transfer/transfer-process-state-machine.png b/transfer/figures/transfer-process-state-machine.png similarity index 100% rename from transfer/transfer-process-state-machine.png rename to transfer/figures/transfer-process-state-machine.png diff --git a/transfer/transfer-process-state-machine.puml b/transfer/figures/transfer-process-state-machine.puml similarity index 100% rename from transfer/transfer-process-state-machine.puml rename to transfer/figures/transfer-process-state-machine.puml diff --git a/transfer/message/diagram/transfer-process.png b/transfer/message/diagram/transfer-process.png index 99bf8c01a41e11226927892ba4c7b4bf094c2b83..b0f9fa73c17be7c13e3f4633f872cbf3fe6c4d8f 100644 GIT binary patch literal 20553 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 literal 21431 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 . -shapes: +dspace_shapes: a owl:Ontology ; sh:declare [ sh:prefix "rdf" ; @@ -25,9 +25,10 @@ shapes: ] ; . -shapes:TransferCompletionMessageShape +dspace_shapes:TransferCompletionMessageShape a sh:NodeShape ; sh:targetClass dspace:TransferCompletionMessage ; + rdfs:subClassOf dspace_shapes:MessageShape ; sh:property [ a sh:PropertyShape ; diff --git a/transfer/message/shape/transfer-error-shape.ttl b/transfer/message/shape/transfer-error-shape.ttl index f7e831ec..188c8c54 100644 --- a/transfer/message/shape/transfer-error-shape.ttl +++ b/transfer/message/shape/transfer-error-shape.ttl @@ -13,7 +13,7 @@ @prefix sh: . -shapes: +dspace_shapes: a owl:Ontology ; sh:declare [ sh:prefix "rdf" ; @@ -25,10 +25,9 @@ shapes: ] ; . -shapes:TransferErrorShape +dspace_shapes:TransferErrorShape a sh:NodeShape ; sh:targetClass dspace:TransferError ; - rdfs:subClassOf dspace:MessageShape ; sh:property [ a sh:PropertyShape ; @@ -56,15 +55,12 @@ shapes:TransferErrorShape sh:datatype xsd:string ; sh:maxCount 1 ; sh:severity sh:Violation ; - sh:message " (TransferErrorShape): An dspace:code property must point from an dspace:TransferError to exactly one dspace:TerminationCode."@en ; + sh:message " (TransferErrorShape): An dspace:code property must point to exactly one xsd:string field."@en ; ] ; sh:property [ a sh:PropertyShape ; sh:path dspace:reason ; - sh:datatype rdf:langString ; - sh:severity sh:Violation ; - sh:message " (TransferErrorShape): An dspace:reason property must point to rdf:langString values."@en ; ] ; . \ No newline at end of file diff --git a/transfer/message/shape/transfer-process-shape.ttl b/transfer/message/shape/transfer-process-shape.ttl index 50036dfe..4d1d0ab3 100644 --- a/transfer/message/shape/transfer-process-shape.ttl +++ b/transfer/message/shape/transfer-process-shape.ttl @@ -13,7 +13,7 @@ @prefix sh: . -shapes: +dspace_shapes: a owl:Ontology ; sh:declare [ sh:prefix "rdf" ; @@ -25,9 +25,10 @@ shapes: ] ; . -shapes:TransferProcessShape +dspace_shapes:TransferProcessShape a sh:NodeShape ; sh:targetClass dspace:TransferProcess ; + rdfs:subClassOf dspace_shapes:MessageShape ; sh:property [ a sh:PropertyShape ; diff --git a/transfer/message/shape/transfer-request-message-shape.ttl b/transfer/message/shape/transfer-request-message-shape.ttl index 236fd192..6cf5a8af 100644 --- a/transfer/message/shape/transfer-request-message-shape.ttl +++ b/transfer/message/shape/transfer-request-message-shape.ttl @@ -13,7 +13,7 @@ @prefix sh: . -shapes: +dspace_shapes: a owl:Ontology ; sh:declare [ sh:prefix "rdf" ; @@ -25,10 +25,11 @@ shapes: ] ; . -shapes:TransferRequestMessageShape +dspace_shapes:TransferRequestMessageShape a sh:NodeShape ; sh:targetClass dspace:TransferRequestMessage ; + sh:property [ a sh:PropertyShape ; sh:path dspace:agreementId ; @@ -46,7 +47,7 @@ shapes:TransferRequestMessageShape sh:severity sh:Violation ; sh:maxCount 1 ; sh:minCount 1 ; - sh:message " (TransferRequestMessageShape): A dct:format property must point exactly one entity."@en ; + sh:message " (TransferRequestMessageShape): A dct:format property must point exactly one xsd:string field."@en ; ] ; sh:property [ @@ -78,4 +79,4 @@ shapes:TransferRequestMessageShape sh:minCount 1 ; sh:message " (TransferRequestMessageShape): An dspace:consumerPid property must point exactly one xsd:string field."@en ; ] ; -. \ No newline at end of file +. diff --git a/transfer/message/shape/transfer-start-message-shape.ttl b/transfer/message/shape/transfer-start-message-shape.ttl index 7455d3e9..53b1b3d1 100644 --- a/transfer/message/shape/transfer-start-message-shape.ttl +++ b/transfer/message/shape/transfer-start-message-shape.ttl @@ -13,7 +13,7 @@ @prefix sh: . -shapes: +dspace_shapes: a owl:Ontology ; sh:declare [ sh:prefix "rdf" ; @@ -25,10 +25,9 @@ shapes: ] ; . -shapes:TransferStartMessageShape +dspace_shapes:TransferStartMessageShape a sh:NodeShape ; sh:targetClass dspace:TransferStartMessage ; - rdfs:subClassOf dspace:MessageShape ; sh:property [ a sh:PropertyShape ; @@ -55,9 +54,9 @@ shapes:TransferStartMessageShape sh:path dspace:dataAddress ; sh:class dspace:DataAddress ; sh:maxCount 1 ; - sh:minCount 1 ; + sh:minCount 0 ; sh:severity sh:Violation ; - sh:message " (TransferStartMessageShape): An dspace:dataAddress property must point from an dspace:TransferStartMessage to exactly one dspace:DataAddress field."@en ; + sh:message " (TransferStartMessageShape): An dspace:dataAddress property must point from an dspace:TransferStartMessage to a dspace:DataAddress object."@en ; ] ; . \ No newline at end of file diff --git a/transfer/message/shape/transfer-suspension-message-shape.ttl b/transfer/message/shape/transfer-suspension-message-shape.ttl index 35615cd5..0867189a 100644 --- a/transfer/message/shape/transfer-suspension-message-shape.ttl +++ b/transfer/message/shape/transfer-suspension-message-shape.ttl @@ -13,7 +13,7 @@ @prefix sh: . -shapes: +dspace_shapes: a owl:Ontology ; sh:declare [ sh:prefix "rdf" ; @@ -25,10 +25,9 @@ shapes: ] ; . -shapes:TransferSuspensionMessageShape +dspace_shapes:TransferSuspensionMessageShape a sh:NodeShape ; sh:targetClass dspace:TransferSuspensionMessage ; - rdfs:subClassOf dspace:MessageShape ; sh:property [ a sh:PropertyShape ; @@ -50,4 +49,12 @@ shapes:TransferSuspensionMessageShape sh:message " (TransferSuspensionMessageShape): An dspace:consumerPid property must point exactly one xsd:string field."@en ; ] ; + sh:property [ + a sh:PropertyShape ; + sh:path dspace:code ; + sh:datatype xsd:string ; + sh:severity sh:Violation ; + sh:message " (TransferSuspensionMessageShape): An dspace:code property must point to an xsd:string value."@en ; + ] ; + . \ No newline at end of file diff --git a/transfer/message/shape/transfer-termination-message-shape.ttl b/transfer/message/shape/transfer-termination-message-shape.ttl index 432e07ff..1e80a40f 100644 --- a/transfer/message/shape/transfer-termination-message-shape.ttl +++ b/transfer/message/shape/transfer-termination-message-shape.ttl @@ -13,7 +13,7 @@ @prefix sh: . -shapes: +dspace_shapes: a owl:Ontology ; sh:declare [ sh:prefix "rdf" ; @@ -25,10 +25,9 @@ shapes: ] ; . -shapes:TransferTerminationMessageShape +dspace_shapes:TransferTerminationMessageShape a sh:NodeShape ; sh:targetClass dspace:TransferTerminationMessage ; - rdfs:subClassOf dspace:MessageShape ; sh:property [ a sh:PropertyShape ; @@ -57,7 +56,12 @@ shapes:TransferTerminationMessageShape sh:maxCount 1 ; sh:minCount 0 ; sh:severity sh:Violation ; - sh:message " (TransferTerminationMessageShape): An dspace:code property must point from an dspace:TransferTerminationMessage to exactly one entity."@en ; + sh:message " (TransferTerminationMessageShape): An dspace:code property must point from an dspace:TransferTerminationMessage to exactly one xsd:string value."@en ; ] ; + + sh:property [ + a sh:PropertyShape ; + sh:path dspace:reason ; + ] . \ No newline at end of file diff --git a/transfer/message/transfer-start-message.json b/transfer/message/transfer-start-message.json deleted file mode 100644 index 04a6874b..00000000 --- a/transfer/message/transfer-start-message.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "@context": "https://w3id.org/dspace/v0.8/context.json", - "@type": "dspace:TransferStartMessage", - "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", - "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", - "dspace:dataAddress": "https://......" -} diff --git a/transfer/transfer.process.binding.https.md b/transfer/transfer.process.binding.https.md index a1d7f5e0..6e0ef6d5 100644 --- a/transfer/transfer.process.binding.https.md +++ b/transfer/transfer.process.binding.https.md @@ -1,81 +1,109 @@ # Transfer Process HTTPS Binding +This specification defines a RESTful API over HTTPS for the [Transfer Process Protocol](./transfer.process.protocol.md). + +* [1 Introduction](#1-introduction) + * [1.1 Prerequisites](#11-prerequisites) + * [1.2 Transfer Error](#12-transfer-error) + * [1.2.1 State Transition Errors](#121-state-transition-errors) + * [1.2.2 Object Not Found](#122-object-not-found) + * [1.2.3 Unauthorized Access](#123-unauthorized-access) + * [1.3 Authorization](#13-authorization) +* [2 Provider Path Bindings](#2-provider-path-bindings) + * [2.1 The `transfers` Endpoint _(Provider-side)_](#21-the-transfers-endpoint-provider-side) + * [2.2 The `transfers/request` Endpoint _(Provider-side)_](#22-the-transfersrequest-endpoint-provider-side) + * [2.3 The `transfers/:providerPid/start` Endpoint _(Provider-side)_](#23-the-transfersproviderpidstart-endpoint-provider-side) + * [2.4 The `transfers/:providerPid/completion` Endpoint _(Provider-side)_](#24-the-transfersproviderpidcompletion-endpoint-provider-side) + * [2.5 The `transfers/:providerPid/termination` Endpoint _(Provider-side)_](#25-the-transfersproviderpidtermination-endpoint-provider-side) + * [2.6 The `transfers/:providerPid/suspension` Endpoint _(Provider-side)_](#26-the-transfersproviderpidsuspension-endpoint-provider-side) +* [3 Consumer Callback Path Bindings](#3-consumer-callback-path-bindings) + * [3.1 Prerequisites](#31-prerequisites) + * [3.2 The `transfers/:consumerPid/start` Endpoint _(Consumer-side)_](#32-the-transfersconsumerpidstart-endpoint-consumer-side) + * [3.3 The `transfers/:consumerPid/completion` Endpoint _(Consumer-side)_](#33-the-transfersconsumerpidcompletion-endpoint-consumer-side) + * [3.4 The `transfers/:consumerPid/termination` Endpoint _(Consumer-side)_](#34-the-transfersconsumerpidtermination-endpoint-consumer-side) + * [3.5 The `transfers/:consumerPid/suspension` Endpoint _(Consumer-side)_](#35-the-transfersconsumerpidsuspension-endpoint-consumer-side) + ## 1 Introduction -This specification defines a RESTful API over HTTPS for the [Transfer Process Protocol](./transfer.process.protocol.md). +### 1.1 Prerequisites -The OpenAPI definitions for this specification can be accessed [here](TBD). +1. The `` notation indicates the base URL for a [Connector](../model/terminology.md#connector--data-service-) endpoint. For example, if the scheme is `https` and the full hostname is `connector.example.com`, the URL `/transfers/request` will map to `https://connector.example.com/transfers/request`. -## 2 Provider Path Bindings +2. All request and response messages must use the `application/json` media type. Derived media types, e.g., `application/ld+json` may be exposed in addition. -### 2.1 Prerequisites +### 1.2 Transfer Error -1. The `` notation indicates the base URL for a [Connector](../model/terminology.md#connector--data-service-) endpoint. For example, if the base [Connector](../model/terminology.md#connector--data-service-) URL is `connector.example.com`, the - URL `https:///transfers/request` will map to `https//connector.example.com/transfers/request`. +In the event of a client request error, the [Connector](../model/terminology.md#connector--data-service-) must return an appropriate HTTP 4xx client error code. If an error body is returned it must be a [Transfer Error](./transfer.process.protocol.md#32-error---transfer-error). -2. All request and response messages must use the `application/json` media type. +#### 1.2.1 State Transition Errors -### 2.2 TransferError +If a client or [Provider](../model/terminology.md#provider) makes a request that results in an invalid [Transfer Process](../model/terminology.md#transfer-process) (TP) state transition as defined by the Transfer Process Protocol, it must return an HTTP code 400 (Bad Request) with a [Transfer Error](./transfer.process.protocol.md#32-error---transfer-error) in the response body. -In the event of a client request error, the [Connector](../model/terminology.md#connector--data-service-) must return an appropriate HTTP 4xxx client error code. If an error body is returned it must be -a [TransferError](./message/transfer-error.json) with the following properties: +#### 1.2.2 Object Not Found -| Field | Type | Description | -|-------------|---------------|-------------------------------------------------------------| -| consumerPid | UUID | The [Transfer Process](../model/terminology.md#transfer-process) unique id on consumer side. | -| providerPid | UUID | The [Transfer Process](../model/terminology.md#transfer-process) unique id on provider side. | -| code | string | An optional implementation-specific error code. | -| reasons | Array[object] | An optional array of implementation-specific error objects. | +If the TP does not exist, the [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) must return an HTTP 404 (Not Found) response. -### 2.2.1 State transition errors +#### 1.2.3 Unauthorized Access -If a client or provider [Connector](../model/terminology.md#connector--data-service-) makes a request that results in an invalid [Transfer Process](../model/terminology.md#transfer-process) state transition as defined by the Transfer Process Protocol, it must return -an HTTP code 400 (Bad Request) with an `TransferError` in the response body. +If the client is not authorized, the [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) must return an HTTP 404 (Not Found) response. -### 2.3 Authorization +### 1.3 Authorization -All requests should use the `Authorization` header to include an authorization token. The semantics of such tokens are not part of this specification. The `Authorization` HTTP -header is optional if the [Connector](../model/terminology.md#connector--data-service-) does not require authorization. +All requests should use the `Authorization` header to include an authorization token. The semantics of such tokens are not part of this specification. The `Authorization` HTTP header is optional if the [Connector](../model/terminology.md#connector--data-service-) does not require authorization. -### 2.4 The provider `transfers` resource +## 2 Provider Path Bindings -#### 2.4.1 GET +| Endpoint | Method | Description | +|:--------------------------------------------------------|:-------|:---------------------------| +| https://provider.com/transfers/:providerPid | `GET` | Section [2.1.1](#211-get) | +| https://provider.com/transfers/request | `POST` | Section [2.2.1](#221-post) | +| https://provider.com/transfers/:providerPid/start | `POST` | Section [2.3.1](#231-post) | +| https://provider.com/transfers/:providerPid/completion | `POST` | Section [2.4.1](#241-post) | +| https://provider.com/transfers/:providerPid/termination | `POST` | Section [2.5.1](#251-post) | +| https://provider.com/transfers/:providerPid/suspension | `POST` | Section [2.6.1](#261-post) | -``` -GET https://connector.provider.com/transfers/:providerPid +### 2.1 The `transfers` Endpoint _(Provider-side)_ -Authorization: ... +#### 2.1.1 GET -``` +##### Request + +A CN can be accessed by a [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) sending a GET request to `transfers/:providerPid`: -If the [Transfer Process](./transfer.process.protocol.md#ack---transferprocess) is found and the client is authorized, the provider [Connector](../model/terminology.md#connector--data-service-) must return an HTTP 200 (OK) response and a body containing -the [TransferProcess](./message/transfer-process.json): +```http request +GET https://provider.com/transfers/:providerPid +Authorization: ... ``` + +##### Response + +If the TP is found and the client is authorized, the [Provider](../model/terminology.md#provider) must return an HTTP 200 (OK) response and a body containing the [Transfer Process](./transfer.process.protocol.md#31-ack---transfer-process): + +```json { "@context": "https://w3id.org/dspace/v0.8/context.json", "@type": "dspace:TransferProcess", "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", - "dspace:state": "REQUESTED" + "dspace:state": "dspace:REQUESTED" } ``` Predefined states are: `REQUESTED`, `STARTED`, `SUSPENDED`, `REQUESTED`, `COMPLETED`, and `TERMINATED`. -If the [Transfer Process](./transfer.process.protocol.md#ack---transferprocess) does not exist or the client is not authorized, the provider [Connector](../model/terminology.md#connector--data-service-) must return an HTTP 404 (Not Found) response. +### 2.2 The `transfers/request` Endpoint _(Provider-side)_ -### 2.5 The provider `transfers/request` resource +#### 2.2.1 POST -#### 2.5.1 POST +##### Request -A [Transfer Process](../model/terminology.md#transfer-process) is started and placed in the `REQUESTED` state when a consumer POSTs a [TransferRequestMessage](./transfer.process.protocol.md#1-transferrequestmessage) -to `transfers/request`: +A TP is started and placed in the `REQUESTED` state when a [Consumer](../model/terminology.md#consumer) POSTs a [Transfer Request Message](./transfer.process.protocol.md#21-transfer-request-message) to `transfers/request`: - ``` - POST https://connector.provider.com/transfers/request + ```http request +POST https://provider.com/transfers/request - Authorization: ... +Authorization: ... { "@context": "https://w3id.org/dspace/v0.8/context.json", @@ -99,86 +127,273 @@ to `transfers/request`: } ``` -The `callbackAddress` property specifies the base endpoint `URL` where the client receives messages associated with the [Transfer Process](../model/terminology.md#transfer-process). Support for the `HTTPS` scheme is -required. Implementations may optionally support other URL schemes. +- The `callbackAddress` property specifies the base endpoint `URL` where the client receives messages associated with the TP. Support for the `HTTPS` scheme is required. Implementations may optionally support other URL schemes. -Callback messages will be sent to paths under the base URL as described by this specification. Note that provider [Connectors](../model/terminology.md#connector--data-service-) should properly handle the cases where a trailing `/` -is included with or absent from the `callbackAddress` when resolving full URL. +- Callback messages will be sent to paths under the base URL as described by this specification. Note that [Providers](../model/terminology.md#provider) should properly handle the cases where a trailing `/` is included with or absent from the `callbackAddress` when resolving full URL. -The provider [Connector](../model/terminology.md#connector--data-service-) must return an HTTP 201 (Created) response with a body containing -the [TransferProcess](./message/transfer-process.json) message: +##### Response - ``` +The [Provider](../model/terminology.md#provider) must return an HTTP 201 (Created) response with a body containing the [Transfer Process](./transfer.process.protocol.md#31-ack---transfer-process): + +```json { "@context": "https://w3id.org/dspace/v0.8/context.json", "@type": "dspace:TransferProcess", "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", - "dspace:state": "REQUESTED" + "dspace:state": "dspace:REQUESTED" } +``` +### 2.3 The `transfers/:providerPid/start` Endpoint _(Provider-side)_ + +#### 2.3.1 POST + +##### Request + +The [Consumer](../model/terminology.md#consumer) can POST a [Transfer Start Message](./transfer.process.protocol.md#22-transfer-start-message) to attempt to start a TP after it has been suspended: + + ```http request +POST https://provider.com/transfers/:providerPid/start + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:TransferStartMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:dataAddress": { + "@type": "dspace:DataAddress", + "dspace:endpointType": "https://w3id.org/idsa/v4.1/HTTP", + "dspace:endpoint": "http://example.com", + "dspace:endpointProperties": [ + { + "@type": "dspace:EndpointProperty", + "dspace:name": "Authorization", + "dspace:value": "Bearer TOKEN-ABCDEFG" + } + ] + } +} ``` -### 2.6 The provider `transfers/:providerPid/start` resource +##### Response -#### 2.6.1 POST +If the TP's state is successfully transitioned, the [Provider](../model/terminology.md#provider) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. + +### 2.4 The `transfers/:providerPid/completion` Endpoint _(Provider-side)_ + +#### 2.4.1 POST + +##### Request + +The [Consumer](../model/terminology.md#consumer) can POST a [Transfer Completion Message](./transfer.process.protocol.md#24-transfer-completion-message) to complete a TP: + + ```http request +POST https://provider.com/transfers/:providerPid/completion + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:TransferCompletionMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833" +} + ``` + +##### Response + +If the TP's state is successfully transitioned, the [Provider](../model/terminology.md#provider) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. -The consumer [Connector](../model/terminology.md#connector--data-service-) can POST a [TransferStartMessage](./message/transfer-start-message.json) to attempt to start a [Transfer Process](../model/terminology.md#transfer-process) after it has been suspended. If the [Transfer -Process's](transfer.process.protocol.md#ack---transferprocess) state is successfully transitioned, the provider must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. +### 2.5 The `transfers/:providerPid/termination` Endpoint _(Provider-side)_ + +#### 2.5.1 POST -### 2.7 The provider `transfers/:providerPid/completion` resource +##### Request -#### 2.7.1 POST +The [Consumer](../model/terminology.md#consumer) can POST a [Transfer Termination Message](./transfer.process.protocol.md#25-transfer-termination-message) to terminate a TP: -The consumer [Connector](../model/terminology.md#connector--data-service-) can POST a [TransferCompletionMessage](./message/transfer-completion-message.json) to complete a [Transfer Process](../model/terminology.md#transfer-process). If the [Transfer -Process's](transfer.process.protocol.md#ack---transferprocess) state is successfully transitioned, the provider must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. + ```http request +POST https://provider.com/transfers/:providerPid/termination + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:TransferTerminationMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:code": "...", + "dspace:reason": [ + ... + ] +} + ``` -### 2.8 The provider `transfers/:providerPid/termination` resource +##### Response -#### 2.8.1 POST +If the TP's state is successfully transitioned, the [Provider](../model/terminology.md#provider) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. -The consumer [Connector](../model/terminology.md#connector--data-service-) can POST a [TransferTerminationMessage](./message/transfer-termination-message.json) to terminate a [Transfer Process](../model/terminology.md#transfer-process). If the [Transfer -Process's](transfer.process.protocol.md#ack---transferprocess) state is successfully transitioned, the provider must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. +### 2.6 The `transfers/:providerPid/suspension` Endpoint _(Provider-side)_ -### 2.9 The provider `transfers/:providerPid/suspension` resource +#### 2.6.1 POST -#### 2.9.1 POST +##### Request -The consumer [Connector](../model/terminology.md#connector--data-service-) can POST a [TransferSuspensionMessage](./message/transfer-suspension-message.json) to suspend a [Transfer Process](../model/terminology.md#transfer-process). If the [Transfer -Process's](transfer.process.protocol.md#ack---transferprocess) state is successfully transitioned, the provider must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. +The [Consumer](../model/terminology.md#consumer) can POST a [Transfer Suspension Message](./transfer.process.protocol.md#23-transfer-suspension-message) to suspend a TP: + + ```http request +POST https://provider.com/transfers/:providerPid/suspension + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:TransferSuspensionMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:code": "...", + "dspace:reason": [ + ... + ] +} + ``` + +##### Response + +If the TP's state is successfully transitioned, the [Provider](../model/terminology.md#provider) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. ## 3 Consumer Callback Path Bindings +| Endpoint | Method | Description | +|:------------------------------------------------------------------|:-------|:---------------------------| +| https://consumer.com/:callback/transfers/:consumerPid/start | `POST` | Section [3.2.1](#321-post) | +| https://consumer.com/:callback/transfers/:consumerPid/completion | `POST` | Section [3.3.1](#331-post) | +| https://consumer.com/:callback/transfers/:consumerPid/termination | `POST` | Section [3.4.1](#341-post) | +| https://consumer.com/:callback/transfers/:consumerPid/suspension | `POST` | Section [3.5.1](#351-post) | + ### 3.1 Prerequisites -All callback paths are relative to the `callbackAddress` base URL specified in the `TransferRequestMessage` that initiated a [Transfer Process](../model/terminology.md#transfer-process). For example, if -the `callbackAddress` is specified as `https://connector.consumer/callback` and a callback path binding is `transfers/:consumerPid/start`, the resolved URL will -be `https://connector.consumer.com/callback/transfers/:consumerPid/start`. +All callback paths are relative to the `callbackAddress` base URL specified in the [Transfer Request Message](./transfer.process.protocol.md#21-transfer-request-message) that initiated a TP. For example, if the `callbackAddress` is specified as `https://consumer.com/callback` and a callback path binding is `transfers/:consumerPid/start`, the resolved URL will be `https://consumer.com/callback/transfers/:consumerPid/start`. -### 3.2 The consumer `transfers/:consumerPid/start` resource +### 3.2 The `transfers/:consumerPid/start` Endpoint _(Consumer-side)_ #### 3.2.1 POST -The provider [Connector](../model/terminology.md#connector--data-service-) can POST a [TransferStartMessage](./message/transfer-start-message.json) to indicate the start of a [Transfer Process](../model/terminology.md#transfer-process). If the [Transfer -Process's](transfer.process.protocol.md#ack---transferprocess) state is successfully transitioned, the consumer must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. +##### Request + +The [Provider](../model/terminology.md#provider) can POST a [Transfer Start Message](./transfer.process.protocol.md#22-transfer-start-message) to indicate the start of a TP: + + ```http request +POST https://consumer.com/:callback/transfers/:consumerPid/start + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:TransferStartMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:dataAddress": { + "@type": "dspace:DataAddress", + "dspace:endpointType": "https://w3id.org/idsa/v4.1/HTTP", + "dspace:endpoint": "http://example.com", + "dspace:endpointProperties": [ + { + "@type": "dspace:EndpointProperty", + "dspace:name": "Authorization", + "dspace:value": "Bearer TOKEN-ABCDEFG" + } + ] + } +} + ``` + +##### Response + +If the TP's state is successfully transitioned, the [Consumer](../model/terminology.md#consumer) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. -### 3.3 The consumer `transfers/:consumerPid/completion` resource +### 3.3 The `transfers/:consumerPid/completion` Endpoint _(Consumer-side)_ #### 3.3.1 POST -The provider [Connector](../model/terminology.md#connector--data-service-) can POST a [TransferCompletionMessage](./message/transfer-completion-message.json) to complete a [Transfer Process](../model/terminology.md#transfer-process). If the [Transfer -Process's](transfer.process.protocol.md#ack---transferprocess) state is successfully transitioned, the consumer must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. +##### Request + +The [Provider](../model/terminology.md#provider) can POST a [Transfer Completion Message](./transfer.process.protocol.md#24-transfer-completion-message) to complete a TP: + + ```http request +POST https://consumer.com/:callback/transfers/:consumerPid/completion + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:TransferCompletionMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833" +} + ``` + +##### Response -### 3.4 The consumer `transfers/:consumerPid/termination` resource +If the TP's state is successfully transitioned, the [Consumer](../model/terminology.md#consumer) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. + +### 3.4 The `transfers/:consumerPid/termination` Endpoint _(Consumer-side)_ #### 3.4.1 POST -The provider [Connector](../model/terminology.md#connector--data-service-) can POST a [TransferTerminationMessage](./message/transfer-termination-message.json) to terminate a [Transfer Process](../model/terminology.md#transfer-process). If the [Transfer -Process's](transfer.process.protocol.md#ack---transferprocess) state is successfully transitioned, the consumer must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. +##### Request + +The [Provider](../model/terminology.md#provider) can POST a [Transfer Termination Message](./transfer.process.protocol.md#25-transfer-termination-message) to terminate a TP: + + ```http request +POST https://consumer.com/:callback/transfers/:consumerPid/termination + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:TransferTerminationMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:code": "...", + "dspace:reason": [ + ... + ] +} + ``` + +##### Response + +If the TP's state is successfully transitioned, the [Consumer](../model/terminology.md#consumer) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. -### 3.5 The consumer `transfers/:consumerPid/suspension` resource +### 3.5 The `transfers/:consumerPid/suspension` Endpoint _(Consumer-side)_ #### 3.5.1 POST -The provider [Connector](../model/terminology.md#connector--data-service-) can POST a [TransferSuspensionMessage](./message/transfer-suspension-message.json) to suspend a [Transfer Process](../model/terminology.md#transfer-process). If the [Transfer -Process's](transfer.process.protocol.md#ack---transferprocess) state is successfully transitioned, the consumer must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. +##### Request + +The [Provider](../model/terminology.md#provider) can POST a [Transfer Suspension Message](./transfer.process.protocol.md#23-transfer-suspension-message) to suspend a TP: + + ```http request +POST https://consumer.com/:callback/transfers/:consumerPid/suspension + +Authorization: ... + +{ + "@context": "https://w3id.org/dspace/v0.8/context.json", + "@type": "dspace:TransferSuspensionMessage", + "dspace:providerPid": "urn:uuid:a343fcbf-99fc-4ce8-8e9b-148c97605aab", + "dspace:consumerPid": "urn:uuid:32541fe6-c580-409e-85a8-8a9a32fbe833", + "dspace:code": "...", + "dspace:reason": [ + ... + ] +} + ``` + +##### Response + +If the TP's state is successfully transitioned, the [Consumer](../model/terminology.md#consumer) must return HTTP code 200 (OK). The response body is not specified and clients are not required to process it. diff --git a/transfer/transfer.process.protocol.md b/transfer/transfer.process.protocol.md index 7d0ae142..0fa4e7bb 100644 --- a/transfer/transfer.process.protocol.md +++ b/transfer/transfer.process.protocol.md @@ -1,213 +1,188 @@ # Transfer Process Protocol -## Introduction: Terms +This document outlines the key elements of the [Transfer Process Protocol](../model/terminology.md#transfer-process-protocol). The used terms are described [here](../model/terminology.md). -This document outlines the key elements of the Transfer Process Protocol. The following terms are used: +* [1 Introduction](#1-introduction) + * [1.1 Control and Data Planes](#11-control-and-data-planes) + * [1.2 Dataset Transfer Types](#12-dataset-transfer-types) + * [1.2.1 Push Transfer](#121-push-transfer) + * [1.2.2 Pull Transfer](#122-pull-transfer) + * [1.2.3 Finite and Non-Finite Data](#123-finite-and-non-finite-data) + * [1.3 States](#13-states) + * [1.4 State Machine](#14-state-machine) +* [2 Message Types](#2-message-types) + * [2.1 Transfer Request Message](#21-transfer-request-message) + * [2.2 Transfer Start Message](#22-transfer-start-message) + * [2.3 Transfer Suspension Message](#23-transfer-suspension-message) + * [2.4 Transfer Completion Message](#24-transfer-completion-message) + * [2.5 Transfer Termination Message](#25-transfer-termination-message) +* [3 Response Types](#3-response-types) + * [3.1 ACK - Transfer Process](#31-ack---transfer-process) + * [3.2 ERROR - Transfer Error](#32-error---transfer-error) -- A _**message type**_ defines the structure of a _message_. -- A _**message**_ is an instantiation of a _message type_. -- The _**transfer process protocol**_ is the set of allowable message type sequences and is defined as a state machine (TP-SM). -- A _**transfer process (TP)**_ is an instantiation of the CNP-TP. -- A _**provider**_ is a [Participant Agent](../model/terminology.md#participant-agent) that offers a [Dataset](../model/terminology.md#dataset). -- A _**consumer**_ is a [Participant Agent](../model/terminology.md#participant-agent) that requests access to an offered [Dataset](../model/terminology.md#dataset). -- A _**Connector**_ is a [Participant Agent](../model/terminology.md#participant-agent) that produces [Agreements](../model/terminology.md#agreement) and manages [Dataset](../model/terminology.md#dataset) sharing. -- A _**Dataset**_ is data or a service a provider grants access to. -- An _**Agreement**_ is a result of a [Contract Negotiation](../negotiation/contract.negotiation.protocol.md) and is associated with _exactly one_ [Dataset](../model/terminology.md#dataset). +## 1 Introduction -## Transfer Process Protocol +A [Transfer Process](../model/terminology.md#transfer-process) (TP) involves two parties, a [Provider](../model/terminology.md#provider) that offers one or more [Datasets](../model/terminology.md#dataset) under a [Usage Policy](../model/terminology.md#policy) and [Consumer](../model/terminology.md#consumer) that requests [Datasets](../model/terminology.md#dataset). A TP progresses through a series of states, which are controlled by the [Provider](../model/terminology.md#provider) and [Consumer](../model/terminology.md#consumer) using messages. A TP transitions to another state as a result of an exchanged message. -A [Transfer Process](../model/terminology.md#transfer-process) (TP) involves two parties, a _provider_ that offers one or more [Datasets](../model/terminology.md#dataset) under a [Usage Policy](../model/terminology.md#policy) and _consumer_ that requests [Datasets](../model/terminology.md#dataset). A TP progresses through -a series of states, which are tracked by the provider and consumer using messages. A TP transitions to a state in response to a message from the counter-party. +A TP is managed by a [Connector](../model/terminology.md#connector--data-service-). The [Connector](../model/terminology.md#connector--data-service-) serves as a coordinating technical entity that receives counter-party messages and manages its local state of the TP. It may as well also operate the hosting of the [Datasets](../model/terminology.md#dataset), or control their offering through another system. -### Connector Components: Control and Data Planes +### 1.1 Control and Data Planes +A TP is managed by a [Connector](../model/terminology.md#connector--data-service-). The [Connector](../model/terminology.md#connector--data-service-) consists of two logical components, a _Control Plane_ and a _Data Plane_. The Control Plane serves as a coordinating layer that receives counter-party messages and manages the TP state. The Data Plane performs the actual transfer of [Datasets](../model/terminology.md#dataset) using a wire protocol. Both participants run Control and Data Planes. -A TP is managed by a [Connector](../model/terminology.md#connector--data-service-). The [Connector](../model/terminology.md#connector--data-service-) consists of two logical components, a `Control Plane` and a `Data Plane`. The control plane serves as a coordinating layer that -receives counter-party messages and manages the TP state. The data plane performs the actual transfer of data using a wire protocol. Both [Participants](../model/terminology.md#participant) run control and data -planes. +It is important to note that the Control and Data Planes are logical constructs. Implementations may choose to deploy both components within a single process or across heterogeneous clusters. -It is important to note that the control and data planes are logical constructs. Implementations may choose to deploy both components within a single process or across -heterogeneous clusters. - -### Dataset Transfer Types +### 1.2 Dataset Transfer Types [Dataset](../model/terminology.md#dataset) transfers are characterized as `push` or `pull` transfers and it's data is either `finite` or `non-finite`. This section describes the difference between these types. -#### Push Transfer +#### 1.2.1 Push Transfer -A push transfer is when the provider data plane initiates sending of data to a consumer endpoint. For example, after the consumer has issued an `TransferRequestMessage,` the -provider begins data transmission to an endpoint specified by the consumer using an agreed-upon wire protocol. +A push transfer is when the [Provider's](../model/terminology.md#provider) Data Plane initiates sending of data to a [Consumer](../model/terminology.md#consumer) endpoint. For example, after the [Consumer](../model/terminology.md#consumer) has issued a [Transfer Request Message](#21-transfer-request-message), the [Provider](../model/terminology.md#provider) begins data transmission to an endpoint specified by the [Consumer](../model/terminology.md#consumer) using an agreed-upon wire protocol. -![](./push-transfer-process.png) +![](./figures/push-transfer-process.png) -#### Pull Transfer +#### 1.2.2 Pull Transfer -A pull transfer is when the consumer data plane initiates retrieval of data from a provider endpoint. For example, after the provider has issued an `TransferProcessStart,` -message, the consumer can request the data from the provider-specified endpoint. +A pull transfer is when the [Consumer](../model/terminology.md#consumer) Data Plane initiates retrieval of data from a [Provider](../model/terminology.md#provider) endpoint. For example, after the [Provider](../model/terminology.md#provider) has issued a [Transfer Start Message](#22-transfer-start-message), the [Consumer](../model/terminology.md#consumer) can request the data from the [Provider](../model/terminology.md#provider)-specified endpoint. -![](./pull-transfer-process.png) +![](./figures/pull-transfer-process.png) -#### Finite and Non-Finite Data +#### 1.2.3 Finite and Non-Finite Data -Data may be `finite` or `non-finite.` Finite data is data that is defined by a finite set, for example, machine learning data or images. After finite data transmission has -finished, the [Transfer Process](../model/terminology.md#transfer-process) is completed. Non-finite data is data that is defined by an infinite set or has no specified end, for example streams or an API endpoint. With -non-finite data, a TP will continue indefinitely until either the consumer or provider explicitly terminates the transmission. +Data may be `finite` or `non-finite.` Finite data is data that is defined by a finite set, for example, machine learning data or images. After finite data transmission has finished, the TP is completed. Non-finite data is data that is defined by an infinite set or has no specified end, for example streams or an API endpoint. With non-finite data, a TP will continue indefinitely until either the [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) explicitly terminates the transmission. -### Transfer Process States +### 1.3 States The TP states are: -- **REQUESTED** - A [Dataset](../model/terminology.md#dataset) has been requested under an [Agreement](../model/terminology.md#agreement) by the consumer and the provider has sent an ACK response. -- **STARTED** - The [Dataset](../model/terminology.md#dataset) is available for access by the consumer or the provider has begun pushing the data to the consumer endpoint. -- **COMPLETED** - The transfer has been completed by either the consumer or the provider. -- **SUSPENDED** - The transfer has been suspended by the consumer or the provider. -- **TERMINATED** - The [Transfer Process](../model/terminology.md#transfer-process) has been terminated by the consumer or the provider. - -### Transfer Process State Machine - -![](./transfer-process-state-machine.png) - -## Message Types - -### 1. TransferRequestMessage +- **REQUESTED**: A [Dataset](../model/terminology.md#dataset) has been requested under an [Agreement](../model/terminology.md#agreement) by the [Consumer](../model/terminology.md#consumer) and the [Provider](../model/terminology.md#provider) has sent an ACK response. +- **STARTED**: The [Dataset](../model/terminology.md#dataset) is available for access by the [Consumer](../model/terminology.md#consumer) or the [Provider](../model/terminology.md#provider) has begun pushing the data to the [Consumer](../model/terminology.md#consumer) endpoint. +- **COMPLETED**: The transfer has been completed by either the [Consumer](../model/terminology.md#consumer) or the [Provider](../model/terminology.md#provider). +- **SUSPENDED**: The transfer has been suspended by the [Consumer](../model/terminology.md#consumer) or the [Provider](../model/terminology.md#provider). +- **TERMINATED**: The [Transfer Process](../model/terminology.md#transfer-process) has been terminated by the [Consumer](../model/terminology.md#consumer) or the [Provider](../model/terminology.md#provider). -![](./message/diagram/transfer-request-message.png) +### 1.4 State Machine -**Sent by**: Consumer +The TP state machine is represented in the following diagram: -**Resulting State**: REQUESTED +![](./figures/transfer-process-state-machine.png) -**Example**: [TransferRequestMessage](./message/transfer-request-message.json) +Transitions marked with `C` indicate a message sent by the [Consumer](../model/terminology.md#consumer), transitions marked with `P` indicate a [Provider](../model/terminology.md#provider) message. Terminal states are final; the state machine may not transition to another state. -**Response**: [ACK or ERROR.](#response-types) +## 2 Message Types -**Schema**: [TransferRequestMessage](./message/shape/transfer-request-message-shape.ttl), [TransferRequestMessage JSON Schema](./message/schema/transfer-request-message-schema.json), [TransferProcess Shape](./message/shape/transfer-process-shape.ttl) and the [TransferProcess JSON Schema](./message/schema/transfer-process-schema.json) +All messages must be serialized in JSON-LD compact form as specified in the [JSON-LD 1.1 Processing Algorithms and API](https://www.w3.org/TR/json-ld11-api/#compaction-algorithms). Further Dataspace specifications may define additional optional serialization formats. -#### Description +### 2.1 Transfer Request Message -The `TransferRequestMessage` is sent by a consumer to initiate a [Transfer Process](../model/terminology.md#transfer-process). +| | | +|---------------------|---------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer) | +| **Resulting state** | `REQUESTED` | +| **Response** | [ACK](#31-ack---transfer-process) or [ERROR](#32-error---transfer-error) | +| **Schema** | [TTL Shape](./message/shape/transfer-request-message-shape.ttl), [JSON Schema](./message/schema/transfer-request-message-schema.json) | +| **Example** | [Message](./message/example/transfer-request-message.json) | +| **Diagram(s)** | ![](./message/diagram/transfer-request-message.png) | -#### Notes +The Transfer Request Message is sent by a [Consumer](../model/terminology.md#consumer) to initiate a TP. -- The `consumerPid` property refers to the transfer id on consumer side. -- The `agreementId` property refers to an existing [Agreement](../model/terminology.md#agreement) between the consumer and provider. -- The `dct:format` property is a format specified by a `Distribution` for the [Dataset](../model/terminology.md#dataset) associated with the [Agreement](../model/terminology.md#agreement). This is generally obtained from the provider [Catalog](../model/terminology.md#catalog). +- The `consumerPid` property refers to the transfer id of the [Consumer](../model/terminology.md#consumer) side. +- The `agreementId` property refers to an existing contract [Agreement](../model/terminology.md#agreement) between the [Consumer](../model/terminology.md#consumer) and [Provider](../model/terminology.md#provider). +- The `dct:format` property is a format specified by a `Distribution` for the [Dataset](../model/terminology.md#dataset) associated with the [Agreement](../model/terminology.md#agreement). This is generally obtained from the [Provider's](../model/terminology.md#provider) [Catalog](../model/terminology.md#catalog). - The `dataAddress` property must only be provided if the `dct:format` requires a push transfer. -- `callbackAddress` is a URI indicating where messages to the consumer should be sent. If the address is not understood, the provider MUST return an UNRECOVERABLE error. - -Providers should implement idempotent behavior for `TransferRequestMessage` based on the value of `dspace:consumerPid`. Providers may choose to implement idempotent behavior for a certain period of -time. For example, until a [Transfer Process](../model/terminology.md#transfer-process) has completed and been archived after an implementation-specific expiration period. If a request for the given `dspace:consumerPid` has already been -received *and* the same consumer sent the original message, the provider should respond with an appropriate `DataAddressMessage`. - -Once a [Transfer Process](../model/terminology.md#transfer-process) have been created, all associated callback messages must include a `dspace:consumerPid` and `dspace:providerPid`. - -Providers must include a `dspace:consumerPid` and a `dspace:providerPid` property in the `TransferProcess`. - -- The `dataAddress` contains a transport-specific endpoint address for pushing the data. It may include a temporary authorization via the `dspace:endpointProperties` property. -- Valid states of a `TransferProcess` are `REQUESTED`, `STARTED`, `TERMINATED`, `COMPLETED`, and `SUSPENDED`. - - -### 2. TransferStartMessage - -![](./message/diagram/transfer-start-message.png) - -**Sent by**: Provider - -**Resulting State**: STARTED - -**Example**: [TransferStartMessage](./message/transfer-start-message.json) - -**Response**: [ACK or ERROR.](#response-types) - -**Schema**: [TransferStartMessageShape](./message/shape/transfer-start-message-shape.ttl) and the [TransferStartMessage JSON Schema](./message/schema/transfer-start-message-schema.json) - - -#### Description - -The `TransferStartMessage` is sent by the provider to indicate the [Dataset](../model/terminology.md#dataset) transfer has been initiated. - -#### Notes - -- The `dataAddress` is only provided if the current transfer is a pull transfer and contains a transport-specific endpoint address for obtaining the [Dataset](../model/terminology.md#dataset). It may include a temporary authorization via the `dspace:endpointProperties` property. - -### 3. TransferSuspensionMessage - -![](./message/diagram/transfer-suspension-message.png) - -**Sent by**: Provider or Consumer - -**Resulting State**: SUSPENDED - -**Example**: [TransferSuspensionMessage](./message/transfer-suspension-message.json) - -**Response**: [ACK or ERROR.](#response-types) - -**Schema**: [TransferSuspensionMessageShape](./message/shape/transfer-suspension-message-shape.ttl) and the [TransferSuspensionMessage JSON Schema](./message/schema/transfer-suspension-message-schema.json) - -#### Description - -The `TransferSuspensionMessage` is sent by the provider or consumer when either of them needs to temporarily suspend the [Transfer Process](../model/terminology.md#transfer-process). - -### 4. TransferCompletionMessage - -![](./message/diagram/transfer-completion-message.png) - -**Sent by**: Provider or Consumer - -**Resulting State**: COMPLETED - -**Example**: [TransferCompletionMessage](./message/transfer-completion-message.json) - -**Response**: [ACK or ERROR.](#response-types) - -**Schema**: [TransferCompletionMessageShape](./message/shape/transfer-completion-message-shape.ttl) and the [TransferCompletionMessage JSON Schema](./message/schema/transfer-completion-message-schema.json) +- The `dataAddress` contains a transport-specific endpoint address for pushing the data. It may include a temporary authorization via the `endpointProperties` property. +- `callbackAddress` is a URI indicating where messages to the [Consumer](../model/terminology.md#consumer) should be sent. If the address is not understood, the [Provider](../model/terminology.md#provider) MUST return an UNRECOVERABLE error. -#### Description +Note that [Providers](../model/terminology.md#provider) should implement idempotent behavior for [Transfer Request Messages](#21-transfer-request-message) based on the value of `consumerPid`. [Providers](../model/terminology.md#provider) may choose to implement idempotent behavior for a certain period of time. For example, until a TP has completed and been archived after an implementation-specific expiration period, repeated sending of [Transfer Request Messages](#21-transfer-request-message) does not change the state of the TP. If a request for the given `consumerPid` has already been received *and* the same [Consumer](../model/terminology.md#consumer) sent the original message again, the [Provider](../model/terminology.md#provider) should respond with an appropriate [Transfer Start Message](#22-transfer-start-message). -The `TransferCompletionMessage` is sent by the provider or consumer when a [Dataset](../model/terminology.md#dataset) transfer has completed. Note that some data plane implementations may optimize completion -notification by performing it as part of its wire protocol. In those cases, a `TransferCompletionMessage` message does not need to be sent. +- Once a TP has been created, all associated callback messages must include a `consumerPid` and `providerPid`. +- [Providers](../model/terminology.md#provider) must include a `consumerPid` and a `providerPid` property in the object. +- Valid states of a TP are `REQUESTED`, `STARTED`, `TERMINATED`, `COMPLETED`, and `SUSPENDED`. -### 5. TransferTerminationMessage -![](./message/diagram/transfer-termination-message.png) +### 2.2 Transfer Start Message -**Sent by**: Provider or Consumer +| | | +|---------------------|-----------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Provider](../model/terminology.md#provider) | +| **Resulting state** | `STARTED` | +| **Response** | [ACK](#31-ack---transfer-process) or [ERROR](#32-error---transfer-error) | +| **Schema** | [TTL Shape](./message/shape/transfer-start-message-shape.ttl), [JSON Schema](./message/schema/transfer-start-message-schema.json) | +| **Example** | [Message](./message/example/transfer-start-message.json) | +| **Diagram(s)** | ![](./message/diagram/transfer-start-message.png) | -**Resulting State**: TERMINATED +The Transfer Start Message is sent by the [Provider](../model/terminology.md#provider) to indicate the data transfer has been initiated. -**Example**: [TransferTerminationMessage](./message/transfer-termination-message.json) +- The `dataAddress` is only provided if the current transfer is a pull transfer and contains a transport-specific endpoint address for obtaining the data. It may include a temporary authorization via the `endpointProperties` property. -**Response**: [ACK or ERROR.](#response-types) +### 2.3 Transfer Suspension Message -**Schema**: [TransferTerminationMessageShape](./message/shape/transfer-termination-message-shape.ttl) and the [TransferTerminationMessage JSON Schema](./message/schema/transfer-termination-message-schema.json) +| | | +|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer), [Provider](../model/terminology.md#provider) | +| **Resulting state** | `SUSPENDED` | +| **Response** | [ACK](#31-ack---transfer-process) or [ERROR](#32-error---transfer-error) | +| **Schema** | [TTL Shape](./message/shape/transfer-suspension-message-shape.ttl), [JSON Schema](./message/schema/transfer-suspension-message-schema.json) | +| **Example** | [Message](./message/example/transfer-suspension-message.json) | +| **Diagram(s)** | ![](./message/diagram/transfer-suspension-message.png) | -#### Description +The Transfer Suspension Message is sent by the [Provider](../model/terminology.md#provider) or [Consumer](../model/terminology.md#consumer) when either of them needs to temporarily suspend the TP. -The `TransferTerminationMessage` is sent by the provider or consumer at any point except a terminal state to indicate the [Transfer Process](../model/terminology.md#transfer-process) should stop and be placed in -a terminal state. If the termination was due to an error, the sender may include error information. +### 2.4 Transfer Completion Message +| | | +|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer), [Provider](../model/terminology.md#provider) | +| **Resulting state** | `COMPLETED` | +| **Response** | [ACK](#31-ack---transfer-process) or [ERROR](#32-error---transfer-error) | +| **Schema** | [TTL Shape](./message/shape/transfer-completion-message-shape.ttl), [JSON Schema](./message/schema/transfer-completion-message-schema.json) | +| **Example** | [Message](./message/example/transfer-completion-message.json) | +| **Diagram(s)** | ![](./message/diagram/transfer-completion-message.png) | -## Response Types +The Transfer Completion Message is sent by the [Provider](../model/terminology.md#provider) or [Consumer](../model/terminology.md#consumer) when a data transfer has completed. Note that some [Connector](../model/terminology.md#connector--data-service-) implementations may optimize completion notification by performing it as part of their wire protocol. In those cases, a Transfer Completion Message does not need to be sent. -### ACK - TransferProcess +### 2.5 Transfer Termination Message -![](./message/diagram/transfer-process.png) +| | | +|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer), [Provider](../model/terminology.md#provider) | +| **Resulting state** | `TERMINATED` | +| **Response** | [ACK](#31-ack---transfer-process) or [ERROR](#32-error---transfer-error) | +| **Schema** | [TTL Shape](./message/shape/transfer-termination-message-shape.ttl), [JSON Schema](./message/schema/transfer-termination-message-schema.json) | +| **Example** | [Message](./message/example/transfer-termination-message.json) | +| **Diagram(s)** | ![](./message/diagram/transfer-termination-message.png) | -**Example**: [TransferProcess](./message/transfer-process.json) +The Transfer Termination Message is sent by the [Provider](../model/terminology.md#provider) or [Consumer](../model/terminology.md#consumer) at any point except a terminal state to indicate the TP should stop and be placed in a terminal state. If the termination was due to an error, the sender may include error information. -**Schema**: [TransferProcessShape](./message/shape/transfer-process-shape.ttl) and the [TransferProcess JSON Schema](./message/schema/transfer-process-schema.json) +## 3 Response Types -#### Description +The `ACK` and `ERROR` response types are mapped onto a protocol such as HTTPS. A description of an error might be provided in protocol-dependent forms, e.g., for an HTTPS binding in the request or response body. -The `TransferProcess` is an object returned by a consumer or provider indicating a successful state change happened. +### 3.1 ACK - Transfer Process -### ERROR - TransferError +| | | +|-----------------|-----------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer), [Provider](../model/terminology.md#provider) | +| **Schema** | [TTL Shape](./message/shape/transfer-process-shape.ttl), [JSON Schema](./message/schema/transfer-process-schema.json) | +| **Example** | [Process](./message/example/transfer-process.json) | +| **Diagram(s)** | ![](./message/diagram/transfer-process.png) | -![](./message/diagram/transfer-error.png) +The Transfer Process is an object returned by a [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) indicating a successful state change happened. -**Example**: [TransferError](./message/transfer-error.json) +### 3.2 ERROR - Transfer Error -**Schema**: [TransferErrorShape](./message/shape/transfer-error-shape.ttl) and the [TransferError JSON Schema](./message/schema/transfer-error-schema.json) +| | | +|-----------------|-------------------------------------------------------------------------------------------------------------------| +| **Sent by** | [Consumer](../model/terminology.md#consumer), [Provider](../model/terminology.md#provider) | +| **Schema** | [TTL Shape](./message/shape/transfer-error-shape.ttl), [JSON Schema](./message/schema/transfer-error-schema.json) | +| **Example** | [Process](./message/example/transfer-error.json) | +| **Diagram(s)** | ![](./message/diagram/transfer-error.png) | -#### Description +The Transfer Error is an object returned by a [Consumer](../model/terminology.md#consumer) or [Provider](../model/terminology.md#provider) indicating an error has occurred. It does not cause a state transition. -The `TransferError` is an object returned by a consumer or provider indicating an error has occurred. It does not cause a state transition. +| Field | Type | Description | +|---------------|---------------|------------------------------------------------------------------------| +| `consumerPid` | UUID | The TF unique id on [Consumer](../model/terminology.md#consumer) side. | +| `providerPid` | UUID | The TF unique id on [Provider](../model/terminology.md#provider) side. | +| `code` | string | An optional implementation-specific error code. | +| `reasons` | Array[object] | An optional array of implementation-specific error objects. | \ No newline at end of file