# Specification

This document outlines the [Catalog Protocol](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-protocol). The used terms are described [here](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology).

* [1 Introduction](#1-introduction)
  * [1.1 DCAT Vocabulary Mapping](#11-dcat-vocabulary-mapping)
    * [1.1.1 Dataset](#111-dataset)
      * [odrl:hasPolicy](#odrl--haspolicy)
    * [1.1.2 Distributions](#112-distributions)
    * [1.1.3 Data Service](#113-data-service)
      * [dspace:dataServiceType](#dspace--dataservicetype)
      * [dcat:servesDataset](#dcat--servesdataset)
    * [1.1.4 Participant Id](#114-participant-id)
  * [1.2 DCAT and ODRL Profiles](#12-dcat-and-odrl-profiles)
* [2 Message Types](#2-message-types)
  * [2.1 Catalog Request Message](#21-catalog-request-message)
  * [2.2 Dataset Request Message](#22-dataset-request-message)
* [3 Response Types](#3-response-types)
  * [3.1 ACK - Catalog](#31-ack---catalog)
  * [3.2 ACK - Dataset](#32-ack---dataset)
  * [3.3 ERROR - Catalog Error](#33-error---catalog-error)
* [4 Technical Considerations](#4-technical-considerations)
  * [4.1 Queries and Filter Expressions](#41-queries-and-filter-expressions)
  * [4.2 Replication Protocol](#42-replication-protocol)
  * [4.3 Security](#43-security)
    * [4.3.1 The Proof Metadata Endpoint](#431-the-proof-metadata-endpoint)
  * [4.4 Catalog Brokers](#44-catalog-brokers)

## 1 Introduction

The Catalog Protocol defines how a [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) is requested from a [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service) by a [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer) using an abstract message exchange format. The concrete message exchange wire format is defined in the binding specifications.

### 1.1 DCAT Vocabulary Mapping

This section describes how the DSP Information Model maps to [DCAT](https://www.w3.org/TR/vocab-dcat-3/) resources.

#### 1.1.1 Dataset

A [Dataset](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) is a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset) with the following attributes:

**odrl:hasPolicy**

A [Dataset](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) must have 1..N `hasPolicy` attributes that contain an [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) defining the [Usage Policy](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#policy) associated with the [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog). Offers must NOT contain any explicit `target` attributes. The `target` of an [Offer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#offer) is the associated [Dataset](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset). This is in line with the semantics of `hasPolicy` as defined in the [ODRL Information Model](https://www.w3.org/TR/odrl-model/#policy-has), explaining that the subject (here the Dataset) is automatically the `target` of each Rule. To prevent conflicts, the `target` attribute must not be set explicitely, for example, in the [Offer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#offer) or Rules.

#### 1.1.2 Distributions

A [Dataset](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) may contain 0..N [DCAT Distributions](https://www.w3.org/TR/vocab-dcat-3/#Class:Distribution). Each distribution must have at least one `DataService` which specifies where the distribution is obtained. Specifically, a `DataService` specifies the endpoint for initiating a [Contract Negotiation](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#contract-negotiation) and [Transfer Process](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#transfer-process).

A Distribution may have 0..N `hasPolicy` attributes that contain an [ODRL Offer](https://www.w3.org/TR/odrl-vocab/#term-Offer) defining the [Usage Policy](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#policy) associated with the [Dataset](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) and this explicit `Distribution`. [Offers](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#offer) must NOT contain any target attributes. The target of an [Offer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#offer) is the [Dataset](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) that contains the distribution.

Support for `hasPolicy` attributes on a `Distribution` is optional. Implementations may choose not to support this feature, in which case they should return an appropriate error message to clients.

#### 1.1.3 Data Service

A Data Service may specify an endpoint supporting the Dataspace Protocol such as a [Connector](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#connector--data-service-).

**dspace:dataServiceType**

If the Data Service refers to an endpoint that supports the Dataspace Protocol, it must include the property `dspace:dataServiceType`:

| Category   | Description                                                                |
| ---------- | -------------------------------------------------------------------------- |
| Definition | Specifies the service type                                                 |
| Domain     | [dcat:DataService](https://www.w3.org/TR/vocab-dcat-2/#Class:Data_Service) |
| Type       | xsd:string                                                                 |
| Note       | The value of this field is left intentionally open for future extension.   |

The following table lists well-know endpoint types:

| Value              | Description                                                                                                                                          |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `dspace:connector` | A [Connector](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#connector--data-service-) endpoint. |
|                    |                                                                                                                                                      |

**dcat:servesDataset**

Note that the property `dcat:servesDataset` should be omitted from the `DataService` since [Datasets](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) are included as top-level entries. Clients are not required to process the contents of `dcat:servesDataset`.

#### 1.1.4 Participant Id

The identifier of the participant providing the [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) is specified using the `dspace:participantId` attribute on that [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog).

### 1.2 DCAT and ODRL Profiles

The [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) is a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) with the following restrictions:

1. Each [ODRL `Offer`](https://www.w3.org/TR/odrl-vocab/#term-Offer) must be unique to a [Dataset](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) since the target of the [Offer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#offer) is derived from its enclosing context.
2. A [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) must not have an `odrl:hasPolicy` attribute, since it is not intended to negotiate on the access to [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) objects. An implementation might however regulate the visibility and/or the content of its [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) dependent of the requester.

## 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). Further [Dataspace](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataspace) specifications may define additional optional serialization formats.

### 2.1 Catalog Request Message

|                     |                                                                                                                                                                                                                                                                                                                           |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Sent by**         | [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer)                                                                                                                                                                                                   |
| **Resulting state** | `TERMINATED`                                                                                                                                                                                                                                                                                                              |
| **Response**        | [ACK](#31-ack---catalog) or [ERROR](#33-error---catalog-error)                                                                                                                                                                                                                                                            |
| **Schema**          | [TTL Shape](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/shape/catalog-request-message-shape.ttl), [JSON Schema](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/schema/catalog-request-message-schema.json) |
| **Example**         | [Message](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/example/catalog-request-message.json)                                                                                                                                                                      |
| **Diagram(s)**      | ![](https://377581754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlnGZQUB3A7aTQkUjaEA4%2Fuploads%2Fgit-blob-367ac424996e8c87c9e3e51075f7c7c0bf8b608d%2Fcatalog-request-message.png?alt=media)                                                                                                     |

The Catalog Request Message is message sent by a [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer) to a [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service). The [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service) must respond with a [Catalog](#31-ack---catalog), which is a valid instance of a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog).

* The message may have a `filter` property which contains an implementation-specific query or filter expression type supported by the [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service).
* The [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service) may require an authorization token. Details for including that token can be found in the protocol binding, e.g., [Catalog HTTPS Binding](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/catalog/catalog.binding.https). Similarly, pagination may be defined in the protocol binding.

### 2.2 Dataset Request Message

|                     |                                                                                                                                                                                                                                                                                                                           |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Sent by**         | [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer)                                                                                                                                                                                                   |
| **Resulting state** | `TERMINATED`                                                                                                                                                                                                                                                                                                              |
| **Response**        | [ACK](#31-ack---catalog) or [ERROR](#33-error---catalog-error)                                                                                                                                                                                                                                                            |
| **Schema**          | [TTL Shape](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/shape/dataset-request-message-shape.ttl), [JSON Schema](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/schema/dataset-request-message-schema.json) |
| **Example**         | [Message](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/example/dataset-request-message.json)                                                                                                                                                                      |
| **Diagram(s)**      | ![](https://377581754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlnGZQUB3A7aTQkUjaEA4%2Fuploads%2Fgit-blob-5838db697a81bdbb935941ddd16cbb01c3e09f3e%2Fdataset-request-message.png?alt=media)                                                                                                     |

The Dataset Request Message is message sent by a [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer) to a [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service). The [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service) must respond with a [Dataset](#32-ack---dataset), which is a valid instance of a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset).

* The message must have a `dataset` property which contains the id of the [Dataset](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset).
* The [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service) may require an authorization token. Details for including that token can be found in the protocol binding, e.g., [Catalog HTTPS Binding](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/catalog/catalog.binding.https).

## 3 Response Types

The `ACK` and `ERROR` response types are mapped onto a protocol such as HTTPS. A description of an error might be provided in protocol-dependent forms, e.g., for an HTTPS binding in the request or response body.

### 3.1 ACK - Catalog

|                |                                                                                                                                                                                                                                                                                         |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Sent by**    | [Provider](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#provider)                                                                                                                                                                 |
| **Schema**     | [TTL Shape](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/shape/dcat-shapes.ttl), [JSON Schema](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/schema/catalog-schema.json) |
| **Example**    | [Catalog Example](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/example/catalog.json)                                                                                                                                            |
| **Diagram(s)** | ![](https://377581754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlnGZQUB3A7aTQkUjaEA4%2Fuploads%2Fgit-blob-767c346281d167b081ef76d59536a19e7707df58%2Fcatalog.png?alt=media)                                                                                   |

The [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) contains all [Datasets](#111-dataset) which the requester shall see.

### 3.2 ACK - Dataset

|                |                                                                                                                                                                                                                                                                                         |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Sent by**    | [Provider](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#provider)                                                                                                                                                                 |
| **Schema**     | [TTL Shape](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/shape/dcat-shapes.ttl), [JSON Schema](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/schema/dataset-schema.json) |
| **Example**    | [Dataset Example](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/example/dataset.json)                                                                                                                                            |
| **Diagram(s)** | ![](https://377581754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlnGZQUB3A7aTQkUjaEA4%2Fuploads%2Fgit-blob-b9ded336ee073f54cc30f4cbd475c474ca5d2aa9%2Fdataset.png?alt=media)                                                                                   |

### 3.3 ERROR - Catalog Error

|                |                                                                                                                                                                                                                                                                                                       |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Sent by**    | [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer), [Provider](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#provider)                                                      |
| **Schema**     | [TTL Shape](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/shape/catalog-error-shape.ttl), [JSON Schema](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/schema/catalog-error-schema.json) |
| **Example**    | [Error](https://github.com/International-Data-Spaces-Association/ids-specification/blob/main/catalog/message/example/catalog-error.json)                                                                                                                                                              |
| **Diagram(s)** | ![](https://377581754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlnGZQUB3A7aTQkUjaEA4%2Fuploads%2Fgit-blob-1e361a4b1e10e7a369e11369426b8907d59acf76%2Fcatalog-error.png?alt=media)                                                                                           |

A Catalog Error is used when an error occurred after a [Catalog Request Message](#21-catalog-request-message) or a [Dataset Request Message](#22-dataset-request-message) and the [Provider](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#provider) cannot provide its [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) to the requester.

| Field     | Type           | Description                                                 |
| --------- | -------------- | ----------------------------------------------------------- |
| `code`    | String         | An optional implementation-specific error code.             |
| `reasons` | Array\[object] | An optional array of implementation-specific error objects. |

## 4 Technical Considerations

### 4.1 Queries and Filter Expressions

A [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service) may support [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) queries or filter expressions as an implementation-specific feature. However, it is expected that query capabilities will be implemented by the [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer) against the results of a [Catalog Request Message](#21-catalog-request-message), as the latter is an RDF vocabulary. Client-side querying can be scaled by periodically crawling the [Provider's](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#provider) [Catalog Services](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service), caching the results, and executing queries against the locally-stored [Catalogs](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog).

### 4.2 Replication Protocol

The [Catalog Protocol](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-protocol) is designed to be used by federated services without the need for a replication protocol. Each [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer) is responsible for issuing requests to 1..N [Catalog Services](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service), and managing the results. It follows that a specific replication protocol is not needed, or more precisely, each [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer) replicates data from catalog services by issuing [Catalog Request Messages](#21-catalog-request-message).

The discovery protocol adopted by a particular [Dataspace](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataspace) defines how a [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer) discovers [Catalog Services](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service).

### 4.3 Security

It is expected (although not required) that [Catalog Services](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service) implement access control. A [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) as well as individual [Datasets](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) may be restricted to trusted parties. The [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service) may require [Consumers](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer) to include a security token along with a [Catalog Request Message](#21-catalog-request-message). The specifics of how this is done can be found in the relevant protocol binding, e.g., [Catalog HTTPS Binding](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/catalog/catalog.binding.https). The semantics of such tokens are not part of this specification.

#### 4.3.1 The Proof Metadata Endpoint

When a [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) contains protected [Datasets](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) the [Provider](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#provider) has two options: include all [Datasets](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) in the [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) response and restrict access when a contract is negotiated; or, require one or more proofs when the [Catalog Request](#21-catalog-request-message) is made and filter the [Datasets](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataset) accordingly. The latter option requires a mechanism for clients to discover the type of proofs that may be presented at request time. The specifics of proof types and presenting a proof during a [Catalog](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) request is outside the scope of the Dataspace Protocol. However, [Catalog Protocol](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-protocol) bindings should define a proof data endpoint for obtaining this information.

### 4.4 Catalog Brokers

A [Dataspace](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#dataspace) may include Catalog Brokers. A Catalog Broker is a [Consumer](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#consumer) that has trusted access to 1..N upstream [Catalog Services](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service) and advertises their respective [Catalogs](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog) as a single [Catalog Service](https://docs.internationaldataspaces.org/ids-knowledgebase/dataspace-protocol/overview/terminology#catalog-service). The broker is expected to honor upstream access control requirements.
