Skip to content

EU DPP Ontology Alignment

dppvalidator aligns UNTP Digital Product Passport data with EU Digital Product Passport ontologies defined by the CIRPASS-2 project and TalTech research.

Overview

The EU Ecodesign for Sustainable Products Regulation (ESPR) mandates Digital Product Passports with specific semantic requirements. dppvalidator provides vocabulary modules that map UNTP data structures to EU DPP ontology terms.

Supported Ontologies

Ontology Namespace Description
EU DPP Core http://dpp.taltech.ee/EUDPP# Product lifecycle classes
Actors & Roles http://dpp.taltech.ee/EUDPP# Supply chain participants
Substances of Concern http://dpp.taltech.ee/EUDPP# REACH/SVHC compliance
LCA Module http://dpp.cea.fr/EUDPP/LCA# PEF/OEF impact categories

Vocabulary Modules

Actor Roles (eudpp_actors.py)

Defines 24 actor and role classes per ESPR Art 2(37-55):

Python
from dppvalidator.vocabularies.eudpp_actors import (
    EUDPPActorClass,
    EUDPPRoleClass,
    Actor,
)

# Economic operator roles
print(EUDPPRoleClass.MANUFACTURER.value)  # eudpp:ManufacturerRole
print(EUDPPRoleClass.IMPORTER.value)  # eudpp:ImporterRole
print(EUDPPRoleClass.DISTRIBUTOR.value)  # eudpp:DistributorRole

LCA Impact Categories (eudpp_lca.py)

Provides 16 PEF 3.1 impact categories per ESPR Annex I:

Python
from dppvalidator.vocabularies.eudpp_lca import (
    ImpactCategory,
    LCAClass,
)

# Climate change impact
print(ImpactCategory.CLIMATE_CHANGE.value)
print(ImpactCategory.OZONE_DEPLETION.value)
print(ImpactCategory.WATER_USE.value)

Substances of Concern (eudpp_substances.py)

REACH/SVHC substance vocabulary for chemical compliance:

Python
from dppvalidator.vocabularies.eudpp_substances import (
    Substance,
    SubstanceIdentifierType,
)

# Validate CAS/EINECS identifiers
substance = Substance(
    cas_number="50-00-0",
    name="Formaldehyde",
)

Core Classes (eudpp_classes.py)

EU DPP Core Ontology class definitions:

Python
from dppvalidator.vocabularies.eudpp_classes import (
    EUDPPClass,
    EUDPPProperty,
)

# Product passport class
print(EUDPPClass.DIGITAL_PRODUCT_PASSPORT.value)
print(EUDPPClass.PRODUCT.value)

Relation Mapping (eudpp_relations.py)

UNTP to EU DPP property mappings:

Python
from dppvalidator.vocabularies.eudpp_relations import ProductRelationMapper

mapper = ProductRelationMapper()
eudpp_property = mapper.map_untp_property("manufacturer")

EU DPP Export

Convert validated UNTP DPPs to EU DPP JSON-LD format:

Python
from dppvalidator.exporters import EUDPPJsonLDExporter
from dppvalidator.validators import ValidationEngine

# Validate first
engine = ValidationEngine()
result = engine.validate(dpp_data)

if result.valid and result.passport:
    # Export to EU DPP format (auto-detects UNTP version from the
    # passport's class — works for both v0.6 and v0.7 inputs).
    exporter = EUDPPJsonLDExporter()
    eudpp_jsonld = exporter.export(result.passport)

Per-version mapping (Phase 3c)

The exporter is version-aware. UNTP v0.6 and v0.7 use different source-side spellings (serialNumber vs itemNumber, producedByParty vs relatedParty, …) but most map to the same EU DPP target URI. The mapping table in vocabularies/ontology.py:TermMapping carries untp_v0_6 / untp_v0_7 columns; the exporter reads the right one per call.

  • schema_version=None (default) — auto-detect from the passport class's module path (dppvalidator.models.v0_X.*).
  • schema_version="0.6.1" or "0.7.0" — pin explicitly. Useful for downstream-compat scenarios (e.g. forcing v0.6 mapping on a v0.7 passport).

Terms removed in a given version (the TERM_REMOVED sentinel — currently gtin for v0.7) drop out of that version's mapper index. The full mapping table and per-version usage examples are in the EU DPP export guide.

Ontology Data Files

Bundled Turtle files for offline validation:

Text Only
vocabularies/data/ontologies/
├── eudpp_core.ttl          # Core ontology
├── product_dpp.ttl         # Product DPP classes
├── actors_roles.ttl        # Actor and role hierarchy
├── soc.ttl                 # Substances of Concern
└── lca.ttl                 # LCA impact categories

References

See Also