@base <https://w3id.org/ibp/CTRLont> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <#> .
@prefix ns: <http://www.w3.org/2003/06/sw-vocab-status/ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix terms: <http://purl.org/dc/terms/> .

terms:contributor
    a owl:AnnotationProperty .

terms:creator
    a owl:AnnotationProperty .

terms:description
    a owl:AnnotationProperty .

terms:identifier
    a owl:AnnotationProperty .

terms:issued
    a owl:AnnotationProperty .

terms:license
    a owl:AnnotationProperty .

terms:modified
    a owl:AnnotationProperty .

terms:publisher
    a owl:AnnotationProperty .

terms:rights
    a owl:AnnotationProperty .

terms:title
    a owl:AnnotationProperty .

vann:preferredNamespacePrefix
    a owl:AnnotationProperty .

vann:preferredNamespaceUri
    a owl:AnnotationProperty .

<http://purl.org/vocommons/voaf#Vocabulary>
    a owl:Class .

rdfs:comment
    a owl:AnnotationProperty .

rdfs:isDefinedBy
    a owl:AnnotationProperty .

rdfs:label
    a owl:AnnotationProperty .

rdfs:seeAlso
    a owl:AnnotationProperty .

owl:Thing
    a owl:Class .

ns:term_status
    a owl:AnnotationProperty .

<>
    terms:creator <https://orcid.org/0000-0002-2033-859X>, <https://www.researchgate.net/profile/Georg_Schneider3>, "Georg Ferdinand Schneider" ;
    terms:description """The ontology and its use are described in [1]. The ontology is implemented using the free protege tool (protege.stanford.edu) [2].

[1] Schneider, G.F., Pauwels, P. and Steiger, S. (2017): \"Ontology-based Modelling of Control Logic in Building Automation Systems\" in IEEE Transactions on Industrial Informatics, vol. 13, no. 6, pp. 3350-3360, DOI: 10.1109/TII.2017.2743221.

[2] M. A. Musen (2015): The protege project: a look back and a look forward. AI matters, 1(4):4-12, doi: 10.1145/2757001.2757003."""@en ;
    terms:identifier "https://w3id.org/ibp/CTRLont#" ;
    terms:issued "2016-11-01"^^xsd:date ;
    terms:license <http://creativecommons.org/licenses/by-sa/4.0> ;
    terms:modified "2019-04-29"^^xsd:date ;
    terms:publisher <https://www.ibp.fraunhofer.de> ;
    terms:rights """Copyright (c) 2019 Georg Ferdinand Schneider/ Fraunhofer Institute for Building Physics IBP. This ontology is distributed under a Creative Commons Attribution 
Share Alike License (CC BY-SA 4.0) http://creativecommons.org/licenses/by-sa/4.0"""@en ;
    terms:title "CTRLont - An ontology to formally specify the control domain."@en ;
    vann:preferredNamespacePrefix "ctrl" ;
    vann:preferredNamespaceUri <#> ;
    a <http://purl.org/vocommons/voaf#Vocabulary>, owl:NamedIndividual, owl:Ontology ;
    rdfs:comment "CTRLont specifies concepts and relationships of control actors on a high level."@en ;
    rdfs:label "CTRLont"@en ;
    owl:priorVersion <CTRLont-0.0.1> ;
    owl:versionIRI <CTRLont-0.3.0> ;
    owl:versionInfo "v0.3.0" .

:AnnotatedElement
    a owl:Class ;
    rdfs:comment "An annotated element is a generic superclass for ctrl:Input, ctrl:Output and ctrl:Parameter"@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Annotated Element"@en ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:allValuesFrom :DataType ;
        owl:onProperty :hasDataType
    ], [
        a owl:Restriction ;
        owl:allValuesFrom :Medium ;
        owl:onProperty :hasMedium
    ], [
        a owl:Restriction ;
        owl:allValuesFrom :Quantity ;
        owl:onProperty :hasQuantity
    ], [
        a owl:Restriction ;
        owl:allValuesFrom :SemanticType ;
        owl:onProperty :hasSemanticType
    ], [
        a owl:Restriction ;
        owl:allValuesFrom :Unit ;
        owl:onProperty :hasUnit
    ] ;
    ns:term_status "stable" .

:ApplicationLogic
    a owl:Class ;
    rdfs:comment "Concept to specify the application logic of a control actor. Seperate ontologies may be used to further specify this concept."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Application Logic"@en ;
    ns:term_status "stable" .

:ControlActor
    a owl:Class ;
    rdfs:comment """Concept to describe the in general accepted Sense-Process-Actuate
pattern in automation systems, e.g. function blocks from IEC 61499."""@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Control Actor"@en ;
    rdfs:subClassOf [
        a owl:Restriction ;
        owl:allValuesFrom :Output ;
        owl:onProperty :hasOutput
    ], [
        a owl:Restriction ;
        owl:allValuesFrom :Parameter ;
        owl:onProperty :hasParameter
    ], [
        a owl:Restriction ;
        owl:onProperty :hasApplicationLogic ;
        owl:someValuesFrom :ApplicationLogic
    ], [
        a owl:Restriction ;
        owl:onProperty :hasOutput ;
        owl:someValuesFrom :Output
    ], [
        a owl:Restriction ;
        owl:allValuesFrom :ApplicationLogic ;
        owl:onProperty :hasApplicationLogic
    ], [
        a owl:Restriction ;
        owl:allValuesFrom :Input ;
        owl:onProperty :hasInput
    ] ;
    ns:term_status "stable" .

:DataType
    a owl:Class ;
    rdfs:comment "Placeholder class for the specification of basic data types such as, e.g. integer, boolean or double."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Data type"@en ;
    rdfs:seeAlso "https://www.w3.org/TR/xmlschema-2/#built-in-datatypes"^^xsd:anyURI ;
    ns:term_status "stable" .

:Input
    a owl:Class ;
    rdfs:comment "An input allow flows of information to enter a control actor. Inputs are processed by the respective application logic of the control actor to compute the outputs."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Input"@en ;
    rdfs:subClassOf :AnnotatedElement ;
    owl:disjointWith :Parameter ;
    ns:term_status "stable" .

:Medium
    a owl:Class ;
    rdfs:comment "Placeholder concept to stipulate reuse of existing ontologies such as dbpedia or  	http://www.productontology.org/id/"@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Medium"@en ;
    rdfs:seeAlso <http://wiki.dbpedia.org/>, <http://www.productontology.org/id/> ;
    ns:term_status "stable" .

:Output
    a owl:Class ;
    rdfs:comment "An output allows compute results by the application logic of an control actor to be fowarded to outside entities such as actuators or other control actors."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Output"@en ;
    rdfs:subClassOf :AnnotatedElement ;
    owl:disjointWith :Parameter ;
    ns:term_status "stable" .

:Parameter
    a owl:Class ;
    rdfs:comment "Parameter describe time-invariant values and settings of the respective control actor. Thus thay can be added dependent on the respective application logic."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Parameter"@en ;
    rdfs:subClassOf :AnnotatedElement ;
    ns:term_status "stable" .

:Quantity
    a owl:Class ;
    rdfs:comment "Placeholder concept to stipulate reuse of existing ontologies such as Ontology for Units and Measures (OM) or QUDT."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Quantity"@en ;
    rdfs:seeAlso <http://qudt.org/schema/qudt>, <http://www.ontology-of-units-of-measure.org/resource/om-2/> ;
    ns:term_status "stable" .

:SemanticType
    a owl:Class ;
    rdfs:comment "It may be required to further annotate an Input, Output or Parameter with a specific Semantic Type. For example in building automation to differ between room air temperature or outdoor air temperature."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Semantic Type"@en ;
    ns:term_status "stable" .

:Unit
    a owl:Class ;
    rdfs:comment "Placeholder concept to stipulate reuse of existing ontologies such as Ontology for Units and Measures (OM) or QUDT."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "Unit"@en ;
    ns:term_status "stable" .

:hasApplicationLogic
    a owl:ObjectProperty ;
    rdfs:comment "Object property to relate a control actor to its specific application logic"@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "hasApplicationLogic"@en ;
    rdfs:range :ApplicationLogic ;
    ns:term_status "stable" .

:hasDataType
    a owl:ObjectProperty ;
    rdfs:comment "Object property to annotate a input, output or parameter with its data type."@en ;
    rdfs:domain :AnnotatedElement ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "hasDataType"@en ;
    rdfs:range :DataType ;
    ns:term_status "stable" .

:hasInput
    a owl:ObjectProperty ;
    rdfs:comment "Object property to relate a control actor to its inputs."@en ;
    rdfs:domain :ControlActor ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "hasInput"@en ;
    rdfs:range :Input ;
    ns:term_status "stable" .

:hasMedium
    a owl:ObjectProperty ;
    rdfs:comment "Object property to annotate an input, output or parameter with its medium."@en ;
    rdfs:domain :AnnotatedElement ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "hasMedium"@en ;
    rdfs:range :Medium ;
    ns:term_status "stable" .

:hasOutput
    a owl:ObjectProperty ;
    rdfs:comment "Object property to relate a control actor to its outputs."@en ;
    rdfs:domain :ControlActor ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "hasOutput"@en ;
    rdfs:range :Output ;
    ns:term_status "stable" .

:hasParameter
    a owl:ObjectProperty ;
    rdfs:comment "Object property to relate a control actor to its parameter."@en ;
    rdfs:domain :ControlActor ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "hasParameter"@en ;
    rdfs:range :Parameter ;
    ns:term_status "stable" .

:hasQuantity
    a owl:ObjectProperty ;
    rdfs:comment "Object property to annotate an input, output or parameter with its quantity."@en ;
    rdfs:domain :AnnotatedElement ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "hasQuantity"@en ;
    rdfs:range :Quantity ;
    ns:term_status "stable" .

:hasSemanticType
    a owl:ObjectProperty ;
    rdfs:comment "Object property to relate an input, output or parameter with its semantic type."@en ;
    rdfs:domain :AnnotatedElement ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "hasSemanticType"@en ;
    rdfs:range :SemanticType ;
    ns:term_status "stable" .

:hasUnit
    a owl:ObjectProperty ;
    rdfs:comment "Object property to relate an input, output or parameter with its unit."@en ;
    rdfs:domain :AnnotatedElement ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "hasUnit"@en ;
    rdfs:range :Unit ;
    ns:term_status "stable" .

:isConnectedTo
    a owl:ObjectProperty ;
    rdfs:comment "Object property to describe the topological relationship between an input of one control actor and the output of another."@en ;
    rdfs:domain :Output ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "isConnectedTo"@en ;
    rdfs:range :Input ;
    ns:term_status "stable" .

:isSupervisedBy
    a owl:ObjectProperty ;
    rdfs:comment "Object property to describe hierarchical composition of control actors."@en ;
    rdfs:domain :ControlActor ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "isSupervisedBy"@en ;
    rdfs:range :ControlActor ;
    owl:inverseOf :supervises ;
    ns:term_status "stable" .

:logicInput
    a owl:ObjectProperty ;
    rdfs:comment "Object property to express the relationship of some application logic concept to an input."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "logicInput"@en ;
    rdfs:range :Input ;
    ns:term_status "stable" .

:logicOutput
    a owl:ObjectProperty ;
    rdfs:comment "Object property to express the relationship of some application logic concept to an output."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "logicOutput"@en ;
    rdfs:range :Output ;
    ns:term_status "stable" .

:logicParameter
    a owl:ObjectProperty ;
    rdfs:comment "Object property to express the relationship of some application logic concept to an parameter."@en ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "logicParameter"@en ;
    rdfs:range :Parameter ;
    ns:term_status "stable" .

:supervises
    a owl:ObjectProperty ;
    rdfs:comment "Object property to describe if one control actor supervises another."@en ;
    rdfs:domain :ControlActor ;
    rdfs:isDefinedBy :ctrl ;
    rdfs:label "supervises"@en ;
    rdfs:range :ControlActor ;
    ns:term_status "stable" .

