@base <http://purl.org/vpd/vocab> .

@prefix : <#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix wild: <http://purl.org/wild/vocab#> .
@prefix sosa: <http://www.w3.org/ns/sosa/> .
@prefix ssn: <http://www.w3.org/ns/ssn/> .
@prefix dcat: <http://www.w3.org/ns/dcat#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix vann: <http://purl.org/vocab/vann/> .

<>
    a owl:Ontology ;
    dc:title "Virtual Process Dossier (VPD) Ontology"@en ;
    dcterms:abstract "Terms introduced for the Virtual Process Dossier in order to align with WiLD, DCAT and SOSA."@en ;
    rdfs:comment "Terms introduced for the Virtual Process Dossier in order to align with WiLD, DCAT and SOSA."@en ;
    dc:description "Vocabulary for the Virtual Process Dossier (VPD) project."@en ;
    dcterms:creator "Lukas Kubelka"@de ;
    dcterms:publisher "Karlsruhe Institute of Technology (KIT)" ;
    dcterms:created "2026-01-01T00:00:00Z"^^xsd:dateTime ;
    dcterms:issued "2026-01-01T00:00:00Z"^^xsd:dateTime ;
    dc:versionInfo "1.0"@en ;
    owl:versionIRI <http://purl.org/vpd/vocab/1.0> ;
    dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
    <http://purl.org/vocab/vann/preferredNamespacePrefix> "vpd"@en ;
    owl:versionInfo "1.0"@en ;
    vann:preferredNamespaceUri <http://purl.org/vpd/vocab> ;
    dcterms:source <http://purl.org/wild/vocab> ,
        <http://www.w3.org/ns/dcat#> ,
        <http://www.w3.org/ns/sosa/> ,
        <http://www.w3.org/ns/ssn/> ,
        <http://www.w3.org/ns/prov#> ;
    owl:imports <http://purl.org/wild/vocab> ,
        <http://www.w3.org/ns/dcat#> ,
        <http://www.w3.org/ns/sosa/> ,
        <http://www.w3.org/ns/ssn/> ,
        <http://www.w3.org/ns/prov#> .
    # TODO: dcterms:bibliographicCitation <> once paper published
    # TODO: dcterms:identifier <> once doi of paper available

###
# Sensor-related Classes
###

:SensorActivity
    a rdfs:Class, sh:NodeShape ;
    rdfs:subClassOf wild:AtomicActivity, sosa:Procedure ;
    rdfs:label "Sensor Activity"@en ;
    rdfs:comment "An abstract activity of a sensor that results in one or more observations when performed."@en ;
    sh:property [
        sh:path ssn:implementedBy ;
        sh:class sosa:Sensor ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] .

:SensorActivityInstance
    a rdfs:Class, sh:NodeShape ;
    rdfs:subClassOf wild:ActivityInstance, sosa:Observation, prov:Activity ;
    rdfs:label "Sensor Activity Instance"@en ;
    rdfs:comment "A Sensor Activity that has been performed and generated one or more observations."@en ;
    sh:property [
        sh:path wild:activityInstanceOf ;
        sh:class :SensorActivity ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] ;
    sh:property [
        sh:path sosa:madeBySensor ;
        sh:class sosa:Sensor ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] ;
    sh:property [
        sh:path wild:inWorkflowInstance ;
        sh:class wild:WorkflowInstance ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] ;
    sh:property [
        sh:path sosa:observedProperty ;
        sh:class sosa:ObservableProperty ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] .

###
# Machine-related classes
###

:Machine
    a rdfs:Class, sh:NodeShape ;
    rdfs:subClassOf sosa:FeatureOfInterest, prov:Agent ;
    rdfs:label "Machine"@en ;
    rdfs:comment "A physical machine that can perform machine activities."@en ;
    sh:property [
        sh:path dcterms:requires ;
        sh:class :ParameterDescription ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] .

:ParameterDescription
    a rdfs:Class ;
    rdfs:subClassOf sh:NodeShape ;
    rdfs:label "Parameter Description"@en ;
    rdfs:comment "A description of parameters that can be used to configure a machine."@en .

:MachineActivity
    a rdfs:Class, sh:NodeShape ;
    rdfs:subClassOf wild:AtomicActivity, sosa:Procedure ;
    rdfs:label "Machine Activity"@en ;
    rdfs:comment "An abstract activity of a machine."@en ;
    sh:property [
        sh:path ssn:implementedBy ;
        sh:class :Machine ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] .

:Parameterization
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "Parameterization"@en ;
    rdfs:comment "A set of parameters used to configure a machine."@en .

###
# Product-related Classes
###

:Material
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "Material"@en ;
    rdfs:comment "A physical material that can be processed in manufacturing activities."@en .

:Product
    a rdfs:Class, sh:NodeShape ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "Product"@en ;
    rdfs:comment "A finished product resulting from manufacturing activities."@en ;
    sh:property [
        sh:path prov:wasDerivedFrom ;
        sh:class :Material ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] ;
    sh:property [
        sh:path prov:qualifiedDerivation ;
        sh:node [
            sh:targetClass prov:Derivation ;
            sh:property [
                sh:path prov:hadGeneration ;
                sh:class wild:WorkflowInstance ;
                sh:minCount 1 ;
                sh:maxCount 1
            ] ;
            sh:property [
                sh:path prov:entity ;
                sh:class :Material ;
                sh:minCount 1 ;
                sh:maxCount 1
            ]
        ] ;
        sh:minCount 1 ;
        sh:maxCount 1
    ] .