CIRPASS-2 — the EU DPP ontologies
CIRPASS-2 is an EU-funded project that publishes ontologies for the
Digital Product Passport: a CORE ontology (https://w3id.org/eudpp#)
and sector modules for textiles, batteries and an example tyre
ontology, documented at
cirpass-2.github.io/ontologies-docs.
CIRPASS-2 is not normative. It is neither a regulation nor a harmonised standard, and no passport is required to use its terms. The requirements are in the ESPR, its delegated acts and the JTC 24 standards. We align with CIRPASS-2 so that tools built on its ontologies can read our passports; a passport that uses none of its terms is graded exactly the same.
How we align
Our field names stay our own. The vocabulary at
/vocab/dpp/v1?terms=1
says, for each term, which eudpp term it is the same as
(skos:exactMatch) or close to (skos:closeMatch):
- exactMatch only where the meaning and the unit agree.
- closeMatch where they do not, with a note saying why: a different unit, a different shape, or a value where the ontology has a structured object.
- Some fields are left out on purpose, and the vocabulary source says why (for example the passport a product inherits its data from is not its predecessor, and voluntary certification schemes are not EU conformity certificates).
Checked against CORE 2.0.7 / P_DPP 2.1.0 / SOC 2.0.0, textile 1.1.2 (all twelve modules) and battery 0.4.0 / battery-performance 0.3.0, on 14 October 2026.
Textile coverage
The textile modules describe a fibre composition, a substance, a care instruction or a durability claim as structured objects: components, quantitative values with an SI unit, and controlled concepts. Our textile fields hold a value or a sentence, so they are close matches, not exact ones:
| Our field | eudpp term | Match |
|---|---|---|
| Production date | eudpp:manufacturingDate |
exact |
| Country of origin | eudpp:countryOfOrigin |
exact (ISO 3166-1 alpha-2) |
| Material composition | textile-core:hasFibreCompositionComponent |
close |
| Recycled content source | eudpp:materialRecycledContentType |
close |
| Substances of concern | eudpp:containsSubstanceOfConcern |
close |
| Concentration | eudpp:Concentration, textile-soc:TextileConcentrationInformation |
close |
| Substance location | eudpp:substanceLocation, textile-soc:hasTextileLocationType |
close |
| Washing, bleaching, drying, ironing, professional care, care symbols, care text | textile-process:TextileCareInstruction |
close |
| Knitted or woven | textile-process:hasFabricManufacturingMethod |
close |
| Durability | textile-indicator:DurabilityIndicator |
close |
| Repair instructions | textile-repairability:RepairGuidance |
close |
| Spare parts available | textile-repairability:SparePartAvailabilityCondition |
close |
| Take-back | textile-recyclability:takeBackCollectionScheme |
close |
| Recyclable share | textile-recyclability:RecyclabilityScore |
close |
| Disposal guidance | textile-process:TextileEndOfLifeInstruction |
close |
| Supply-chain journey | textile-process:hasProcessExecution |
close |
Nothing of ours maps to textile-structure (fabric characteristics such as mass per area or thread count), textile-durability (failure modes), textile-assessment (test results), textile-context (how a product is used and cared for) or textile-associated-materials (buttons, zips, packaging): we hold no such fields.
The validator shows this as the CIRPASS-2 data model tab, beside the schemas. It is for information only and never changes the score, the grade or what can be published.
The passport in eudpp terms
Every passport can be read as JSON-LD in the ontology's own terms:
GET /01/09506000134352?format=eudpp HTTP/2
or, by content negotiation on the passport's address:
GET /01/09506000134352 HTTP/2
Accept: application/ld+json; profile="https://w3id.org/eudpp"
The answer has Content-Type: application/ld+json; profile="https://w3id.org/eudpp", and the passport's Link header
lists it as a rel="alternate" with that profile. Plain
Accept: application/ld+json still returns the
default JSON-LD.
{
"@context": {
"@version": 1.1,
"@vocab": "https://dppagent.com/vocab/dpp#",
"eudpp": "https://w3id.org/eudpp#",
"eudpp-textile-process": "https://w3id.org/eudpp/textile-process#",
"…": "one prefix per module"
},
"@id": "https://example.dpp.dppagent.com/01/09506000134352",
"@type": "eudpp:DPP",
"eudpp:dppUrl": { "@value": "https://example.dpp.dppagent.com/01/09506000134352", "@type": "xsd:anyURI" },
"eudpp:granularity": "model",
"eudpp:lastUpdate": { "@value": "2026-10-10T21:59:21.586+00:00", "@type": "xsd:dateTimeStamp" },
"dppStatus": "active",
"eudpp:appliesToProduct": {
"@id": "https://example.dpp.dppagent.com/01/09506000134352#product",
"@type": "eudpp:Product",
"eudpp:productName": "Waterproof shell jacket",
"eudpp:countryOfOrigin": "CN",
"eudpp:manufacturingDate": { "@value": "2024-06-25", "@type": "xsd:date" },
"espr.mat.composition": "Main fabric: 100% polyamide",
"espr.care.washing": "Machine wash 40°"
}
}
The rules:
- Exact matches only go out as eudpp properties. A close match, and
every field with no match, goes out under our own vocabulary
(
@vocab), so nothing the passport shows is lost and nothing is claimed to be what it is not. - On the right node. Each property sits on the node its domain in
the ontology names:
eudpp:granularityon theeudpp:DPP,eudpp:productNameon theeudpp:ProductitappliesToProduct, a battery'snominalVoltageon aBatteryPerformance. - In the right form. A value goes out as an eudpp property only if
it fits the range: a URL for
xsd:anyURI, a number in the stated unit for a decimal, an ISO 3166-1 alpha-2 code forcountryOfOrigin(an English country name is converted; "Made in China" is not). A value that does not fit stays under our own term. - Public data only. The same fields as the public page: restricted battery data (Annex XIII points 2 to 4 of the Battery Regulation) never appears, and for a brand with role-based access switched on, only the sections the consumer role sees are included.
- Self-contained. The
@contextis inline; a processor needs to fetch nothing.https://w3id.org/eudppnames an ontology, not a JSON-LD context.
It is read-only and has no effect on the grade. Draft passports answer
only with ?preview=1, as for every other form.