Data Product Vocabulary (DPROD)

The Data Mesh is an architectural and organizational paradigm that views data as a product, emphasizing domain-oriented decentralized data ownership and architecture. The Data Catalog (DCAT) Vocabulary is a W3C standard that allows publishers to describe datasets and data services in a decentralized way. The Data Product (DPROD) specification defines a profile of DCAT, extending it to describe Data Products.

DPROD follows two basic principles:

🔵 Decentralize Data Ownership: Efficiency in data integration necessitates task distribution among multiple teams. DCAT facilitates this by providing a standardised approach for decentralized dataset publication.

🔵 Harmonize Data Schemas: Shared ontologies can be used to harmonize decentralize schemas to consistent semantics. For example this shared DPROD ontology provides the semantics for defining what constitutes a Data Product.


The DPROD specification extends DCAT by linking DCAT Data Services to DPROD Data Products. This enables a decentralized approach to publishing Data Products, facilitating federated searches for products across distributed sites using the same query mechanism and structure.

The DPROD specification has four main aims:

🔵 To provide unambiguous and sharable semantics to answer the question: 'What is a data product?'

🔵 Be simple for anyone to use, but expressive enough to power large data marketplaces

🔵 Allow organisations to reuse their existing data catalogues and dataset infrastructure

🔵 To share common semantics across different Data Products and promote harmonisation

Status of this document

The current version is DRAFT. Feedback and comments welcome via the Github Issue feature.

Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this Profile are non-normative. Everything else in this Profile is normative.

The keywords MAY, MUST, MUST NOT, RECOMMENDED, SHOULD, and SHOULD NOT are to be interpreted as described in [[!RFC2119]].

Normative namespaces

Namespaces and prefixes used in normative parts of this Profile are shown in the following table.

Prefix Namespace IRI Source
dcat http://www.w3.org/ns/dcat# [[VOCAB-DCAT-3]]
dct http://purl.org/dc/terms/ [[DCTERMS]]
odrl http://www.w3.org/ns/odrl/2/ [[ODRL-VOCAB]]
sdo https://schema.org [[SCHEMA-ORG]]

Data Product (DPROD) Model

In the Data Mesh architecture, input and output ports in Data Products serve as interfaces for importing and exporting data, supporting various formats, schemas, and protocols. Input ports consume data, while output ports make data available to other Data Products or for downstream analytical and reporting purposes.

In the Data Catalog Vocabulary (DCAT) framework, a DataService is a class that encapsulates services providing data access. Data Services offer standardized, machine-readable descriptions of a collection of operations that provide access to one or more datasets or data processing functions.

Data Services facilitate data downloads and are linked to Distributions, which are specific representations of a dataset (like CSV or JSON). The datasets themselves are collections of data, published or curated by a single agent, and can be linked to classes defined in a shareable ontology.

By mapping Data Product ports to DCAT DataServices, DPROD can describe Data Products in a machine-readable way across the organization. This approach facilitates a self-service data infrastructure, where domain-oriented data teams can autonomously build and maintain their data products, ensuring they interact and harmonize with the rest of the data ecosystem within an organization.

In a broader sense, using standards like DCAT contributes to a powerful and expressive model for Data Mesh. It ensures that as the data landscape becomes increasingly complex, the fundamental mechanisms for describing, sharing, and manipulating data remain robust and standardized across the organization.

Information model for the Profile
Overview of DPROD model and its relationship with DCAT classes

The Profile consists of the following classes:

As DCAT Data Services, the DPROD input and output ports can specify connection details, they have distributions that define formats, and link to datasets that conform to shared ontologies. In this example, the UK Bonds Data Product includes an output port, which is a RESTful API. This API delivers JSON data conforming to the shared FIBO specification for callable bonds.

  {
    "@context": "https://ekgf.github.io/data-product-spec/dprod.jsonld",
    "id": "https://y.com/products/uk-bonds",
    "type": "DataProduct",
    "title": "UK Bonds",
    "description": "UK Bonds is your one-stop-shop for all your bonds!",
    "dataProductOwner": "https://www.linkedin.com/in/tonyseale/",
    "lifecycleStatus" : "https://ekgf.github.io/data-product-spec/dprod/data/lifecycle-status/Consume",
    "outputPort": {
      "type": "DataService",
      "endpointURL": "https://y.com/uk-10-year-bonds",
      "isAccessServiceOf": {
        "type": "Distribution",
        "format": "https://www.iana.org/assignments/media-types/application/json",
        "isDistributionOf": {
          "type": "Dataset",
          "id": "https://y.com/products/uk-bonds/datasets/10-year",
          "conformsTo": "https://spec.edmcouncil.org/fibo/ontology/SEC/Debt/Bonds/CallableBond"
        }
      }
     }
  }
  

The examples in map the type of the above classes to @type in the JSON-LD serialisations. You can use JSON-LD to extend the familiar JSON syntax with the shared semantics defined by DCAT and DPROD.
You can copy the json above and paste it into https://json-ld.org/playground. You can see that the schema resolves.

DataProduct

A data product is a rational, managed, and governed collection of data, with purpose, value and ownership, meeting consumer needs over a planned life-cycle.

label

Identifier:rdfs:label
Domain:dprod:DataProduct
Range:xsd:string

description

Identifier:dcterms:description
Domain:dprod:DataProduct
Range:xsd:string

dataProductOwner

The Agent that is overall accountable for the data product. This includes managing the data product along its lifecycle ( creation, usage, versioning, deletion).
Identifier:dprod:dataProductOwner
Label:dataProductowner
Domain:dprod:DataProduct
Range:foaf:Agent

domain

The business or information area supported by the data product.
Identifier:dprod:domain
Comment:The domain is intended to be a resource in its own right. This specification does not constrain the class to be used.
Domain:dprod:DataProduct
Range:

inputPort

an input port describes a set of services exposed by a data product to collect its source data and makes it available for further internal transformation. An input port can receive data from one or more upstream sources in a push (i.e. asynchronous subscription) or pop mode (i.e. synchronous query). Each data product may have one or more input ports
Identifier:dprod:inputPort
Label:inputPort
Domain:dprod:DataProduct
Range:dcat:DataService

outputPort

an output port describes a set of services exposed by a data product to share the generated data in a way that can be understood and trusted
Identifier:dprod:outputPort
Label:outputPort
Domain:dprod:DataProduct
Range:dcat:DataService

inputDataset

the source data made available to the data product through input data services. Depending on the lifecycle of the data product, this may be a stated or inferred relationship aligned with the input ports
Identifier:dprod:inputDataset
Label:input Dataset
Domain:dprod:DataProduct
Range:dcat:Dataset

outputDataset

the data that is exposed by the data product through output data services in a way that can be understood and trusted. Depending on the lifecycle of the data product, this may be a stated or inferred relationship aligned with the output ports
Identifier:dprod:outputDataset
Label:output Dataset
Domain:dprod:DataProduct
Range:dcat:Dataset

purpose

A description of the objectives and intended usage of the data product.
Identifier:dprod:purpose
Domain:dprod:DataProduct
Range:xsd:string

hasPolicy

Identifier:odrl:hasPolicy
Domain:dprod:DataProduct
Range:odrl:Policy

lifecycleStatus

The lifecycle status of the Data Product taken from a control list ( Ideation, Design, Build, Deploy, Consume ).
Identifier:dprod:lifecycleStatus
Label:lifecycleStatus
Domain:dprod:DataProduct
Range:dprod:DataProductLifecycleStatus

DataService

isAccessServiceOf

The dataset distribution that is being offered through this Data Service
Identifier:dprod:isAccessServiceOf
Label:is Access Service Of
Domain:dcat:DataService
Range:dcat:Distribution

protocol

A protocol (possibly one of many options) used to communicate with this Data Service
Identifier:dprod:protocol
Domain:dcat:DataService
Range:dcat:Protocol

securitySchemaType

The security schema type used for authentication and to communication with this Data Service
Identifier:dprod:securitySchemaType
Domain:dcat:DataService
Range:dcat:SecuritySchemaType

endpointURL

Identifier:dcat:endpointURL
Domain:dcat:DataService
Range:

endpointDescription

Identifier:dcat:endpointDescription
Domain:dcat:DataService
Range:

Distribution

accessService

Identifier:dcat:accessService
Domain:dcat:Distribution
Range:dcat:DataService

conformsTo

Identifier:dcterms:conformsTo
Domain:dcat:Distribution
Range:

isDistributionOf

The dataset that this distribution makes available
Identifier:dprod:isDistributionOf
Label:isDistributionOf
Domain:dcat:Distribution
Range:dcat:Dataset

format

Identifier:dcterms:format
Domain:dcat:Distribution
Range:

Dataset

label

Identifier:rdfs:label
Domain:dcat:Dataset
Range:xsd:string

description

Identifier:dcterms:description
Domain:dcat:Dataset
Range:xsd:string

type

Identifier:dcterms:type
Domain:dcat:Dataset
Range:

distribution

Identifier:dcat:distribution
Domain:dcat:Dataset
Range:dcat:Distribution

conformsTo

Identifier:dcterms:conformsTo
Domain:dcat:Dataset
Range:

hasPolicy

Identifier:odrl:hasPolicy
Domain:dcat:Dataset
Range:

informationSensitivityClassification

More granular classification that indicates the level of control and protection that must be applied to the asset due to the nature of the data and its sensitivity or importance to the organization
Identifier:dprod:informationSensitivityClassification
Label:information Sensitivity Classification
Domain:dcat:Dataset
Range:dprod:InformationSensitivityClassification

InformationSensitivityClassification

A taxonomy of concepts that classifies the information within a dataset that indicates the level of control and protection that must be applied to the dataset

Protocol

A protocol, possibly including a specific version, used for communicating with a service

SecuritySchemaType

A security schema type used for authentication and communication.

DataProductLifecycleStatus

The lifecycle status of the Data Product taken from a control list ( Ideation, Design, Build, Deploy, Consume ).

Worked Examples

Here are some worked examples of how to use DPROD for some common use cases

Data Linage

It is important to be able to trace the lineage of data. Data Products have input and output ports, and one Data Product’s input port will point to another Data Product’s output port.

This allows a user to query the lineage of where the data has come from by following the inputs. Here is an example query that will return all the input datasets for the finance data product.

                        
SELECT DISTINCT ?input
WHERE
{
  :company-finance dprod:inputPort ?inputPort.
  ?inputPort dprod:isAccessServiceOf/dprod:isDistributionOf/rdfs:label ?input.
}


                    

Based on the data in the example, this query would return: - Sales - Payroll

NOTE: If you wish to track lineage at a more granular level, you can also use PROV (https://www.w3.org/TR/prov-o/) at the dataset level. See: https://www.w3.org/TR/vocab-dcat-3/#examples-dataset-provenance.

                        
dap:atnf-P366-2003SEPT
  rdf:type dcat:Dataset ;
  dcterms:bibliographicCitation "Burgay, M; McLaughlin, M; Kramer, M; Lyne, A; Joshi, B; Pearce, G; D'Amico, N; Possenti, A; Manchester, R; Camilo, F (2017): Parkes observations for project P366 semester 2003SEPT. v1. CSIRO. Data Collection. https://doi.org/10.4225/08/598dc08d07bb7" ;
  dcterms:title "Parkes observations for project P366 semester 2003SEPT"@en ;
  dcat:landingPage  ;
  prov:wasGeneratedBy dap:P366 ;
  .

dap:P366
  rdf:type prov:Activity ;
  dcterms:type  ;
  prov:startedAtTime "2000-11-01"^^xsd:date ;
  prov:used dap:Parkes-radio-telescope ;
  prov:wasInformedBy dap:ATNF ;
  rdfs:label "P366 - Parkes multibeam high-latitude pulsar survey"@en ;
  rdfs:seeAlso  ;
  .


                    

NOTE: For the example SPARQL query above to run you would also need to include the following prefixes: - PREFIX dcat: http://www.w3.org/ns/dcat# - PREFIX dprod: https://ekgf.github.io/data-product-spec/dprod/ - PREFIX rdfs: http://www.w3.org/2000/01/rdf-schema# - PREFIX : https://y.com/data-product/

{
  "@context": "https://ekgf.github.io/data-product-spec/dprod.jsonld",
  "dataProducts": [
    {
      "id": "https://y.com/data-product/company-finance",
      "type": "DataProduct",
      "inputPort": [
        {
          "id": "https://y.com/data-product/company-sales/port/2025-sales",
          "type": "DataService"
        },
        {
          "id": "https://y.com/data-product/company-hr/port/2025-payroll",
          "type": "DataService"
        }
      ],
      "outputPort": {
        "id": "https://y.com/data-product/company-sales/port/2025-balance-sheet",
        "type": "DataService",
        "label": "Balance Sheet",
        "endpointURL": "https://y.com/data-product/company-sales/port/2025-c",
        "isAccessServiceOf": {
          "type": "Distribution",
          "format": "https://www.iana.org/assignments/media-types/application/json",
          "isDistributionOf": {
            "type": "Dataset",
            "id": "https://y.com/data-product/company-sales/dataset/2025-balance-sheet",
            "conformsTo": "https://y.com/schema/BalanceSheet"
          }
        }
      }
    },
    {
      "id": "https://y.com/data-product/company-sales",
      "type": "DataProduct",
      "outputPort": {
        "id": "https://y.com/data-product/company-sales/port/2025-sales",
        "type": "DataService",
        "label": "Sales",
        "endpointURL": "https://y.com/data-product/company-sales/port/2025-sales",
        "isAccessServiceOf": {
          "type": "Distribution",
          "format": "https://www.iana.org/assignments/media-types/application/json",
          "isDistributionOf": {
            "type": "Dataset",
            "label": "Sales",
            "id": "https://y.com/data-product/company-sales/dataset/2025-sales",
            "conformsTo": "https://y.com/schema/Sale"
          }
        }
      }
    },
    {
      "id": "https://y.com/data-product/company-hr",
      "type": "DataProduct",
      "outputPort": {
        "id": "https://y.com/data-product/company-sales/port/2025-payroll",
        "type": "DataService",
        "label": "Payroll",
        "endpointURL": "https://y.com/data-product/company-hr/port/2025-payroll",
        "isAccessServiceOf": {
          "type": "Distribution",
          "format": "https://www.iana.org/assignments/media-types/text/csv",
          "isDistributionOf": {
            "type": "Dataset",
            "label": "Payroll",
            "id": "https://y.com/data-product/company-sales/dataset/2025-payroll",
            "conformsTo": "https://y.com/schema/Payroll"
          }
        }
      }
    }
  ]
}

Data Quality

DQV is a standard vocabulary to describe data quality and is proposed along with the DCAT vocabulary to measure the quality of Datasets It is based on 3 basic entities, Categories, the Metrics that belong to its category, and the Measurement for each metric Data Quality can be computed in different levels, eg. data product, dataset, table, column level etc. Usually, data quality metrics are measured in Dataset level and can inform more high level quality metrics on data product level

[

  {
  "@context": "https://ekgf.github.io/data-product-spec/dprod.jsonld",
  "id": "https://y.com/derived-quality-measurementA",
  "@type": "QualityMeasurement",
  "value": 1,
  "computedOn": {
      "@type": "DataProduct",
      "@id": "https://y.com/products/uk-bonds"
    },
  "isMeasurementOf": {
    "@type": "Metric",
    "label": "Number of stale datasets"
    }
}
,

{
  "@context": "https://ekgf.github.io/data-product-spec/dprod.jsonld",
  "@id": "https://y.com/quality-measurement-B",
  "@type": "QualityMeasurement",
  "value": "false",
  "computedOn": {
      "@type": "Dataset",
      "@id": "https://y.com/products/uk-bonds/yearlyPrices"
    },
  "isMeasurementOf": {
    "@type": "Metric",
    "label": "Expected distribution frequency achieved"
  }
}
,
  {
    "@context": "https://ekgf.github.io/data-product-spec/dprod.jsonld",
    "id": "https://y.com/products/uk-bonds",
    "type": "DataProduct",
    "outputPort": {
      "type": "DataService",
      "endpointURL": "https://y.com/uk-bonds/quality-report",
      "isAccessServiceOf": {
        "type": "Distribution",
        "isDistributionOf": {
          "type": "Dataset",
          "conformsTo": "https://www.w3.org/TR/vocab-dqv/#dqv:QualityMeasurement"
        }
      }
    }
  }
]

Data Schema

The Data Product provides to the consumers (dprod:outputDataset) datasets defined based on DCAT. Datasets should be described (dcat:conforms) with logical models. Logical models describe business entities and their properties (attributes and relationships) with consistent business terms and they are technology independent. Ideally, logical models are based on existing standards eg, FIBO, CDM etc. If a logical model does not exist to describe the dataset, then the dataset publisher can create one, preferably by using SHACL modelling language:

Example of a Dataset conforming to a SHACL Schema

                        
exampleDataset dcat:conforms exampleSchema:DatasetLogicalSchema.
exampleSchema:DatasetLogicalSchema a owl:Ontology, dct:Standard.


                    

Based on SHACL all entities that exist in the dataset are Node Shapes (1). The attributes of the entities are described as Property Shapes with sh:datatype (2) The relationships are also defined as Property Shaped with sh:class the target class of the relationship (3)

                        
example:Account a sh:NodeShape;       // definition of the entity as a Node Shape (1)
rdfs:label "Account"@en;              // human readable name of the entity
dc:description "An Account is...";    // description of the entity
sh:property example:Account-AccountAge;       // an account has a property shape Account Age. Definition of the property shape follows (2)
sh:property example:Account-AccountBranch     // an account has a property shape Account Branch. Definition of the property shape follows   (3)
rdfs:isDefinedBy exampleSchema:DatasetLogicalSchema;
.

example:Account-AccountAge a sh:PropertyShape;   // (2) Definition of the Account-AccountAge property shape describing that an account MUST have exactly AccountAge attribute and its datatype is integer
sh:path example:AccountAge;
sh:datatype xsd:integer;
sh:minCount 1;
sh:maxCount 1;
rdfs:isDefinedBy exampleSchema:DatasetLogicalSchema;
.

example:Account-AccountBranch a sh:PropertyShape;   // (3) Definition of the Account-AccountBranch property shape describing than an account must have at least one Account Branch which is another entity
sh:path example:AccountBranch;
sh:class  example:Branch;
sh:minCount 1;
rdfs:isDefinedBy exampleSchema:DatasetLogicalSchema;
.

example:Branch a sh:NodeShape;     //definition of the entity Branch as a Node Shape (1)
rdfs:label "Branch"@en;              // human readable description of the entity
dc:description "A Branch is..";
rdfs:isDefinedBy exampleSchema:DatasetLogicalSchema;
....


                    
{
"@context": "https://ekgf.github.io/data-product-spec/dprod.jsonld",
"id": "https://y.com/products/equity-trade-xxx",
"@type": "DataProduct",
"title": "Equity Trade XXX",
"description": "Trade data defining the outcome of equity trades between parties in different stock markets, where the terms are primarily reflected in the tradable product. Additionally, Trade includes attributes such as the trade date, transacting parties, and settlement terms. Some attributes, such as the parties, are already defined in the Party Product and are simply referenced in Trade",
"outputPort": {
  "@type": "DataService",
  "endpointURL": "abfss://datasetsv1@demo.dfs.core.windows.net/demo/full/trade-euronext",
  "isAccessServiceOf": {
    "@type": "Distribution",
    "format": "application/parquet",
    "isDistributionOf": {
      "@type": "Dataset",
      "@id": "https://y.com/dataset/equity-trade-euronext-paris",
      "title":  "Equity Trade Euronext Paris XXX",
        "conformsTo":"https://spec.edmcouncil.org/fibo/ontology/BP/Process/FinancialContextAndProcess/SecuritiesTrade"     }
    }
  }
}

Equity Trade

Example of a Data Product with Equity Trades.

The Equity Trade Data Product provides to the consumers two datasets, one for trades in LSEG and one in Euronext.

{
"@context": "https://ekgf.github.io/data-product-spec/dprod.jsonld",
"id":  "equity trade-xxx",
"@id": "https://y.com/products/equity-trade-xxx",
"@type": "DataProduct",
"title": "Equity Trade XXX",
"description": "Trade data defining the outcome of equity trades between parties in different stock markets, where the terms are primarily reflected in the tradable product. Additionally, Trade includes attributes such as the trade date, transacting parties, and settlement terms. Some attributes, such as the parties, are already defined in the Party Product and are simply referenced in Trade",
"dataProductOwner": "https://www.schema.xxx/person/AnnTaylor",
"lifecycle" : "Consume",
"outputPort": [{
  "@type": "dcat:DataService",
  "id":  "equity-trade-euronext-xxx-tabular-adls-prod",
  "@id": "https://y.com/service/equity-trade-euronext-xxx-adls-prod-1",
  "dcat:endpointURL": "abfss://datasetsv1@demo.dfs.core.windows.net/demo/full/trade-euronext",
  "dcat:endpointDescription": "Details for accessing storage account",
  "isAccessServiceOf": {
    "@id": "https://y.com/service/equity-trade-euronext-xxx-tabular",
    "id":  "equity-trade-euronext-xxx-tabular",
    "@type": "dcat:Distribution",
    "dcterms:format": "application/parquet",
     "dcat:conformsTo": "https://cdm.finos.org/docs/event-model" ,
    "isDistributionOf": {
      "@type": "dcat:Dataset",
      "@id": "https://y.com/dataset/equity-trade-euronext-paris",
      "datasetOwner": "https://www.schema.xxx/person/JohnBarks",
      "title":  "Equity Trade Euronext Paris XXX",
      "id":  "equity-trade-euronext-paris-xxx",
      "dcat:conformsTo": "https://cdm.finos.org/docs/event-model"
        }
    }
  }
,{
   "@type": "dcat:DataService",
  "id":  "equity-trade-lseg-xxx-tabular-adls-prod",
  "@id": "https://y.com/service/equity-trade-lseg-xxx-adls-prod-1",
  "dcat:endpointURL": "abfss://datasetsv1@demo.dfs.core.windows.net/demo/full/trade-lseg",
  "dcat:endpointDescription": "Details for accessing storage account",
  "isAccessServiceOf": {
    "@id": "https://y.com/service/equity-trade-lseg-xxx-tabular",
    "id":  "equity-trade-lseg-xxx-tabular",
    "@type": "dcat:Distribution",
    "dcterms:format": "application/parquet",
     "dcat:conformsTo": "https://cdm.finos.org/docs/event-model" ,
    "isDistributionOf": {
      "@type": "dcat:Dataset",
      "@id": "https://y.com/dataset/equity-trade-lseg-xxx",
      "title":  "Equity Trade LSEG XXX",
      "id":  "equity-trade-lseg-xxx",
      "dcat:conformsTo": "https://cdm.finos.org/docs/event-model"
        }
    }
  }
  ]
}

Observability

An Observability Port is a designated interface or endpoint in a system or application specifically used for monitoring and diagnostic purposes. It allows external tools or services to collect and analyze data related to the system's performance, health, and behaviour. By exposing metrics, logs, and traces through this port, administrators and developers can gain insights into the system's state, troubleshoot issues, and ensure it operates efficiently and reliably.

DPROD has a schema-first design, to the first thing you would need to do is define an schema for your logging information. It could be a schema based on open telemetry etc, but in this example we use RLOG (which is a semantic ontology for logging).

If I want to find the Observability Port then I would query the ports to find the ones that returned an RLOG:Entry:

                        
SELECT ?port
WHERE
{
  ?port a dcat:DataService .
  ?port (dprod:isAccessServiceOf/dprod:isDistributionOf)/dcat:conformsTo rlog:Entry
}


                    

You can see that the example data product has two ports one with the data and one with the logging. This query will return the URI of the port that returns logging data: https://y.com/uk-bonds/observability-port

{
  "@context": "https://ekgf.github.io/data-product-spec/dprod.jsonld",
  "id": "https://y.com/products/uk-bonds",
  "type": "DataProduct",
  "outputPort": [{
    "id": "https://y.com/uk-bonds/observability-port",
    "type": "DataService",
    "label": "Observability Port",
    "endpointURL": "https://y.com/uk-bonds/observability",
    "isAccessServiceOf": {
      "type": "Distribution",
      "format": "https://www.iana.org/assignments/media-types/text/turtle",
      "isDistributionOf": {
        "type": "Dataset",
        "conformsTo": "http://persistence.uni-leipzig.org/nlp2rdf/ontologies/rlog#Entry"
      }
    }
   },
    {
      "type": "DataService",
      "label": "Main Data Port",
      "endpointURL": "https://y.com/uk-10-year-bonds",
      "isAccessServiceOf": {
        "type": "Distribution",
        "format": "https://www.iana.org/assignments/media-types/application/json",
        "isDistributionOf": {
          "type": "Dataset",
          "id": "https://y.com/products/uk-bonds/datasets/10-year",
          "conformsTo": "https://spec.edmcouncil.org/fibo/ontology/SEC/Debt/Bonds/CallableBond"
        }
      }
    }
  ]
}

Sba Pool Rates

Rates for SBE Pool that are Mortgage Backed Securities. The data product is provided through 3 ports: 1st port: providing all sba pool rates through a query to a database 2nd port: providing only EMEA rates through an api 3rd port: providing only US rates through a Kafka topic

{  "@context": "https://ekgf.github.io/data-product-spec/dprod.jsonld",
  "id":  "sba-pool-rates",
  "@id": "https://y.com/products/sba-pool-rates",
  "@type": "DataProduct",
  "title": "SBA Pool Rates",
  "description": "Rates for SBE Pool that are Mortgage Backed Securities. The data product is provided through 3 ports, one of them proving all sba pool rates through a query to a database, another port providing EMEA only rates through an api and another one providing US only rates through a Kafka topic",
  "dataProductOwner": "https://www.schema.xxx/person/johnSmith",
  "lifecycle" : "Consume",

  "outputPort": [{
    "@type": "dcat:DataService",
    "id":  "sba-pool-rate-tabular-prod1",
    "environment": "PROD",
    "@id": "https://y.com/service/sba-pool-rate-tabular-prod1",
    "dcat:endpointURL": "jdbc:oracle:thin@sd656-5656-6745.ldn.organiation.com:43534/PGPERG.WORLD",
    "sql": "select * from ...",
    "isAccessServiceOf": {
      "@id": "https://y.com/distribution/sba-pool-rate-tabular",
      "id":  "sba-pool-rate-tabular",
      "@type": "dcat:Distribution",
      "dcterms:format": "https://www.iana.org/assignments/media-types/application/sql",
      "isDistributionOf": {
        "@type": "dcat:Dataset",
        "@id": "https://y.com/dataset/sba-pool-rate",
        "id":  "sba-pool-rate",
        "dcat:conformsTo": "https://spec.edmcouncil.org/fibo/ontology/SEC/Debt/MortgageBackedSecurities/SBA-Pool"
      }
    }
   }
,
  {
    "@type": "dcat:DataService",
    "id":  "sba-pool-rate-emea-api-prod1",
    "environment": "PROD",
    "@id": "https://y.com/service/sba-pool-rate-emea-api-prod1",
    "dcat:endpointURL": "https://example.org/mbs/SBA-Pool-location-emea",
    "dcat:conformsTo":  "../resources/users.yaml'" ,
    "isAccessServiceOf": {
      "@id": "https://y.com/distribution/sba-pool-rate-emea-json1",
      "id":  "sba-pool-rate-emea-json1",
      "@type": "dcat:Distribution",
      "dcterms:format": "https://www.iana.org/assignments/media-types/application/json",
      "isDistributionOf": {
        "@type": "dcat:Dataset",
        "@id": "https://y.com/dataset/sba-pool-rate-emea",
        "description": "sba pool data that cover EMEA accessed through an api" ,
        "geographicalCoverage" :"https://y.com/country/EMEA",
        "id":  "sba-pool-rate-emea",
        "dcat:conformsTo": "https://spec.edmcouncil.org/fibo/ontology/SEC/Debt/MortgageBackedSecurities/SBA-Pool"
      }
    }
   }

 , {
     "@type": "dcat:DataService",
     "id":  "sba-pool-rate-json-prod1",
     "@id": "https://y.com/service/sba-pool-rate-json-prod1",
     "dcat:endpointURL": "q1.debt.mbs.dataset.us",
     "isAccessServiceOf": {
       "@id": "https://y.com/distribution/sba-pool-rate-json",
       "id":  "sba-pool-rate-json",
       "@type": "dcat:Distribution",
       "dcterms:format": "https://www.iana.org/assignments/media-types/application/json",
       "conformsTo": "http://confluent-registry-y/rates-json-schema.json",
        "schemaCompatiblity": "backwards compatible",
        "isDistributionOf": {
         "@type": "dcat:Dataset",
         "@id": "https://y.com/dataset/sba-pool-rate-us",
         "id":  "sba-pool-rate-us",
         "geographicalCoverage" :"https://y.com/country/US" ,
         "dcat:conformsTo": "https://spec.edmcouncil.org/fibo/ontology/SEC/Debt/MortgageBackedSecurities/SBA-Pool"
       }
     }
  }
    ]
}

Acknowledgements

The editors gratefully acknowledge the feedback and contributions made to this document by: