DCAT-AP HVD 3.0.0
DCAT Application Profile for High Value Datasets extends DCAT-AP with specific requirements for datasets subject to Commission Implementing Regulation (EU) 2023/138.
Overview
DCAT-AP HVD provides usage guidelines on top of DCAT-AP for catalogued resources within the scope of the High-Value Dataset implementing regulation.
Key features:
Six HVD Categories - Official thematic categories
HVD Regulation Compliance - Automatic regulation reference
Compliance Helpers -
make_hvd_compliant()andis_hvd_compliant()methodsHVD Licences - CC-BY 4.0 and more permissive licences
Mandatory APIs - API support required for HVD datasets
Official Specification: https://semiceu.github.io/DCAT-AP/releases/3.0.0-hvd/ HVD Regulation: https://eur-lex.europa.eu/eli/reg_impl/2023/138/oj
HVD Categories
The six thematic categories of High Value Datasets:
from dartfx.dcat import HVDCategory
# Official HVD Categories from EU Vocabularies
HVDCategory.GEOSPATIAL # Geospatial data
HVDCategory.EARTH_OBSERVATION # Earth observation & environment
HVDCategory.ENVIRONMENT # Environment
HVDCategory.METEOROLOGICAL # Meteorological data
HVDCategory.STATISTICS # Statistics
HVDCategory.COMPANIES # Company & ownership data
Quick Example
from dartfx.dcat import Dataset, Distribution, DataService, HVDCategory, HVDLicence
# Create HVD dataset
dataset = Dataset(id="hvd-geo-1")
dataset.add_title("European Geospatial Data", lang="en")
dataset.add_description("High Value geospatial dataset", lang="en")
# Make HVD-compliant (adds regulation and category)
dataset.make_hvd_compliant(HVDCategory.GEOSPATIAL)
# Add mandatory contact point
dataset.add_contact_point("http://example.org/contact")
# Verify compliance
if dataset.is_hvd_compliant():
print("✅ Dataset is HVD-compliant!")
# Create bulk download distribution
bulk = Distribution(id="bulk-download")
bulk.make_hvd_compliant()
bulk.add_download_url("http://example.org/data.zip")
bulk.add_license(HVDLicence.CC_BY_4_0)
# Create API (MANDATORY for HVD)
api = DataService(id="hvd-api")
api.add_title("Geospatial API", lang="en")
api.make_hvd_compliant(HVDCategory.GEOSPATIAL)
api.add_endpoint_url("https://api.example.org/geospatial")
api.add_contact_point("http://example.org/contact")
dataset.add_distribution(bulk)
HVD Requirements
Mandatory for HVD Datasets
Applicable Legislation - Must reference HVD regulation
HVD Category - At least one category from the six official categories
Contact Point - Mandatory contact information
Conforms To - For specific data requirements
Distribution - At least one distribution OR data service
Mandatory for HVD Distributions
Applicable Legislation - Must reference HVD regulation
Access URL - Mandatory access point
Licence - Must be CC-BY 4.0 or more permissive
Mandatory for HVD Data Services (APIs)
Applicable Legislation - Must reference HVD regulation
HVD Category - At least one category
Endpoint URL - Persistent endpoint
Contact Point - Mandatory contact information
Note
APIs are MANDATORY for HVD datasets!
Compliance Helpers
make_hvd_compliant()
Automatically adds HVD regulation and category:
# For Dataset
dataset.make_hvd_compliant(HVDCategory.GEOSPATIAL)
# Adds: applicableLegislation + hvdCategory
# For Distribution
distribution.make_hvd_compliant()
# Adds: applicableLegislation
# For DataService
api.make_hvd_compliant(HVDCategory.ENVIRONMENT)
# Adds: applicableLegislation + hvdCategory
# For DatasetSeries
series.make_hvd_compliant(HVDCategory.COMPANIES)
# Adds: applicableLegislation + hvdCategory
is_hvd_compliant()
Checks if resource meets HVD mandatory requirements:
# For Dataset
if dataset.is_hvd_compliant():
# Has: HVD regulation + at least one HVD category
print("✅ Dataset is HVD-compliant!")
# For Distribution
if distribution.is_hvd_compliant():
# Has: HVD regulation + access URL + licence
print("✅ Distribution is HVD-compliant!")
# For DataService
if api.is_hvd_compliant():
# Has: HVD regulation + HVD category + endpoint URL
print("✅ API is HVD-compliant!")
HVD Licences
HVD datasets must be made available under licences that are compatible with Creative Commons BY 4.0 or more permissive.
Compliant Licences
from dartfx.dcat import HVDLicence
# Creative Commons BY 4.0 (minimum requirement)
HVDLicence.CC_BY_4_0
# "http://creativecommons.org/licenses/by/4.0/"
# Creative Commons Zero (public domain - more permissive)
HVDLicence.CC0_1_0
# "http://creativecommons.org/publicdomain/zero/1.0/"
# EU No Restrictions
HVDLicence.EU_NO_RESTRICTIONS
# "http://publications.europa.eu/resource/authority/licence/NO_RESTRICTIONS"
# Check if licence is HVD-compliant
if HVDLicence.is_hvd_compliant(licence_uri):
print("✅ Licence is HVD-compliant!")
Complete HVD Example
from dartfx.dcat import (
Catalog, Dataset, Distribution, DataService,
HVDCategory, HVDLicence
)
# Create HVD catalog
catalog = Catalog(id="eu-hvd-portal")
catalog.add_title("European HVD Portal", lang="en")
catalog.add_description("Catalog of High Value Datasets", lang="en")
# Create HVD dataset
dataset = Dataset(id="hvd-statistics-1")
dataset.add_title("EU Population Statistics", lang="en")
dataset.add_description("Annual population data", lang="en")
# Make HVD-compliant
dataset.make_hvd_compliant(HVDCategory.STATISTICS)
dataset.add_contact_point("http://example.org/contact")
dataset.add_conforms_to("http://example.org/standard/statistics")
# Create bulk download (recommended)
bulk = Distribution(id="bulk-csv")
bulk.make_hvd_compliant()
bulk.add_download_url("http://example.org/population.csv")
bulk.add_license(HVDLicence.CC0_1_0) # Public domain
bulk.add_media_type("text/csv")
# Create API (MANDATORY for HVD)
api = DataService(id="stats-api")
api.add_title("Statistics API", lang="en")
api.make_hvd_compliant(HVDCategory.STATISTICS)
api.add_endpoint_url("https://api.example.org/statistics")
api.add_contact_point("http://example.org/contact")
# Create API distribution
api_dist = Distribution(id="api-json")
api_dist.make_hvd_compliant()
api_dist.add_access_url("https://api.example.org/statistics")
api_dist.add_license(HVDLicence.CC0_1_0)
api_dist.add_media_type("application/json")
api_dist.add_access_service(api)
# Link everything
dataset.add_distribution(bulk)
dataset.add_distribution(api_dist)
catalog.add_dataset(dataset)
catalog.add_service(api)
# Verify HVD compliance
assert dataset.is_hvd_compliant() # ✅
assert bulk.is_hvd_compliant() # ✅
assert api_dist.is_hvd_compliant() # ✅
assert api.is_hvd_compliant() # ✅
# Serialize to RDF
turtle = catalog.to_rdf(format='turtle')
HVD Regulation Requirements
Article 3: Licensing
✅ Datasets must be available under CC-BY 4.0 or more permissive
✅ Implemented via
HVDLicenceclass
Article 4: APIs
✅ APIs are mandatory for HVD datasets
✅ Implemented via
DataServiceclass withhvdCategory
Article 5: Reporting
✅ Persistent identifiers for datasets, APIs, and licences
✅ Metadata must include HVD category
✅ Implemented via
applicableLegislationandhvdCategory
Testing
The DCAT-AP HVD implementation includes 26 comprehensive tests:
# Run all HVD tests
pytest tests/test_dcat_ap_hvd.py -v
# Run specific test class
pytest tests/test_dcat_ap_hvd.py::TestCompleteHVDExample -v
# Run with coverage
pytest tests/test_dcat_ap_hvd.py --cov=dartfx.dcat.dcat_ap_hvd
Compliance
This implementation is fully compliant with:
✅ DCAT-AP HVD Version 3.0.0
✅ DCAT-AP Version 3.0.1
✅ DCAT Version 3
✅ EU HVD Regulation (EU) 2023/138
✅ EU Vocabularies
See Also
DCAT-AP 3.0.1 - DCAT-AP Implementation
DCAT_AP_HVD_IMPLEMENTATION.md - Complete implementation guide