@prefix compliance: <https://www.dpp-interoperability.wiki/vocab/v1/compliance#> .
@prefix dpp:        <https://www.dpp-interoperability.wiki/vocab/v1/dpp#> .
@prefix owl:        <http://www.w3.org/2002/07/owl#> .
@prefix rdf:        <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:       <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd:        <http://www.w3.org/2001/XMLSchema#> .
@prefix dcterms:    <http://purl.org/dc/terms/> .
@prefix skos:       <http://www.w3.org/2004/02/skos/core#> .
@prefix vann:       <http://purl.org/vocab/vann/> .

# =============================================================================
# DPP Compliance Extension Vocabulary v0.2
# =============================================================================

<https://www.dpp-interoperability.wiki/vocab/v1/compliance>
  a owl:Ontology ;
  owl:versionIRI   <https://www.dpp-interoperability.wiki/vocab/v1/compliance/0.2> ;
  owl:versionInfo  "0.2" ;
  owl:imports      <https://www.dpp-interoperability.wiki/vocab/v1/dpp> ;
  rdfs:label       "DPP Compliance Extension Vocabulary"@en ;
  rdfs:comment     "Compliance extension to the DPP Core Vocabulary. Consolidates regulatory compliance data previously spread across the dpp:Compliance core class and the SOC extension (REACH/RoHS) into a single structured extension covering standards, certifications, declarations of conformity, regulatory references, and audit history."@en ;
  dcterms:description
    "Vocabulary for the Compliance Extension of the DPP Interoperability Platform. Covers regulatory standards, certifications, declarations, and audit history."@en ;
  dcterms:creator   "Jorge Renato Leon Chumpitaz" ;
  dcterms:publisher "VU Amsterdam / LUT University" ;
  dcterms:created   "2026-03-01"^^xsd:date ;
  dcterms:modified  "2026-03-01"^^xsd:date ;
  dcterms:license   <https://creativecommons.org/licenses/by/4.0/> ;
  dcterms:rights    "CC BY 4.0 — Jorge Renato Leon Chumpitaz" ;
  dcterms:subject   "Digital Product Passport", "Regulatory Compliance",
                    "EU ESPR", "REACH", "RoHS", "Battery Regulation" ;
  rdfs:seeAlso      <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1781> ,
                    <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02006R1907-20230101> ,
                    <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32011L0065> ,
                    <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32023R1542> ,
                    <https://www.dpp-interoperability.wiki/vocab/v1/compliance.shacl.ttl> ;
  vann:preferredNamespacePrefix "compliance" ;
  vann:preferredNamespaceUri    "https://www.dpp-interoperability.wiki/vocab/v1/compliance#" .

# =============================================================================
# Classes
# =============================================================================

compliance:ComplianceExtension
  a owl:Class ;
  #       is satisfied and the extension class hierarchy is coherent.
  rdfs:subClassOf  dpp:Extension ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "Compliance Extension"@en ;
  rdfs:comment "Root container for regulatory compliance data in a DPP. Consolidates REACH, RoHS, ESPR, Battery Regulation, and product-specific compliance information including declarations of conformity per the EU Blue Guide 2022/C 247/01 and ISO/IEC 17065 product certification."@en ;
  skos:definition
    "A dpp:Extension which consolidates all regulatory compliance data for a Digital Product Passport, grouping applicable standards and their compliance status, formal declarations of conformity per EU Blue Guide 2022/C 247/01, product certifications per ISO/IEC 17065, applicable regulatory references, and a compliance audit history."@en ;
  rdfs:seeAlso <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=uriserv:OJ.C_.2022.247.01.0001.01.ENG> .

compliance:Standard
  a owl:Class ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "Standard"@en ;
  rdfs:comment "A regulatory standard and its compliance status (REACH, RoHS, Battery Regulation, etc.)."@en ;
  skos:definition
    "A compliance:ComplianceExtension component which records the compliance status of the product with respect to a named regulatory standard or technical standard, including the standard version, assessment date, and expiry date of the compliance determination."@en ;
  rdfs:seeAlso <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1781> .

compliance:Declaration
  a owl:Class ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "Declaration"@en ;
  rdfs:comment "A formal declaration (EU Declaration of Conformity, REACH SVHC Declaration, etc.)."@en ;
  skos:definition
    "A compliance:ComplianceExtension component which represents a formal legal or regulatory declaration issued by a responsible party attesting product conformity with a specific directive, regulation, or standard, identified by type, issuer, issue date, and document URL."@en .

compliance:RegulatoryReference
  a owl:Class ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "Regulatory Reference"@en ;
  rdfs:comment "Reference to an applicable regulation with specific articles."@en ;
  skos:definition
    "A compliance:ComplianceExtension component which identifies a regulation applicable to the product, specifying the regulation name, the particular articles that apply, and a URL to the official legislative text."@en ;
  rdfs:seeAlso <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32024R1781> ,
               <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02006R1907-20230101> ,
               <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32011L0065> ,
               <https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32023R1542> .

compliance:AuditRecord
  a owl:Class ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "Audit Record"@en ;
  rdfs:comment "A compliance audit trail entry."@en ;
  skos:definition
    "A compliance:ComplianceExtension component which records a single compliance audit event, identifying the auditing organization, audit scope, audit date, result (pass/fail/conditional/pending), and a URL to the audit report."@en .

# DatatypeProperty compliance:certifications with a structured class enabling
# machine-processable certification records (name, body, number, dates).
compliance:Certification
  a owl:Class ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "Certification"@en ;
  rdfs:comment "A product certification issued by an accredited body (CE, UL, IEC 62619, UN 38.3, etc.)."@en ;
  skos:definition
    "A compliance:ComplianceExtension component which represents a specific product certification granted by an accredited certification body, identified by its scheme name, certificate number, issuing body, issue date, and expiry date."@en .

# Disjointness — top-level sub-classes of ComplianceExtension are disjoint
compliance:Standard         owl:disjointWith compliance:Declaration,
                                              compliance:RegulatoryReference,
                                              compliance:AuditRecord,
                                              compliance:Certification .
compliance:Declaration      owl:disjointWith compliance:RegulatoryReference,
                                              compliance:AuditRecord,
                                              compliance:Certification .
compliance:RegulatoryReference owl:disjointWith compliance:AuditRecord,
                                                 compliance:Certification .
compliance:AuditRecord      owl:disjointWith compliance:Certification .

# =============================================================================
# Cardinality Constraints
#            property of compliance:ComplianceExtension.
# =============================================================================

compliance:ComplianceExtension
  rdfs:subClassOf
    [ a owl:Restriction ;
      owl:onProperty   compliance:standards ;
      owl:minCardinality 1 ] .

# =============================================================================
# Object Properties
# =============================================================================

compliance:standards
  a owl:ObjectProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label    "standards"@en ;
  rdfs:comment  "Links a ComplianceExtension to its regulatory standard entries."@en ;
  rdfs:domain   compliance:ComplianceExtension ;
  rdfs:range    compliance:Standard ;
  owl:inverseOf compliance:isStandardOf .

compliance:isStandardOf
  a owl:ObjectProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "isStandardOf"@en ;
  rdfs:comment "Inverse of compliance:standards."@en ;
  rdfs:domain  compliance:Standard ;
  rdfs:range   compliance:ComplianceExtension .

compliance:declarations
  a owl:ObjectProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label    "declarations"@en ;
  rdfs:comment  "Links a ComplianceExtension to its formal declarations."@en ;
  rdfs:domain   compliance:ComplianceExtension ;
  rdfs:range    compliance:Declaration ;
  owl:inverseOf compliance:isDeclarationOf .

compliance:isDeclarationOf
  a owl:ObjectProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "isDeclarationOf"@en ;
  rdfs:comment "Inverse of compliance:declarations."@en ;
  rdfs:domain  compliance:Declaration ;
  rdfs:range   compliance:ComplianceExtension .

compliance:regulatoryReferences
  a owl:ObjectProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label    "regulatoryReferences"@en ;
  rdfs:comment  "Links a ComplianceExtension to applicable regulatory references."@en ;
  rdfs:domain   compliance:ComplianceExtension ;
  rdfs:range    compliance:RegulatoryReference ;
  owl:inverseOf compliance:isRegulatoryReferenceOf .

compliance:isRegulatoryReferenceOf
  a owl:ObjectProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "isRegulatoryReferenceOf"@en ;
  rdfs:comment "Inverse of compliance:regulatoryReferences."@en ;
  rdfs:domain  compliance:RegulatoryReference ;
  rdfs:range   compliance:ComplianceExtension .

compliance:auditHistory
  a owl:ObjectProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label    "auditHistory"@en ;
  rdfs:comment  "Links a ComplianceExtension to compliance audit records."@en ;
  rdfs:domain   compliance:ComplianceExtension ;
  rdfs:range    compliance:AuditRecord ;
  owl:inverseOf compliance:isAuditRecordOf .

compliance:isAuditRecordOf
  a owl:ObjectProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "isAuditRecordOf"@en ;
  rdfs:comment "Inverse of compliance:auditHistory."@en ;
  rdfs:domain  compliance:AuditRecord ;
  rdfs:range   compliance:ComplianceExtension .

# (xsd:string) to owl:ObjectProperty pointing to compliance:Certification class,
# enabling structured and machine-processable certification records.
compliance:certifications
  a owl:ObjectProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label    "certifications"@en ;
  rdfs:comment  "Links a ComplianceExtension to structured product certification records."@en ;
  rdfs:domain   compliance:ComplianceExtension ;
  rdfs:range    compliance:Certification ;
  owl:inverseOf compliance:isCertificationOf .

compliance:isCertificationOf
  a owl:ObjectProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "isCertificationOf"@en ;
  rdfs:comment "Inverse of compliance:certifications."@en ;
  rdfs:domain  compliance:Certification ;
  rdfs:range   compliance:ComplianceExtension .

# =============================================================================
# Datatype Properties — Standard
# =============================================================================

compliance:standardName
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "standardName"@en ;
  rdfs:comment "Name of the regulatory or technical standard (e.g. 'REACH', 'RoHS', 'Battery Regulation', 'IEC 62619')."@en ;
  rdfs:domain  compliance:Standard ;
  rdfs:range   xsd:string .

compliance:complianceStatus
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "complianceStatus"@en ;
  rdfs:comment "Compliance status: 'compliant', 'non_compliant', 'pending', 'exempt', or 'not_applicable'."@en ;
  rdfs:domain  compliance:Standard ;
  rdfs:range   xsd:string .

compliance:standardVersion
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "standardVersion"@en ;
  rdfs:comment "Version or amendment number of the standard."@en ;
  rdfs:domain  compliance:Standard ;
  rdfs:range   xsd:string .

compliance:assessmentDate
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "assessmentDate"@en ;
  rdfs:comment "Date on which the compliance assessment was performed."@en ;
  rdfs:domain  compliance:Standard ;
  rdfs:range   xsd:date .

compliance:expiryDate
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "expiryDate"@en ;
  rdfs:comment "Expiry date of the compliance determination or certificate validity."@en ;
  rdfs:domain  compliance:Standard ;
  rdfs:range   xsd:date .

#            leaving compliance:notes with no domain (too broad for a property
#            that is consistently used on Standard instances).
compliance:notes
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "notes"@en ;
  rdfs:comment "Additional human-readable compliance notes."@en ;
  rdfs:domain  compliance:Standard ;
  rdfs:range   xsd:string .

# =============================================================================
# Datatype Properties — Certification
# =============================================================================

compliance:certificationName
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "certificationName"@en ;
  rdfs:comment "Name of the certification scheme (e.g. 'CE', 'UL', 'IEC 62619', 'UN 38.3')."@en ;
  rdfs:domain  compliance:Certification ;
  rdfs:range   xsd:string .

compliance:certificationBody
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "certificationBody"@en ;
  rdfs:comment "Accredited body that issued the certification."@en ;
  rdfs:domain  compliance:Certification ;
  rdfs:range   xsd:string .

compliance:certificationNumber
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "certificationNumber"@en ;
  rdfs:comment "Certificate number or identifier."@en ;
  rdfs:domain  compliance:Certification ;
  rdfs:range   xsd:string .

compliance:certificationIssueDate
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "certificationIssueDate"@en ;
  rdfs:comment "Date the certification was issued."@en ;
  rdfs:domain  compliance:Certification ;
  rdfs:range   xsd:date .

compliance:certificationExpiryDate
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "certificationExpiryDate"@en ;
  rdfs:comment "Expiry date of the certification."@en ;
  rdfs:domain  compliance:Certification ;
  rdfs:range   xsd:date .

compliance:certificationDocumentUrl
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "certificationDocumentUrl"@en ;
  rdfs:comment "URL to the certification document or public registry entry."@en ;
  rdfs:domain  compliance:Certification ;
  rdfs:range   xsd:anyURI .

# =============================================================================
# Datatype Properties — Declaration
# =============================================================================

compliance:declarationType
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "declarationType"@en ;
  rdfs:comment "Type of declaration (e.g. 'EU Declaration of Conformity', 'REACH SVHC Declaration', 'RoHS Declaration')."@en ;
  rdfs:domain  compliance:Declaration ;
  rdfs:range   xsd:string .

compliance:documentUrl
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "documentUrl"@en ;
  rdfs:comment "URL to the full declaration document."@en ;
  rdfs:domain  compliance:Declaration ;
  rdfs:range   xsd:anyURI .

compliance:issuer
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "issuer"@en ;
  rdfs:comment "Organization or responsible person that issued the declaration."@en ;
  rdfs:domain  compliance:Declaration ;
  rdfs:range   xsd:string .

#            with compliance:Standard which has assessmentDate. Declarations
#            legally require an issue date for authenticity verification.
compliance:issueDate
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "issueDate"@en ;
  rdfs:comment "Date on which the declaration was formally issued."@en ;
  rdfs:domain  compliance:Declaration ;
  rdfs:range   xsd:date .

# =============================================================================
# Datatype Properties — Regulatory Reference
# =============================================================================

compliance:regulationName
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "regulationName"@en ;
  rdfs:comment "Name and number of the regulation (e.g. 'EU ESPR Regulation 2024/1781', 'REACH Regulation 1907/2006')."@en ;
  rdfs:domain  compliance:RegulatoryReference ;
  rdfs:range   xsd:string .

compliance:applicableArticles
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "applicableArticles"@en ;
  rdfs:comment "Specific articles of the regulation that apply to this product (e.g. 'Article 9, Article 13')."@en ;
  rdfs:domain  compliance:RegulatoryReference ;
  rdfs:range   xsd:string .

compliance:regulationUrl
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "regulationUrl"@en ;
  rdfs:comment "URL to the official legislative text of the regulation (EUR-Lex or equivalent)."@en ;
  rdfs:domain  compliance:RegulatoryReference ;
  rdfs:range   xsd:anyURI .

# =============================================================================
# Datatype Properties — Audit Record
# =============================================================================

compliance:auditor
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "auditor"@en ;
  rdfs:comment "Name of the auditing organization or person."@en ;
  rdfs:domain  compliance:AuditRecord ;
  rdfs:range   xsd:string .

compliance:auditScope
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "auditScope"@en ;
  rdfs:comment "Scope of the audit (e.g. 'REACH Article 33 SVHC check', 'RoHS Annex II substance limits')."@en ;
  rdfs:domain  compliance:AuditRecord ;
  rdfs:range   xsd:string .

compliance:auditDate
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "auditDate"@en ;
  rdfs:comment "Date on which the compliance audit was conducted."@en ;
  rdfs:domain  compliance:AuditRecord ;
  rdfs:range   xsd:date .

compliance:auditResult
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "auditResult"@en ;
  rdfs:comment "Audit result: 'pass', 'fail', 'conditional', or 'pending'."@en ;
  rdfs:domain  compliance:AuditRecord ;
  rdfs:range   xsd:string .

compliance:reportUrl
  a owl:DatatypeProperty ;
  rdfs:isDefinedBy <https://www.dpp-interoperability.wiki/vocab/v1/compliance> ;
  rdfs:label   "reportUrl"@en ;
  rdfs:comment "URL to the full compliance audit report."@en ;
  rdfs:domain  compliance:AuditRecord ;
  rdfs:range   xsd:anyURI .
