@prefix :      <https://w3id.org/ibp/CTRLont#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@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#> .

: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:label    "Data type"@en ;
        rdfs:seeAlso  "https://www.w3.org/TR/xmlschema-2/#built-in-datatypes"^^xsd:anyURI .

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

rdfs:comment  a  owl:AnnotationProperty .

: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:label    "isConnectedTo"@en ;
        rdfs:range    :Input .

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

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

<http://purl.org/dc/terms/license>
        a       owl:AnnotationProperty .

: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:label    "Quantity"@en ;
        rdfs:seeAlso  <http://www.ontology-of-units-of-measure.org/resource/om-2/> , <http://qudt.org/schema/qudt> .

<http://purl.org/vocab/vann/preferredNamespaceUri>
        a       owl:AnnotationProperty .

<https://w3id.org/ibp/CTRLont>
        a                 owl:NamedIndividual , <http://purl.org/vocommons/voaf#Vocabulary> , owl:Ontology ;
        rdfs:comment      "CTRLont specifies concepts and relationships of control actors on a high level."@en ;
        rdfs:label        "CTRLont"@en ;
        <http://purl.org/dc/terms/creator>
                "Georg Ferdinand Schneider" ;
        <http://purl.org/dc/terms/creator>
                <https://orcid.org/0000-0002-2033-859X> , <https://www.researchgate.net/profile/Georg_Schneider3> ;
        <http://purl.org/dc/terms/description>
                "The ontology and its use are described in [1]. The ontology is implemented using the free protege tool (protege.stanford.edu) [2].\n\n[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.\n\n[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 ;
        <http://purl.org/dc/terms/identifier>
                "https://w3id.org/ibp/CTRLont#" ;
        <http://purl.org/dc/terms/issued>
                "2016-11-01"^^xsd:date ;
        <http://purl.org/dc/terms/license>
                <http://creativecommons.org/licenses/by-sa/4.0> ;
        <http://purl.org/dc/terms/modified>
                "2018-03-12"^^xsd:date ;
        <http://purl.org/dc/terms/publisher>
                <https://www.ibp.fraunhofer.de> ;
        <http://purl.org/dc/terms/rights>
                "Copyright (c) 2019 Georg Ferdinand Schneider/ Fraunhofer Institute for Building Physics IBP" , "Copyright (c) 2017/ 2018, Fraunhofer Institute for Building Physics,\nNuremberg, Germany. This ontology is distributed under a Creative Commons Attribution \nShare Alike License (CC BY-SA 4.0) http://creativecommons.org/licenses/by-sa/4.0"@en ;
        <http://purl.org/dc/terms/title>
                "CTRLont - An ontology to formally specify the control domain."@en ;
        <http://purl.org/vocab/vann/preferredNamespacePrefix>
                "ctrl" ;
        <http://purl.org/vocab/vann/preferredNamespaceUri>
                : ;
        owl:priorVersion  <https://w3id.org/ibp/CTRLont-0.0.1> ;
        owl:versionIRI    <https://w3id.org/ibp/CTRLont-0.2.0> ;
        owl:versionInfo   "v0.2.0" .

: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:label    "Semantic Type"@en .

<http://purl.org/dc/terms/creator>
        a       owl:AnnotationProperty .

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

<http://purl.org/dc/terms/title>
        a       owl:AnnotationProperty .

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

<http://purl.org/dc/terms/contributor>
        a       owl:AnnotationProperty .

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

<http://purl.org/dc/terms/publisher>
        a       owl:AnnotationProperty .

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

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

rdfs:label  a   owl:AnnotationProperty .

<http://purl.org/dc/terms/identifier>
        a       owl:AnnotationProperty .

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

: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:label    "Application Logic"@en .

owl:Thing  a    owl:Class .

: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:label       "Parameter"@en ;
        rdfs:subClassOf  :AnnotatedElement .

: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:label    "Unit"@en .

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

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

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

<http://purl.org/dc/terms/rights>
        a       owl:AnnotationProperty .

<http://purl.org/dc/terms/modified>
        a       owl:AnnotationProperty .

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

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

<http://purl.org/vocab/vann/preferredNamespacePrefix>
        a       owl:AnnotationProperty .

<http://purl.org/dc/terms/issued>
        a       owl:AnnotationProperty .

: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:label        "Output"@en ;
        rdfs:subClassOf   :AnnotatedElement ;
        owl:disjointWith  :Parameter .

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

<http://purl.org/dc/terms/description>
        a       owl:AnnotationProperty .

rdfs:seeAlso  a  owl:AnnotationProperty .

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

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

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

: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:label        "Input"@en ;
        rdfs:subClassOf   :AnnotatedElement ;
        owl:disjointWith  :Parameter .
