From 436628a1d24cc77cdabdba7f06b1a185177f6153 Mon Sep 17 00:00:00 2001 From: Sebastian Bader Date: Fri, 23 Sep 2022 08:49:25 +0200 Subject: [PATCH 1/9] fix outdated references in the contribution.md (#51) --- CONTRIBUTING.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 28a5003..4b586ac 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ -# Contributing to IDS-G-pre +# Contributing to IDS-G -IDS-G is the official repository of [IDSA](https://www.internationaldataspaces.org) to publish the [IDS-RAM]() and the subsequent specifications. +IDS-G is the official repository of [IDSA](https://www.internationaldataspaces.org) to publish the [IDS-RAM](https://github.com/International-Data-Spaces-Association/IDS-RAM_4_0) and the subsequent specifications. All content published here is approved by the IDSA Technical Steering Committee and the IDSA Working Groups. Detailed information on the contribution process can be found in the [IDS-G Handbook](Handbook/README.md). Nevertheless, you are very welcome to contribute to this project when you find a bug, want to suggest an improvement, or have an idea for a useful @@ -30,7 +30,7 @@ should at least include the following information: ## Labels -The [labels](https://github.com/International-Data-Spaces-Association/ids-g/labels) are listed at the +The [labels](https://github.com/International-Data-Spaces-Association/IDS-G/labels) are listed at the [issues](https://github.com/International-Data-Spaces-Association/IDS-G/issues). There are two types of labels: one describes the content of the issue and should be used by the developer that creates the issue. The other one, starting with `status`, will be added from the @@ -75,5 +75,5 @@ An example of a very good commit might look like this: `feat![login]: add awesom ## Versioning -IDS-G-pre uses the [SemVer](https://semver.org/) for versioning. The release versions +IDS-G uses the [SemVer](https://semver.org/) for versioning. The release versions are tagged with their respective version. From f7d182e058f4fd6172b4824eaff41a2912272ab8 Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Fri, 23 Sep 2022 08:58:35 +0200 Subject: [PATCH 2/9] Update CHANGELOG.md Fixed typo and added missing changelog entry for changes in CONTRIBUTING.md --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 121d3ba..b2bbead 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 2022-09 + +### Changed +- fixed missing mandatory elements in multipart message +- Fixed wrong references to IDS-G-pre and RAM in CONTRIBUTING.md + + ## [Q2/2022] ### Added From 702143fa5dc9c584ae1dc04096520829b3ed8c36 Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Wed, 28 Sep 2022 16:25:08 +0200 Subject: [PATCH 3/9] Changing structure of Communication package Adding the Structure for the communication guide and moving the infomodel to a new location. --- Communication/CommunicationGuide.md | 112 ++++++++++++++++++ Communication/FoundationalStandards/README.md | 39 ++++++ .../Message/DescriptionRequestMessage_POST.md | 0 .../Infomodel}/Message/README.md | 0 .../Infomodel}/Message/requests/README.md | 0 .../Infomodel}/README.md | 0 6 files changed, 151 insertions(+) create mode 100644 Communication/CommunicationGuide.md create mode 100644 Communication/FoundationalStandards/README.md rename {Infomodel => Communication/Infomodel}/Message/DescriptionRequestMessage_POST.md (100%) rename {Infomodel => Communication/Infomodel}/Message/README.md (100%) rename {Infomodel => Communication/Infomodel}/Message/requests/README.md (100%) rename {Infomodel => Communication/Infomodel}/README.md (100%) diff --git a/Communication/CommunicationGuide.md b/Communication/CommunicationGuide.md new file mode 100644 index 0000000..1309d73 --- /dev/null +++ b/Communication/CommunicationGuide.md @@ -0,0 +1,112 @@ +# IDS Communication Guide # + +## Introduction ## + +Interoperability is a major goal of the IDS. Therefore, the interoperability between IDS Connectors and other components is of high importance. The IDS Communication Guide shall provide the required data structure and the interaction sequences to be realized for interoperability and to be used for interoperability testing. + +The Communication Guide is organized into a modular and composable structure. + +## Terms and Definitions ## + +### Control Plane vs. Data Plane and in-band vs. out of band ### + +Joint understanding of the terms `in-band` and `out-of-band`, as well as the `control plane` and `data plane`: + +**Commonalities:** Both term pairs… + +- represent the split of a previously joint, combined flow of information into two separate parts +- have a background in technology +- have some overlap, but put different emphasis + +#### in-band/out-of-band #### + +- **origins:** selection of radio frequencies (“bands”) for primary/secondary communication +- the split is motivated mainly by isolation & break-out reasons +- `in-band`: the same `frequency`, `connection` or `means of communication` is used for all transfers +- `out-of-band`: for a selected subset of communication, a different, dedicated band is selected +- **example:** main process is using HTTP, user identity verification subprocess uses SMTP (email) + + +#### control plane/data plane: #### + +- **origins:** in a networking device… +- the `control plane` is optimized for customizability and security. it controls the data plane. +- the `data plane` is optimized for speed, throughput and bandwidth. it handles the data payloads. +- the split is motivated mainly by “separation of concerns” +- `control plane`: controls what happens on the data plane +- `data plane`: agnostic of control logic, only used for payload transfers + +## Foundation ## + +The foundation package contains elements that commonly used. This includes standards that are used as foundation for the Communication Guide. + +### Foundational standards ### + +[The Foundational Standards list.](./FoundationalStandards/README.md) + + +### Information Model ### + +The common information model that is used in every other package. This shall include a base model containing the entities of a data space and their relation. + +**Insert entity model after update.** + +The realization bases on DCAT for the Data Products and ODRL for Contract Policies. + +[The IDS-Information Model is here.](./Infomodel/README.md) + +### Identities ### + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + +### Trust Frameworks ### + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + +### Policies (authorization and Policy Description) ### + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + +## Data Sharing (Conector) ## + +### Contract Negotiation ### + +part of the control plane + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + + +### Data Transfer ### + +part of the data plane. How data is exchanged with focus on communication and not on how the data plane is built. + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + +## Catalog (Publish and query meta-data) ## + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + +## Registration ## + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + + +## Audit logging ## +currently out of scope + +## Vocabularies ## +currently out of scope \ No newline at end of file diff --git a/Communication/FoundationalStandards/README.md b/Communication/FoundationalStandards/README.md new file mode 100644 index 0000000..b291095 --- /dev/null +++ b/Communication/FoundationalStandards/README.md @@ -0,0 +1,39 @@ +# Foundational Standards # + +These Foundational Standards are used in the IDS Communication Guide: + +## Attribute Based Access Control (ABAC) ## + +Related to Access Control that is not part of the [IDS-RAM](https://github.com/International-Data-Spaces-Association/IDS-G/blob/master/Glossary/README.md#ids-ram-international-data-spaces-reference-architecture-model). +[NIST, Guide to Attribute Based Access Control (ABAC) Definition and Considerations](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-162.pdf) + +## Linked Data Platform (LDP) ## + +[W3C, "Linked Data Platform"](https://dvcs.w3.org/hg/ldpwg/raw-file/default/ldp.html) + +[W3C, "Linked Data Platform 1.0 Primer"](https://www.w3.org/TR/ldp-primer/) + +## Open Digital Rights Language (ODRL) ## + +[W3C, ODRL](https://www.w3.org/TR/odrl-model/) as basis + for IDS usage control. + +## Resource Description Framework (RDF) ## + +[Wikipedia, „Resource Description Framework“](https://en.wikipedia.org/wiki/Resource_Description_Framework). + +## Time Ontology in OWL ## + +[W3C, "Time Ontology"](https://www.w3.org/TR/owl-time/) + +## The Organization Ontology ## + +[W3C, "The Organization Ontology"](https://www.w3.org/TR/vocab-org/) + +## WebAccessControl (WAC) ## + +[W3C, "Web Acces Control"](https://www.w3.org/wiki/WebAccessControl) + +## eXtensible Access Control Markup Language (XAML) ## + +[Wikipedia, "XAML"](https://en.wikipedia.org/wiki/XACML) diff --git a/Infomodel/Message/DescriptionRequestMessage_POST.md b/Communication/Infomodel/Message/DescriptionRequestMessage_POST.md similarity index 100% rename from Infomodel/Message/DescriptionRequestMessage_POST.md rename to Communication/Infomodel/Message/DescriptionRequestMessage_POST.md diff --git a/Infomodel/Message/README.md b/Communication/Infomodel/Message/README.md similarity index 100% rename from Infomodel/Message/README.md rename to Communication/Infomodel/Message/README.md diff --git a/Infomodel/Message/requests/README.md b/Communication/Infomodel/Message/requests/README.md similarity index 100% rename from Infomodel/Message/requests/README.md rename to Communication/Infomodel/Message/requests/README.md diff --git a/Infomodel/README.md b/Communication/Infomodel/README.md similarity index 100% rename from Infomodel/README.md rename to Communication/Infomodel/README.md From cd16a2ac6ab1e8ba54e8327c762ad3c91f7e5c94 Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Wed, 28 Sep 2022 16:28:48 +0200 Subject: [PATCH 4/9] Update CommunicationGuide.md tidy up formatting --- Communication/CommunicationGuide.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Communication/CommunicationGuide.md b/Communication/CommunicationGuide.md index 1309d73..4a6a178 100644 --- a/Communication/CommunicationGuide.md +++ b/Communication/CommunicationGuide.md @@ -26,8 +26,7 @@ Joint understanding of the terms `in-band` and `out-of-band`, as well as the `co - `out-of-band`: for a selected subset of communication, a different, dedicated band is selected - **example:** main process is using HTTP, user identity verification subprocess uses SMTP (email) - -#### control plane/data plane: #### +#### control plane/data plane #### - **origins:** in a networking device… - the `control plane` is optimized for customizability and security. it controls the data plane. @@ -44,7 +43,6 @@ The foundation package contains elements that commonly used. This includes stand [The Foundational Standards list.](./FoundationalStandards/README.md) - ### Information Model ### The common information model that is used in every other package. This shall include a base model containing the entities of a data space and their relation. @@ -83,7 +81,6 @@ messages and data types: protocols: state machines for message flows and interaction patterns: API binding: - ### Data Transfer ### part of the data plane. How data is exchanged with focus on communication and not on how the data plane is built. @@ -104,9 +101,10 @@ messages and data types: protocols: state machines for message flows and interaction patterns: API binding: - ## Audit logging ## + currently out of scope ## Vocabularies ## -currently out of scope \ No newline at end of file + +currently out of scope From 3f7e69b9a7de0d1e81b4e5c5f2aa4ebd1e6d7a98 Mon Sep 17 00:00:00 2001 From: Jim Marino Date: Fri, 7 Oct 2022 09:32:04 +0200 Subject: [PATCH 5/9] Add specification input documents --- .gitignore | 1 + Specifications/README.md | 13 ++ .../catalog/catalog.binding.https.md | 134 ++++++++++++++++ Specifications/catalog/catalog.protocol.md | 89 +++++++++++ .../message/catalog.error.message.json | 11 ++ .../catalog/message/catalog.message.json | 71 ++++++++ .../message/catalog.request.message.json | 7 + Specifications/diagrams/diagram.styles.puml | 83 ++++++++++ .../model/im.dataspace.relationships.png | Bin 0 -> 26210 bytes .../model/im.dataspace.relationships.puml | 33 ++++ .../model/im.participant.entities.drawio | 1 + .../model/im.participant.entities.png | Bin 0 -> 39321 bytes Specifications/model/information.model.md | 151 ++++++++++++++++++ Specifications/notes/bibliography.md | 23 +++ 14 files changed, 617 insertions(+) create mode 100644 .gitignore create mode 100644 Specifications/README.md create mode 100644 Specifications/catalog/catalog.binding.https.md create mode 100644 Specifications/catalog/catalog.protocol.md create mode 100644 Specifications/catalog/message/catalog.error.message.json create mode 100644 Specifications/catalog/message/catalog.message.json create mode 100644 Specifications/catalog/message/catalog.request.message.json create mode 100644 Specifications/diagrams/diagram.styles.puml create mode 100644 Specifications/model/im.dataspace.relationships.png create mode 100644 Specifications/model/im.dataspace.relationships.puml create mode 100644 Specifications/model/im.participant.entities.drawio create mode 100644 Specifications/model/im.participant.entities.png create mode 100644 Specifications/model/information.model.md create mode 100644 Specifications/notes/bibliography.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f11b75 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ diff --git a/Specifications/README.md b/Specifications/README.md new file mode 100644 index 0000000..3938f1b --- /dev/null +++ b/Specifications/README.md @@ -0,0 +1,13 @@ +# Getting Started + +The [Information Model document](./model/information.model.md) defines the core concepts, entities, and relationships that underpin a `Dataspace`. + +The [Catalog Protocol document](./catalog/catalog.protocol.md) defines a how a `Catalog` is requested from a catalog service by a consumer using an abstract message exchange format. + +The [Catalog Binding document](./catalog/catalog.binding.https.md) defines a RESTful API over HTTPS for the `Catalog Protocol`. + +The [Bibliography](./notes/bibliography.md) contains links to relevant standards referenced by the above documents. + +Note that PlantUML diagrams will be replaced by Draw-IO alternatives. + + diff --git a/Specifications/catalog/catalog.binding.https.md b/Specifications/catalog/catalog.binding.https.md new file mode 100644 index 0000000..827b635 --- /dev/null +++ b/Specifications/catalog/catalog.binding.https.md @@ -0,0 +1,134 @@ +# Catalog HTTPS Binding + +## Introduction + +This specification defines a RESTful API over HTTPS for the [Catalog Protocol]. + +The OpenAPI definitions for this specification can be accessed [here](TBD). + +## Path Bindings + +### Prerequisites + +1. The `` notation indicates the base URL for a catalog service endpoint. For example, if the base catalog URL is `api.example.com`, the URL `https:///catalog/request` + will map to `https//api.example.com/catalog/request`. + +2. All request and response messages must use the `application/json` media type. + +### 1. CatalogErrorMessage + +In the event of a request error, the catalog service must return an appropriate HTTP code and a [CatalogErrorMessage](./catalog.protocol.md#) in the response body. + +| Field | Type | Description | +|---------|---------------|-------------------------------------------------------------| +| code | string | An optional implementation-specific error code. | +| reasons | Array[object] | An optional array of implementation-specific error objects. | + +### 2. The `catalog` endpoint + +#### 2.1 POST + +The [CatalogRequestMessage](catalog.protocol.md#1-catalogrequestmessage) corresponds to `POST https:///catalog/request`: + +``` +POST https://provider.com/catalog/request + +Authorization: ... + +{ + "@context": { + "ids": "https://idsa.org/" + }, + "@type": "ids:CatalogRequest" + "ids:filter": {} +} +``` + +The `Authorization` header is optional if the catalog service does not require authorization. If present, the contents of the `Authorization` header are detailed in the +[Authorization section](#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 +request. + +#### 2.1.1 OK (200) Response + +If the request is successful, the catalog service must return a response body containing a [CatalogMessage](./message/catalog.message.json) which is a profiled DCAT Catalog type +described by the [Catalog Protocol Specification](catalog.protocol.md). + +## Technical Considerations + +### Authorization + +A catalog service may require authorization. If the catalog service requires authorization, requests must include an HTTP `Authorization` header with a token. The contents of +the token are undefined by may be an OAUTH2, Web DID, or other access token type. + +### Versioning + +- Versioning will be done via URLs. TBD. + +### Pagination + +A 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: + +``` +Link: ; rel="next" +{ + "@context": { + "dcat": "http://www.w3.org/ns/dcat/" + }, + "@type": "dcat:Catalog" + ... +} + +``` + +Second page response: + +``` +Link: ; rel="previous" +Link: ; rel="next" + +{ + "@type": "dcat:Catalog" + ... +} +``` + +Last page response: + +``` +Link: ; rel="previous" + +{ + "@type": "dcat:Catalog" + ... +} +``` + +### Compression + +Catalog services MAY compress responses to a 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). + +## Notes + +### Asynchronous Interactions + +We may want to specify optional support for asynchronous callbacks for the catalog response. This would require addling a `callbackAddress` property and an `@id` to the request: + +``` +POST https://provider.com/catalog/request + +Authorization: ... + +{ + "@context:{}, + "@type": "ids:CatalogRequest" + "@id: "..." + "ids:callbackAddress": "https://example.com/endpoint" +} +``` + +The `CatalogResponseMessage` would be POSTed back to the endpoint. the response message could be posted mutiple times for paginated results and would need to include the +original `@id` value as a `correlationId` and a property indicating if the contents are complete (or additional responses will be sent). diff --git a/Specifications/catalog/catalog.protocol.md b/Specifications/catalog/catalog.protocol.md new file mode 100644 index 0000000..844eb1c --- /dev/null +++ b/Specifications/catalog/catalog.protocol.md @@ -0,0 +1,89 @@ +# Catalog Protocol + +## Introduction: Terms + +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/) offered by a _provider_ +- a _**catalog service**_ is a provider participant agent that advertises offered assets +- A _**consumer**_ is a participant agent that requests access to an offered asset. + +The catalog protocol defines a how a `Catalog` is requested from a catalog service by a consumer using an abstract message exchange format. The concrete message exchange wire +format is defined in binding specifications. + +## 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. + +### 1. CatalogRequestMessage + +**Sent by**: Consumer + +**Example**: + +``` +{ + "@context: { + "ids": "https://idsa.org/" + }, + "@type": "ids:CatalogRequest" + "ids:filter": {} +} +``` + +**Response**: [CatalogMessage](./message/catalog.message.json) containing the [DCAT catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog). + +**Schema**: (xx)[] + +#### Description + +The `CatalogRequestMessage` is message sent by a consumer to a catalog service. The catalog service must respond with a `CatalogMessage,` which is a +valid [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. + +The 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. + +## Technical Considerations + +### Queries and Filter Expressions + +A _**catalog service**_ may support 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. + +### 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, 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 discovery protocol adopted by a particular dataspace defines how a consumer discovers catalog services. + +### Security + +It is expected (although not required) that catalog services implement access control. A catalog as well as individual catalog _datasets_ may be restricted to trusted parties. +The 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. In addition, this specification does not define the contents of the security token. It is expected different security mechanisms may be used such +as [OAuth2 2.1](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-06) or [did:web](https://w3c-ccg.github.io/did-method-web/). + +### Catalog Brokers + +A dataspace may include _**catalog brokers**_. A catalog broker is a consumer that has trusted access to 1..N upstream catalog services and advertises their respective catalogs as +a single catalog service. The broker is expected to honor upstream access control requirements. + +## DCAT and ODRL Profiles + +The catalog is a DCAT catalog with the following restrictions: + +1. Each DCAT `Dataset` must have at least one DCAT `Distribution`. +2. The DCAT `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](../negotiation/contract.negotiation.protocol.md) and [Transfer Process](TBD). +3. Each DCAT `Dataset` must have an `hasPolicy` attribute that contains an ODRL `Offer`. +4. Each ODRL `Offer` must have a unique UUID (ODRL `uid`). +5. Each ODRL `Offer` must be unique to a dataset since the target of the offer is derived from its enclosing context. +6. Each ODRL `Offer` must NOT include an explicit `target` attribute. diff --git a/Specifications/catalog/message/catalog.error.message.json b/Specifications/catalog/message/catalog.error.message.json new file mode 100644 index 0000000..0147e7f --- /dev/null +++ b/Specifications/catalog/message/catalog.error.message.json @@ -0,0 +1,11 @@ +{ + "@context": { + "ids": "https://idsa.org/" + }, + "@type": "ids:CatalogErrorMessage", + "code": "123:A", + "reasons": [ + {}, + {} + ] +} diff --git a/Specifications/catalog/message/catalog.message.json b/Specifications/catalog/message/catalog.message.json new file mode 100644 index 0000000..8f2b7b8 --- /dev/null +++ b/Specifications/catalog/message/catalog.message.json @@ -0,0 +1,71 @@ +{ + "@context": { + "dcat": "http://www.w3.org/ns/dcat/", + "dct": "http://purl.org/dc/terms/", + "odrl": "https://www.w3.org/TR/odrl-model/", + "ids": "https://idsa.org/" + }, + "@id": "urn:uuid:3afeadd8-ed2d-569e-d634-8394a8836d57", + "@type": "dcat:Catalog", + "dct:title": "Data Provider A Catalog", + "dct:description": "A catalog of data items", + "dct:publisher": "Data Provider A", + "dcat:keyword": [ + "traffic", "government" + ], + "dcat:DataService": [ + { + "@id": "urn:uuid:4aa2dcc8-4d2d-569e-d634-8394a8834d77", + "@type": "dcat:DataService", + "dct:terms": "ids:connector", + "dct:endpointUrl": "https://provder-a.com/connector" + } + ], + "dcat:dataset": [ + { + "@id": "urn:uuid:3dd1add8-4d2d-569e-d634-8394a8836a88", + "@type": "dcat:Dataset", + "dct:title": "Traffic Data", + "dct:description": "Traffic data sample extract", + "dcat:keyword": [ + "traffic" + ], + "dcat:hasPolicy": [ + { + "@context": { + "@vocab": "https://www.w3.org/TR/odrl-model/" + }, + "uid": "urn:uuid:2828282:3dd1add8-4d2d-569e-d634-8394a8836a88", + "permissions": [ + { + "action": "use", + "constraints": [ + { + "leftExpression": { + "@value": "spatial" + }, + "rightExpression": { + "@value": "EU" + }, + "operator": "EQ" + } + ], + "duties": [] + } + ], + "prohibitions": [], + "obligations": [] + } + ], + "dcat:distribution": [ + { + "@type": "dcat:Distribution", + "dct:format": { + "@id": "ids:s3+push" + }, + "dcat:accessService": "urn:uuid:4aa2dcc8-4d2d-569e-d634-8394a8834d77" + } + ] + } + ] +} diff --git a/Specifications/catalog/message/catalog.request.message.json b/Specifications/catalog/message/catalog.request.message.json new file mode 100644 index 0000000..b3ed3d8 --- /dev/null +++ b/Specifications/catalog/message/catalog.request.message.json @@ -0,0 +1,7 @@ +{ + "@context": { + "ids": "https://idsa.org/" + }, + "@type": "ids:CatalogRequestMessage", + "ids:filter": {} +} diff --git a/Specifications/diagrams/diagram.styles.puml b/Specifications/diagrams/diagram.styles.puml new file mode 100644 index 0000000..911f758 --- /dev/null +++ b/Specifications/diagrams/diagram.styles.puml @@ -0,0 +1,83 @@ + + +!$blue = "#066DFA" +!$gray = "#98A3AB" +!$lightGray = "#F4F5F9" +!$darkGray = "#747C94" +!$green = "#24DCC1" +!$blueFill = "#E4EBFA" +!$greenFill = "#CFFBDE" +!$borderRed = "#F40000" +!$lightRed = "#FDCCCC" + +skinparam sequence { +ArrowColor Black +LifeLineBorderColor 000000 +LifeLineBackgroundColor #A9DCDF +} + +skinparam roundCorner 10 + +skinparam ArrowColor $darkGray +skinparam ArrowHeadColor $darkGray +skinparam LifeLineBackgroundColor $darkGray + + +skinparam CloudBackgroundColor $lightGray +skinparam CloudBorderColor $gray +skinparam CloudFontColor Black + +skinparam ArtifactBackgroundColor $lightGray +skinparam ArtifactBorderColor $gray + +skinparam ComponentBackgroundColor $blueFill +skinparam ComponentBorderColor $blue +skinparam ComponentFontColor Black + +skinparam DatabaseBackgroundColor $greenFill +skinparam DatabaseBorderColor $green +skinparam DatabaseFontColor Black + +skinparam ParticipantBorderColor $blue +skinparam ParticipantBackgroundColor $blueFill +skinparam SequenceGroupBorderColor #DADADA +skinparam SequenceGroupHeaderFontColor #898A89 +skinparam BoxPadding 20 +skinparam ParticipantPadding 10 + +skinparam AgentBackgroundColor White +skinparam AgentBackgroundColor $blueFill +skinparam AgentBorderColor #066DFA +skinparam noteBorderColor FEF3BF +skinparam SequenceBoxBorderColor F2F2F2 +skinparam shadowing false +skinparam AgentBorderThickness 1 + +skinparam NoteBackgroundColor FEFFDD + +skinparam FrameBackgroundColor $lightGray +skinparam FrameBorderColor $lightGray +skinparam FrameFontColor $darkGray + +skinparam ActivityBackgroundColor $blueFill + +skinparam StateBackgroundColor $blueFill +skinparam StateBorderColor $blue +skinparam StateStartColor $blue +skinparam StateEndColor $blue +skinparam StateFontSize 12 + +skinparam ActivityBackgroundColor $blueFill +skinparam ActivityBorderColor $blue +skinparam ActivityEndColor $blue +skinparam ActivityStartColor $blue +skinparam ActivityDiamondBackgroundColor $lightGray +skinparam ActivityDiamondBorderColor $blue + +skinparam PartitionBackgroundColor $lightGray +skinparam PartitionBorderColor $darkGray +skinparam PartitionFontColor $darkGray + +skinparam ClassAttributeFontColor Black +skinparam ClassBorderColor $blue +skinparam ClassBackgroundColor $blueFill diff --git a/Specifications/model/im.dataspace.relationships.png b/Specifications/model/im.dataspace.relationships.png new file mode 100644 index 0000000000000000000000000000000000000000..607785e4b2a2736af64e893cf684516364bed2d9 GIT binary patch literal 26210 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μv`FY)SC&B_FpX^a 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 Dataspace : manages + +Dataspace -down-> Registry: uses + +Participant -up-> Dataspace : member of +Participant -down-> ParticipantAgent : controls + +ParticipantAgent --> Registry : registers/uses + +IDP --> ParticipantAgent : issues +ParticipantAgent --> IDP : verifies + +CI --> ParticipantAgent : issues +ParticipantAgent --> CI : verifies + + + + +@enduml diff --git a/Specifications/model/im.participant.entities.drawio b/Specifications/model/im.participant.entities.drawio new file mode 100644 index 0000000..f38a4bf --- /dev/null +++ b/Specifications/model/im.participant.entities.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Specifications/model/im.participant.entities.png b/Specifications/model/im.participant.entities.png new file mode 100644 index 0000000000000000000000000000000000000000..095a701bc48892145f3b1a734f86e26913dd23fa GIT binary patch literal 39321 zcmeFZc|4Tg|35r4hDOMsEFoh{i*1at$6(B0Y-1f%vW#`?!`KZeBwLXd5en^#ETxd8 zv{{l=$QF@gN%rMFqu$@&_w&7f%j0+7f84*v{rEhZ7}s^3b6)3lUgxzw&y{LrLFC!K zdpiUI;W07BTSFi)6!@Qu-~d+^GORv>U(ir%q52(&5Lt}j zpKr1%%HDyYbXg2uRz<}%C`i%6$JHyu)jw1*fJz6Kzh#aRFqXz6wt~F z%Idbt>arMpWfky46|JbOsp<6Rc~>uLz~2tBiprpaedez2J^}Q=P;Xg`0r=Y_fKH`> z-{3O%X=wv~P{4n*vI`pPqP`z|)ej1yQ5~pmBp*Nn0gF*r#HfMG`$)#N=4P@ghTuER z$Bznr5vlHefvhHm-XVeh;0gh)3`S-B0~c*vJzYb5{!Yu9~)NmhnFd&$}5n$(EzJW)4 z{&LC?Yi$s!iV4KKDv&&)oTwJ`u*g511h@i9w>WMEn5BUJ(}}uMgp&t0RFz;3*h26H zKMb6xj$T%dz7|+bQ&XC`zrU@iKgQN7RK?oY-O$z1l5F5aF#^wm57~^k;ZQG7Qb}R*nIo zM23%#8qv}u(2DNpWI?gV~GEH$nu#CeRzNVH*@qF~C!-$ziUc z%EneEfH?%LtG82x2F=5R91&{jO%Ek_7}Rdfh#_4;BO<-fB=%esg13dtr^;oWNaOzNr@uhX$Dvgil%$GCj}d-h7Gsy zv@#1(R|SnU2;qL}pdI+?8IENQg11*u3A3@o8W?F{EzBHjJ;6may0W@exLP=P3VdkZ zo&gvv)-P0@sG%C_>lqlLY-p-%jG<}T+K>o%bTmyGo;XL z939-Lesn7h6E#PMiHDn6c&LV|nTM$-$x+psfFGb^&Aqr1MjIv#HvW>1c!1cycVqZy{Y7G_bFf!+a{ z4p?8`P!m&Dje8s68)P@PURw=s$gF|xNY$5*6LvL zA(oEj3=gWRn~5Qf5YA8wF|tT8lhkT46p`R zWjfi;j;^BbPO$T$5b>@I8)GXQ^&nEHO}Lt6pqm@n+L2DCgb{3QEdt%bNa3nvlDa0{ zU0>6~&)UXNg`(={7iH>3an~@$0`XG~Bx2mH{k;gG_#lQa78|1KPc*TiTWS(KY&=4| zXv(f0L8>Z52cIZqOEYT{#n{Q%&fJ|GXy>TmrxD07Q#GPvm3{0?Fm9${U|EPZA;BsP ztbLR_+R{_s&z_;?&j5;t5E>XtF~bB$2D#ZqVx4?kL%kSiTQeu~FdJ-OSg0}05KXfu zSQuLeqy22q#!;ccc8;b_?rz~^jFUbsINSm4phk1|)pv-n35&wgt?V^iv6_G#%ARTr zlA1rp%GR8ObugtGJE&N>TRXWr+FGcGSX-(4kfZE+WUsES9OMw`%OLw(X$F#Mt_CU?SDGuy+SiFS?rjuGcO!TiQ_M)g`k{cTaHkLt3f|0&=HTG1 z5)@)@fc6i!j8ZnDS{qx_txc@;tu-Pe4MNcVbbCYaJi(UePqQc5qp7Y2?qm%@M7VmC zAwd=Iq3op+<)GrF;Tb}A4O8);(OfmmL)A_FEv-ELLVQE53S_=a5)iJh>g1zu6rpBgXW@<2AVfu)QH=FH)$M7%rV+*l1d4@Qptk|d zD%9Fi-9N}dRozP;jaMd6P0)r6l9j$MNk4*SW&>0U!PX$i+uMT{MGp%KHNsM<=8hOk zWsGkSFm(n_CRCa!*~eVNnm{HSg{#uc{A_5Ubdo>DILyb^09XqH1CMZWs0Y}ajuCYG z5Ec_nyiCc~sy0T(cHxnZtSw>g;TK@;K{iz<*}9QbA}k5EbgG4hktPAJ;bvhI8fZiG z!iTtG?D5KIBU3z8)7;0LN{Ap6gN)U&-mahnD%zR^epyEnT>U)g?hZtIBV{!+GkYJ? zFmqxk)i2E5+tUQ2K?%bc5)4!cj$Rh37QqZ7b9VdkYHkfa)c_`l1Pp;FpL88jZh=nS%+#+7=A_?G#Zsfs29~;HGpKma0vJEr&vVU zo6tklR1CwYEF0n(qUq#LbTjcJ2ivMyTDXzH^WOHh8Xn-DJ=(_ADah3nOCbiTyIWa= zX=o69^eKUs>Hz`vVakE_evu)LHsMj>POdaVTU#q4OXG%{Xqu2rRed#x`hoaBMle~8 z;BIPaOSB5sur+k`Lz}1(=s}js>I9&6jT|Gx=;Sa0-H1fAMH`v<8oRq2hEgImsaSt~ z8_*fm1W$Fe3b3{C^p0?{cL$Rpn7V~hLL)USG@XdS*Z?0hw7P|-rGXlWH8{bKMzh4z z!_2+iY<$9O3>hI9D>pZWlb5wcBt|oUZfWdlWq=8BvN!hjQ1-B9I0UJiW35d+G`&d_ zPdlQrSAaU&5ST`P^$>4+Q%|g)mxmLPqOa;e3k`8IHKaHhlOutFBDnjylOl}WG;M>` zA|lj${cIf~3_T-gk%q=*$~FNsHLN{GSv??F(>TD;$%#dmvU+%6BqhKulxpj(;brfn zsve<&i6FQe5XfjWo+VR`4j8(bhB5d`aG;aWnij59LjyFK%AlJO-C6e9)Zfe8O~u&L z)y>2jh$_R!H;jh&_F{yym`(^cMSGg4MYu=WhPu;D0{sa<*%6}LoIE3a=yYYx5UO2- zYDkb3%XXUt2LmHbAp4P72HaYMKOI?)afseFlR4c_^Q`F@@wwrUb&ak`7)c)XC8@8zC0^uiQq*rnX0h2 zm(=q-MNjHCAQHe;(fub?P{)c z@G~L7XLLWGgy?hEb);{iQ}_lDLOK7>)@UFreH-i9eu<>CA~^)^uaW z^Hkt{GPt;v3AtgO{cASmR+2Z4KGhn1m3wgCSZ|eo3Ac!f)eYP0-eYer&}WB@zIT=o zbJTu*c}kKcox94;C73c7uFJbe=gRNN9-I4aE#r^A6{NkRH=X1$+O)szWE4E|ys~0h z*_p5+d2I+nki_L*$xurN^q~znskjChRGl+RB7QAfEBuG?>pZ10%6&IJuH%}aV;yam zwS7K4pzhQTr!`5Bnm>(OUzy)nolbjuS$*)KPZzK(gX3{=AFhU^XVnkKF&?=s9jDL;26%aW=%-lnMmdJkH?xub5;WR;oeX6QCf{KUt zJ&<*YU&lUO`F`{L(`d%ym}QmqH2j3MNrHyZ_ui91z9Ff%d zT-V8!xFu}@@K7qc>xw?xvu2uJ{;5a=vaGeF9|vRx#@9Hl-yj85-<}mV`GFHU z*W(i3ndcH`B5zEw%GU}rMVzqIT~6YcHO0rS%ol-<(r!V$wD@I=aiH^^jfv`W@2-(- zu9@a~PrSP(#nt%xhTYA*uk!ZW5X2tcLmkU*xU{sk{A*%qcEs)MU8^Ek?g2Z~oS{1I z-KxeZdF7wmFR9-xFWhUs+jpSukbhrIcHR1dv!qAd#G2PW4n9jQz!NWiP)Se5U{-W@_aor+MQJiOw z4kc&w{-ufJ7UTn4aac3IuI)Kvuz{owpXY$?9V9^czhLq;2j$rZ*fnEURM*!R2XYjg z)gDLvKJfczzccN7U5Q{@_`Q3Ba%+5VPK#iYAp4I#srgu=dAxBEz2tS!;m*!a$6H}Z z6%zTmH6f$h?QT2Sy&p0&wVmp@VMlr|f$==uTGv+>>zpFdcJ5xoECb#|w0Iizo1dY# zM=#Dy)-(s{KD;@)@aS!kVe+ZjAkPyOIC)$|J}r-(OHV$WqGMjD+i$CvpU;UzS-d0m zcJeVH`Y}wV2P|MGDnD#6xq|)W8Cfpr2DfA1-(PPQ;cp9{u>mSb8LGngc{rPIMh^ES z=9l^X>`;5zwUOGS@2{Enf(G9fNYqKpeTkm#Y)%zu$+obaT7?@gk#5C!G&Uw@GS)be zZKq}^)}?0qKR*r{g6-O8#njzg3zgK-`1OoPTALBiRXp+-0ktl(5Z8)cpe3P|dF!+V zmQ`+N#~JUq@BP-0sbM1FZ^%S(;2QKgb>N%6xf^ME*iIFff)EUSS!0$QT}<6 z6Dg>^-})-@H_U&nPM%ZZ(~R)akaQ_fNL-R=zYp@k+#|KW?nnOe3^vJSM@YPW^816c zRA>{g7xj)yy<)QvSJttWp=0Bzr9cTSKt3-LAtK0T4xpU}WucA49Z#P9DqWwvTW<}t zUd!c-Ox+dZJ}9RWZt3G#6R+OR&Ed=83z4<<=z2MM(#?QX5ch^nM?&Ty4 zX#N_E4*dq2mKrASFpAifr_^3*aoH*5`V6nc)1VL3A0O{G6HQ~5&#h)Fx#+G;RS$T# zoZ2-Hc4tbh^yYhxLm$wr8Jt$b84myuS?V;~}{6hhB^JOm2_vr};`EAMf)7xNpaThlkMV7I* ze&PL20f96Zn|kJIz>Mhd8GlfXxCeR02D9KF47}9B1`Ch|kEvx|(R;;r44TM;)2xp2 z#HHx9*O=C37%;uRg>Y+>avoz#@fr43(t$Qh3_rUKtV7>-k$I8`>?0&6_?q0d#HC+X zdmoOg!cznTo}(_yWXW0X8Pl8v{gBF zKJy%8nD<{i9vb9T&AYQ~`fHK@;_)s zZ~TkL)4*}%^ua@#$mYU-^>}CymI6)D`xlSr9(3P`spSs%>^GBYpH3eHQlam(zLp6@ zlzDc(Q*D?RJ@}uTw11QQ-~7sdbNT-`!H8fBn*8$43KC+q=VFWJ;8|zsTT(9kjoNkVd;d=T5)=5i?In-_2<#DJj{UAG^8W z*nUPfZK-TJUV8IO!O@28h=@Px>cp2srX-A<%JW4mR`eLq^*-YrMZ=rF>Srm^4T%|> zTuNgx21yF5Nrlt#%U*Q@jH%Cd2q7KR6;WWY`gJm9512IMblx( zaq^_ps^m){<;ggp7=JGEMIm5N&Y3cwFCC{nRkPL+DerBeC5}i0&L)Cvf(Fl=(%jk9 znTNAoL>3n(ytNECeXnN3T{xbI*1hkoY9m!$eQyV>4LDfA8Hb!WpuL>J%kYdJ$x|Pt zg}G(m!ShmidbgsJfzD>coG4&1q4Q~fVp`@&q?6)TOT7$KT^mM#=G6I# zqf5Z01ZJ)+m1uD^lue&c%WD;~ZW`#C{SCW2@H}6y;?L}By^kz5@!2&}oO&9FxwrIXMqdi3k-($=`FW7D<9h>3#w4J>9XU``kzgLt5Y`#2v$AD1?r3Tw{G9d>1pGWy)g?$$DMOyi;e z6Vj;zQI47BSB@&m(K{0Q2`74mVNz53&GQ8ND)$SOp9>06Ug==A*tl{YSOyXiKOo)V z5HGsxKn6EFonV4`oYsuvfZbq4m@Q|8lkMRY=FI)=x{^01!wZ9&Cm(-bp)6+WGspKp zh4m0j2eBRl$|I0z&z`3IQ#4q&X;S!p(~R3 za%BN4v$=)G^if(cje25Ct5kzy7T8@wVMiR9u05>K|24uD0)HcbyV0kk{hm7m;-;W+ zbe}>YU~bHFZzvoGfs4s8-9=s;VeY_70mGRENf4G{-nGrt|LFaFKTIq>M!qS~aR>@6 z1FnI_6!hU;9_X3^um9onghU8J7zKg4LHJLxc+5NnU!ritI}nW8qukAazc3>ZH9>~u z&pnsm`BnZ)b)srI0Fgme4X#N$$q5~n^15=+m#-m~w{k7D6SV&b5);iw3+{2i5}DI= z+jQ-uP)`UxGLK54)o?rc_G(E~z!MfG!o5gmm&rpYKdbLkw1i z2x%H7+yPAo@!XPQoJ&XVUq-tV-l%7QO~4LEH5?g)XELCFmeaievQa>IgCVB`FhJd;qv=FvQhtwT5!)ChaJOK238Vw}3 zES_vFo$_A=E3qIE#S7}PtWSXq@Wo83i@H=eQInEq6={oVL9gX+tlE%1>Q(lvp|4>ock$A-2}SSxJ0}kF=(#Rud^rO2@;hcQUu@H zWXyE<%(|pn3MdEK5~Y{{3flp^b;AI2#4V%T->kX z;hhP}5GaGc;r?mub*TymBuZtXvFavbaF?^gBeu)XgngVdI-@0I4}}fuJ zKE+E?+_;8I@T|)D(t*?SyJ5`;*&OKBeohI7)zu$t5^4!{)OkKj3Pi&2T5hU?JE1Yx z&)aR8@DrP+4#dJ0XieI@CZf-@61kdcX40z8?uJ@qY^T>W@)QKSdOC zb&p~Y>@fs(27!{6;=IM?DTxzfX6$9{Y}RIEBGBz^=2%Hw-&dab7FDRnA+r)gBbHG z{q&ol1M+uGmg7_z7*ZU;iG(Dy!e?H#JD&_60p#ria6%sFj)LY`mFrq-t;&Pn+-8E!GCzk;mP)fpJjW|!* zzd3gTlIr-y`z;)rvO}Q5iXGfCg;6Z~1cZSxoMn&VPX&B2GG=XRbI1#oZ~<%}FRWRo zmWk~>{aNfD_x2^Zpv}4V;k@>}uQ|>3a-N>FdhcOw8>$Vxr8IUZsj@|s)d4T3#KsBuQ1)=_v$oG?%^?H*64BE z!_^EB4=jR(r%v;`#*%yM10*hsPjacC_@AC;Hvl=C9mWkA>{7?1_YDdIGBb*ZO|Ad6 zp%hzj6{BBIOZ$V62To>11jfqs{14haslxTuGVD#&c`(3ZLdege#dy9-XEQP(0}Ep^Y_l8{p&NY*`0qpdX^&2l_dH+ zK^Je{aBwnBWYf{{?3;&Pr5T--?Wg^f-rskRO@L&N`zXmHbvh3Uwi{A)ZxL>5|1K7C zF*P9Wm@0d9ZO&%W;_3A%x!4j}+p5+}@1OXq-=I`x421AX=v<-s40k>F9X*~d_Q;%1 zqOTfrq%NZ1@o!PWOPkVCHod9R@1xs0*G4bxw@hG|f8usY^&hB-OMl?u@Xgs_ih`0q zegf(Pe{!$xyvUPo>`Svtp5KKXSKoa6Z7L4d0)b5Zvd{?Yyc!;PYV}8js_U3F@Kf!D z(~UyQ-i6KzAY6mjTJI4!Y2%bNJMw$l|i7{=LOV6xC_Rc(p=T7&oj-bk{?IB*G?F zHOaRq^Kk{I9|m=+y}Dd|j3ObIDQ+P9%D$NUfmo`r46}w$K&~d*>uj@+P z<%y02iHZJV+49hK{hXhbW(JU0-7BI~eUB4VsBNZCIWmf~XqqyFENoY}Jn};n^Ro(P zgljAs6DRHW?(U1YqN4TMj=HCMR^J~^_%z%zng7tcJn=0y+WXx{$$8JVYM+V5Pdk;4 z>g-nWARU7#$Dra3YWE_$%{=qWF*lBH)+o^gzC@Jg%w?y?nB4l2zgv?XSFOhoG zmBypVsACk%%nokE-k_}cOX9chQZT{DrAuujsd!B+s`|YW9)1JwX+I||WT$vx`g%xc zp8pkUnrBxYM(*9a%G&ba+YjiQUk>?xs@o>6`_M8a`}V3us`Rd(q!K~#W>3ACW4yud zLuTF&xHSs479^lEt|60QMbVd7ffmq%37n}#k%3NXJ(ODs*vB^Nf~_d+HBloEv+aj|(kLFAG%vS@vV1pp5-s zm6dUo`t_hY^!Hcowb|H-!ur5eO((^N9Co+6vpg-uNnRG0cTT>3^RlGn z;`?$c5$&)V^UgFTMOZn8pK87<^URYowka8hw5wAd#C%-=>FVXnz4Af6_WR6A_Qsmb z4j&@k-fdqr!DZi->XMmsJ5~hab*(s31^=mVxngfBul`z5d3e(~+foBN4CS!ni;Umw zFnqCJe;w}LgKyEidV6Y3?~gR6o@wqrm^VJS@znNVgyZ9=WhtJC#ngT3QLkVZ)knCT z7T>D4W%C_*WEuTXK&sea)am^Lec8_srg=CVKRII-gvpFAc`s zADpT1AJJO*^?6s++E=u~M#y92ejUM$t9G}4Xw%n**?QuN@4F{tX&gHCSqfTxSIP6F zmxuYql@{gud($sfQBs!?XWhV^v>#>lkNO{4upc0oN_Cg_*gkBLaC-1GJ1s-(vryH7QBR>|ZS}Q* z42e>s0UBdU%k{bC;Vqsw%g3_)?yJMaVB=4=de2OLrFbD3~^{LS?NpLge< zJ@owqyFc;Ev#+w<%D3;v*^f&u<`?s|7I)+8#r1}(4_`YId0oFN{9$-Ef0VS>p5Pyi znU=^~U!t;ZD)Tgd;ni0ZkG^>6kcsg$FK!>2!*#nx7qa*JSW z7B`xV7NqBzUT7Jm>J+eWy;&f9VzRewRNgb+e(JaWl`RQ1Lcit%S1iX5M7_neF44U9+{@CB7D)eA}D$ zgS|c2<$1`+N?>#Ln~dY%*4n00E9&Z0LvMvY@UBR#`gZIedI8w^HU3V{mYp_RsK$Lc#gD`exhP0 zNvU2+_u0&5;Fr=gqLr9WN#ebKrg%b{i4j)J_kF|oUc)}Fa_KR7X*@%akb#^~~_G{?KnrfvA= z*!Zfi;6{co)_YIY0`=|2xq*%Me)H(jH#4x?{c)5&8=I*= zUV`wh03no45yeW?r~87_!%5S{pZz5l&Jwy3HP8BVeG!;nO?7Em{+3bLZe850WK|Kh zE7j%D$jkOc^p{slQVN?tiI1Zff#2}0Ex-5%b^G>g0VfqDYTMk&^YcA-T}p0T<2qH6 z|08gWpMhQB5wRRS*mG5hz`gTZMNH`>-KNR;@G+TT8y+RywI3f>4$T@>rdFIIUz`^y zkLj!)e?5AsxuxO}rtS)72}f$Qthm$rB7^B&LWRs2-uRH^s9CWahfAP5BA6pz}-5r^$vZ9gix?ynnnm%8~oJ%eV86C^n#zEH)jqnpWR0 zsaW^uzpVwk@fB=pW>nmEf6!@^|SU9xNuu#oaBX+~5T6z1LN#e9cl1HpfUuC)N0lmvw z%QtIeUVXa~qh4ZIZFxQJteWi;TnbVmA6*Xo&79FCn^&iAKh`*z2hs zBa$mocMBV^R5twa+RUn~PjBh(Vb}q#%bX>;C7p(wn_cT!~>%OG?koJiD}tk9cO9t&(0YaYicO6Te&DAWNLje%ur9#ph)iDL#}u z?Kdl4`Kaqf*Vwc}8mV|~Cb+Fp)5iPdMTurH-pz!B9*zO>&H6`gVMzn?BkJQd3T^pw z$ue!XmOkhTYR61qZ)^nh#yok=_-Y&TCzc?bbPz+xMo+_)0IIZqo=USj; z9u;i%Yw>pd_@{{3<_q6Tl6hOu>=HeA2SuG>01S9HnkKZ*{PX-U)+KJKbom#jfOTn4 z#VLn?veTlbLT!cDpiO&E+O1EHg=xhva9^{yr1(mAF8ECo=tfj^$VE!khixH3hc>K00YeT6*?zT|G8+YSyo!dUHMR zU1|H^A}m&UilAP-Y|(e{?%ooO;E|ITxa${Qj$10nGH%=g0S`O{KYjfP?qh0tySq^P zC4#v#qx9FewvJPG$5Kzj>nk!}=zstU@#}U;DGfwmpoFzPj`(=L4#zY;jh06~ADj#3 z9`MkM7$m;R+KYJ9%jYdF=A27OOxCs84*Rg-&tLJb)YmKsa78A_7fne2u2K0y-W}eK32FG(BO9-mZ zwEZawPkHslhy(9G{WzW;eoLv9X*`elpS7ETC4iEWjPe~rvfL$NFF)t8*ldJQDG%Sh z$8{(+H$=rFgC{sjSk|L+WG?sysZ)C6eL8%};mAOgt4DaV1nAnbcLi-v`}H5^t76J3g}-)N*C_$q+V!bpOAh{ddx`rQ;x~qiT!E+>chitpRN={Ji62eD}iLUZNLq zO&{>`f%uLy9}k_k&xZ_K`fqEh_g(FoDyfj(00DQ@rybi&e(W(jXaSimt2#d9Qn^04 z(D{ik9tmP&Z(!6gYlPfbJ(3MaIF;`PvfQwsyxS?%|5s3AO& zPXZ}*00{MhyYHP#1(x@Cy^CV;9Vt9T2*l&RH6-sosJs~Pfy;cz>k@mrnD zp4*Sxb0`WA@R!A21(DAWf1}+v(G%nkm7hQ9arau zx}6d^u-~kq9FeeOrGZdZZRb}$vyKy#(O4u1qSOQWt_ZorkcEdzCLJq0J4?+kl>}a}k6|JaUchzi7H*)Ul`(h)m*#Q8{^&V_UPz4aQVQfy}0lOPkmA>8O0KYlk zWvQ21s6e^Lw8+=ce;U15I{G>ffGjVM7shWCX@!07Na2%ap(}?OhZTL^T^$}MDk`E+ zgDe#QAu2dmna!60xKj?mZ86yh95N`Wohkca33x;^(JT@+#bgG<2o(~oiNap5WTm;X zmVbS-X-wiw&Gb0QBT6v8q;?I!n7Upo)yu0$9g3Pq)%8AOj0h??$ut{`JWrnhH+I4j zUdtbSLg{kk{JMEPZLlb+>l7ysXI?JmOSV7V>~g-ILa;!%w4f zpPv>n1nAMLU_RFCE59eczC8Od^qa+OMead|ci+2j8eN#`t==Z4yaf#`IXPE&s=yukdnIRfe5s5QBC9Z zGlM~ZejP49f!P_8c|6m9>069glL%Ma8CCBNCcm78S^e4^7xm3~a>|*QKBX3z*~&w;Tg#REk+$;yRMPs9*79YSzHb1f85zoWY|LOQlY*| zA>EDH*>%J2;L1?41imy$sUTxF_SBO0<&U}&wL#8n7w=`?HNkN-Q{=DYuz~v8Ru!#b zFYJ8%2i(Qc7ec0%g}MqqV}tfKF6zXso!?j*;hn8$UBqZOKf8debLZc96#1(ZsV46P z!X^AtYjR8KwChmt{5bhl&i=DCa&BJ}wlLsglE=bfTJIcHx5H4#1jyLkN+!sr!&54S z_5D-f^z%&q*=MQ<4O7Ukp51ZcOZrSo8sGbK#<*n8eS8vT$C)K?<@nn}J^ya<|2vLt zp*<4zA;#||yrMtZv4+BV5RkOvta@)Loc<9xOK2?EkShyQBmjNg zPATBx7F9FLxovy>OwrsvI1sL1TaB!{S)%d=kvQeeN&E8T!dQEuB`^`!*tYGk0%o#A zA%1Ns*y(`>C$NTT&od<~!RZ7v0*qRd!`vZSZZ@wq0|GM<{d?jH2>_+skt!eu%DCi{ z@Ya>zlRf|s`p~UqJIi#!5yM>Y!)CZ-9^1WJg4=o;^-&Fv3Lb8L=-*q#6hRi=2im(U zdiv=$s9TES_5>zoi^4PiQ0Q+6wjH;tfh2NfCsbU`>cWoBzqJ2P??`cFl@K#eMFC@a zZD#X1-)YHwF#kKKD@_~+1RnmwM^UK;m-{)|u$FJSG-z`zz z%(tMZ=U5yD&em*hX|NR+R_Mhqox*OM`@~N;{ zS{NXCSV$BOsN37uS~G?mKy~1qMgPJ-ATX8_p9Q=H9$P70fcpQRH$<^XWlNYj1IWBv zx`eN@G*E25=~nZVe@V4{!_*7syt6IWTqp?omOk~u-Y3KJv#OPNm zo*(WN1|F`>eq8y}0u;9IE{Wt#uJ}0Iu&xb(pK4m+Eprs`>KqPB+ZWyTL-k58#7V=C zoO4zC_XIxO343~`_H2E@&M7g?2$>(>!Y;ipvRsKX2p)buJ9!_R9_vyk)n9v1L>+&$ z)V{1x9k{6L+f#GMf0cR@Kdl`Iuvn22<9%!_`?9fRd72S(ryWxzE>gkli-?SbZ4+|%TkHSWLBc4;*Lp|Vdy*?KCs_EavrJT32gE^?OfU}v%UHZ|*aUrpAd7Rrw3kzYT)?cJW* z&;NA#3Bd1vi@g%c%kl|U9R7%2s~_y^%rzIOj`AaSc2Kv!G%n0o%hA2jmt}p`)Z+LH zo(wC`u_VVFts@5xknbcdEmx)YmJ@pm-rtGV-i?Xi_Se0a>h@xJ^RCTiO`M`)Qst5L6?L7Xx<0Mve-;tB_olep@H$GgK zTB%`tJNhbL0b{=DyZg|uHyH9cE+yO^y(lxA=N8vmLIt~yZ{sbG$(?&&7p;A2@vzS0 z-#rSu`}~xrdMgUI?^MJoJ;^#hC-{nVLT{fu+V=;B2kIt4qHHe!o{0C1?dhH^PkA;1 z@%U;Fdu!5=fcNV~XP?f`Cvuc*;=a#1GVXsOF4BFvbB~%Y9KibbCT*w2=6T9ruvi{= zD`7921(|q%t3pF}nf3-(|Cal^=J^aUEd%lB@GHN(+S5jMw?*Y^gePA7KqI(&o-SHE zB_yf4{nU-VPc~jnDk##JLQ(rFPsxr$yw7xdigYHDYHKd0tMhgs~##H#L6 za_Cb+>-z4`dUWh#f2Lriv-N|Vm*tx?aVOc0yLOxJZ<-V-Uv2mq*E=+V(tU1Ha6t32 zPTZLr=gRjcS)5aUfY(Tzbx;H;09V*m!o`mHmM$d+v>d zoJA_>dfhj0-qdz&ivRs1OS${#9$tUk1m zLLCi13p+m;I`4aV)1>k9_fL27B1Ws*v%VC&w7l9`qISgDrnotE-{vH{ci*l1d@88B zPgYJ1gbcAG21NJU70Gn_Qb-S5L<-X<)!sE^vyHDGmOw~0GfbEEJCy5SY25(iH=Li~ z6Sn2l&!79N7kl8X)xGt6s!QfMd~C#b-LD;dUNT%#%{P{YMr@2QAkFMzjnXb}HJR*ZTd_IEM3F?=x{^ zssKl6uGE$*?7HO&3+or~p~x}32rv1I)qWNem}|V!4}D)A*xliO?BgPHhWxr?*07mz z(o90{@;QYi0GF99Oqo3t6I>B}>F2}M>LbIsy*Lr%9mdkPrsh0H%gZ{uJmuD&>xKQW zoefW$UNtR9{ml&&h2;}_=f$R|hw<%k!TZBnhIf(AU78=o`;yD9?Tep!h0VS;G$Iza zRQIAeQXpw&C@u#5gDaR%-8q9sUmfU`lD56SlFVQ7T(_$x$@hPtTpZxW%4{R+QGWy+?(6`k@#!-UqF*4O!$$|kJ1_{O-_Z{V5-O+@!QnDD5)LKc#j$>iRO(Q1}y-~W&l%mEi=;v1C3tsv4HNEwSQ zh4ykQO6Hel&7TE{h0F^5r^)W{$66NjzM!;5Vs1}XY}@^+4uG5g zzmtMvQjXtb$(SEHkvjz+r|kdt$c=wGYwlQsRwk>ckD@{Th)PQRAO9CL2x4sqHw6N~ zApdvB6akR?RK6r0+`lX}@Mn4M{EeOgs(Sg^LoATK4@*T=Sk?l5KuEH&VBCrKpnpUf zweiOn2UB^rRqVZd^>fO!q{QZ)$ zpaAJCtp5@6CuBgz|JgubDuXN$1g`&o*Mmobw{`q`@&4;Z`9E**;BT15s)3*8`~57( zA33-=R+Zd@j=jjdB*F?W9Tt!EffElPtCUJ%DRdR-))Q3@wT_FcsQoc_4H?92Eo;5PYyN(p^+!M}3|&dHw=UxDD{;W;5Zds4KM^q<32klsr6 zC$@#-yTt`1kf>+cukzMYZtP9t6J)fWg17I&zL(tc3Y`BY$aZ{MplY91%XAkmxw=s= zrnDoWV8$`~&XHP<0~rIynbunow3gZ5IZE~t)LzUSF$BdjqLFSK+FDeq9h{vZr*0)9 zZ?&_Pdsk(AHA({#)5;J`jr{-Dd@w` zJoT1@LA_0_CdZds$#g$R(gA~8OaGJJ6MLBMF046|y`I&y%f6cx3?Jz7`)3lLpQBHU zEj>eMd+2>#g4jRR-)buNPtz*#H=Zw#w4lxAcW^B%owz*|klu6_@>ZLrqiy$Ysmv|D zZ9B{UEbk0^xFA;+>s>NRA-`gwj`Yf)WmRRH9IL#oNlyPWN!lfLMEvOE=}VSPj2DaP z<@vu`!Amd{O*n=Q3QB>O$H;BC3@~ExcQQuuP|V`;Gk-W~@pta*RV7*{hwi#~K@$UU zl|NA~_DP$2&6c)(;+>?qKI`3jILi1x9@gZV>t_t4O0)INW_?4t*nedefq361RO)=V z_k(B4?j0)nD@d^3wOCY4b0UrSM)SClgx;||p>I0DF;7~n8 z;?PlcUWTc8EWPTFT28s?_e*XT93SM{Ksvpt<#fzC@0B6gZ?wg(V3vj1V%M)(lDGH1 zFG0bryjt?89YsbJdr-`!>M@zWHmK*r!jV(>g(giQNv>hB=!ZXaw(`a~TP_qP5v=Hs z+xhMXL9GbXAf%!ia(4<#~kW2e6 zwxCZ($0QUq%Wrjn|EGg{Z$I%0qL!q+cQh<^UERTz8tq*o7a+;3sUG9}hs18r*=M|p zg^yogTN7(u2#uS(*>Y1%{*h5=uh>I*T>}FHF>i766(DwQu<7Ht2v|y_-|Q6@Fa6NN zH$KCKr(An$VsSOGFOBFH;CMgYM*v)C|@xNDjzf1T2=9qKMS_=cvbd#ivGvFmm1Nh|2wx0S+^xS z)Kp8Firv`up0{E`-1;vH{58*q$)eX|9crFg$z`#llQ>W8+)BT9ng88CXb3549h{)R73Dx5)Kkt7h8^70o;8AEY zKt&k!RtJ_HeiTAxz3D?g5gvCteb1qbTJ&*T^umv#Cy~ESh3IW8NrRGdhN4Ry?SW9a zXD(#TI~Vmm`oh-On}5f?@US1e@Cdw^C=a;@$m=ywjqb|XZv)$&C8inDVX3!{2L%pL z+I#t>&3C5cva0LrEmw%Tg8#d^oe(!o+=t_55W6d z09D9JpRSXis{?tVZi!DX+YJ)6eHzaRv3%@T^J%Ot<3Y&c>=jZvdKHWfUPP3)&+&l= zee#1s)X)i`l=!v_S><~KQTfZ>eKqK(n;Wb2m3g1X;6*(d$IND`Z*E`n7Bcxbdtgg= z>;4v1R9r9BcdL@l$*dfG#4Y6TJO~2`tNTKsAw7 zItOK%A^sbj5+BLzaSxA6(IWmUzmMFapl^VBeWiD2A_vcIyr_D>RiLvw!HaKBwA^y6 zAS_i+BTlj-^juxS+_#K? zoKeZ=4#lipslSlF>JRoEphC#pn^z()`@2hn9-}e7!GD0Y@vB>eHEhz>2Td)&a0f&U zJg&T^>%@#|dcMZ$oXhh7EoH+;WX67f)e-IEHAIZi!tUFfN0Sw0@?9*%GMo?b{%V>; zs?z?Pn0R_|CG?CX{uzvT3QNF3C;3-h*_DQNX2UBlR3H3fj}T*1NLZN8ojVcg6y}}% zFgJbA={`okig3un1dZ}v)wS~J_*O$Ik11dWa2wvVgBTzVk1!n?@p~NyFM*ohTE9H#wFzr(8^+H^ zm$_R*AS%@`8u7QgcApG`X|7Zprp({H81$G>ih|Me;2VYl z*6Y=B_{|@z_)OO@B8(l(uWXwGA9JA)caCbys!D!$5Fn{r7T84T$NiJr-i!}5k`k0x z?-%2gIg*~n(iv&uh*w3QATHg|cgH^XZFAa5BGN&!_d(JMB{jk1^x0?xb^NbAPcH}N z2G=%9uZ1sWf$)KwC;IAbe0B9sCnhU+Y$Y88E7EqMr(lVlF741FuJ|_n_8TySD5}%c9l4~(V@DLhoyz^JDBf+Y8BFikh^8|)qgyZlK%hVh0UAdaxc0@e>w1d;_ zC|~-P3B3C3-E+(l^s6HOdew1p*A7uG!2P-{ui%4EGL4wUScdptmF`#?+gn^^HrfjR zh%~G*h?HGL&sfsm8IuJwMg!|3MDl92Yg~D0fi%p3G%ypiu46z= z(l{QxWxr?x{5)5C^F_noR-ousP$A63@E=sz(0Qz@={mnM3qU5#LN?O+s2^LtBFnIN zp?7TyKefkmzhAPTs010W)mn8j$@Fza{L0{zI$D|f^ybk+-dswkmF)g*HKj5h)MD1* zDiEzm7DGbTz&9i$gz9ae1#Mv6~hD=LslAEi4U6#tt&}KO$LMUKz%q z3H#y=QqQ5vyuU5mb<~ZdK7|k^N4DSke8#wmV4|A_>}u`xdLT}&LcSjYbHn9^1^Hqe zVTSEe=VLtucj7*mMZ?;4;%-!0Jn@KN;yG_DAvp_iGatTOE1Gbq&j>8qHMNT42zR)~$hRen@dK~va@3LG(AoMOnBNIJwskGS5@WArj1GrI;Sr@Ggz^8&s z0`riFG&DX%@R&WKshRT`ySadgo7sFApByUf5Ce7xv0e^^LGcs`NO@~tAusS*?$_oH zd1})HMPq}@_$)O7DO=u#jev2I3929Qd(5BgLBi+!6LkDfS0I+kX8m! zt~JUF&8NM#FunCf!P4i6tB3MDM-^k4?6EO|}R>I}N zRMTs;aYF<*iWcJie2y0$)dp-y72Zh>T9Be0A6a&utx*|}*u%f!&-9_VYksXB2*#qE zfeNGuc(KWXVRN5hmwTOCp8y~QfGBul&L-0ETbpXqcw&v z*a;qsl_!FX?A7YToPd*bG*xKzv16Wn*V0`Ild-$wxhi|CXyidbJD)a+9NM~3?J&yy z)?t9nH+%NWDaEtpq3n;1>4NJ^wBt@>{wIey0UZN1M&p`wI>}SXEcg!km-7M+3!H}a zPQ;G}(zCGLXl3whxS~j0ilwqjwBLl8H}OxUmc-071>`guoNy%*aLEsJ1aKRsUX(wh z>_4&)+nC-BX7A#gt5hfTe&6mBDAzK$)kGx~_%%mVGq}^=x}@GXG^R7!c%wyQAH5Nj z;pi38>I|WO>7KXovP$=LW$E%-Y;RDxMZIky5r=LxVSnkpP#t29oz|%WZ&Jf1n;G5C zBhoeg4>>#E;m&l2o706R^4`>2cM6_YU(_mg%yG-kIX+ZGJA7S3zvywwFxy58jB5IXsA;aoDkqfkVWz>&-QPX}mOXCXlD%tgfA$RwKX_ts zWi+Ho(efwAIfN*QTZ>N|IUwtK^tcQZ*P4#wI{RsEMbXY^apER8Hx;|bejlkat%?#d zaO666Ek*d=sxHfoN#`Hl+^8$n9_ti%vJZK!Rfw@;-Q+YTwmQ}*tZpn4I(zdZuHgpebY^5xI@MS(|s_ok{`Xdm?^#-8}irViVv zZXGTWZA$052`icmzE-M<3c1{8^rwnm z;wsu#@rx?S}M7-!@RGO^R?1trU>pxQ|(0eNR-0k!q;&$ z_4D3R-t@|B(f#iabi&5@+e;vkbo`%s$6l#1QLl_7<_s$*)9OUs>#^IeX(68Yn#mij zQ+!wP#+PJ-^wPxUP!-#!wb{5%dkAE*F;$hob!5E^U)7B@8)`$TA)}ynLM4 zR|F11TDABqA)Z!&y?)bmPeFQPN_tU%pgP?lKU={oKn>(TjfcVK?V z(eh{=%gkp#J;$Jml>P#}7mcd@Yn8c!U@u#@We{)TAHllIBXg9O&)@Wz6xMJ3EZk{p z%#CDW)mhV&DvDvEwv(w2yjN$=_1dtSgJ4DSp0E9BfwK)z09>*3w^Ob)0DLm7K4Gs( zdUHC;>C)%ru5};VM_e?<{3=U|{#0w2tS7`T0ORLugOA0FEP()KF4G#hf?hA;_|3?; zH{{TTQ>!L`ce%|^E7}{q<2zuSjVEbJOA`}Vx#K6jbysxmD{)}|Oxs^TAvFdmI6FUv!Z~pSFhL7P{g! z12WHoXZsGUlcbj__JnnR=Q1tg=!U)~SJ14jUeSmoVWXgx&1IqbS{@SMy40&UgX2z# zVKopZX~Fj^JhUV9DdqAWu6#$(hIr6?sQYZCSLLrC);lV$7cs{RbUC`awBH=b{Ep`* zzQS{yCQV|81xp{aWth|6zekPWPL({SwaC{O@OgDqFyI&c&m6k$4{EBl#auCJJTp}&PFev)%KelhfZF6lqp|LDa=jOXoX|Hy))D_ zeP_z~Td_&=WGE#^cqAl|G!(KTTEg}#pg~5zDwKyNp89sms=!-y#(LwvtusQ4l}Ifz zjCM{@(F0&)pN4{&qQ^^+P~p&-^!O6Fi02<2EN$+RV%f5KY@xfDAE{~R&eVwLDb=5y z@C=S#T{4*KmfLDN*vIM}W=ts})(yiULtez0>7$G!Joq>lo0n#B4(Z7(kRKuQEC>qL zGo!{Q=~CUsG2hP04Slcu+}XJ?(oKXHz3qXKM}qX-TAXnVwLAFgZ1?BqWM#lsVDaXc zC*OVC*U2q@?{5|7|FTyE;Iii2*Ygm_XSez1B0~DdV;n9m&vW7p1w2(z0Ei_tb*0G> zzGLm|CZCuHo%f%v_m}sLvN6B^(FoVYnfa{3Z_(Yws3TSQ*fVG=q(CFpkWAF$B=bkN zFc2cg|~mv1X^DD>Ay2)00`c zS2#c&9FjF0C;6N2_TGI#FfZU=ZsaA!4L=T6+E_Rht>kg z8xZc{FkGdQBt`fwHPd+E&v&=Si)oN~apI1>q+IKbj7T4;%;e+6_M3^&JxRc7K|vWO zI(w|1ck+sW-7n1TUYVzk!wxWJ`!nR-ONJ-VQ-iO;ACFhfIZ?hX1IG+x{7^Xn%iXvEkh1 zPs&Im@`l<3wY?>}*0u9hS^jS0sp|BLUEG9OdGF{&)vpOp9z0Ly%KVfNMRto>A*<<_ zzI_-IYC-V;e>51vM?{UjgyodkE0JcrC$pKG=P~-4C8p{7abbVMM>J}BI3;2jjF(=&(b)W@3r~>d9_7++PMwcdM8qrhRSn+9Gz)dt>uvXn zT7A!44(Ktd$&r~WJxQW0=RT)GT<5Nlo_L+rqLr_|N9h!*bKMp{Q{^?a-*1Q{&5mty z^_@@P7k}W_)1~g~k}7^f)#~FBNy(Pop7z5iT4CK>t_BTH0XH|L9H0(TZcY#$}^t$eN*EYGTylCPuA=(nkr5$tBlBZ+Y4Rw^d zy`UDQDbjBu6+P>_rk=6Wfxi_MQHcZy!*9GkjR~7VWt^ z`YAx~#J~Sgz`a}K#A(a>wcdxuxqmm+>fxcomE5i$+beyYJ&T{5Cmkaj$OH;#oh9^o9lJwxDc8BFpYQ~rS+e;U-GANn-E&IQAVF9FZPCOA5WC;ux75`9t{adMSMAtDvW=+b$F~Zb#2~np|ml zF)ea==nm;F8@FzGv3}#PbRLkJdTLSKJ-jhjVcL$@WWDj8Ztj;^;+oG9dwBe*ud}h= ztTR=A_WqpY&FuGWYy_mK_m8=R0``L9O^&)d*krgf8;~Y~ODtbm$6j7@n$|cBoC)!a z;${uf_Xf79H7d{>_!5}p!L|GAGPOj&5@fFU$JPV*rFULa&R+2c{^GA%K``9b#>_9{ zTxBoVwexJ7zOzIyMdV$cofGX8_u1t5{V9FjsAqn>iEX2s=Y1sSU^}E*>AxkmGnF?K zF0H*s84Un{RGnh=^U+@q^4;I2ELNk+OlnncjuenlhQGh`$};iYQEU;Bc)9$=VCM#2 z+Q6xw#@!}UX70<*5D0Dq;zEjw;H;vx`SXfzMs^T6Uei=(||vhYIVGZ3|Re%=ifhden`*Y8AJMmh4X@J zqwdhsO=%r3yECX;wIlvQ;6QzyN?eEOsZcFx_>U0*d6CN&Y;B@TY zt2;ML1JmG&-u*ylsz!J@wyh*gHnynQi{j<81y{XRf!Aqha!!n?%h&(^{61zsJwJQy zFbg`*Wht)(R0~~w45m&SB=gYXS7qGx#m5`+rP3&W*~y_Nq9UpOY{ieQtw8k`soasCfq8M*~( zCn_vS6=VYBGbkAGc&;()8ac=HMvZ`_uUSb<^4O}`5?&LYE-=fSHQ+|A04p_U=5OE= zmNurMERr|yZ{QQ3nJhX^$&f69jwdnR>}!s+CaC051laqvL7^0O%gz{(8HjwXov#Fg zwld#Pj-xZ=eIa@WI33;4PRDS~+`m4)&g3E2Fj^&9O%fTpn%>7?w$4?8H4@#@sg7s z_r)avH}w5*)@MdwDt>hQ%dz>N4@27n*=E8tlx2ZKBci;yod|;>iiXuppe!bZf13B2 z_jAZX^9v_=Pdz<9B?K9&}#`m^W^jkG_u6L?10^r{+vxy zBjEgi@`gs{#0&gEJ3$aV1)Ep?_igEG9o=REEI$89!1HcLC$dx@u=EqhUU>{Aco;g(WlFs zGj)~j8-^SPAFua=>J`}m7hZ;qzM{`oMW0pN)jYw;64C%lMC4ZM|Gkg`yD_YGfA%bJcQsvJ+!8v+ zqvS>x{#gOVYmy{=+zl(N)zcs=W<@|Vd=h=F6?U~i7Pq#KEE0oVNH_A(FCqLfkh-b`+qTu52mwNI;hDO4Z*Z8w* zXc!^ADhO#JNl(SVx~2uHa7eB&x=o1yL}T%70u(ohJc@?R?4CXqmrebnqyCh)esZDp*;4H%I~L_7TBOGFSX(T{EY zp;aUtTaFhc10#Slalm9#%A3rj$Yd21B9L{=(LthtLFQ0uC|9xZZ zes#d%gM$F483rR%XxT8#YEiW+XTN>9XghxLx zKy3#cvtO_CH_D|UC6&j;#kIKj@xv?;x-!=!9ZMsqO84f;hnwSJ+b#&k4p2=enz`zw zgVe;gni`SBgA$PITB1HbhhE2uht1ZMXr6fp9ub7n?A03q=w!|F4K_(WF~Gz>Ch`ME z%tpTEjzAsjNcj8Y4V#zYrxmE3ot+*5K|Erqsh%TARwKmAj0}!zR$yY^6*!w!qC;Da ze*9W(^)R<}`^0em;b&)En=GO5}B0X_dB(2`Z^XAEEVAg*Bd7r#VNR6PZ zj}6_z;B-s==f?szCFL8yEGD_p#wcMcJj6GfcUTO6lL(c?w`D{5-4U0MF~i3IG{HY` z{@X9!Mow8k@Jwl?jbicP7Bb?{b@?f33z#JWWW8fao6Xlj@Qe#_yE~H|rB@<{w9z*7 z#te3TB6NrXQ~zk{Xx`omR9&0GHDet9ieRBaTPE%!DBc{F{xXNUj8K`?sfuPyoGP&H z>?=Z4vH1TnKy(?LK@G@hf_oTM3l%H@>e52=-^$HOrm_P<(J16!Lj&p+q1-Vh!YldP z;hjhnegvL>bE^lGqE?kOA@@?DFkTJ8ffV`&miaELD)j zq{NF2ir*M*V^TEYl@H#}Ksg%q{CSa0MW1{fC89O_m=}EGF<&#@T*OBF-IaUWLqcM%jU7&A$9)y&dN^)1>%F%6a*L z4242Vb9fI3F)0E>`gv*MS&>8$2|n~0e5dB8w`|Zaa~_#cqhM)NL^;d-axVj#`z!I|J%jj)77=7jd9(5-QC zt5m>W(mrF``V1Y`@`D=uo;{zIpFh2&dv?z1zdxj0DjSTQ^6pu}e3)SZ9f2`EAv!I3 z62v%bUl*}rD57@mSX~G<5a|W<9C>%P+tk4DbvnIB7=zd0O;oo^gz^ZVIE?D@SJNv{P!h(HEX;CR4qr8 zapIFi-^YN2>Z#1cz!zMBgp!^bSO-rAcE!=NTqrLO8ofX7{?hklECN#QNY`mVwtDSBb-vzR4I0?zIx zD*nE{2e|HSkZ>lnV4pBzJeYjJBvX#xzV>;#W`c|W{j`jX=|BJ8kL8!|b4oT7hB;DQ zeL@4S|41_o(xM}S4dc7w+{Xs%!2)ShV|gt~>sP74jfr28xoqfM_GM*sZ|wMyC!ulP z{10zTjP2obVnY$-%+NRMJqYB3m`%<@$7HkcH)!g387%Y{lPQsQc6Ot0^msCO%`xu3 z)z{{zvhL5gang9U+pBZlKik96;^Z#9Z~;2mCyQ=>_$tSqjF$H9(9lrQ^XGEFrZze6 zyBOawGNJ>=tvCu!eVOyqLt*7g`+B@LusS8R8anhC>*fA={rc_O&(UNy#Kgop7}xpu z5``X5U7tOn0;fAzxAa}`!Oi3>%okulD3sDwA1RPRjHf3j!yuwK(^|&yT>ROp0{BuG z1XRYTQUBqJ-e=nqV4?^3`#%ta%8;)>|UFBSvO=etizl=tA6~x;w#bBMoG$f*t-(IAOB2Ks9s zZ51iK2Kw=!3!*6|jJO!>Yu$WIKxfDTdq~wzOw+er3;FDFj%|GO3zX{Ajk-q0ncLzv zVC22@hyLVvf8buFzV@zP_hGiIGq@et1r%$y;9S$`%#q};tI|fwRDxp$80;#^ll!QG z!os0Rew&*CfoJ>rkzJz=E~EyVf>76!t`ULyIrs_dFIw@&TAtCul`V~Yl0wzN*0kSqrQJD|KPA#8y39^LA>%Q~%xIhl35#V^A|msaiQ%(Ycw$dE zxY_7b>$S+LPA3&9WqerLV4B|5I~e0ptlM8J*s=Akvn+pmXI{X!mG?^)Tm1Qwo=?4f z1Uir{gw_lOhE52x!n)(_Eyk7J6p}Y*EO!P?`yL$1SYW;wu2YWtN|E_!!qV5_p}8hx7Ouh*J7lWbp9)7QwMt~+On-leh+?Z3UICZHD9FVV!7 zw)<%%c5bPKZiGSswtxZGQXzZeRkZHBOqvTP14{%rS{_V z8FB6wk7v#|M?-Z^f0He$I|MHqWE$qyvsP?wel%GIC5o}S(=dQCOaKz2myS}>U{H~i_a3Co@t4K)A<8qJTPHg_3Fx_0c6sw{_)q%= zS<_R@`<@>$u(0-vI5hQM{SfwvmOAUp5El#*>Tu4JFMh6QodW`w2aej-&!={r<4N%l zPKmc>^E`{=lIhYe?`r;|AAclai?f z)~^}Jc3ixKXAj49e%U8)_=$K*88l>9`F$GWmYJBOj(7HUUsn9Zk&>@c!KR9v&>((@ zJ7j^!`Q1v$T<7CGTqf1obSX`kPVADsR%pM_zukGpL8Zhh=7QQan};U^ z{=u%lz9<@-tg60mm`zVn;?6(roh|I@mFE5h_Yjjs)yNZ!167n3h>C%H{_|b%wdt`} zhJXzTmYdIwk;el8KG1ji^+A6En&PWmu?r57V!ORf)ZUxZ2Zc`eKDc6KNO*iiAP2^L z;!cS0KE*$MG9bG%@78-sva;25kwSswH2PYYUFdtfHw2gfg;@lYy|m;+vjd;RZe)N`a`A8;Am==`l4X}4Dt z`8J{AH#u}yY25$bYey9tMyU%1pNZ1UkGKqobuHAo<`fUzfNbmQM1IPLM1D+}d*fM6 zAx~$o`9@nS_ZNM;cvk?sqxMtBu);T1>$So61+Sr`av|A>aOnFc#mmPtF*Fy|OzLz( zDreI-%JKXTH$2)81+1rRIZR72V(CRvOg0!~m@wtL->W@KoW)x|6gyZR3BGnp;r<)5 z`jQY-#uPIGiZfRP3dr8l@hOPU`hMhJ#Pqut3>XkyOeR7iGwD^t8z*jlTsWg!2>0AZ z)lnxzHyM!;O|yi@N7zJez&j1FLqb(w(5TyeneIut<>7Q~gMlO4In?jkiw*f>km6l> z2h=AG3*|q+(Ky?qQ=8H>!e}0#NCZ>GuQ*D1Ro{U6sMc>+kJoaE=kzbWJhB2 zTOBPRqz|&7XdgUS6J8EJ=#3=3hPT97ARK;Jd@cFbU=mmw4rY}08*>>a?mod{Zo9?f z7^eBmiqRsmyzk)&dJo<6mT09lgS!Z8yK)n_{Yn*j78c+g+SnoSwit%>96FZ8{vyvb z3E)KCD<5ijq$rkbZ!7bHc%#DeI--c&FH=Ww>#@@h%!{q*$tWl2f(YBa%cKlR8tNn`z&gK*Az6y1Q@s#nJ;qh0*>CSdK3w3B*WFh9l?z(US|av=4=JYOkC& zYNIm<{J)BjAV2VZsPvwsN#vqr40-Wqt}VKPGSe#ofV6>2-lS#ccQo%7XJ|?&&u{e? zRK2e(9QYQXf$Kth)Adn7n$2YEBQjB&SH`F$PGcPj)0*5r={o)bPh0SP8WxwK`8{3Z zsb}J+y2UA3>^ncKIgG0++3)|bSv%V12f!*1Sza-^(5JEth&ln)0cxzE_qRXh! zpW4sos3h%WD6P#O%`6c`o`%5`ce+`PH>vMmVb&4B`C4Nu*lctMhQBAyFX;C?QRdB5 zsqx*p-Qi!$@nY|YAc^MED+N1-4tX0M2kWj<|8Cn_9w~>KAbV2+y{Ru#P%nZ!;vArW z-NvvQJAGq&GC}P=mOjKzp-_EU&y{55juEnEppXB^k#5>2euEgpYO%}{ta;x!9!Gcr zopKB=IQ!tM$|#{Gq?);pZF?k@F}9j0<6X^L@#BQ2C_VEVz$aLT`b1_5lbA+(J3{r2&-gwe}#Z$ic*mXDQIcVrmCG^ z5NmOw^p|07M2G`c0N>Yj@xPm@CZUdI@(Y{Y6P5}*()@fm7%@ov$1v5-vIxz^*uHbE zT8w-xYF(Q0#mA#BQ{S8~Lxh~w3Z9lOg&-C>85@Zh#nkpJepBnB6q;zc?hS9|t1RI6 zd}|cjCV%EU7p(7+{6_2RD~Ndls8&p@<%n_JfdFo!pHbx~_o_{<@HVo_tAgV4$?NDb zc0A?>E|a(jjTN(LQ7;ID@V<(I>^+x^TW+?}F1N=08UM6rP~x)xMD|`V_NCMVUmW;cU+#|PSf=&4tgDt z)n-x}XA!SY?)N_cO^2GE&W}5bVh(eaykWQhB#;XcdG!9j zQbsH@Yb{x_qaq)*e+`7p;9LarAjdMJD()PlVi% z91%rcX@2qW0#Uv~7^v57L}&j7`T-Zw7$*(iOYCc(Bvnu<&|E^S3jZY7c@AruZZTCK zlB}WKnEb3qC;xcjLpFDI)AbuNM{a?N_-r`Yr91c?^_21-?n)PI+%z3-jZmDthOlla zrmh-)nT3_9XD>4mK{}U(uw!~)QT0csE4BUQElvcTAJLt~-?1fkwI~y_7pwZYk*qqSoDaSL41y)^m{BW7AsG+cL8h)nhh3w<}7T6$Z!IAtldw(rL0c2mF&U2uyGiVON!TfZA>o zSj}Q*l5>2woUeG(w?)mnv1e~VFAl^mn2Ifnm%sPpSz<{rJjfMn z<91*#hq8KXblS~h@MMwYqN`Vu`!JDEBWwYfPaLR0F#=Sn1}}Dqaq?ukYgOS z%cnQ$sy6c;R$t_L^NfCCBu(d=1zyiT9I%MiufZ!wGaZa@B1VdId}^qL{ExM@yMR~r zqc3)Q0aN0}W8ghlcYz~9vv5Xan+w1=)K(|xYPf*GL9M=HVv?y>q}c<@t{b=j6K{lq z9Q|uukpFDg0IM6YFsp#S(Og+f4*hZ@fV;xKr1EIqP(3>}rWOg}v*Q){49b~@o)bdz z%J+cFF)c~v0d#k7Kw1}Yda?@&CZl0Y;5Nx!87bBU!2JfOK3jfgXK(LCkws^o|<>tXuU2}7DEQ{s{aCt^_t6*@-434rTTwU@tCA&wvUVWwC z#@J7qL)UE==fr{{YEBicvZpSabr~_%<>3gw35V>l7kGfXs6w0n@5%bQH& zzyyA@(6*MVALnIIK!CCs+0&Pt5d(;7PS~B1vVpX(l2V6za3z#`+E{Ks!D*aBMo zyusZa#)6F|Ehh=Ip0Ov+erOVuB|oywkFU%t3KK34KlsT8fhT1Cq3FZ`4_$|9ZU$sm z;#u~PHUr1ht+s>xpBNz!zDyr;1RT}u2L~O(wDkj*`Q^45mI`lIDEL784UmK*(|i{u z@%hrL$4c!*D0(`W=6kR}O^+wYW;aAR65TFEyG_JH5LFREJI&wv0%YPxsE5?p5R?Ip z4S{YEdmfce3wRunY^g`2OQ4b5#XAkcxolVwhi^O8&|Z_=EXW_}4g3QJDB4G1o5qNz zg(+bKyw$k^(DeY-I!!7fFrP#pAmr{0YBGbY%ao~iUFy+cT>3wK@Wya1I`s?Wn~4t_igRRUXwqb{1|FjX)7BU8A*6*)a0L) zA?&OHXkkhHz=>t0d=6~&Bz;pb&T=RR?<5Jt9ywOr!HX45Gn4`%deNF)ruV3U*@$tprCLEcc z)!luE$yFZ?<|B?nuS`v17BFr{KF$_)&PMQq*oJ~^NgooMCqazGHCkHg@J0*u_u{?gA@?`7~=VjI^y32bd^yD1=W&&mYQ z@+t$mc@Ti?iC^o$0E?*miT{Ki76HwKkjlu|V8q3l{n_}ge6TjoCY6#d=~IP9)jtSw z>%22*s5J)lu*37Eo~?Z&2Zwak-QWGU;*{wQKnX@xE`yIDQm55RITvs=g}0$c)JUO+LLVhAinfQnh?g;{~%f`yV|5XFQJ z1#vlho|y?;x|vV*N^T&K3>_;oEx=XTOIs0$BF3G7{RO(6n42a^h>2wb0|Ny-x6KS2 zyafRrdGy)YnSvyoGIT1=Y?$3PQeG256snoTeGDgah&h~aKIk})TX%P{9E18qS zEzNwTSduOdBgZeFn0)ElmHB-8TJs_{erFI>33795SV;oP|LgX;M;?IpJ{-bl@x!Z` z6;wTz8FhdIk7u`~2|_C#B0VTd+p3s1DVQ$h`_57NyTo)3R!n@nW>Kj@#P*Oz=N8|5 z(8TEIJ#FMmagR;M#~l~NCivE$r~p98XaVI|mq-JMU2Y`MZ0bk&E};4^)AWyQVtv%6 zOWS?4r<1h#!iJFXcSb$mb;-AnlTJJ=KZrMDRHn7L)PbJ?N_#m(D-%WTm1%`w zWWdcXM?wY=lxU7+f=%i`tYrpaBP{S4DWE5RZ!^W2ksYv5&E^;BouY_;=wD?TK)G)HQLUB7maUGNaBlNu}hCz&yc)YiwW? zxjxfR$br2&ft6pTw}qELwMXOiQBh)q*67Ds!Q=dLGdMEX3Lca-&Jc>+)Ac7ez~fWk z@zM?HDu(}=Eb_1ww55UQRz=bP2Xt;a5M4j~86$)mF=PCr5eh_C(UuIxWe-GGTy;6& z4NRwB1XjtFrAMJyfye~r`P(}X$gn5DK1ycL+Aab;0G5iFgDKaL=UW^N+u9Oh&pxz@G{@s+Y-`1^q9ni#ufi literal 0 HcmV?d00001 diff --git a/Specifications/model/information.model.md b/Specifications/model/information.model.md new file mode 100644 index 0000000..43e8b84 --- /dev/null +++ b/Specifications/model/information.model.md @@ -0,0 +1,151 @@ +# Dataspace Information Model + +The information model defines the core concepts, entities, and relationships that underpin a `Dataspace`. + +## 1. Terminology + +### Dataspace + +A `Dataspace` is a set of technical services that facilitate interoperable asset sharing between entities. + +### DataspaceAuthority + +A `DataspaceAuthority` is an entity that manages a `Dataspace`. + +### Participant + +A `Participant` is a `Dataspace` member that provides and/or consumes assets. + +### ParticipantAgent + +A `ParticipantAgent` is a technology system that performs operations on behalf of a `Participant`. + +### IdentityProvider + +An `IdentityProvider` is a trusted technology system that creates, maintains, and manages identity information for a `Participant` and `ParticipantAgents`. + +### CredentialIssuer + +A `CredentialIssuer` is a trusted technology system that issues verifiable credentials for a `Participant` and `ParticipantAgents`. + +### ClearingHouse (TBD) + +A `ClearingHouse` is a trusted technology system that records and verifies domain events. + +### DataspaceRegistrationService + +A `DataspaceRegistrationService` is a technology system that maintains the state of `Participants` in a `Dataspace`. + +### Asset + +Data or a technical service that can be shared by a `Participant`. + +### Policy + +A set of rules, duties, and obligations that define the terms of use for an `Asset`. + +### Offer + +A concrete `Policy` associated with a specific `Asset`. + +### Agreement + +A concrete `Policy` associated with a specific `Asset` that has been signed by both the provider and consumer `Participants`. + +### Catalog + +A collection of entries representing `Assets` and their `Offers` that is advertised by a provider `Participant`. + +### CatalogService + +A `PariticipantAgent` that makes a `Catalog` accessible to `Participants`. + +### Connector (DataService) + +A `PariticipantAgent` that produces `Agreements` and manages `Asset` sharing. + +### Contract Negotiation + +A set of interactions between a provider `Connector` and consumer `Connector` that establish an `Agreement`. + +### Asset Transfer + +A set of interactions between a provider `Connector` and consumer `Connector` that give access to an `Asset` under the terms of an `Agreement`. + +## 2. Dataspace Information Model + +The following sections outline the Dataspace Information Model, which form the foundation of this specification. + +### 2.1 Dataspace Entity Relationships + +The relationships between the primary dataspace entities are defined as follows: + +![](./im.dataspace.relationships.png) + +Note that all relationships are multiplicities unless specified. + +- A `Dataspace Authority` manges one or more `Dataspaces`. This will include participant registration and may entail mandating business and/or requirements. For example, a + Dataspace Authority may require participants to obtain some form of business certification. A Dataspace authority may also impose technical requirements such as support for the + technical enforcements of specific usage policies. +- A `Participant` is a member of one or more `Dataspaces`. A participant registers `Participant Agents` that perform tasks on its behalf. +- A `Participant Agent` performs tasks such as publishing a catalog or engaging in an asset transfer. In order to accomplish these tasks, a participant agent may + use a _**verifiable presentation**_ generated from a _**credential**_ obtained from a third-party issuer. A participant agent may also use an _**ID token**_ issued by a + third-party identity provider. Note that a participant agent is a logical construct and does not necessarily correspond to a single runtime process. +- An `Identity Provider` is a trust anchor that generates `ID tokens` used to verify the identity of a `Participant Agent`. Multiple identity providers may operate in + a dataspace. The identity standard used by a provider is not defined but could be _OAuth2_ or _Decentralized Identifiers using did:web_. An identity provider may be a third-party + or a participant itself (for example, in the case of decentralized identifiers). +- A `Credential Issuer` issues _verifiable credentials_ used by participant agents to allow access to assets and verify usage control. + +The diagram below depicts the relationships between `ParticipantAgent` types: + +![](./im.participant.entities.png) + +- A `CatalogService` is a `Participant Agent` that makes a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) available to other participants. +- A `Catalog` contains one or more `Asset Entries`, which are [DCAT Datasets](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset). A `Catalog` also contains **_at least one_** + [DCAT DataService](https://www.w3.org/TR/vocab-dcat-3/#Class:Data_Service) that references a `Connector` where assets may be obtained. +- An `Asset Entry` has **one** `Offer`, which is an [ODRL Offer](https://www.w3.org/TR/odrl-model/#policy-offer) describing the _usage control policy_ associated with the asset. +- A `Connector` is a `Participant Agent` that performs `Contract Negotiation` and `Asset Transfer` operations with another connector. An outcome of a `ContractNegotiation` may + be the production of an `Agreement`, which is an [ODRL Agreement](https://www.w3.org/TR/odrl-model/#policy-agreement) defining the _usage control policy_ agreed to for an asset. + +## 2.2 Classes + +Not all dataspace entities have a concrete _technical_ materialization; some entities may exist as purely logical constructs. For example, a `Dataspace Authority` +and `Participant Agent` have no representation in the protocol message flows that constitute dataspace interactions. This section outlines the classes that comprise the concrete +elements of the information model, i.e. those that are represented in protocol message flows. + +### 2.2.1 Catalog + +A `Catalog` is a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) with the following attributes: + +- 0..N `Asset Entries`. Since a catalog may be dynamically generated for a request based on the requesting participant's credentials it is possible for it to contain 0 matching + asset entries. (DCAT PROFILE) +- 1.N [DCAT DataService](https://www.w3.org/TR/vocab-dcat-3/#Class:Data_Service) that references a `Connector` where assets may be obtained. (DCAT PROFILE) + +### 2.2.1 Asset Entry + +An `Asset Entry` 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` defining the usage control policy associated with the asset. **_Offers must NOT contain any target attributes. The + target of an offer is the asset associated with the containing asset entry._** (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 `ContractNegotiation` and `AssetTransfer`. (DCAT PROFILE) + +### 2.2.1 Offer + +An `Offer` is an [ODRL Offer](https://www.w3.org/TR/odrl-model/#policy-offer) with the following attributes: + +- An ODRL `uid` that is a unique UUID. (ODRL PROFILE) +- The `Offer` must be unique to a dataset since the target of the offer is derived from its enclosing context. +- The `Offer` must NOT include an explicit `target` attribute. + +### 2.2.1 Agreement + +An `Agreement` is an [ODRL Agreement](https://www.w3.org/TR/odrl-model/#policy-agreement) with the following attributes: + +- The `Agreement` class must include one `target` attribute that is the UUID of the asset the agreement is associated with. An agreement is therefore associated with **EXACTLY + ONE** asset. (ODRL PROFILE) + + + + + diff --git a/Specifications/notes/bibliography.md b/Specifications/notes/bibliography.md new file mode 100644 index 0000000..c483ea9 --- /dev/null +++ b/Specifications/notes/bibliography.md @@ -0,0 +1,23 @@ +# Bibliography + +## JSON-LD +- [JSON-LD](https://www.w3.org/TR/json-ld/) + +## DCAT +- [DCAT Working Group GitHub](https://github.com/w3c/dxwg) +- [DCAT Vocabulary WD](https://w3c.github.io/dxwg/dcat/) +- [Profile Guidance](https://w3c.github.io/dxwg/profiles/) +- [Profiles Vocabulary](https://w3c.github.io/dx-prof/prof/) +- [DCAT Vocabulary RDF](https://www.w3.org/ns/dcat2.ttl) + +## RFCs +- [Web Linking](https://datatracker.ietf.org/doc/html/rfc5988) +- [Linkset Media Types](https://www.rfc-editor.org/rfc/rfc9264.html) +- [JSON Web Signature (JWS)](https://www.rfc-editor.org/rfc/rfc7515) +- [JWK Thumbprint](https://www.rfc-editor.org/rfc/rfc7638#section-3) +- [JCS](https://www.rfc-editor.org/rfc/rfc8785) + +## IDS +- [IDS InfoModel](https://international-data-spaces-association.github.io/InformationModel/docs/index.html) +- [IDS GitHub InfoModel](https://github.com/International-Data-Spaces-Association/InformationModel) + From 794b680052fa8a6af4598e5729f37a8706e4385b Mon Sep 17 00:00:00 2001 From: Jim Marino Date: Fri, 7 Oct 2022 09:53:09 +0200 Subject: [PATCH 6/9] Remove uneccessary restrictions --- Specifications/catalog/catalog.protocol.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Specifications/catalog/catalog.protocol.md b/Specifications/catalog/catalog.protocol.md index 844eb1c..8cc41c3 100644 --- a/Specifications/catalog/catalog.protocol.md +++ b/Specifications/catalog/catalog.protocol.md @@ -80,10 +80,5 @@ a single catalog service. The broker is expected to honor upstream access contro The catalog is a DCAT catalog with the following restrictions: -1. Each DCAT `Dataset` must have at least one DCAT `Distribution`. -2. The DCAT `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](../negotiation/contract.negotiation.protocol.md) and [Transfer Process](TBD). -3. Each DCAT `Dataset` must have an `hasPolicy` attribute that contains an ODRL `Offer`. -4. Each ODRL `Offer` must have a unique UUID (ODRL `uid`). -5. Each ODRL `Offer` must be unique to a dataset since the target of the offer is derived from its enclosing context. -6. Each ODRL `Offer` must NOT include an explicit `target` attribute. +1. Each ODRL `Offer` must be unique to a dataset since the target of the offer is derived from its enclosing context. +2. Each ODRL `Offer` must NOT include an explicit `target` attribute. From 105ef9724aa85f9b19831dc8f16a11b06a82154d Mon Sep 17 00:00:00 2001 From: Jim Marino Date: Fri, 7 Oct 2022 10:01:22 +0200 Subject: [PATCH 7/9] Add numbering --- .../catalog/catalog.binding.https.md | 28 +++++++++---------- Specifications/catalog/catalog.protocol.md | 18 ++++++------ Specifications/model/information.model.md | 4 +-- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Specifications/catalog/catalog.binding.https.md b/Specifications/catalog/catalog.binding.https.md index 827b635..164daf0 100644 --- a/Specifications/catalog/catalog.binding.https.md +++ b/Specifications/catalog/catalog.binding.https.md @@ -1,21 +1,21 @@ # Catalog HTTPS Binding -## Introduction +## 1 Introduction This specification defines a RESTful API over HTTPS for the [Catalog Protocol]. The OpenAPI definitions for this specification can be accessed [here](TBD). -## Path Bindings +## 2 Path Bindings -### Prerequisites +### 2.1 Prerequisites 1. The `` notation indicates the base URL for a catalog service endpoint. For example, if the base catalog URL is `api.example.com`, the URL `https:///catalog/request` will map to `https//api.example.com/catalog/request`. 2. All request and response messages must use the `application/json` media type. -### 1. CatalogErrorMessage +### 2.2 CatalogErrorMessage In the event of a request error, the catalog service must return an appropriate HTTP code and a [CatalogErrorMessage](./catalog.protocol.md#) in the response body. @@ -24,9 +24,9 @@ In the event of a request error, the catalog service must return an appropriate | code | string | An optional implementation-specific error code. | | reasons | Array[object] | An optional array of implementation-specific error objects. | -### 2. The `catalog` endpoint +### 2.3 The `catalog/request` endpoint -#### 2.1 POST +#### 2.3.1 POST The [CatalogRequestMessage](catalog.protocol.md#1-catalogrequestmessage) corresponds to `POST https:///catalog/request`: @@ -50,23 +50,23 @@ The `Authorization` header is optional if the catalog service does not require a 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 request. -#### 2.1.1 OK (200) Response +#### 2.3.2 OK (200) Response If the request is successful, the catalog service must return a response body containing a [CatalogMessage](./message/catalog.message.json) which is a profiled DCAT Catalog type described by the [Catalog Protocol Specification](catalog.protocol.md). -## Technical Considerations +## 3 Technical Considerations -### Authorization +### 3.1 Authorization A catalog service may require authorization. If the catalog service requires authorization, requests must include an HTTP `Authorization` header with a token. The contents of the token are undefined by may be an OAUTH2, Web DID, or other access token type. -### Versioning +### 3.2 Versioning - Versioning will be done via URLs. TBD. -### Pagination +### 3.3 Pagination A 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: @@ -106,14 +106,14 @@ Link: ; rel="previous" } ``` -### Compression +### 3.4 Compression Catalog services MAY compress responses to a 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). -## Notes +## 4 Notes -### Asynchronous Interactions +### 4.1 Asynchronous Interactions We may want to specify optional support for asynchronous callbacks for the catalog response. This would require addling a `callbackAddress` property and an `@id` to the request: diff --git a/Specifications/catalog/catalog.protocol.md b/Specifications/catalog/catalog.protocol.md index 8cc41c3..39c9c41 100644 --- a/Specifications/catalog/catalog.protocol.md +++ b/Specifications/catalog/catalog.protocol.md @@ -1,6 +1,6 @@ # Catalog Protocol -## Introduction: Terms +## 1 Introduction: Terms This document outlines the catalog protocol. The following terms are used: @@ -13,12 +13,12 @@ This document outlines the catalog protocol. The following terms are used: The catalog protocol defines a how a `Catalog` is requested from a catalog service by a consumer using an abstract message exchange format. The concrete message exchange wire format is defined in binding specifications. -## Message Types +## 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. -### 1. CatalogRequestMessage +### 2.1 CatalogRequestMessage **Sent by**: Consumer @@ -48,15 +48,15 @@ The `CatalogRequestMessage` may have a `filter` property which contains an imple The 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. -## Technical Considerations +## 3 Technical Considerations -### Queries and Filter Expressions +### 3.1 Queries and Filter Expressions A _**catalog service**_ may support 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. -### Replication Protocol +### 3.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, and managing the results. It follows that a specific replication protocol is not needed, or more precisely, each consumer replicates data from catalog @@ -64,19 +64,19 @@ services by issuing `CatalogRequestMessages`. The discovery protocol adopted by a particular dataspace defines how a consumer discovers catalog services. -### Security +### 3.3 Security It is expected (although not required) that catalog services implement access control. A catalog as well as individual catalog _datasets_ may be restricted to trusted parties. The 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. In addition, this specification does not define the contents of the security token. It is expected different security mechanisms may be used such as [OAuth2 2.1](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-06) or [did:web](https://w3c-ccg.github.io/did-method-web/). -### Catalog Brokers +### 3.4 Catalog Brokers A dataspace may include _**catalog brokers**_. A catalog broker is a consumer that has trusted access to 1..N upstream catalog services and advertises their respective catalogs as a single catalog service. The broker is expected to honor upstream access control requirements. -## DCAT and ODRL Profiles +## 4 DCAT and ODRL Profiles The catalog is a DCAT catalog with the following restrictions: diff --git a/Specifications/model/information.model.md b/Specifications/model/information.model.md index 43e8b84..e91c514 100644 --- a/Specifications/model/information.model.md +++ b/Specifications/model/information.model.md @@ -2,7 +2,7 @@ The information model defines the core concepts, entities, and relationships that underpin a `Dataspace`. -## 1. Terminology +## 1 Terminology ### Dataspace @@ -72,7 +72,7 @@ A set of interactions between a provider `Connector` and consumer `Connector` th A set of interactions between a provider `Connector` and consumer `Connector` that give access to an `Asset` under the terms of an `Agreement`. -## 2. Dataspace Information Model +## 2 Dataspace Information Model The following sections outline the Dataspace Information Model, which form the foundation of this specification. From 31a36dfdcefca4d9e189eba74b8d5aa99c3acd0e Mon Sep 17 00:00:00 2001 From: Jim Marino Date: Fri, 7 Oct 2022 11:25:05 +0200 Subject: [PATCH 8/9] Fix cardinality typo --- .../model/im.participant.entities.drawio | 2 +- .../model/im.participant.entities.png | Bin 39321 -> 43549 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Specifications/model/im.participant.entities.drawio b/Specifications/model/im.participant.entities.drawio index f38a4bf..430f867 100644 --- a/Specifications/model/im.participant.entities.drawio +++ b/Specifications/model/im.participant.entities.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/Specifications/model/im.participant.entities.png b/Specifications/model/im.participant.entities.png index 095a701bc48892145f3b1a734f86e26913dd23fa..ac1601a3e6dc6c0005de3bc2408d5dc2c3e2a88b 100644 GIT binary patch literal 43549 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 literal 39321 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 From 7a9d77ec83990bcbd226c7a920359d10507e395f Mon Sep 17 00:00:00 2001 From: Jim Marino Date: Fri, 7 Oct 2022 15:45:55 +0200 Subject: [PATCH 9/9] Add mapping section --- Specifications/catalog/catalog.protocol.md | 59 +++++++++++++++++++--- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/Specifications/catalog/catalog.protocol.md b/Specifications/catalog/catalog.protocol.md index 39c9c41..6417dba 100644 --- a/Specifications/catalog/catalog.protocol.md +++ b/Specifications/catalog/catalog.protocol.md @@ -48,15 +48,62 @@ The `CatalogRequestMessage` may have a `filter` property which contains an imple The 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. -## 3 Technical Considerations +## 3 DCAT Vocabulary Mapping -### 3.1 Queries and Filter Expressions +This section describes how the IDS Information Model maps to DCAT resources. + +### 3.1 Asset Entry + +An `Asset Entry` is a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset) with the following attributes: + +#### 3.1.1 dcat:haPolicy + +An asset entry Dataset may have 0..N `hasPolicy` attributes that contain an ODRL `Offer` defining the usage control policy associated with the asset. Offers must NOT contain any +target attributes. The target of an offer is the asset associated with the containing asset entry. If an entry is has no associated policies (hasPolicy does not contain any offer +entries), the asset is does not have any usage control policy. + +### 3.2 Distributions + +An asset 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 `ContractNegotiation` and `AssetTransfer`. + +### 3.3 DataService + +A DataService may specify an IDS service endpoint such as a `Connector`. + +#### 3.3.1 ids:dataServiceType + +If the DataService refers to an IDS service endpoint, it must include the property `ids:dataServiceType`: + +| 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. | + +The following table lists well-know IDS endpoint types: + +| Value | Description | +|---------------|----------------------| +| ids:connector | A Connector endpoint | +| | | + + +#### 3.3.2 dcat:servesDataset + +Note that the property `dcat:servesDataset` should be omitted from the `DataService` since `DataSets` are included as top-level entries. Clients are not required to process the +contents of `dcat:servesDataset`. + +## 4 Technical Considerations + +### 4.1 Queries and Filter Expressions A _**catalog service**_ may support 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. -### 3.2 Replication Protocol +### 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, and managing the results. It follows that a specific replication protocol is not needed, or more precisely, each consumer replicates data from catalog @@ -64,19 +111,19 @@ services by issuing `CatalogRequestMessages`. The discovery protocol adopted by a particular dataspace defines how a consumer discovers catalog services. -### 3.3 Security +### 4.3 Security It is expected (although not required) that catalog services implement access control. A catalog as well as individual catalog _datasets_ may be restricted to trusted parties. The 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. In addition, this specification does not define the contents of the security token. It is expected different security mechanisms may be used such as [OAuth2 2.1](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-06) or [did:web](https://w3c-ccg.github.io/did-method-web/). -### 3.4 Catalog Brokers +### 4.4 Catalog Brokers A dataspace may include _**catalog brokers**_. A catalog broker is a consumer that has trusted access to 1..N upstream catalog services and advertises their respective catalogs as a single catalog service. The broker is expected to honor upstream access control requirements. -## 4 DCAT and ODRL Profiles +## 5 DCAT and ODRL Profiles The catalog is a DCAT catalog with the following restrictions: