From d07636168a486572dcbf38c1b79632fd9833cb50 Mon Sep 17 00:00:00 2001 From: Sebastian Bader Date: Tue, 28 Dec 2021 13:22:22 +0100 Subject: [PATCH 01/12] refactor: Additions and updates to the Onboarding section, explicetly stating that the identity certificate is not necessarily the TLS certificate. --- .../3_3_Process_Layer/3_3_1_Onboarding.md | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_1_Onboarding.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_1_Onboarding.md index 203bffe5..8ddec24a 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_1_Onboarding.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_1_Onboarding.md @@ -1,29 +1,32 @@ ## ONBOARDING -The overall “Onboarding” process consists of several sub processes. The first step for an organization to join the International Data Spaces as a Data Provider or Data Consumer is to acquire an identity to be used in the IDS. This identity, which forms the basis for establishing trusted communication in the IDS, is provided by the Certification Body and an Evaluation Facility in the form of a certificate issued by an Identity Provider. In a second step, the organization needs to request a Connector from a Software Provider. The Connector, being the core technical component for becoming part of the IDS, must then be installed. After that, it receives a digital certificate (X.509 certificate) to make sure it complies with IDS specifications and requirements. The digital certificate is based on the certification of the participant and the certification of the Connector (see section 3.1 and section 4.2). (**//TODO** insert link to Business Layer and Certification Perspective) In a third step, the Connector needs to be configured for internal use and prepared for secure communication ([Security Setup](#security-setup)). In the final step, the Connector needs to be made available for other participants in the IDS so that it can finally enter live operation. +The overall 'Onboarding' process consists of several sub-processes. The first step for an organization to join the International Data Spaces as a Data Provider or Data Consumer is to acquire an identity to be used in the IDS. +This identity, which forms the basis for establishing trusted communication in the IDS, is provided by an IDS Identity Provider in the form of a certificate issued by an accredited Certification Authority (CA). +In a second step, the organization needs to either request a Connector from a Software Provider or create its own one. The Connector, being the core technical component for becoming part of the IDS, must then be installed. After that, it is provisioned with the previously mentioned a digital proof of its IDS identity (X.509 certificate) to make sure it complies with IDS specifications and requirements. The digital certificate is based on the organizational certification of the participant and the technical certification of the Connector (see section 3.1 and section 4.2). (**//TODO** insert link to the Business Layer and Certification Perspective) In a third step, the Connector needs to be configured for internal use and prepared for secure communication ([Security Setup](#security-setup)). In the final step, the Connector needs to be made available for other participants in the IDS so that it can finally enter live operation. -The overall “Onboarding” process is illustrated in the following figure. +The overall 'Onboarding' process is illustrated in the following figure. ![Onboarding process](../../media/image22.png) The following paragraphs describe each step of the onboarding process in more detail. ### ACQUIRE IDENTITY -Any organization that wants to operate a connector in order to exchange data in the International Data Spaces as a Data provider or Data Consumer needs to acquire a unique identity in the form of a certificate. This certificate enables them to establish secure and trusted connections to other IDS participants (see section 3.1). +Any organization that wants to operate an IDS Connector in order to exchange data in the International Data Spaces as a Data provider or Data Consumer needs to acquire a unique identity in the form of a digital certificate. This certificate enables them to establish secure and trusted connections to other IDS participants (see section 3.1). Please note that this identity certificate is by default not the same as the one necessary to encrypt the communication channel itself. Even though both may use the same standards (X509), the purposes are different and therefore different certificate files can be used. It might be even a best practice to distinguish them to reduce the risk of identity theft, even though the IDS itself does not determine how to preoceed. **//TODO** insert link to Business Layer ### CONNECTOR CONFIGURATION AND PROVISIONING -Each Connector that participates in the IDS ecosystem must provide a self-description for other IDS participants to read. The respective organization needs to create this description at the beginning of the connector configuration and provisioning sub process. The Connector self-description must contain information about the respective organization, about who maintains the Connector (i.e. the Service Provider), and about the content and type of the data offered or requested. +Each Connector that participates in the IDS ecosystem must provide a Self-Description for other IDS Participants to read. The respective organization needs to create this description at the beginning of the connector configuration and provisioning sub process. The Connector Self-Description must contain information about the respective organization, about who maintains the Connector (i.e. the Service Provider), and about the content and type of the data offered or requested. The IDS Information Model (**//TODO** insert link to the IM section) defines the mandatory and optional attributes of the Self-Description. -Another mandatory step for the organization to take is to orchestrate data flows for (future) data retrieval and data provisioning, respectively, and to set up system adapters and communication interfaces (“endpoints”). (Details on the configuration of the IDS Connector are described in section 3.5.1.1). **//TODO** insert link to System Layer/Connector Configuration Model +Another mandatory step for the organization to take is to orchestrate data flows for (future) data retrieval and data provisioning, respectively, and to set up system adapters and communication interfaces ('endpoints'). (Details on the configuration of the IDS Connector are described in section 3.5.1.1). **//TODO** insert link to System Layer/Connector Configuration Model -If needed, the organization can install and configure Data Apps acquired from the App Store Provider. +If needed, the organization can install and configure Data Apps acquired from an App Store Provider or register its Connector Self-Description and the Self-Descriptions of the provided Data Resources at one or several IDS Metadata Brokers. ### SECURITY SETUP -To enable secure communication, a Certification Authority issues a certificate to the Data Provider or Data Consumer. This certificate is deployed locally to enable Transport Layer Security (TLS) and identification of the respective IDS participant. On top of that, the Connector self-description must be correct and valid, which is ensured by requesting a Dynamic Attribute Token from the Identity Provider (section 4.1). The token is a signed attestation that the information the Connector states about itself has been verified and is actually true. The token is presented by each subsequent outgoing communication message of the Connector, so that also the communicating Connectors have a means to verify the trustfulness of their communication partners at any time. -Furthermore, any organization that wants to assume the role of Data Provider or Data Consumer has the option to configure custom access restrictions for bilateral communications. For instance, a Data Provider may want to block certain Connectors or participants from accessing their services, or it may require specific access credentials. These configurations may be set up in the last step of the Security Setup sub process (see section 4.1). **//TODO** insert link to Business Layer +To enable secure communication, a Certification Authority issues a certificate to the Data Provider or Data Consumer. This certificate is deployed locally to enable Transport Layer Security (TLS) and identification of the respective IDS participant in combination with the Dynamic Attribute Token (IDS DAT). Note that the TLS certificate mentioned here and the previously mentioned IDS identity certificate may not be the same file. On top of that, the Connector Self-Description must be correct and valid, which is ensured by requesting and receiving a Dynamic Attribute Token from the Identity Provider (section 4.1). The token is a signed attestation that the security-critical information that the Connector states about itself has been verified and is actually true. The token is presented by each subsequent outgoing communication message of the Connector, so that also the communicating Connectors have a means to verify the trustfulness of their communication partners at any time. Important to understand is that the DAT only supports the claims that are actually contained in the token itself. Additional attributes or descriptions that are only part of the Self-Description files, for instance Contract Offers, licenses, or endpoint descriptions, are not verified by any IDS Identity Provider. + +Furthermore, an organization that wants to assume the role of Data Provider or Data Consumer has the option to configure custom access restrictions for bilateral communications. For instance, a Data Provider may want to block certain Connectors or Participants from accessing their services, as they are competitors in their respective industry or any other reason, or it may require specific access credentials. These configurations may be set up in the last step of the Security Setup sub-process (see section 4.1). **//TODO** insert link to Business Layer ### AVAILABILITY SETUP -After local Connector deployment and Security Setup, a Connector must be made available for other participants in the International Data Spaces. This is done by the provisioning of an “External Connector”, which runs in a so-called “Demilitarized Zone (DMZ)” and forwards or filters requests to the “Internal Connector”. Alternatively, proper adjustment of firewall rules may be sufficient (in less sensitive environments). Each Data Provider and Data Consumer can decide whether or not they want to announce their Connector (or the data resources accessible through their Connector) publicly on the IDS. If they do so, they can select a Broker from a -set of available Broker services (i.e., a registry for Connector self-descriptions) to publish the self-description of their Connector (see above). The Broker provides functions for searching for and retrieving registered Connector self-descriptions (see section 3.5.2), including data sources, interfaces, security profiles, and current levels of trustworthiness. +After local Connector deployment and Security Setup, a Connector must be made available for other Participants in the International Data Spaces. This is done by the provisioning of an 'External Connector', which may run in a so-called 'Demilitarized Zone (DMZ)' and forwards or filters requests to the 'Internal Connector'. Alternatively, proper adjustment of firewall rules may be sufficient (in less sensitive environments). Each Data Provider and Data Consumer can decide whether or not they want to announce their Connector (or the data resources accessible through their Connector) publicly on the IDS. If they do so, they can select a Metadata Broker from a +set of available instances (i.e., a registry for Connector Self-Descriptions) to publish the Self-Description of their Connector (see above). The Metadata Broker provides functions for searching for and retrieving registered Connector Self-Descriptions (see section 3.5.2), including data sources, interfaces, security profiles, and current levels of trustworthiness. From 5d2b55d34e7e63dd4057112431b3deead58918e9 Mon Sep 17 00:00:00 2001 From: Sebastian Bader Date: Wed, 29 Dec 2021 15:03:36 +0100 Subject: [PATCH 02/12] feat: Writing the general Data Offering section. --- .../3_3_Process_Layer/3_3_2_Data_Offering.md | 37 +++++++++++++----- .../media/image25_register-at-broker.png | Bin 0 -> 66978 bytes .../media/image27_query-at-broker.PNG | Bin 0 -> 50862 bytes 3 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 documentation/media/image25_register-at-broker.png create mode 100644 documentation/media/image27_query-at-broker.PNG diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md index f3de4f67..58d542b4 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md @@ -1,28 +1,47 @@ # Data Offering -- BPMN for User interaction (Create Offering [Data Catalog / Resource / Artifact / Representation]) +- **//TODO** BPMN for User interaction (Create Offering [Data Catalog / Resource / Artifact / Representation]) -## Data Provider updating Self-Description -- Handful of sentence that the self-description have to be update accordingly -- Not all metadata is made available to everyone. Usage Policy enforcement starts right here and shows everyone who requests the self-description only the data they could access. +A Participant who wants to offer data artifacts in a data space needs to conduct several steps to make it available to potential Data Consumers. In the most simplistic way, the Data Provider knows his Consumer at the beginning and directly informs him about available data assets, the selected endpoints, and the access mechanisms. This bidirectional data exchange bypasses most of the IDS infrastructure components and keeps the additional efforts to a minimum. + +However, in typical data spaces use cases, a Data Provider does not know which other Participant is interested into his data offering, or even doesn't know about the existence of the later Data Consumer at the time when the data set is published. In such cases, the proper description and advertisement at the right locations is critical to enable a business transaction. + +The IDS defines manners to tackle these challenges by specifying a technology-agnostic language for data Self-Descriptions as well as the necessary infrastructure components to host and search through these Self-Descriptions. In all cases, the original Data Provider stays the sovereign origin of any information, and any involved component acts on behalf of it. Therefore, it is in general not allowed for any intermediate player to change or manipulate the content of the received Self-Descriptions, apart of obviously wrong data or to protect the operability of the data space as a whole. Examples might be phishing attempts or other malicious content, the duty to follow legislative regulations like copyright protections, or less severe issues like unintentional syntactic or semantic errors. +**//TODO** Respective explanations in the Governance Section, then link to it here + +Apart of such edge cases, the Data Provider has the interest to correctly and comprehensively describe its data assets to maximize the amount of interested Data Consumers. It further wants to stick to commonly accepted and understood standards to simplify its discovery for potential business partners. The [IDS Information Model](../3_4_Information_Layer) provides the schema for the Self-Descriptions themselves and their basic building blocks, like for instance Usage Contracts, endpoint descriptions, or the internal structure of data assets. + +The first step in a typical data publication process is therefore the proper creation of a data asset Self-Description in JSON-LD. Usually, Connectors provide the technical manners to create and maintain them through suitable GUIs. In any way, the created Self-Descriptions are then deployed at the Connector that also hosts the related data assets. This Connector is also the only applicable source of truth for metadata about the data assets. Copied or otherwise differently located Self-Descriptions might be outdated or misleading, therefore a potential Data Consumer may want to double-check the correctness of a found Self-Description by also requesting a version directly from the original Connector. + +After reaching a syntactically and semantically correct Self-Description, the Data Provider may want to announce it in a data space. To do so, it sends the Self-Description to the responsible IDS infrastructure component, an IDS Metadata Broker. The location of available Metadata Broker instances as well as the selection of the appropriate ones is in the responsibility of each data space Participant and not - for now - generally specified. The Metadata Broker then stores the received Self-Descriptions and makes them available for search requests for other Connectors. Potential Data Consumers can search through the stored Self-Descriptions, filter for relevant offers, and then in the third step of the process negotiate and request a data asset directly at the hosting Connector. + +## Data Provider updating a Self-Description +- **//TODO** Handful of sentences that the self-description have to be update accordingly +- **//TODO** Not all metadata is made available to everyone. Usage Policy enforcement starts right here and shows everyone who requests the self-description only the data they could access. + +## Interactions with IDS Metadata Brokers -## Metadata Broker interaction ### Data Provider Connector register metadata at Broker - Sequence diagram for Connector Data Provider register metadata at Broker (optional) -### Data Consumer searching metadata at Broker -To find a Data Provider, the Data Consumer must send a query to a Broker Service Provider. Before that, however, the Data Consumer needs to select a suitable Broker (e.g. based on thematic coverage) and determine the query capabilities (e.g. a graphical search interface or a domain-specific query language). The Broker then returns the query result to the Data Consumer, who needs to interpret the result to find out about the different data sources available in the International Data Spaces for providing the data specified in the query. Each query result must provide information about each IDS Connector capable of providing the desired data, so that the Data Consumer can retrieve each Connector’s self-description + +![Publish Self-Description](../../media/image25_register-at-broker.png) + + +### Data Consumer searching for Self-Descriptions + +To find a Data Provider, the Data Consumer may search in the catalogs of a Metadata Broker Service Provider. Before that, however, the Data Consumer needs to select a suitable Broker (e.g. based on thematic coverage) and determine the query capabilities (e.g. a graphical search interface or a domain-specific query language). The Broker then returns the query result to the Data Consumer, who needs to interpret the result to find out about the different data sources available in the International Data Spaces for providing the data specified in the query. Each query result must provide information about each IDS Connector capable of providing the desired data, so that the Data Consumer can retrieve each Connector’s self-description to learn more about how to receive the desired dataset from a technical point of view (e.g., endpoint addresses, protocol). The Data Provider may serve the same data using different representations or pricing options, so the Data Consumer may select a suitable offer from the Data Provider’s Connector description. - Sequence diagram for Connector Data Consumer searching metadata at Broker (optional) - Remember: Filtering of the displayed data according to policy and requester +![Query Self-Descriptions](../../media/image27_query-at-broker.png) + ## Getting Self-Description from Data Provider - Sequence diagram for getting self description from Data Provider Alternatively, the Data Consumer may already know a suitable Data Provider. In this case, the Data Consumer can contact the Data Provider directly (i.e. without invoking a broker). - - diff --git a/documentation/media/image25_register-at-broker.png b/documentation/media/image25_register-at-broker.png new file mode 100644 index 0000000000000000000000000000000000000000..834b2c5194efc139be0fdf68dc027a4209336fe9 GIT binary patch literal 66978 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 *S}8@Kdp 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 D=SYgDzHIv=o?|Yr( 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 literal 0 HcmV?d00001 From d18e4a1713f4ef834883dccd49181d89a11ef9f8 Mon Sep 17 00:00:00 2001 From: Sebastian Bader Date: Wed, 29 Dec 2021 15:54:16 +0100 Subject: [PATCH 03/12] feat: Add old Latex section for the '3.3.4. Exchange Data' part. --- .../3_3_4_Exchanging_Data.md | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_4_Exchanging_Data.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_4_Exchanging_Data.md index badbe83f..ab350f5f 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_4_Exchanging_Data.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_4_Exchanging_Data.md @@ -6,4 +6,38 @@ In both, the following patterns must be considered: Push, Pull, Pub/Sub Additionally we have to consider async and sync Connections -https://github.com/International-Data-Spaces-Association/IDS-G-pre/tree/connector-interaction/Communication/sequence-diagrams/data-connector-to-data-connector#requesting-data \ No newline at end of file +https://github.com/International-Data-Spaces-Association/IDS-G-pre/tree/connector-interaction/Communication/sequence-diagrams/data-connector-to-data-connector#requesting-data + + +### Exchanging Data +The overall process of exchanging data consists of two sub processes, as illustrated in Figure [XX](#Exchanging-Data)). The first sub process is about a Data Consumer searching for a suitable Data Provider. If the search was successful, the Data Consumer and the Data Provider can start to exchange data with one another. This is done after Connector configuration, either starting 'from scratch' (see IDS onboarding process described above) or by reconfiguring an existing Connector. The second sub process is the invocation of the actual data operation (e.g. data upload or download, data transformation, or data query). + + +![Exchanging Data](../../media/image26.jpeg) +#### _Fig. XX: Exchanging Data overall process_ + + + +### Find Data Provider + +To find a Data Provider, the Data Consumer must send a query to a Broker Service Provider. Before that, however, the Data Consumer needs to select a suitable Broker (e.g. based on thematic coverage) and determine the query capabilities (e.g. a graphical search interface or a domain-specific query language). The Broker then returns the query result to the Data Consumer, who needs to interpret the result to find out about the different data sources available in the International Data Spaces for providing the data specified in the query. Each query result must provide information about each IDS Connector capable of providing the desired data, so that the Data Consumer can retrieve each Connector's self-description to learn more about how to receive the desired dataset from a technical point of view (e.g., endpoint addresses, protocol). The Data Provider may serve the same data using different representations or pricing options, so the Data Consumer may select a suitable offer from the Data Provider's Connector description. + +Alternatively, the Data Consumer may already know a suitable Data Provider. In this case, the Data Consumer can contact the Data Provider directly (i.e. without invoking a broker). + + +![FindData](../../media/image27.PNG) +#### _Fig. XX: Find Data Provider sub-process_ + + +### Invoke Data Operation + +Data usage policy information is an important element of legal agreements and is therefore modeled as first-class objects on the Information Layer (see Section 3.4). The handling of data usage policy information is shown in detail in the 'Invoke Data Operation' sub process (Figure [YY](#FindData)). While a Connector self-description basically contains information about the datasets available, also usage policy information can be extracted from this description. In a (semi-)automated negotiation process performed by the usage control frameworks of the participating Connectors, the Data Consumer and the Data Provider need to agree on a data usage policy. If an agreement has been reached, this policy is instantiated and deployed inside both Connectors. The policy both parties agree upon needs to be persisted in an immutable way by both sides. After the data usage policy has been established, the consuming Connector can be configured to deal with further data coming in from the Data Provider in the future as specified by the policy. The retrieval of the self-description and the negotiation of policies must make use of HTTPS or MQTT protocols. If this has been done, the Data Operation call can be invoked – this is usually done by a request using a common protocol (e.g., HTTP) to retrieve a data artifact from the Data Provider. + +The Data Provider then sends the result of the data operation to the Data Consumer. Usage control on both sides signals the data operation to the data provenance tracking infrastructure (accessible via the Clearing House), so that provenance information about the data transferred is kept up to date. Usage control on the Data Consumer side also signals receipt of the data operation result to the data provenance tracking infrastructure, in order to confirm that the transaction has been completed successfully (see sections 4.1.3.6 and 4.1.3.7). + + +![InvokeDataOperation](../../media/image28.jpeg) +#### _Fig. ZZ: Invoke Data Operation sub-process_ + + +Communication between the Connectors can be asynchronous (i.e., the Data Consumer does not have to wait in idle mode for the result to arrive, but will be notified by the Data Provider as soon as the result is available). Instead of a pull-request, a push-request can be sent, which means that the Data Consumer asks for updates regarding the requested data. The updated data can be provided either after certain events (e.g., after the data has been updated by the Data Provider) or within certain time intervals (e.g., every five minutes). If a push-request is made, the Data Consumer repeatedly receives updated query results from the Data Provider. In case of a pull-request, the Data Consumer can repeat the last part of the process to query data again (using the same or a different query). The description of the communication pattern itself is not part of this document, as this is covered by existing standards (e.g. DIN SPEC 16593-1:2018-04, see chapter 8 'Characterizations of Interactions' ) or as best practices in industry. From c39dceeb6e41106e06d478a02aa99c2708e03b33 Mon Sep 17 00:00:00 2001 From: Sebastian Bader Date: Wed, 29 Dec 2021 17:01:10 +0100 Subject: [PATCH 04/12] feat: First draft for the '3.3.2. Data Offering' section. --- .../3_3_Process_Layer/3_3_2_Data_Offering.md | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md index 58d542b4..bbdce503 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md @@ -19,18 +19,32 @@ After reaching a syntactically and semantically correct Self-Description, the Da - **//TODO** Handful of sentences that the self-description have to be update accordingly - **//TODO** Not all metadata is made available to everyone. Usage Policy enforcement starts right here and shows everyone who requests the self-description only the data they could access. +As mentioned already, the Connector hosting the data asset is the solely applicable source of truth regarding the data asset's IDS Self-Description. This implies in particular, that the hosting Connector, more precisely the Participant controlling the Connector, can change the data asset as well as its Self-Description at any time. Even though it might be in its interest to establish a reputation as a reliable and trustworthy business partner, it might need to deploy updates without further notice. The Data Provider might want to inform certain other Connectors about changes but is not obliged to do so. It is also not necessary to supply older or outdated data assets or Self-Descriptions. Consequently, the existence of a suitable Self-Description document is not a sufficient proof of the existence of the related data asset. A Data Consumer might want to request the latest version of the Self-Description also at the original Connector to be sure. + +Nevertheless, the Data Provider has the interest to also maintain the distributed Self-Descriptions at the IDS Metadata Brokers to avoid misunderstandings and to protect its reputation. It can do so by sending update requests to the respective Metadata Broker instances, which already host the previous versions. It does so by sending the new Self-Description document, which uses the same identifier as the previously sent document. The IDS Metadata Brokers then overwrite their stored instances. Please note that Metadata Brokers may also store previous versions of Self-Descriptions, for instance for documentation purposes. Furthermore, only certain Connectors are allowed to update individual Self-Descriptions. By default, the creating Connector has this right but also explicitly named different Connectors may be allowed to execute update requests. One use case might be that one Data Provider operates several IDS Connectors, and the originally creating Connector is not active anymore. In such cases, the Participant must of course still be able to control its related Self-Descriptions. + + ## Interactions with IDS Metadata Brokers -### Data Provider Connector register metadata at Broker +The IDS Metadata Broker is the component in an IDS that allows the publication of Self-Descriptions for IDS Resources and IDS Connectors. It thereby solves the Search&Discovery problem in decentralized networks. Data Consumers want to find suitable data offers while not knowing the existence or the location of their Data Providers. They therefore need an intermediate service that stores Self-Descriptions and makes them searchable in effective manners. This task is solved through the IDS Metadata Brokers. + +However, no Data Provider is obliged to publish any or all of their data assets at any Metadata Broker. Neither is a Data Consumer forced to start his integration process at a Metadata Broker, if it has other options to find and locate its data exchange partners. Still, both have the option to interact with an IDS Metadata Broker using the following main interaction patterns. + +### Data Provider Connector registers Metadata - Sequence diagram for Connector Data Provider register metadata at Broker (optional) +As shown in Fig. [AA](#PublishSelf-Description), the Data Provider can send Self-Description documents to a Metadata Broker. The Self-Description must be self-containing and compliant to the specifications of the IDS Information Model. Usually, JSON-LD representations of the RDF classes [ids:Connector](https://w3id.org/idsa/core/Connector) and [ids:Resource](https://w3id.org/idsa/core/Resource) are used. The Metadata Broker then checks the Self-Description document syntactic correctness and persists it in its local database. It explicitly does not check the semantic correctness or the plausibility of the supplied information. + +![PublishSelf-Description](../../media/image25_register-at-broker.png) +#### _Fig. AA: Process to register a Self-Description at an IDS Metadata Broker_ -![Publish Self-Description](../../media/image25_register-at-broker.png) +Different to other ecosystems, the Metadata Broker in an IDS does not actively crawls for Self-Descriptions or searches for updates. In contrast to for instance common search engines for the Web, the Metadata Broker relies on notifications from the original providers. In case the Data Provider misses an update, the Metadata Broker can therefore not made responsible for outdated or wrong information. +Data Providers may be offered to restrict the publication of their Self-Descriptions based on certain Usage Control patterns. A Data Provider may for instance prohibit the presentation of its Self-Descriptions to its competitors by delivering a black list in a Usage Contract together with its Self-Descriptions. Specialized Metadata Brokers might provide respective control features for domains where the pure existence of metadata already uncovers critical business information. ### Data Consumer searching for Self-Descriptions -To find a Data Provider, the Data Consumer may search in the catalogs of a Metadata Broker Service Provider. Before that, however, the Data Consumer needs to select a suitable Broker (e.g. based on thematic coverage) and determine the query capabilities (e.g. a graphical search interface or a domain-specific query language). The Broker then returns the query result to the Data Consumer, who needs to interpret the result to find out about the different data sources available in the International Data Spaces for providing the data specified in the query. Each query result must provide information about each IDS Connector capable of providing the desired data, so that the Data Consumer can retrieve each Connector’s self-description +To find a Data Provider, the Data Consumer may search in the catalogs of a Metadata Broker Service Provider. Before that, however, the Data Consumer needs to select a suitable Metadata Broker (e.g. based on thematic coverage) and determine the query capabilities (e.g. a graphical search interface or a domain-specific query language). The Metadata Broker then returns the query result to the Data Consumer, who needs to interpret the result to find out about the different data sources available in the International Data Spaces for providing the data specified in the query. Each query result must provide information about each IDS Connector capable of providing the desired data, so that the Data Consumer can retrieve each Connector’s self-description to learn more about how to receive the desired dataset from a technical point of view (e.g., endpoint addresses, protocol). The Data Provider may serve the same data using different representations or pricing options, so the Data Consumer may select a suitable offer from the Data Provider’s Connector description. @@ -43,5 +57,4 @@ representations or pricing options, so the Data Consumer may select a suitable o ## Getting Self-Description from Data Provider - Sequence diagram for getting self description from Data Provider - -Alternatively, the Data Consumer may already know a suitable Data Provider. In this case, the Data Consumer can contact the Data Provider directly (i.e. without invoking a broker). +Alternatively, the Data Consumer may already know a suitable Data Provider. In this case, the Data Consumer can contact the Data Provider directly (i.e. without invoking a Metadata Broker or any other IDS infrastructure component). As the IDS is designed in a completely self-sovereign manner and preventing gate keepers wherever possible, the right to establish bidirectional business - and data exchange - relations independent of any other third party is at the heart of the overall architecture. From 5f5f8f8bc85c64bf4b36255bf576032c6ab1f64c Mon Sep 17 00:00:00 2001 From: Sebastian Bader Date: Wed, 29 Dec 2021 17:04:30 +0100 Subject: [PATCH 05/12] fix: Use 'Usage Contract' instead of 'policy' in 3.3.3. Contract Negotiation --- .../3_3_Process_Layer/3_3_3_Contract_Negotiation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_3_Contract_Negotiation.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_3_Contract_Negotiation.md index 5134885c..945c7c84 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_3_Contract_Negotiation.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_3_Contract_Negotiation.md @@ -1,6 +1,6 @@ # Contract Negotiation -While a Connector self-description basically contains information about the datasets available, also usage policy information can be extracted from this description. In a (semi-)automated negotiation process performed by the usage control frameworks of the participating Connectors, the Data Consumer and the Data Provider need to agree on a data usage policy. If an agreement has been reached, this policy is instantiated and deployed inside both Connectors. The policy both parties agree upon needs to be persisted in an immutable way by both sides. After the data usage policy has been established, the consuming Connector can be configured to deal with further data coming in from the Data Provider in the future as specified by the policy. +While a Connector Self-Description basically contains descriptive information about the datasets available, also Usage Control information can be extracted from them. In a (semi-)automated negotiation process performed by the Usage Control frameworks of the participating Connectors, the Data Consumer and the Data Provider need to agree on a Data Usage Contract. If an agreement has been reached, this contract is instantiated and deployed inside both Connectors. The Usage Contract both parties agree upon may need to be persisted in an immutable way by both sides. After the Usage Contract has been established, the consuming Connector can be configured to deal with further data coming in from the Data Provider in the future as specified by the contract. - Add https://github.com/International-Data-Spaces-Association/IDS-G-pre/tree/connector-interaction/Communication/sequence-diagrams/data-connector-to-data-connector#usage-contract-negotiation - Update from Julia required From 3752685075ba06c071e3eaf24d06fcf9de35dd70 Mon Sep 17 00:00:00 2001 From: Sebastian Bader Date: Wed, 29 Dec 2021 17:09:06 +0100 Subject: [PATCH 06/12] fix: Editorial changes to 3.3.4. EXCHANGING DATA --- .../3_3_Process_Layer/3_3_4_Exchanging_Data.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_4_Exchanging_Data.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_4_Exchanging_Data.md index ab350f5f..a65e0f73 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_4_Exchanging_Data.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_4_Exchanging_Data.md @@ -20,9 +20,9 @@ The overall process of exchanging data consists of two sub processes, as illustr ### Find Data Provider -To find a Data Provider, the Data Consumer must send a query to a Broker Service Provider. Before that, however, the Data Consumer needs to select a suitable Broker (e.g. based on thematic coverage) and determine the query capabilities (e.g. a graphical search interface or a domain-specific query language). The Broker then returns the query result to the Data Consumer, who needs to interpret the result to find out about the different data sources available in the International Data Spaces for providing the data specified in the query. Each query result must provide information about each IDS Connector capable of providing the desired data, so that the Data Consumer can retrieve each Connector's self-description to learn more about how to receive the desired dataset from a technical point of view (e.g., endpoint addresses, protocol). The Data Provider may serve the same data using different representations or pricing options, so the Data Consumer may select a suitable offer from the Data Provider's Connector description. +To find a Data Provider, the Data Consumer can send a query to an IDS Metadata Broker. Before that, however, the Data Consumer needs to select a suitable Metadata Broker instance (e.g. based on thematic coverage) and determine the query capabilities (e.g. a graphical search interface or a domain-specific query language). The Metadata Broker then returns the query result to the Data Consumer, who needs to interpret the result to find out about the different data sources available in the International Data Spaces for providing the data specified in the query. Each query result must provide information about each IDS Connector capable of providing the desired data, so that the Data Consumer can retrieve each Connector's self-description to learn more about how to receive the desired dataset from a technical point of view (e.g., endpoint addresses, protocol). The Data Provider may serve the same data using different representations or pricing options, so the Data Consumer may select a suitable offer from the Data Provider's Connector description. -Alternatively, the Data Consumer may already know a suitable Data Provider. In this case, the Data Consumer can contact the Data Provider directly (i.e. without invoking a broker). +Alternatively, the Data Consumer may already know a suitable Data Provider. In this case, the Data Consumer can contact the Data Provider directly (i.e. without invoking a Metadata Broker). ![FindData](../../media/image27.PNG) @@ -31,9 +31,9 @@ Alternatively, the Data Consumer may already know a suitable Data Provider. In t ### Invoke Data Operation -Data usage policy information is an important element of legal agreements and is therefore modeled as first-class objects on the Information Layer (see Section 3.4). The handling of data usage policy information is shown in detail in the 'Invoke Data Operation' sub process (Figure [YY](#FindData)). While a Connector self-description basically contains information about the datasets available, also usage policy information can be extracted from this description. In a (semi-)automated negotiation process performed by the usage control frameworks of the participating Connectors, the Data Consumer and the Data Provider need to agree on a data usage policy. If an agreement has been reached, this policy is instantiated and deployed inside both Connectors. The policy both parties agree upon needs to be persisted in an immutable way by both sides. After the data usage policy has been established, the consuming Connector can be configured to deal with further data coming in from the Data Provider in the future as specified by the policy. The retrieval of the self-description and the negotiation of policies must make use of HTTPS or MQTT protocols. If this has been done, the Data Operation call can be invoked – this is usually done by a request using a common protocol (e.g., HTTP) to retrieve a data artifact from the Data Provider. +Data Usage Contract information is an important element of legal agreements and is therefore modeled as first-class objects on the Information Layer (see Section 3.4). The handling of Data Usage Contract information is shown in detail in the 'Invoke Data Operation' sub process (Figure [YY](#FindData)). While a Connector Self-Description basically contains information about the datasets available, also usage policy information can be extracted from this description. In a (semi-)automated negotiation process performed by the usage control frameworks of the participating Connectors, the Data Consumer and the Data Provider need to agree on a Data Usage Contract. If an agreement has been reached, this policy is instantiated and deployed inside both Connectors. The policy both parties agree upon needs to be persisted in an immutable way by both sides. After the Data Usage Contract has been established, the consuming Connector can be configured to deal with further data coming in from the Data Provider in the future as specified by the policy. The retrieval of the Self-Description and the negotiation of policies can make use of HTTPS or MQTT protocols. The respective protocol bindings are specified in the IDS-G. If this has been done, the Data Operation call can be invoked – this is usually done by a request using a common protocol (e.g., HTTP) to retrieve a data artifact from the Data Provider. -The Data Provider then sends the result of the data operation to the Data Consumer. Usage control on both sides signals the data operation to the data provenance tracking infrastructure (accessible via the Clearing House), so that provenance information about the data transferred is kept up to date. Usage control on the Data Consumer side also signals receipt of the data operation result to the data provenance tracking infrastructure, in order to confirm that the transaction has been completed successfully (see sections 4.1.3.6 and 4.1.3.7). +The Data Provider then sends the result of the data operation to the Data Consumer. Usage control on both sides signals the data operation to the data provenance tracking infrastructure (accessible via the Clearing House), so that provenance information about the data transferred is kept up to date. Usage Control on the Data Consumer side also signals receipt of the data operation result to the data provenance tracking infrastructure, in order to confirm that the transaction has been completed successfully (see sections 4.1.3.6 and 4.1.3.7). ![InvokeDataOperation](../../media/image28.jpeg) From 15055376d63e034965e50691693f1643d2d00489 Mon Sep 17 00:00:00 2001 From: Sebastian Bader Date: Wed, 29 Dec 2021 17:10:40 +0100 Subject: [PATCH 07/12] fix: Editorial changes to 3.3.5. PUBLISHING AND USING DATA APPS --- .../3_3_5_Publishing_and_using_Data_Apps.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_5_Publishing_and_using_Data_Apps.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_5_Publishing_and_using_Data_Apps.md index e71bb49f..5008f46d 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_5_Publishing_and_using_Data_Apps.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_5_Publishing_and_using_Data_Apps.md @@ -1,8 +1,8 @@ ## PUBLISHING AND USING DATA APPS Data Apps can be used by Connectors for specific data processing or data transformation tasks. They can perform tasks of different complexity, ranging from simple data transformation to complex data analytics. An example of data transformation may be a Data App parsing a single string field with address information and producing a data structure consisting of street name and number, zip code, name of the city, and name of the country. -On a conceptual level, Data Apps can be treated the same way as data offerings in the International Data Spaces. Therefore, just as data is provided by a Data Provider using a Connector and registering this Connector at a Broker, Data Apps are created by an App Provider and registered at an App Store (using the App Provider’s Connector as a means to communicate with the App Store). As a consequence, App Providers also need to undergo the Onboarding process. However, instead of registering their Connector at a Broker, App Providers register their Data Apps at an App Store. +On a conceptual level, Data Apps can be treated the same way as data offerings in the International Data Spaces. Therefore, just as data is provided by a Data Provider using a Connector and registering this Connector at a Broker, Data Apps are created by an App Provider and registered at an App Store (using the App Provider's Connector as a means to communicate with the App Store). As a consequence, App Providers also need to undergo the Onboarding process. However, instead of registering their Connector at a Broker, App Providers register their Data Apps at an App Store. -In order to be published, certain Data Apps require certification from the Certification Body (see section 3.5.1) (see first step of the process shown in Figure 3.12). When it comes to using a Data App that is offered by an App Store, App Users (Data Provider or Data Consumer) need to execute a process that is very similar to the “Exchange Data” process described above. +In order to be published, certain Data Apps require certification from the Certification Body (see section 3.5.1) (see first step of the process shown in Figure 3.12). When it comes to using a Data App that is offered by an App Store, App Users (Data Provider or Data Consumer) need to execute a process that is very similar to the 'Exchange Data' process described above. -For each Data App that was successfully certified, the corresponding metadata is stored in the App Store for being retrieved by users (e.g., Data Consumers or Data Providers) via a search interface. Searching for a Data App is part of the “Find App” sub process depicted in Figure 313. If a user finds a suitable Data App (i.e., matching in functionality and compatible with the user’s Connector packaging format) in the App Store, the App can be requested. This is indicated in the “Retrieve App” sub process, which is conceptually identical with the “Invoke Data Operation” process outlined in section 3.3.2, which is why a detailed discussion is omitted here. +For each Data App that was successfully certified, the corresponding metadata is stored in the App Store for being retrieved by users (e.g., Data Consumers or Data Providers) via a search interface. Searching for a Data App is part of the 'Find App' sub process depicted in Figure **//TODO**. If a user finds a suitable Data App (i.e., matching in functionality and compatible with the user's Connector packaging format) in the App Store, the App can be requested. This is indicated in the 'Retrieve App' sub process, which is conceptually identical with the 'Invoke Data Operation' process outlined in section 3.3.2, which is why a detailed discussion is omitted here. From fe3da249fc194b1cee45fb3c7be58c22bc864da4 Mon Sep 17 00:00:00 2001 From: Sebastian Bader Date: Wed, 5 Jan 2022 13:10:30 +0100 Subject: [PATCH 08/12] fix: adding the 'LaTex' directory into the local links of the main README --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 06816e29..8abca043 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ README.md this file ### Others (TODO: valid for the old Latex files in the folder ./LaTex, not for the new structure) - [Media folder for pictures and other resources](./media) -- [IDSA_RAM_4_0.tex as umbrella document](./IDSA_RAM_4_0.tex) -- [list of authors](./authors_contributors.tex) -- [bibliography](./bibliography.bib) -- [front matter](./editor_contributing_projects.tex) +- [IDSA_RAM_4_0.tex as umbrella document](./LaTex/IDSA_RAM_4_0.tex) +- [list of authors](./LaTex/authors_contributors.tex) +- [bibliography](./LaTex/bibliography.bib) +- [front matter](./LaTex/editor_contributing_projects.tex) From 9b2de7fa97c690ba11ef7b46a5fc457605ce6b16 Mon Sep 17 00:00:00 2001 From: HeinrichPet <59964830+HeinrichPet@users.noreply.github.com> Date: Thu, 13 Jan 2022 13:50:32 +0100 Subject: [PATCH 09/12] Update 3_3_2_Data_Offering.md --- .../3_3_Process_Layer/3_3_2_Data_Offering.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md index bbdce503..5c8c26ab 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md @@ -1,7 +1,4 @@ # Data Offering - -- **//TODO** BPMN for User interaction (Create Offering [Data Catalog / Resource / Artifact / Representation]) - A Participant who wants to offer data artifacts in a data space needs to conduct several steps to make it available to potential Data Consumers. In the most simplistic way, the Data Provider knows his Consumer at the beginning and directly informs him about available data assets, the selected endpoints, and the access mechanisms. This bidirectional data exchange bypasses most of the IDS infrastructure components and keeps the additional efforts to a minimum. However, in typical data spaces use cases, a Data Provider does not know which other Participant is interested into his data offering, or even doesn't know about the existence of the later Data Consumer at the time when the data set is published. In such cases, the proper description and advertisement at the right locations is critical to enable a business transaction. From a8ad80d943d03dd7c4ccbba2f245331367515aaf Mon Sep 17 00:00:00 2001 From: Tim Berthold Date: Fri, 14 Jan 2022 15:08:35 +0100 Subject: [PATCH 10/12] fix: 3.3.2 typo --- .../3_3_Process_Layer/3_3_2_Data_Offering.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md index 5c8c26ab..199ac7aa 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md @@ -35,7 +35,7 @@ As shown in Fig. [AA](#PublishSelf-Description), the Data Provider can send Self ![PublishSelf-Description](../../media/image25_register-at-broker.png) #### _Fig. AA: Process to register a Self-Description at an IDS Metadata Broker_ -Different to other ecosystems, the Metadata Broker in an IDS does not actively crawls for Self-Descriptions or searches for updates. In contrast to for instance common search engines for the Web, the Metadata Broker relies on notifications from the original providers. In case the Data Provider misses an update, the Metadata Broker can therefore not made responsible for outdated or wrong information. +Different to other ecosystems, the Metadata Broker in an IDS does not actively crawl for Self-Descriptions or searches for updates. In contrast to for instance common search engines for the Web, the Metadata Broker relies on notifications from the original providers. In case the Data Provider misses an update, the Metadata Broker can therefore not made responsible for outdated or wrong information. Data Providers may be offered to restrict the publication of their Self-Descriptions based on certain Usage Control patterns. A Data Provider may for instance prohibit the presentation of its Self-Descriptions to its competitors by delivering a black list in a Usage Contract together with its Self-Descriptions. Specialized Metadata Brokers might provide respective control features for domains where the pure existence of metadata already uncovers critical business information. From cc16184f1cb73418038fce37bb6fc48bd8254571 Mon Sep 17 00:00:00 2001 From: Tim Berthold Date: Fri, 14 Jan 2022 15:35:05 +0100 Subject: [PATCH 11/12] feat: 3.3.2 federated catalog (first draft) --- .../3_3_Process_Layer/3_3_2_Data_Offering.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md index 199ac7aa..8425bdf7 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md @@ -3,15 +3,17 @@ A Participant who wants to offer data artifacts in a data space needs to conduct However, in typical data spaces use cases, a Data Provider does not know which other Participant is interested into his data offering, or even doesn't know about the existence of the later Data Consumer at the time when the data set is published. In such cases, the proper description and advertisement at the right locations is critical to enable a business transaction. -The IDS defines manners to tackle these challenges by specifying a technology-agnostic language for data Self-Descriptions as well as the necessary infrastructure components to host and search through these Self-Descriptions. In all cases, the original Data Provider stays the sovereign origin of any information, and any involved component acts on behalf of it. Therefore, it is in general not allowed for any intermediate player to change or manipulate the content of the received Self-Descriptions, apart of obviously wrong data or to protect the operability of the data space as a whole. Examples might be phishing attempts or other malicious content, the duty to follow legislative regulations like copyright protections, or less severe issues like unintentional syntactic or semantic errors. +The IDS defines manners to tackle these challenges by specifying a technology-agnostic language for data Self-Descriptions as well as the necessary infrastructure components to host and search through these Self-Descriptions. In all cases, the original Data Provider stays the sovereign origin of any information, and any involved component acts on behalf of it. Therefore, it is in general not allowed for any intermediate player to change or manipulate the content of the received Self-Descriptions, apart from obviously wrong data or to protect the operability of the data space as a whole. Examples might be phishing attempts or other malicious content, the duty to follow legislative regulations like copyright protections, or less severe issues like unintentional syntactic or semantic errors. **//TODO** Respective explanations in the Governance Section, then link to it here -Apart of such edge cases, the Data Provider has the interest to correctly and comprehensively describe its data assets to maximize the amount of interested Data Consumers. It further wants to stick to commonly accepted and understood standards to simplify its discovery for potential business partners. The [IDS Information Model](../3_4_Information_Layer) provides the schema for the Self-Descriptions themselves and their basic building blocks, like for instance Usage Contracts, endpoint descriptions, or the internal structure of data assets. +Apart from such edge cases, the Data Provider has the interest to correctly and comprehensively describe its data assets to maximize the amount of interested Data Consumers. It further wants to stick to commonly accepted and understood standards to simplify its discovery for potential business partners. The [IDS Information Model](../3_4_Information_Layer) provides the schema for the Self-Descriptions themselves and their basic building blocks, like for instance Usage Contracts, endpoint descriptions, or the internal structure of data assets. The first step in a typical data publication process is therefore the proper creation of a data asset Self-Description in JSON-LD. Usually, Connectors provide the technical manners to create and maintain them through suitable GUIs. In any way, the created Self-Descriptions are then deployed at the Connector that also hosts the related data assets. This Connector is also the only applicable source of truth for metadata about the data assets. Copied or otherwise differently located Self-Descriptions might be outdated or misleading, therefore a potential Data Consumer may want to double-check the correctness of a found Self-Description by also requesting a version directly from the original Connector. After reaching a syntactically and semantically correct Self-Description, the Data Provider may want to announce it in a data space. To do so, it sends the Self-Description to the responsible IDS infrastructure component, an IDS Metadata Broker. The location of available Metadata Broker instances as well as the selection of the appropriate ones is in the responsibility of each data space Participant and not - for now - generally specified. The Metadata Broker then stores the received Self-Descriptions and makes them available for search requests for other Connectors. Potential Data Consumers can search through the stored Self-Descriptions, filter for relevant offers, and then in the third step of the process negotiate and request a data asset directly at the hosting Connector. +Another possible approach to find relevant offers in a data ecosystem is a federated catalog. This approach is based on a crawler architecture implementing a federated cache node and a federated cache crawler. Since the Data Provider provides its offers in its Self-Description and further data describing the contents can be requested from the Data Provider, another IDS Connector can cache the available data offerings by crawling the Data Providers. The Data Consumer can then query its own already available cache of all known data offerings. The data offerings cache at the Data Consumer must be updated periodically or by event by the crawler. Depending on the size of the data space, multiple crawlers can also be used by the Data Consumer, which would allow partitioning of large data spaces into crawler-regions for the Data Consumer. For this approach, an overview of all participants in the data ecosystem is required for the Data Consumer crawler. + ## Data Provider updating a Self-Description - **//TODO** Handful of sentences that the self-description have to be update accordingly - **//TODO** Not all metadata is made available to everyone. Usage Policy enforcement starts right here and shows everyone who requests the self-description only the data they could access. @@ -41,7 +43,7 @@ Data Providers may be offered to restrict the publication of their Self-Descript ### Data Consumer searching for Self-Descriptions -To find a Data Provider, the Data Consumer may search in the catalogs of a Metadata Broker Service Provider. Before that, however, the Data Consumer needs to select a suitable Metadata Broker (e.g. based on thematic coverage) and determine the query capabilities (e.g. a graphical search interface or a domain-specific query language). The Metadata Broker then returns the query result to the Data Consumer, who needs to interpret the result to find out about the different data sources available in the International Data Spaces for providing the data specified in the query. Each query result must provide information about each IDS Connector capable of providing the desired data, so that the Data Consumer can retrieve each Connector’s self-description +To find a Data Provider, the Data Consumer may search in the catalogs of a Metadata Broker Service Provider. Before that, however, the Data Consumer needs to select a suitable Metadata Broker (e.g. based on thematic coverage) and determine the query capabilities (e.g. a graphical search interface or a domain-specific query language). The Metadata Broker then returns the query result to the Data Consumer, who needs to interpret the result to find out about the different data sources available in the International Data Spaces for providing the data specified in the query. Each query result must provide information about each IDS Connector capable of providing the desired data, so that the Data Consumer can retrieve each Connector’s Self-Description to learn more about how to receive the desired dataset from a technical point of view (e.g., endpoint addresses, protocol). The Data Provider may serve the same data using different representations or pricing options, so the Data Consumer may select a suitable offer from the Data Provider’s Connector description. From db05d0d8a250c478f68356e6217faad3988b717c Mon Sep 17 00:00:00 2001 From: Tim Berthold Date: Fri, 21 Jan 2022 14:21:03 +0100 Subject: [PATCH 12/12] feat: 3.3.2 address feedback for federated catalog (Crawling Self-Descriptions) --- .../3_3_Process_Layer/3_3_2_Data_Offering.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md index 8425bdf7..5d5799c6 100644 --- a/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md +++ b/documentation/3_Layers_of_the_Reference_Architecture_Model/3_3_Process_Layer/3_3_2_Data_Offering.md @@ -12,7 +12,8 @@ The first step in a typical data publication process is therefore the proper cre After reaching a syntactically and semantically correct Self-Description, the Data Provider may want to announce it in a data space. To do so, it sends the Self-Description to the responsible IDS infrastructure component, an IDS Metadata Broker. The location of available Metadata Broker instances as well as the selection of the appropriate ones is in the responsibility of each data space Participant and not - for now - generally specified. The Metadata Broker then stores the received Self-Descriptions and makes them available for search requests for other Connectors. Potential Data Consumers can search through the stored Self-Descriptions, filter for relevant offers, and then in the third step of the process negotiate and request a data asset directly at the hosting Connector. -Another possible approach to find relevant offers in a data ecosystem is a federated catalog. This approach is based on a crawler architecture implementing a federated cache node and a federated cache crawler. Since the Data Provider provides its offers in its Self-Description and further data describing the contents can be requested from the Data Provider, another IDS Connector can cache the available data offerings by crawling the Data Providers. The Data Consumer can then query its own already available cache of all known data offerings. The data offerings cache at the Data Consumer must be updated periodically or by event by the crawler. Depending on the size of the data space, multiple crawlers can also be used by the Data Consumer, which would allow partitioning of large data spaces into crawler-regions for the Data Consumer. For this approach, an overview of all participants in the data ecosystem is required for the Data Consumer crawler. +## Crawling Self-Descriptions +Another possible approach to find relevant offers in a data ecosystem is a federated catalog. This approach is based on a crawler architecture implementing a federated cache node and a federated cache crawler. Since the Data Provider provides its offers in its Self-Description and further data describing the contents can be requested from the Data Provider, another IDS Connector can cache the available data offerings by crawling the Data Providers. The Data Consumer can then query its own already available cache of all known data offerings. The data offerings cache at the Data Consumer must be updated periodically or by event by the crawler. Depending on the size of the data space, multiple crawlers can also be used by the Data Consumer, which would allow partitioning of large data spaces into crawler-regions for the Data Consumer. For this approach, an overview of all participants in the data ecosystem is required for the Data Consumer crawler. Such an initial overview of other participants can be obtained by querying central IDS-Entities about their known participants. For example, a Metadata Broker can be queried for other IDS-Connectors that have published offered resources. If other IDS components provide interfaces to query their active participants, an overview can also be derived from this. For example, an existing DAPS instance could provide an interface on which IDS-Connectors have been issued tokens for within a certain period of last days, which would allow determining active participants. A crawler could then prioritize crawling active participants. ## Data Provider updating a Self-Description - **//TODO** Handful of sentences that the self-description have to be update accordingly