@prefix : <https://ontology.inferal.com/modules/data-usage-processing-lineage/> .
@prefix conf: <https://ontology.inferal.com/modules/confidence/> .
@prefix dcls: <https://ontology.inferal.com/modules/data-classification/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix dpv: <https://w3id.org/dpv#> .
@prefix mod: <https://w3id.org/mod#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix pubacc: <https://ontology.inferal.com/modules/publication-access/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

:
    a owl:Ontology, pubacc:PublicationManagedOntology ;
    dcterms:accessRights pubacc:PublicAccess ;
    owl:imports
        conf: ,
        dcls: ,
        <http://www.w3.org/ns/prov> ,
        <https://w3id.org/dpv> ;
    dcterms:title "Data Usage and Processing Lineage Ontology" ;
    dcterms:description "Terms for describing abstract data-processing specifications and policies, concrete PROV executions, asset- and element-level lineage, classification impacts, lineage coverage, and mitigation evidence." ;
    dcterms:issued "2026-07-10"^^xsd:date ;
    dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
    dcterms:source
        conf: ,
        dcls: ,
        <http://www.w3.org/ns/prov> ,
        <https://w3id.org/dpv> ;
    vann:preferredNamespacePrefix "duplo" ;
    vann:preferredNamespaceUri "https://ontology.inferal.com/modules/data-usage-processing-lineage/" ;
    mod:status "draft" ;
    rdfs:label "Data Usage and Processing Lineage Ontology" ;
    rdfs:comment "This ontology connects three deliberately separate views: category-level processing contracts, actual processing provenance, and evidence-backed classification or mitigation assessments. It reuses PROV-O for execution history, DPV for processing and measure categories, and the Inferal Data Classification Ontology for classification records. Abstract declarations never by themselves assert that processing occurred or that an output classification is true." ;
    rdfs:seeAlso
        <https://www.w3.org/TR/prov-o/> ,
        <https://www.w3.org/TR/shacl/> ,
        <https://w3id.org/dpv> ,
        <https://openlineage.io/docs/spec/facets/dataset-facets/column_lineage_facet/> ,
        <https://www.opmw.org/model/p-plan/> ;
    owl:versionInfo "0.1.0" .

# Core specification, policy, and execution strata

:ProcessingSpecification
    a rdfs:Class ;
    rdfs:subClassOf prov:Plan ;
    rdfs:label "processing specification" ;
    rdfs:comment "An abstract, reusable contract for intended data usage or processing. A specification declares processing categories, input and output ports, structural or classification constraints, and expected impacts without asserting that any execution occurred." .

:ProcessingPlan
    a rdfs:Class ;
    rdfs:subClassOf :ProcessingSpecification ;
    rdfs:label "processing plan" ;
    rdfs:comment "A versioned, deployable processing specification, such as a query, mapping, program, model pipeline, or configured recipe, that can be adopted in the qualified PROV association of an actual activity." .

:ProcessingPolicy
    a rdfs:Class ;
    rdfs:subClassOf dcls:DataPolicy, prov:Plan ;
    rdfs:label "processing policy" ;
    rdfs:comment "A normative policy that permits, prohibits, or requires processing categories for classified data in a stated context. A policy is not evidence that processing was performed." .

:ProcessingActivity
    a rdfs:Class ;
    rdfs:subClassOf prov:Activity ;
    rdfs:label "processing activity" ;
    rdfs:comment "An activity that actually used, generated, moved, inspected, or otherwise processed data entities. Use performed processing only for historical or observed activity claims, not for plans or permissions." .

:TransformationActivity
    a rdfs:Class ;
    rdfs:subClassOf :ProcessingActivity ;
    rdfs:label "transformation activity" ;
    rdfs:comment "A processing activity that generated a new or updated data entity derived from one or more used entities. In-place changes are represented as generation of a new entity version and optional invalidation of the old version." .

:ClassificationPropagationActivity
    a rdfs:Class ;
    rdfs:subClassOf dcls:DetectionActivity ;
    rdfs:label "classification propagation activity" ;
    rdfs:comment "A classification activity that uses upstream classifications, lineage, processing specifications, and impact evidence to generate a downstream classification. It is separate from the processing activity that generated the data." .

# Ports and constraints

:DataPort
    a rdfs:Class ;
    rdfs:subClassOf prov:Role ;
    rdfs:label "data port" ;
    rdfs:comment "A plan-scoped role for a data entity in a processing specification. During execution, a qualified PROV usage or generation binds an actual entity to the port with prov:hadRole." .

:InputPort
    a rdfs:Class ;
    rdfs:subClassOf :DataPort ;
    rdfs:label "input port" ;
    rdfs:comment "A data port describing an entity expected to be used by a processing activity. Use DataInputPort for data-bearing sources and AuxiliaryInputPort for configurations, models, keys, parameters, or other non-data dependencies when origin reasoning depends on the distinction." .

:DataInputPort
    a rdfs:Class ;
    rdfs:subClassOf :InputPort ;
    rdfs:label "data input port" ;
    rdfs:comment "An input port whose bound entity contributes source data to the processing result, whether through direct values or indirect selection, joining, grouping, ordering, windowing, or conditional influence." .

:AuxiliaryInputPort
    a rdfs:Class ;
    rdfs:subClassOf :InputPort ;
    rdfs:label "auxiliary input port" ;
    rdfs:comment "An input port for a non-data dependency such as a configuration, model, public parameter, executable plan, or key reference. An auxiliary input can be used by a source-free data generator without becoming a source-data dependency." .

:OutputPort
    a rdfs:Class ;
    rdfs:subClassOf :DataPort ;
    rdfs:label "output port" ;
    rdfs:comment "A data port describing an entity expected to be generated by a processing activity." .

:ClassificationConstraint
    a rdfs:Class ;
    rdfs:label "classification constraint" ;
    rdfs:comment "A category, status, sensitivity, or structural conformance condition declared for a data port. Constraints describe expected bindings and do not themselves classify any data." .

# Versioned data entities and qualified element lineage

:DataSnapshot
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "data snapshot" ;
    rdfs:comment "An immutable version, batch, partition, message, file, table state, stream window, or other fixed-aspect data entity used for provenance. A mutable logical asset should have distinct snapshot entities over time." .

:DataElementVersion
    a rdfs:Class ;
    rdfs:subClassOf dcls:DataElement, prov:Entity ;
    rdfs:label "data element version" ;
    rdfs:comment "A fixed version of an addressable data element, such as a column in a schema version, a JSON path in a message version, or an RDF predicate occurrence pattern in a dataset version." .

:ElementDerivation
    a rdfs:Class ;
    rdfs:subClassOf prov:Derivation ;
    rdfs:label "element derivation" ;
    rdfs:comment "A qualified direct derivation in which values of an input data element contribute to values of an output data element. It can be elaborated with the responsible activity, usage, generation, and roles using standard PROV properties." .

:ElementInfluence
    a rdfs:Class ;
    rdfs:subClassOf prov:EntityInfluence ;
    rdfs:label "element influence" ;
    rdfs:comment "A qualified indirect influence in which an input element affects selection, joining, grouping, ordering, windowing, or conditional behavior without necessarily contributing values to the output element." .

# Classification impacts

:ClassificationImpact
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "classification impact" ;
    rdfs:comment "A reified, potentially n-ary account of how processing relates input ports, output ports, source classifications or categories, and result classifications or categories. Impacts can preserve, replace, introduce, suppress, or otherwise affect classification and sensitivity." .

:ExpectedClassificationImpact
    a rdfs:Class ;
    rdfs:subClassOf :ClassificationImpact ;
    rdfs:label "expected classification impact" ;
    rdfs:comment "A classification impact declared by a processing specification or plan as an expectation. It is not evidence that a concrete output has the projected classification." .

:ObservedClassificationImpact
    a rdfs:Class ;
    rdfs:subClassOf :ClassificationImpact ;
    rdfs:label "observed classification impact" ;
    rdfs:comment "A classification impact asserted from a concrete execution and its evidence. An observed impact should identify its source or result classification records and provenance." .

:ImpactKind
    a rdfs:Class ;
    rdfs:label "impact kind" ;
    rdfs:comment "A controlled kind describing the relationship between source and result classifications, categories, sensitivity, or requirements." .

# Assessments and mitigation

:ProcessingAssessment
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "processing assessment" ;
    rdfs:comment "An evidence-bearing conclusion about a processing activity, specification, impact, or mitigation requirement. The assessment is a provenance entity and should identify the activity that generated it." .

:ProcessingConformanceAssessment
    a rdfs:Class ;
    rdfs:subClassOf :ProcessingAssessment ;
    rdfs:label "processing conformance assessment" ;
    rdfs:comment "An assessment of whether an actual processing activity and its port bindings conform to a processing specification." .

:ContextCompatibilityAssessment
    a rdfs:Class ;
    rdfs:subClassOf :ProcessingAssessment ;
    rdfs:label "context compatibility assessment" ;
    rdfs:comment "A provenance-bearing, directional assessment of whether evidence expressed in one classification or processing context can be applied in another context for explicitly named facets. Unequal contexts are never treated as compatible without such an assessment." .

:ContextCompatibilityOutcome
    a rdfs:Class ;
    rdfs:subClassOf :AssessmentOutcome ;
    rdfs:label "context compatibility outcome" ;
    rdfs:comment "A controlled conclusion about directional compatibility between a source context and a target context." .

:ContextFacet
    a rdfs:Class ;
    rdfs:label "context facet" ;
    rdfs:comment "A named dimension evaluated by a context compatibility assessment, such as jurisdiction, purpose, controller, legal basis, system, or deployment boundary." .

:LineageCoverageAssessment
    a rdfs:Class ;
    rdfs:subClassOf :ProcessingAssessment ;
    rdfs:label "lineage coverage assessment" ;
    rdfs:comment "A provenance-bearing assessment of lineage completeness for a named resource and explicit set of lineage, execution, system, organisational, graph, or temporal boundaries." .

:StructuralConformanceAssessment
    a rdfs:Class ;
    rdfs:subClassOf :ProcessingAssessment ;
    rdfs:label "structural conformance assessment" ;
    rdfs:comment "An assessment that connects a resource, the exact SHACL shape and shapes graph used to validate it, its validation context, and the resulting SHACL validation report. The report remains the authoritative structural result." .

:OperationalRule
    a rdfs:Class ;
    rdfs:subClassOf prov:Plan ;
    rdfs:label "operational rule" ;
    rdfs:comment "A registered operationalization of ontology semantics, such as a normative safety check, reference inference, or diagnostic query. Registration states its contract and does not claim completeness for unregistered extensions." .

:RuleKind
    a rdfs:Class ;
    rdfs:label "rule kind" ;
    rdfs:comment "A controlled role distinguishing normative safety preconditions, reference inferences, and diagnostic queries." .

:MitigationRequirement
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "mitigation requirement" ;
    rdfs:comment "A qualified requirement for a technical or organisational measure, including its originating classification or specification, operational scope, and context. It complements the compact dcls:requiresMeasure policy hook." .

:MitigationAssessment
    a rdfs:Class ;
    rdfs:subClassOf :ProcessingAssessment ;
    rdfs:label "mitigation assessment" ;
    rdfs:comment "An evidence-bearing assessment of whether a processing activity applied a measure that satisfies a particular mitigation requirement in its stated scope and context." .

:AssessmentOutcome
    a rdfs:Class ;
    rdfs:label "assessment outcome" ;
    rdfs:comment "A controlled outcome for processing conformance and mitigation assessments." .

:ConformanceOutcome
    a rdfs:Class ;
    rdfs:subClassOf :AssessmentOutcome ;
    rdfs:label "conformance outcome" ;
    rdfs:comment "A controlled conclusion specifically for assessing whether an activity and its bindings conform to a processing specification." .

:MitigationOutcome
    a rdfs:Class ;
    rdfs:subClassOf :AssessmentOutcome ;
    rdfs:label "mitigation outcome" ;
    rdfs:comment "A controlled conclusion specifically for assessing whether an applied measure satisfies a mitigation requirement." .

:MitigationScope
    a rdfs:Class ;
    rdfs:label "mitigation scope" ;
    rdfs:comment "The operational phase or state to which a mitigation requirement applies, such as processing time, transfer, storage, output state, or downstream use." .

:LineageCoverage
    a rdfs:Class ;
    rdfs:subClassOf :AssessmentOutcome ;
    rdfs:label "lineage coverage" ;
    rdfs:comment "A controlled statement about whether recorded lineage is complete, partial, or unknown for the scope named by lineageCoverageScope. Data origin is represented independently with DataOriginKind." .

:LineageScope
    a rdfs:Class ;
    rdfs:label "lineage scope" ;
    rdfs:comment "A named boundary within which a lineage coverage value is evaluated, such as direct and indirect element dependencies for one represented execution boundary. Local profiles can define narrower asset, graph, time-window, system, or organisational scopes." .

:DataOriginKind
    a rdfs:Class ;
    rdfs:label "data origin kind" ;
    rdfs:comment "A controlled statement about whether a processing activity depends on source data or is positively known to be source-free with respect to data inputs. Auxiliary dependencies remain possible in either case." .

# Specification and policy properties

:declaresProcessing
    a rdf:Property ;
    rdfs:subPropertyOf dpv:hasProcessing ;
    rdfs:domain :ProcessingSpecification ;
    rdfs:range dpv:Processing ;
    rdfs:label "declares processing" ;
    rdfs:comment "Connects a processing specification to a DPV processing category it intends to describe. This is an abstract declaration, not a historical claim." .

:performedProcessing
    a rdf:Property ;
    rdfs:subPropertyOf dpv:hasProcessing ;
    rdfs:domain :ProcessingActivity ;
    rdfs:range dpv:Processing ;
    rdfs:label "performed processing" ;
    rdfs:comment "Connects an actual processing activity to a DPV processing category that it performed." .

:permitsProcessing
    a rdf:Property ;
    rdfs:domain :ProcessingPolicy ;
    rdfs:range dpv:Processing ;
    rdfs:label "permits processing" ;
    rdfs:comment "Connects a processing policy to a processing category it permits for its applicable data categories and context." .

:prohibitsProcessing
    a rdf:Property ;
    rdfs:domain :ProcessingPolicy ;
    rdfs:range dpv:Processing ;
    rdfs:label "prohibits processing" ;
    rdfs:comment "Connects a processing policy to a processing category it prohibits for its applicable data categories and context." .

:requiresProcessing
    a rdf:Property ;
    rdfs:domain :ProcessingPolicy ;
    rdfs:range dpv:Processing ;
    rdfs:label "requires processing" ;
    rdfs:comment "Connects a processing policy to a processing category it requires for its applicable data categories and context." .

:appliesToDataCategory
    a rdf:Property ;
    rdfs:domain :ProcessingPolicy ;
    rdfs:range dpv:Data ;
    rdfs:label "applies to data category" ;
    rdfs:comment "Identifies a DPV-compatible data category to which a processing policy applies. Subcategories match through their explicit RDFS hierarchy when the consuming query or validator enables it." .

:policyContext
    a rdf:Property ;
    rdfs:domain :ProcessingPolicy ;
    rdfs:range dcls:ClassificationContext ;
    rdfs:label "policy context" ;
    rdfs:comment "Connects a processing policy to the jurisdictional, system, purpose, controller, deployment, or operational context in which its permissions, prohibitions, and requirements apply." .

:hasPort
    a rdf:Property ;
    rdfs:domain :ProcessingSpecification ;
    rdfs:range :DataPort ;
    rdfs:label "has port" ;
    rdfs:comment "Connects a processing specification to a plan-scoped data port." .

:hasInputPort
    a rdf:Property ;
    rdfs:subPropertyOf :hasPort ;
    rdfs:domain :ProcessingSpecification ;
    rdfs:range :InputPort ;
    rdfs:label "has input port" ;
    rdfs:comment "Connects a processing specification to an input port whose actual binding is represented by a qualified PROV usage with the port as prov:hadRole." .

:hasOutputPort
    a rdf:Property ;
    rdfs:subPropertyOf :hasPort ;
    rdfs:domain :ProcessingSpecification ;
    rdfs:range :OutputPort ;
    rdfs:label "has output port" ;
    rdfs:comment "Connects a processing specification to an output port whose actual binding is represented by a qualified PROV generation with the port as prov:hadRole." .

:implementsSpecification
    a rdf:Property ;
    rdfs:domain :ProcessingPlan ;
    rdfs:range :ProcessingSpecification ;
    rdfs:label "implements specification" ;
    rdfs:comment "Connects a concrete processing plan to the more abstract processing specification it implements. This is intentionally weaker than owl:equivalentClass and prov:specializationOf; use refinesPort to make port-level correspondence assessable." .

:refinesPort
    a rdf:Property ;
    rdfs:domain :DataPort ;
    rdfs:range :DataPort ;
    rdfs:label "refines port" ;
    rdfs:comment "Connects a concrete plan port to the abstract specification port it implements or specializes, preserving the same direction and compatible constraints so conformance can cross the plan/specification boundary explicitly." .

:realizesSpecification
    a rdf:Property ;
    rdfs:subPropertyOf prov:wasInfluencedBy ;
    rdfs:domain :ProcessingActivity ;
    rdfs:range :ProcessingSpecification ;
    rdfs:label "realizes specification" ;
    rdfs:comment "Connects an actual processing activity to a specification whose ports and expectations it claims to realize. Conformance still requires a separate assessment." .

:specificationContext
    a rdf:Property ;
    rdfs:domain :ProcessingSpecification ;
    rdfs:range dcls:ClassificationContext ;
    rdfs:label "specification context" ;
    rdfs:comment "Identifies a context assumed or required by a processing specification. A concrete activity can be assessed against this expectation through its processing context." .

:processingContext
    a rdf:Property ;
    rdfs:domain :ProcessingActivity ;
    rdfs:range dcls:ClassificationContext ;
    rdfs:label "processing context" ;
    rdfs:comment "Identifies the jurisdictional, system, purpose, controller, deployment, or operational context in which an actual processing activity occurred." .

# Port constraint properties

:hasClassificationConstraint
    a rdf:Property ;
    rdfs:domain :DataPort ;
    rdfs:range :ClassificationConstraint ;
    rdfs:label "has classification constraint" ;
    rdfs:comment "Connects a data port to a classification constraint that actual bindings are expected to satisfy." .

:requiresDataCategory
    a rdf:Property ;
    rdfs:domain :ClassificationConstraint ;
    rdfs:range dpv:Data ;
    rdfs:label "requires data category" ;
    rdfs:comment "Identifies a DPV-compatible category required by a classification constraint. Multiple values are conjunctive unless a profile explicitly supplies alternative-group semantics." .

:requiresClassificationStatus
    a rdf:Property ;
    rdfs:domain :ClassificationConstraint ;
    rdfs:range dcls:ClassificationStatus ;
    rdfs:label "requires classification status" ;
    rdfs:comment "Identifies the classification workflow status required for a port binding, such as a confirmed classification." .

:requiresSensitivityLevel
    a rdf:Property ;
    rdfs:domain :ClassificationConstraint ;
    rdfs:range dcls:SensitivityLevel ;
    rdfs:label "requires sensitivity level" ;
    rdfs:comment "Identifies a sensitivity level required by a port constraint. This is an exact required value unless a local profile defines an ordering-based interpretation." .

:requiresStructuralShape
    a rdf:Property ;
    rdfs:domain :ClassificationConstraint ;
    rdfs:range rdfs:Resource ;
    rdfs:label "requires structural shape" ;
    rdfs:comment "Connects a classification constraint to a SHACL node shape or other named structural contract that a bound entity is expected to conform to. Structural type and data classification remain separate dimensions." .

# Impact properties

:hasExpectedClassificationImpact
    a rdf:Property ;
    rdfs:domain :ProcessingSpecification ;
    rdfs:range :ExpectedClassificationImpact ;
    rdfs:label "has expected classification impact" ;
    rdfs:comment "Connects a processing specification to a classification impact it expects when its conditions are satisfied." .

:hasObservedClassificationImpact
    a rdf:Property ;
    rdfs:domain :ProcessingActivity ;
    rdfs:range :ObservedClassificationImpact ;
    rdfs:label "has observed classification impact" ;
    rdfs:comment "Connects a concrete processing activity to an evidence-backed classification impact observed for that execution." .

:sourcePort
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range :InputPort ;
    rdfs:label "source port" ;
    rdfs:comment "Identifies an input port contributing to a classification impact." .

:resultPort
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range :OutputPort ;
    rdfs:label "result port" ;
    rdfs:comment "Identifies an output port affected by a classification impact." .

:sourceCategory
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range dpv:Data ;
    rdfs:label "source category" ;
    rdfs:comment "Identifies an abstract source data category considered by a classification impact." .

:resultCategory
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range dpv:Data ;
    rdfs:label "result category" ;
    rdfs:comment "Identifies an abstract result data category projected or observed by a classification impact." .

:sourceSensitivity
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range dcls:SensitivityLevel ;
    rdfs:label "source sensitivity" ;
    rdfs:comment "Identifies an abstract or observed sensitivity level considered on the source side of a classification impact." .

:resultSensitivity
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range dcls:SensitivityLevel ;
    rdfs:label "result sensitivity" ;
    rdfs:comment "Identifies the sensitivity level projected or observed for the result of a classification impact." .

:introducedRequirement
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range rdfs:Resource ;
    rdfs:label "introduced requirement" ;
    rdfs:comment "Identifies a policy, review, legal-basis, mitigation, or other named requirement introduced by processing." .

:sourceClassification
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range dcls:DataClassification ;
    rdfs:label "source classification" ;
    rdfs:comment "Identifies an actual upstream classification record used to assess an observed impact." .

:resultClassification
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range dcls:DataClassification ;
    rdfs:label "result classification" ;
    rdfs:comment "Identifies an actual downstream classification record supported or discussed by an observed impact." .

:hasImpactKind
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range :ImpactKind ;
    rdfs:label "has impact kind" ;
    rdfs:comment "Identifies the controlled kind of a classification impact." .

:requiresImpactReview
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range xsd:boolean ;
    rdfs:label "requires impact review" ;
    rdfs:comment "Indicates that a classification impact requires human or policy review before it can justify a confirmed result classification." .

:impactRationale
    a rdf:Property ;
    rdfs:domain :ClassificationImpact ;
    rdfs:range xsd:string ;
    rdfs:label "impact rationale" ;
    rdfs:comment "Provides a human-readable explanation of why a classification impact kind and category transition are expected or observed." .

# Element lineage properties

:wasDirectlyDerivedFromElement
    a rdf:Property ;
    rdfs:subPropertyOf prov:wasDerivedFrom ;
    rdfs:domain :DataElementVersion ;
    rdfs:range :DataElementVersion ;
    rdfs:label "was directly derived from element" ;
    rdfs:comment "Connects an output element version to an input element version whose values directly contribute to the output values." .

:wasIndirectlyInfluencedByElement
    a rdf:Property ;
    rdfs:subPropertyOf prov:wasInfluencedBy ;
    rdfs:domain :DataElementVersion ;
    rdfs:range :DataElementVersion ;
    rdfs:label "was indirectly influenced by element" ;
    rdfs:comment "Connects an output element version to an input element version that affected selection, joining, grouping, ordering, windowing, or conditions without necessarily contributing output values." .

:qualifiedElementDerivation
    a rdf:Property ;
    rdfs:subPropertyOf prov:qualifiedDerivation ;
    rdfs:domain :DataElementVersion ;
    rdfs:range :ElementDerivation ;
    rdfs:label "qualified element derivation" ;
    rdfs:comment "Qualifies a direct element derivation with an ElementDerivation resource and standard PROV details." .

:qualifiedElementInfluence
    a rdf:Property ;
    rdfs:subPropertyOf prov:qualifiedInfluence ;
    rdfs:domain :DataElementVersion ;
    rdfs:range :ElementInfluence ;
    rdfs:label "qualified element influence" ;
    rdfs:comment "Qualifies an indirect element influence with an ElementInfluence resource and standard PROV details." .

:hasLineageCoverage
    a rdf:Property ;
    rdfs:range :LineageCoverage ;
    rdfs:label "has lineage coverage" ;
    rdfs:comment "States the known completeness of lineage for an activity, entity, element version, or other scoped lineage resource. No domain is imposed so the property does not accidentally retype its subject." .

:hasLineageCoverageAssessment
    a rdf:Property ;
    rdfs:range :LineageCoverageAssessment ;
    rdfs:label "has lineage coverage assessment" ;
    rdfs:comment "Connects an activity, entity, element, graph, or other lineage-bearing resource to a provenance-bearing assessment of its lineage coverage. No domain is imposed to preserve broad reuse without unintended typing." .

:lineageCoverageScope
    a rdf:Property ;
    rdfs:range :LineageScope ;
    rdfs:label "lineage coverage scope" ;
    rdfs:comment "Identifies the explicit boundary within which a hasLineageCoverage value is asserted. No domain is imposed for the same broad reuse reason as hasLineageCoverage." .

:hasDataOriginKind
    a rdf:Property ;
    rdfs:domain :ProcessingActivity ;
    rdfs:range :DataOriginKind ;
    rdfs:label "has data origin kind" ;
    rdfs:comment "States whether an actual processing activity depends on source data or is positively known to be source-free with respect to data inputs. This dimension is independent of lineage completeness." .

# Assessment properties

:assessesResource
    a rdf:Property ;
    rdfs:domain :ProcessingAssessment ;
    rdfs:range rdfs:Resource ;
    rdfs:label "assesses resource" ;
    rdfs:comment "Connects a processing assessment to an activity, entity, impact, plan, or other resource it assesses." .

:assessesActivity
    a rdf:Property ;
    rdfs:subPropertyOf :assessesResource ;
    rdfs:domain :ProcessingAssessment ;
    rdfs:range :ProcessingActivity ;
    rdfs:label "assesses activity" ;
    rdfs:comment "Connects a processing assessment to the concrete processing activity it evaluates." .

:againstSpecification
    a rdf:Property ;
    rdfs:domain :ProcessingConformanceAssessment ;
    rdfs:range :ProcessingSpecification ;
    rdfs:label "against specification" ;
    rdfs:comment "Identifies the processing specification used as the contract for a conformance assessment." .

:hasAssessmentOutcome
    a rdf:Property ;
    rdfs:domain :ProcessingAssessment ;
    rdfs:range :AssessmentOutcome ;
    rdfs:label "has assessment outcome" ;
    rdfs:comment "Identifies the controlled conclusion of a processing assessment." .

:assessmentRationale
    a rdf:Property ;
    rdfs:domain :ProcessingAssessment ;
    rdfs:range xsd:string ;
    rdfs:label "assessment rationale" ;
    rdfs:comment "Provides a human-readable explanation of an assessment conclusion and its important limitations." .

:confidenceAssessment
    a rdf:Property ;
    rdfs:domain :ProcessingAssessment ;
    rdfs:range conf:ConfidenceAssessment ;
    rdfs:label "confidence assessment" ;
    rdfs:comment "Connects a processing assessment to a structured confidence assessment describing uncertainty in its conclusion." .

# Context compatibility assessment properties

:sourceContext
    a rdf:Property ;
    rdfs:domain :ContextCompatibilityAssessment ;
    rdfs:range dcls:ClassificationContext ;
    rdfs:label "source context" ;
    rdfs:comment "Identifies the context in which the evidence or assertion being considered was originally established." .

:targetContext
    a rdf:Property ;
    rdfs:domain :ContextCompatibilityAssessment ;
    rdfs:range dcls:ClassificationContext ;
    rdfs:label "target context" ;
    rdfs:comment "Identifies the context in which reuse of source-context evidence is being evaluated. Compatibility is directional from source context to target context." .

:assessesContextFacet
    a rdf:Property ;
    rdfs:domain :ContextCompatibilityAssessment ;
    rdfs:range :ContextFacet ;
    rdfs:label "assesses context facet" ;
    rdfs:comment "Identifies a context dimension explicitly covered by the compatibility assessment. Omitted dimensions are not implied to be compatible." .

:requiresContextFacet
    a rdf:Property ;
    rdfs:range :ContextFacet ;
    rdfs:label "requires context facet" ;
    rdfs:comment "Declares each context dimension that a specification, policy, requirement, activity, or local profile requires an unequal-context compatibility assessment to cover. No domain is imposed so profiles can attach the requirement to the resource whose context is authoritative." .

# Lineage coverage assessment properties

:assessedLineageCoverage
    a rdf:Property ;
    rdfs:subPropertyOf :hasAssessmentOutcome ;
    rdfs:domain :LineageCoverageAssessment ;
    rdfs:range :LineageCoverage ;
    rdfs:label "assessed lineage coverage" ;
    rdfs:comment "Records the complete, partial, or unknown coverage conclusion of a lineage coverage assessment." .

:assessedLineageScope
    a rdf:Property ;
    rdfs:domain :LineageCoverageAssessment ;
    rdfs:range :LineageScope ;
    rdfs:label "assessed lineage scope" ;
    rdfs:comment "Names each lineage dimension or boundary included in a coverage assessment. Multiple values are conjunctive descriptions of the assessed boundary." .

:coverageBoundary
    a rdf:Property ;
    rdfs:domain :LineageCoverageAssessment ;
    rdfs:range rdfs:Resource ;
    rdfs:label "coverage boundary" ;
    rdfs:comment "Identifies a concrete execution, lineage graph, provenance bundle, asset, system, organisation, or other resource delimiting the assessed coverage." .

:coverageStartTime
    a rdf:Property ;
    rdfs:domain :LineageCoverageAssessment ;
    rdfs:range xsd:dateTime ;
    rdfs:label "coverage start time" ;
    rdfs:comment "States the inclusive beginning of the temporal boundary evaluated for lineage coverage, when the assessment is time-bounded." .

:coverageEndTime
    a rdf:Property ;
    rdfs:domain :LineageCoverageAssessment ;
    rdfs:range xsd:dateTime ;
    rdfs:label "coverage end time" ;
    rdfs:comment "States the inclusive end of the temporal boundary evaluated for lineage coverage, when the assessment is time-bounded." .

# Structural conformance assessment properties

:validatedResource
    a rdf:Property ;
    rdfs:subPropertyOf :assessesResource ;
    rdfs:domain :StructuralConformanceAssessment ;
    rdfs:range rdfs:Resource ;
    rdfs:label "validated resource" ;
    rdfs:comment "Identifies the exact resource evaluated by the structural validation represented by an assessment." .

:validationReport
    a rdf:Property ;
    rdfs:domain :StructuralConformanceAssessment ;
    rdfs:range sh:ValidationReport ;
    rdfs:label "validation report" ;
    rdfs:comment "Connects a structural conformance assessment to the authoritative SHACL validation report produced for the evaluation." .

:validationShape
    a rdf:Property ;
    rdfs:domain :StructuralConformanceAssessment ;
    rdfs:range sh:NodeShape ;
    rdfs:label "validation shape" ;
    rdfs:comment "Identifies the exact named SHACL node shape whose constraint was evaluated for the validated resource." .

:validationShapesGraph
    a rdf:Property ;
    rdfs:domain :StructuralConformanceAssessment ;
    rdfs:range prov:Entity ;
    rdfs:label "validation shapes graph" ;
    rdfs:comment "Identifies an immutable or versioned PROV entity representing the shapes graph used for structural validation." .

:validationContext
    a rdf:Property ;
    rdfs:domain :StructuralConformanceAssessment ;
    rdfs:range dcls:ClassificationContext ;
    rdfs:label "validation context" ;
    rdfs:comment "Identifies the context in which the structural result is valid when validation depends on jurisdictional, purpose, controller, deployment, or operational assumptions." .

# Operational rule registry properties

:hasRuleKind
    a rdf:Property ;
    rdfs:domain :OperationalRule ;
    rdfs:range :RuleKind ;
    rdfs:label "has rule kind" ;
    rdfs:comment "Classifies an operational rule as a normative safety precondition, reference inference, or diagnostic query." .

:ruleImplementation
    a rdf:Property ;
    rdfs:domain :OperationalRule ;
    rdfs:range rdfs:Resource ;
    rdfs:label "rule implementation" ;
    rdfs:comment "Identifies the versioned query or executable resource that implements the registered operational rule." .

:ruleFailureBehavior
    a rdf:Property ;
    rdfs:domain :OperationalRule ;
    rdfs:range xsd:string ;
    rdfs:label "rule failure behavior" ;
    rdfs:comment "Documents how missing, conflicting, or unsupported evidence affects the rule result, including when it must remain indeterminate." .

:ruleIsMonotonic
    a rdf:Property ;
    rdfs:domain :OperationalRule ;
    rdfs:range xsd:boolean ;
    rdfs:label "rule is monotonic" ;
    rdfs:comment "States whether adding triples without removing existing triples can invalidate results previously produced by the rule under its documented input contract." .

# Mitigation properties

:hasMitigationRequirement
    a rdf:Property ;
    rdfs:domain dcls:DataClassification ;
    rdfs:range :MitigationRequirement ;
    rdfs:label "has mitigation requirement" ;
    rdfs:comment "Connects a data classification to a qualified mitigation requirement derived from policy, sensitivity, or context." .

:declaresMitigationRequirement
    a rdf:Property ;
    rdfs:domain :ProcessingSpecification ;
    rdfs:range :MitigationRequirement ;
    rdfs:label "declares mitigation requirement" ;
    rdfs:comment "Connects a processing specification to a mitigation requirement that executions or outputs are expected to satisfy." .

:originatingClassification
    a rdf:Property ;
    rdfs:domain :MitigationRequirement ;
    rdfs:range dcls:DataClassification ;
    rdfs:label "originating classification" ;
    rdfs:comment "Identifies the classification record from which a qualified mitigation requirement originates." .

:requiredMeasure
    a rdf:Property ;
    rdfs:domain :MitigationRequirement ;
    rdfs:range rdfs:Class ;
    rdfs:label "required measure" ;
    rdfs:comment "Identifies a DPV-compatible technical or organisational measure category required by a mitigation requirement. A concrete implementation can be recorded separately." .

:hasRequirementScope
    a rdf:Property ;
    rdfs:domain :MitigationRequirement ;
    rdfs:range :MitigationScope ;
    rdfs:label "has requirement scope" ;
    rdfs:comment "Identifies the operational phase or output state in which a mitigation requirement must hold." .

:requirementContext
    a rdf:Property ;
    rdfs:domain :MitigationRequirement ;
    rdfs:range dcls:ClassificationContext ;
    rdfs:label "requirement context" ;
    rdfs:comment "Connects a mitigation requirement to the classification or processing context in which it applies." .

:appliedMeasure
    a rdf:Property ;
    rdfs:domain :ProcessingActivity ;
    rdfs:range rdfs:Class ;
    rdfs:label "applied measure" ;
    rdfs:comment "Records a DPV-compatible technical or organisational measure category applied during an actual processing activity. This is a historical claim, not by itself proof of effectiveness." .

:measureImplementation
    a rdf:Property ;
    rdfs:domain :ProcessingActivity ;
    rdfs:range prov:Entity ;
    rdfs:label "measure implementation" ;
    rdfs:comment "Identifies a versioned implementation, configuration, algorithm, service, or control entity used to apply a measure. Secret values such as keys or salts should not be embedded in lineage graphs." .

:assessesRequirement
    a rdf:Property ;
    rdfs:domain :MitigationAssessment ;
    rdfs:range :MitigationRequirement ;
    rdfs:label "assesses requirement" ;
    rdfs:comment "Identifies the particular mitigation requirement evaluated by a mitigation assessment." .

:assessedMeasure
    a rdf:Property ;
    rdfs:domain :MitigationAssessment ;
    rdfs:range rdfs:Class ;
    rdfs:label "assessed measure" ;
    rdfs:comment "Identifies the measure category whose application and effectiveness were evaluated by a mitigation assessment." .

# Controlled impact kinds

:CategoryPreservation
    a :ImpactKind ;
    rdfs:label "category preservation" ;
    rdfs:comment "The relevant source category continues to apply to the result classification." .

:CategoryReplacement
    a :ImpactKind ;
    rdfs:label "category replacement" ;
    rdfs:comment "A source representation category is replaced by a different result category while upstream classification lineage remains available." .

:CategoryIntroduction
    a :ImpactKind ;
    rdfs:label "category introduction" ;
    rdfs:comment "Processing introduces a result category that need not have appeared on any individual source classification, as can occur through joining or inference." .

:CategorySuppression
    a :ImpactKind ;
    rdfs:label "category suppression" ;
    rdfs:comment "An assessed category no longer applies to a result. Suppression is a positive, reviewable claim and must not be inferred merely from a missing triple." .

:SensitivityEscalation
    a :ImpactKind ;
    rdfs:label "sensitivity escalation" ;
    rdfs:comment "Processing increases the operational sensitivity of the result, for example through linkage or inference." .

:RequirementIntroduction
    a :ImpactKind ;
    rdfs:label "requirement introduction" ;
    rdfs:comment "Processing introduces a new policy, review, legal-basis, or mitigation requirement for the result or downstream use." .

:UnknownImpact
    a :ImpactKind ;
    rdfs:label "unknown impact" ;
    rdfs:comment "The classification impact is not known well enough to assert a more specific kind and requires assessment or review." .

# Controlled lineage coverage values

:CompleteLineage
    a :LineageCoverage ;
    rdfs:label "complete lineage" ;
    rdfs:comment "All lineage dependencies within the explicitly declared scope are represented." .

:PartialLineage
    a :LineageCoverage ;
    rdfs:label "partial lineage" ;
    rdfs:comment "Some known lineage dependencies are represented, but additional dependencies may be absent." .

:UnknownLineage
    a :LineageCoverage ;
    rdfs:label "unknown lineage" ;
    rdfs:comment "The completeness of recorded lineage within the relevant scope is not known." .

:ElementDependencyLineageScope
    a :LineageScope ;
    rdfs:label "element dependency lineage scope" ;
    rdfs:comment "The represented execution boundary includes every known direct value dependency and indirect selection, join, grouping, ordering, windowing, or conditional element dependency. A CompleteLineage claim in this scope asserts that all such dependencies are recorded for the evaluated boundary." .

:AssetLineageScope
    a :LineageScope ;
    rdfs:label "asset lineage scope" ;
    rdfs:comment "The coverage assessment evaluates dependencies between data snapshots or other asset-level entities." .

:ElementLineageScope
    a :LineageScope ;
    rdfs:label "element lineage scope" ;
    rdfs:comment "The coverage assessment evaluates dependencies between versioned data elements." .

:DirectDependencyScope
    a :LineageScope ;
    rdfs:label "direct dependency scope" ;
    rdfs:comment "The coverage assessment includes value-contributing derivations and other direct dependencies." .

:IndirectDependencyScope
    a :LineageScope ;
    rdfs:label "indirect dependency scope" ;
    rdfs:comment "The coverage assessment includes selection, join, group, sort, window, conditional, and other non-value-contributing influences." .

:ExecutionBoundaryScope
    a :LineageScope ;
    rdfs:label "execution boundary scope" ;
    rdfs:comment "The coverage assessment is bounded to one or more explicitly named processing executions." .

:CrossSystemBoundaryScope
    a :LineageScope ;
    rdfs:label "cross-system boundary scope" ;
    rdfs:comment "The coverage assessment explicitly evaluates lineage across the named system or organisational boundaries rather than only within one recorder." .

# Controlled data origin values

:SourceDependentOrigin
    a :DataOriginKind ;
    rdfs:label "source-dependent origin" ;
    rdfs:comment "The processing activity depends on at least one data-bearing input bound through a DataInputPort." .

:SourceFreeOrigin
    a :DataOriginKind ;
    rdfs:label "source-free origin" ;
    rdfs:comment "The processing activity is positively known to have no data-bearing input. It can still use explicitly qualified auxiliary inputs such as configurations, models, plans, or public parameters." .

# Controlled assessment outcomes

:Conformant
    a :ConformanceOutcome ;
    rdfs:label "conformant" ;
    rdfs:comment "The assessed processing activity and its bindings satisfy the evaluated processing specification within the assessment scope." .

:NonConformant
    a :ConformanceOutcome ;
    rdfs:label "non-conformant" ;
    rdfs:comment "The assessed processing activity or its bindings violate at least one evaluated specification requirement." .

:Satisfied
    a :MitigationOutcome ;
    rdfs:label "satisfied" ;
    rdfs:comment "The assessed mitigation requirement is supported as satisfied within its scope and context." .

:Unsatisfied
    a :MitigationOutcome ;
    rdfs:label "unsatisfied" ;
    rdfs:comment "The assessed mitigation requirement is supported as not satisfied within its scope and context." .

:Indeterminate
    a :ConformanceOutcome, :MitigationOutcome, :ContextCompatibilityOutcome ;
    rdfs:label "indeterminate" ;
    rdfs:comment "Available evidence is insufficient to conclude conformance, satisfaction, or non-satisfaction." .

# Controlled context compatibility outcomes and facets

:Compatible
    a :ContextCompatibilityOutcome ;
    rdfs:label "compatible" ;
    rdfs:comment "Evidence established in the source context is supported for reuse in the target context for every explicitly assessed facet." .

:Incompatible
    a :ContextCompatibilityOutcome ;
    rdfs:label "incompatible" ;
    rdfs:comment "At least one explicitly assessed context facet prevents reuse of source-context evidence in the target context." .

:JurisdictionContextFacet
    a :ContextFacet ;
    rdfs:label "jurisdiction context facet" ;
    rdfs:comment "The compatibility assessment evaluates applicable territorial or legal jurisdiction." .

:PurposeContextFacet
    a :ContextFacet ;
    rdfs:label "purpose context facet" ;
    rdfs:comment "The compatibility assessment evaluates the purpose for which data is processed or evidence is reused." .

:ControllerContextFacet
    a :ContextFacet ;
    rdfs:label "controller context facet" ;
    rdfs:comment "The compatibility assessment evaluates the responsible controller or equivalent accountable party." .

:LegalBasisContextFacet
    a :ContextFacet ;
    rdfs:label "legal basis context facet" ;
    rdfs:comment "The compatibility assessment evaluates the legal basis or other authorization relied upon for processing." .

:SystemContextFacet
    a :ContextFacet ;
    rdfs:label "system context facet" ;
    rdfs:comment "The compatibility assessment evaluates system, deployment, tenant, or operational-boundary assumptions." .

# Controlled operational rule kinds

:NormativeSafetyRule
    a :RuleKind ;
    rdfs:label "normative safety rule" ;
    rdfs:comment "A rule that enforces a precondition required before this ontology supports a safety-relevant conformance, classification, or mitigation conclusion." .

:ReferenceInferenceRule
    a :RuleKind ;
    rdfs:label "reference inference rule" ;
    rdfs:comment "A supplied deterministic inference that demonstrates one supported operationalization without closing extension points or claiming universal completeness." .

:DiagnosticRule
    a :RuleKind ;
    rdfs:label "diagnostic rule" ;
    rdfs:comment "A rule that reports represented gaps, conflicts, or review needs without itself asserting a conformance or classification conclusion." .

# Controlled mitigation scopes

:DuringProcessing
    a :MitigationScope ;
    rdfs:label "during processing" ;
    rdfs:comment "The mitigation must hold while the processing activity executes." .

:OutputState
    a :MitigationScope ;
    rdfs:label "output state" ;
    rdfs:comment "The mitigation must be reflected in the generated output representation or state." .

:TransferScope
    a :MitigationScope ;
    rdfs:label "transfer scope" ;
    rdfs:comment "The mitigation must hold while data is transmitted or transferred." .

:StorageScope
    a :MitigationScope ;
    rdfs:label "storage scope" ;
    rdfs:comment "The mitigation must hold while data is stored at rest." .

:DownstreamUse
    a :MitigationScope ;
    rdfs:label "downstream use" ;
    rdfs:comment "The mitigation or control must hold for subsequent processing or use of the output." .
