@prefix cc: <http://creativecommons.org/ns#> .
@prefix coswot: <https://w3id.org/coswot/> .
@prefix dct: <http://purl.org/dc/terms/> .
@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 schema: <http://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix time: <http://www.w3.org/2006/time#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

cc:license a owl:AnnotationProperty .

dct:contributor a owl:AnnotationProperty .

dct:description a owl:AnnotationProperty .

dct:issued a owl:AnnotationProperty .

dct:modified a owl:AnnotationProperty .

dct:title a owl:AnnotationProperty .

vann:preferredNamespacePrefix a owl:AnnotationProperty .

vann:preferredNamespaceUri a owl:AnnotationProperty .

schema:domainIncludes a owl:AnnotationProperty .

schema:rangeIncludes a owl:AnnotationProperty .

rdfs:comment a owl:AnnotationProperty .

skos:example a owl:AnnotationProperty .

skos:note a owl:AnnotationProperty .

coswot:CommandExecution a owl:Class ;
    rdfs:label "Command Execution"@en ;
    rdfs:comment "Describes the execution of a command. Typically, its inputs and outputs are human understandable and relate to some feature of interest, such as its state (e.g., ex:On), or the value of its temperature (e.g., property value 21.0 °C)."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:Command ;
            owl:onProperty coswot:isExecutionOf ],
        coswot:ProcedureExecution .

coswot:Forecast a owl:Class ;
    rdfs:label "Forecast"@en ;
    rdfs:comment "A forecast is the act of estimating a property value (future temporal validity context)."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> ;
    rdfs:subClassOf coswot:Observation .

coswot:OperationExecution a owl:Class ;
    rdfs:label "Operation Execution"@en ;
    rdfs:comment "Describes the execution of an operation in a network: the\"machine interpretable\"  description of a communication between devices over the network. Typically, its input and result are network messages, that conform to the input and output of the executed operation."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:Operation ;
            owl:onProperty coswot:isExecutionOf ],
        coswot:ProcedureExecution .

coswot:PlannedActuation a owl:Class ;
    rdfs:label "Planned Actuation."@en ;
    rdfs:comment "A planned actuation is the act of estimating a target actuation value for a property (future temporal validity context)."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/actuations> ;
    rdfs:subClassOf coswot:Actuation .

coswot:connectedTo a owl:ObjectProperty,
        owl:SymmetricProperty ;
    rdfs:label "connected to"@en ;
    rdfs:comment "Links a system to a system it is connected to. Connected systems interact in some way. The exact meaning of \"interact\" is defined by sub properties of coswot:connectedTo. Property coswot:connectedTo is symmetric. This property can be qualified using class coswot:Connection, which connects the two systems. If there is a connection between several systems, then one may infer these systems are pairwise connected."@en ;
    rdfs:domain coswot:System ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/systems> ;
    rdfs:range coswot:System .

coswot:core a owl:Ontology ;
    cc:license <https://creativecommons.org/licenses/by/4.0/> ;
    dct:contributor "Antoine Zimmermann",
        "Catherine Roussey",
        "Fatma-Zohra Hannou",
        "Maxime Lefrançois",
        "Victor Charpenay" ;
    dct:description "The CoSWoT Core ontology groups all the entities and axioms of the CoSWoT Core modules in one ontology."@en ;
    dct:title "CoSWoT Core ontology"@en ;
    vann:preferredNamespacePrefix "coswot" ;
    vann:preferredNamespaceUri "https://w3id.org/coswot/" .

coswot:hasAggregationDuration a owl:DatatypeProperty ;
    rdfs:label "has aggregation duration"@en ;
    rdfs:comment "Links a property, state, aggregation, or aggregation kind, to the duration of the time interval over which the aggregation is done"@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Property coswot:State coswot:Aggregation coswot:AggregationKind ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/aggregations> ;
    rdfs:range xsd:duration .

coswot:hasMember a owl:ObjectProperty ;
    rdfs:label "has member"@en ;
    rdfs:comment "Link to a member within a collection of (actuations or samples or observations) or (collection of actuations or collections of samples or collection of observations) which may share a value for one or more of the characteristic properties."@en ;
    rdfs:domain coswot:ObservationCollection ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/aggregations> ;
    rdfs:range [ a owl:Class ;
            owl:unionOf ( coswot:Observation coswot:ObservationCollection ) ] .

coswot:hasOptionalCommand a owl:ObjectProperty ;
    rdfs:label "has optional command"@en ;
    rdfs:comment "Links a function and one of its optional commands"@en ;
    rdfs:domain coswot:FunctionKind ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:CommandKind ;
    rdfs:subPropertyOf coswot:hasCommandKind .

coswot:hasOutput a owl:ObjectProperty ;
    rdfs:label "has output"@en ;
    rdfs:comment "Links a procedure (e.g., an operation) to its outputs."@en ;
    rdfs:domain coswot:Procedure ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    skos:example "Different complementary commands can be defined for observing a smart home. Observe the temperature once will output the indoor temperature property; observe status of the entry door will output an open/close state."@en .

coswot:hasPhenomenonTime a owl:ObjectProperty ;
    rdfs:label "has phenomenon time"@en ;
    rdfs:comment """Links a procedure execution to the time that the result applies. It may be an interval or an instant, or some other compound temporal entity expressed using OWL Time.
    
The phenomenonTime is not necessarily the same as the resultTime. 

In the case of Actuation, phenomenonTime should indicate the time that the actuator was active. 

In the case of Observation, the phenomenonTime may be distant from the resultTime, for example in the case of forecasts the phenomenonTime is after the resultTime."""@en ;
    rdfs:domain coswot:ProcedureExecution ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> ;
    rdfs:range time:TemporalEntity .

coswot:hasResult a owl:ObjectProperty ;
    rdfs:label "has result"@en ;
    rdfs:comment "Links a procedure execution (e.g., an observation) to its result (e.g., a property value)."@en ;
    rdfs:domain coswot:ProcedureExecution ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> .

coswot:hasResultTime a owl:DatatypeProperty ;
    rdfs:label "has result time"@en ;
    rdfs:comment "Links a procedure execution to the instant of time when the activity was completed, expressed as an xsd:dateTime literal."@en ;
    rdfs:domain coswot:ProcedureExecution ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> ;
    rdfs:range xsd:dateTime .

coswot:hasStartTime a owl:DatatypeProperty ;
    rdfs:label "has start time"@en ;
    rdfs:comment "Links a procedure execution to the instant of time when the activity was initiated or tasked, expressed as an xsd:dateTime literal"@en ;
    rdfs:domain coswot:ProcedureExecution ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> ;
    rdfs:range xsd:dateTime .

coswot:hasTimestamp a owl:DatatypeProperty ;
    rdfs:label "has timestamp"@en ;
    rdfs:comment "Links a procedure execution to an instant. When the start time, the result time, and the phenomenon time are the same time instants, then DP coswot:hasTimestamp can be used to simply link a procedure execution to the time of these instants, expressed as an xsd:dateTime literal."@en ;
    rdfs:domain coswot:ProcedureExecution ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> ;
    rdfs:range xsd:dateTime .

coswot:isTransitiveSamplePropertyOf a owl:ObjectProperty,
        owl:TransitiveProperty ;
    rdfs:label "is transitive sample property"@en ;
    rdfs:comment "Relation from  the Sample's Property of Interest to the Feature of Interest's Property of Interest, it derives from. The relation is transitive. The Sample's Property of Interest is the measured quality (or characteristic) associated to a part of the Feature of Interest. The Feature Of Interest's Property of Interest is the quality (or characteristic) of the entity that can not be measured entirely. The Sample MUST represent the Feature of Interest."@en ;
    rdfs:domain coswot:PropertyOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:range coswot:PropertyOfInterest .

coswot:isTransitiveSampleStateOf a owl:ObjectProperty,
        owl:TransitiveProperty ;
    rdfs:label "is transitive sample state"@en ;
    rdfs:comment "Relation from  the Sample's State of Interest to the Feature of Interest's State of Interest, it derives from. The relation is transitive. The Sample's State of Interest is the measured quality (or characteristic) associated to a part of the Feature of Interest. The Feature Of Interest's State of Interest is the quality (or characteristic) of the entity that can not be measured entirely. The Sample MUST represent the Feature of Interest."@en ;
    rdfs:domain coswot:StateOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:range coswot:StateOfInterest .

xsd:duration a rdfs:Datatype .

time:TemporalEntity a owl:Class .

time:TemporalInterval a owl:Class .

coswot:ActuatingFunction a owl:Class ;
    rdfs:label "Actuating Function"@en ;
    rdfs:comment "An actuating function is a function that has at least one actuating command."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/actuations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:onProperty coswot:hasCommand ;
            owl:someValuesFrom coswot:ActuatingCommand ],
        coswot:Function .

coswot:ActuatorKind a owl:Class ;
    rdfs:label "Actuator Kind"@en ;
    rdfs:comment "Actuator kinds allow to describe kinds of actuators, with common properties having the same value, common states being the same, common functions, and common services. An instance of coswot:ActuatorKind represents an archetype of real world actuators, for example to populate device catalogs."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/actuations> ;
    rdfs:subClassOf coswot:Actuator,
        coswot:DeviceKind .

coswot:ActuatorOfInterest a owl:Class ;
    rdfs:label "Actuator Of Interest"@en ;
    rdfs:comment "A specific, tangible device designed to control one or more properties or states of one or more features of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/actuations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty coswot:controls ],
        coswot:Actuator,
        coswot:DeviceOfInterest .

coswot:ProcedureExecutionCollection a owl:Class ;
    rdfs:label "Procedure Execution Collection"@en ;
    rdfs:comment "Logical grouping of procedure executions. This is a convenient class that is not expected to be used directly."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> .

coswot:SensingFunction a owl:Class ;
    rdfs:label "Sensing Function"@en ;
    rdfs:comment "An sensing function is a function that has at least one sensing command."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/observations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:onProperty coswot:hasCommand ;
            owl:someValuesFrom coswot:SensingCommand ],
        coswot:Function .

coswot:SensorKind a owl:Class ;
    rdfs:label "Sensor Kind"@en ;
    rdfs:comment "Sensor kinds allow to describe types of sensors, with common properties having the same value, common states being the same, common functions, and common services. An instance of coswot:SensorKind represents an archetype of real world sensors, for example to populate device catalogs."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/observations> ;
    rdfs:subClassOf coswot:DeviceKind,
        coswot:Sensor .

coswot:SensorOfInterest a owl:Class ;
    rdfs:label "Sensor Of Interest"@en ;
    rdfs:comment "A specific, tangible device designed to observe one or more properties or states of one or more features of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/observations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty coswot:observes ],
        coswot:DeviceOfInterest,
        coswot:Sensor .

coswot:UnitOfMeasure a owl:Class ;
    rdfs:label "Unit of measure"@en ;
    rdfs:comment "The unit of measure is a standard for measurement of a quantity, such as a property."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/property_values> ;
    rdfs:subClassOf skos:Concept ;
    skos:example "For example, consumption power is a property and Watt is a unit of power that represents a definite predetermined power: when we say 10 Watt, we actually mean 10 times the definite predetermined power \"Watt\"."@en .

coswot:connectedThrough a owl:ObjectProperty ;
    rdfs:label "connected through"@en ;
    rdfs:comment "Links a system to one of its connections to other systems."@en ;
    rdfs:domain coswot:System ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/systems> ;
    rdfs:range coswot:Connection ;
    owl:inverseOf coswot:connectsSystem .

coswot:conveys a owl:ObjectProperty ;
    rdfs:label "conveys"@en,
        "transmet"@fr ;
    rdfs:comment "The relationship identifying the message of the communication, by providing the message graph name."@en,
        "La relation identifiant le message transmis."@fr ;
    rdfs:domain coswot:Communication ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/communications> ;
    rdfs:range coswot:Message .

coswot:hasAddressee a owl:ObjectProperty ;
    rdfs:label "has addressee"@en,
        "a pour destinataire"@fr ;
    rdfs:comment "The relationship identifying the communication system to which a communication is addressed."@en,
        "Le système de communication pour lequel la communication est adressée (destinataire)."@fr ;
    rdfs:domain coswot:Communication ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/communications> ;
    rdfs:range coswot:CommunicationSystem .

coswot:hasAggregationTime a owl:ObjectProperty ;
    rdfs:label "has aggregation time"@en ;
    rdfs:comment "Links a property, state, aggregation, or aggregation kind, to a description of the time interval over which the aggregation is done"@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Property coswot:State coswot:Aggregation coswot:AggregationKind ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/aggregations> ;
    rdfs:range time:TemporalInterval ;
    owl:propertyChainAxiom ( coswot:hasAggregationKind coswot:hasAggregationTime ) .

coswot:hasInput a owl:ObjectProperty ;
    rdfs:label "has input"@en ;
    rdfs:comment "Links a procedure (e.g., a command) or procedure execution (e.g., an observation) to its inputs."@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Procedure coswot:ProcedureExecution ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    skos:example "Different complementary commands can be defined for controlling a light. Turn on or off the light based on a desired state, toggle the light status of a specific light, set the luminosity level with a transition time, set the default transition time, start comfort."@en .

coswot:hasMandatoryCommand a owl:ObjectProperty ;
    rdfs:label "has mandatory command"@en ;
    rdfs:comment "Links a function and one of its mandatory commands"@en ;
    rdfs:domain coswot:FunctionKind ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:CommandKind ;
    rdfs:subPropertyOf coswot:hasCommandKind ;
    owl:propertyChainAxiom ( skos:broader coswot:hasMandatoryCommand ) .

coswot:hasMedium a owl:ObjectProperty ;
    rdfs:label "has medium"@en,
        "a pour média"@fr ;
    rdfs:comment "The relationship identifying the communication medium transmitting the communication."@en,
        "Le medium de communication transmettant la communication."@fr ;
    rdfs:domain coswot:Communication ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/communications> ;
    rdfs:range coswot:CommunicationMedium .

coswot:hasPropertyValue a owl:ObjectProperty ;
    rdfs:label "has property value"@en ;
    rdfs:comment "Links a feature or a property of interest to a property value."@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Feature coswot:PropertyOfInterest ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/property_values> ;
    rdfs:range coswot:PropertyValue ;
    owl:propertyChainAxiom ( skos:broader coswot:hasPropertyValue ) .

coswot:hasSample a owl:ObjectProperty ;
    rdfs:label "has sample"@en ;
    schema:domainIncludes coswot:FeatureOfInterest ;
    schema:rangeIncludes coswot:Sample ;
    rdfs:comment "Relation between a FeatureOfInterest and the Sample used to represent it."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:subPropertyOf coswot:hasTransitiveSample ;
    owl:inverseOf coswot:isSampleOf ;
    owl:propertyChainAxiom ( coswot:hasPropertyOfInterest coswot:hasSampleProperty coswot:isPropertyOfInterestOf ),
        ( coswot:hasStateOfInterest coswot:hasSampleState coswot:isStateOfInterestOf ) .

coswot:hasSampleProperty a owl:InverseFunctionalProperty,
        owl:ObjectProperty ;
    rdfs:label "has sample property"@en ;
    rdfs:comment "Direct relation from a Feature Of Interest's Property of interest to a Sample's Property of interest. The Feature Of Interest's Property of interest is the quality (or characteristic) of the entity that can not be measured entirely. The Sample MUST represent the Feature of Interest."@en ;
    rdfs:domain coswot:PropertyOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:range coswot:PropertyOfInterest ;
    owl:inverseOf coswot:isSamplePropertyOf .

coswot:hasSampleState a owl:InverseFunctionalProperty,
        owl:ObjectProperty ;
    rdfs:label "has sample state"@en ;
    rdfs:comment "Direct relation from a Feature Of Interest's State of interest to a Sample's State of interest. The Feature Of Interest's State of interest is the quality (or characteristic) of the entity that can not be measured entirely. The Sample MUST represent the Feature of Interest."@en ;
    rdfs:domain coswot:StateOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:range coswot:StateOfInterest ;
    owl:inverseOf coswot:isSampleStateOf .

coswot:hasSubSystem a owl:ObjectProperty,
        owl:TransitiveProperty ;
    rdfs:label "has sub system"@en ;
    rdfs:comment "Links a system to one of its sub systems."@en ;
    rdfs:domain coswot:System ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/systems> ;
    rdfs:range coswot:System ;
    owl:inverseOf coswot:subSystemOf .

coswot:hasTransitiveSampleProperty a owl:ObjectProperty,
        owl:TransitiveProperty ;
    rdfs:label "has transitive sample property"@en ;
    rdfs:comment "Relation from a Feature Of Interest's Property of Interest to a Sample's Property of Interest. The relation is transitive. The Feature Of Interest's Property of Interest is the quality (or characteristic) of the entity that can not be measured entirely. The Sample MUST represent the Feature of Interest."@en ;
    rdfs:domain coswot:PropertyOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:range coswot:PropertyOfInterest ;
    owl:inverseOf coswot:hasTransitiveSampleProperty .

coswot:hasTransitiveSampleState a owl:ObjectProperty,
        owl:TransitiveProperty ;
    rdfs:label "has transitive sample state"@en ;
    rdfs:comment "Relation from a Feature Of Interest's State of Interest to a Sample's State of Interest. The relation is transitive. The Feature Of Interest's State of Interest is the quality (or characteristic) of the entity that can not be measured entirely. The Sample MUST represent the Feature of Interest."@en ;
    rdfs:domain coswot:StateOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:range coswot:StateOfInterest ;
    owl:inverseOf coswot:hasTransitiveSampleState .

coswot:hasValue a owl:DatatypeProperty ;
    rdfs:label "has value"@en ;
    rdfs:comment "Value of a property value expressed as an RDF literal. Note that, even if decimal values are expected, values could use other datatypes."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/property_values> .

coswot:isAbout a owl:DatatypeProperty ;
    rdfs:label "is about"@en,
        "est à propos"@fr ;
    rdfs:comment "The relationship identifying the topic of the communication. It provides a global description of the communication message."@en,
        "La relation identifiant l'objet de la communication. Elle procure une description globale du message de la communication."@fr ;
    rdfs:domain coswot:Communication ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/communications> ;
    rdfs:range xsd:string ;
    owl:deprecated true .

coswot:isCommandKindOf a owl:ObjectProperty ;
    rdfs:label "is command kind of"@en ;
    rdfs:comment "Links a command kind to the function it is a command of."@en ;
    rdfs:domain coswot:CommandKind ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:Function ;
    rdfs:subPropertyOf coswot:isCommandOf ;
    owl:inverseOf coswot:hasCommandKind .

coswot:isControlledBy a owl:ObjectProperty ;
    rdfs:label "is controlled by"@en ;
    rdfs:comment "Links a feature, property, or state, to the actuator, actuating function, actuating command, or actuation, that controls it."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/actuations> ;
    rdfs:subPropertyOf coswot:isTargetOf ;
    owl:inverseOf coswot:controls .

coswot:isFunctionKindOf a owl:ObjectProperty ;
    rdfs:label "is function kind of"@en ;
    rdfs:comment "Links a function kind to the device it is a function of."@en ;
    rdfs:domain coswot:FunctionKind ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:Device ;
    rdfs:subPropertyOf coswot:isFunctionOf ;
    owl:inverseOf coswot:hasFunctionKind .

coswot:isMeasuredIn a owl:ObjectProperty ;
    rdfs:label "is measured in"@en ;
    rdfs:comment "A relationship identifying the unit of measure used for a certain entity."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/property_values> ;
    rdfs:range coswot:UnitOfMeasure .

coswot:isObservedBy a owl:ObjectProperty ;
    rdfs:label "is observed by"@en ;
    rdfs:comment "Links a feature, property, or state, to the sensor, sensing function, sensing command, or observation, that observes it."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> ;
    rdfs:subPropertyOf coswot:isTargetOf ;
    owl:inverseOf coswot:observes .

coswot:isOperationKindOf a owl:ObjectProperty ;
    rdfs:label "is operation kind of"@en ;
    rdfs:comment "Links an operation kind to the service it is an operation of."@en ;
    rdfs:domain coswot:OperationKind ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:range coswot:Service ;
    rdfs:subPropertyOf coswot:isOperationOf ;
    owl:inverseOf coswot:hasOperationKind .

coswot:isPropertyKindOf a owl:ObjectProperty ;
    rdfs:label "is property kind of"@en ;
    rdfs:comment "Links a property kind to the feature it is a property of."@en ;
    rdfs:domain coswot:PropertyKind ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/properties> ;
    rdfs:range coswot:Feature ;
    rdfs:subPropertyOf coswot:isPropertyOf ;
    owl:inverseOf coswot:hasPropertyKind .

coswot:isSampleOf a owl:ObjectProperty ;
    rdfs:label "is sample of"@en ;
    schema:domainIncludes coswot:Sample ;
    schema:rangeIncludes coswot:FeatureOfInterest ;
    rdfs:comment "Relation from a Sample to the FeatureOfInterest that it is intended to be representative of."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:subPropertyOf coswot:isTransitiveSampleOf ;
    owl:inverseOf coswot:hasSample .

coswot:isSamplePropertyOf a owl:FunctionalProperty,
        owl:ObjectProperty ;
    rdfs:label "is sample property of"@en ;
    rdfs:comment "Direct relation from the Property of interest of a sample to the Property of the Feature of Interest it derives from. The Sample's Property of Interest is the measured quality (or characteristic) associated to a part of the Feature of Interest. The Feature Of Interest's Property of Interest is the quality (or characteristic) of the entity that can not be measured entirely. The Sample MUST represent the Feature of Interest."@en ;
    rdfs:domain coswot:PropertyOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:range coswot:PropertyOfInterest .

coswot:isSampleStateOf a owl:FunctionalProperty,
        owl:ObjectProperty ;
    rdfs:label "is sample state of"@en ;
    rdfs:comment "Direct relation from the State of interest of a sample to the State of the Feature of Interest it derives from. The Sample's State of Interest is the measured quality (or characteristic) associated to a part of the Feature of Interest. The Feature Of Interest's State of Interest is the quality (or characteristic) of the entity that can not be measured entirely. The Sample MUST represent the Feature of Interest."@en ;
    rdfs:domain coswot:StateOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:range coswot:StateOfInterest .

coswot:isStateKindOf a owl:ObjectProperty ;
    rdfs:label "is state kind of"@en ;
    rdfs:comment "Links a state kind to the feature it is a state of."@en ;
    rdfs:domain coswot:StateKind ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/states> ;
    rdfs:range [ a owl:Class ;
            owl:unionOf ( coswot:Feature coswot:StateOfInterest ) ] ;
    rdfs:subPropertyOf coswot:isStateOf ;
    owl:inverseOf coswot:hasStateKind .

coswot:isValueOfProperty a owl:ObjectProperty ;
    rdfs:label "is value of property"@en ;
    rdfs:comment "Links a property value to the property or property of interest it is a value of."@en ;
    rdfs:domain coswot:PropertyValue ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/property_values> ;
    rdfs:range coswot:Property ;
    owl:propertyChainAxiom ( coswot:isValueOfProperty coswot:hasKind ) .

coswot:madeExecution a owl:ObjectProperty ;
    rdfs:label "made execution"@en ;
    rdfs:comment "Links an entity (e.g., device) to the procedure execution it made."@en ;
    rdfs:domain coswot:FeatureOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> ;
    rdfs:range coswot:ProcedureExecution ;
    owl:inverseOf coswot:madeBy .

coswot:subSystemOf a owl:ObjectProperty,
        owl:TransitiveProperty ;
    rdfs:label "sub system of"@en ;
    rdfs:comment "Links a system to its super system. Properties of subsystems somehow contribute to the properties of the super system. The exact meaning of \"contribute is defined by sub properties of coswot:subSystemOf. Property coswot:subSystemOf is transitive."@en ;
    rdfs:domain coswot:System ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/systems> ;
    rdfs:range coswot:System ;
    owl:inverseOf coswot:hasSubSystem .

coswot:ActuatingCommand a owl:Class ;
    rdfs:label "Actuating Command"@en ;
    rdfs:comment "An instance of actuating command is a command that controls something."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/actuations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty coswot:controls ],
        coswot:Command .

coswot:Actuation a owl:Class ;
    rdfs:label "Actuation"@en ;
    rdfs:comment "A coswot:Actuation is the act of carrying out a procedure to control the state of the world using an actuator. It links to an actuator to describe what made the actuation, and to the controlled feature, property, property of interest, state, or state of interest. Typically, its input is a property value or a state. An actuation of a state (OP coswot:controls) should have a state as input (OP coswot:hasInput). Respectively, an actuation of a property should have a property value as input."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/actuations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:Actuator ;
            owl:onProperty coswot:madeBy ],
        [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty coswot:controls ],
        coswot:ProcedureExecution .

coswot:CommunicationMedium a owl:Class ;
    rdfs:label "Communication Medium"@en,
        "Médium de communication"@fr ;
    rdfs:comment "The medium between communication systems through which communications can occur."@en,
        "Le médium reliant deux systèmes de communication à travers lequel une communication peut se transmettre."@fr ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/communications> ;
    rdfs:subClassOf coswot:Connection .

coswot:Message a owl:Class ;
    rdfs:label "Message"@en,
        "Message"@fr ;
    rdfs:comment "A message is a piece of information that is conveyed in a communication. The message is a named graph."@en,
        "Un message est une information transmise dans une communication. Le message est un graphe nommé."@fr ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/communications> .

coswot:ProcedureCollection a owl:Class ;
    rdfs:label "Procedure Collection"@en ;
    rdfs:comment "A logical grouping of procedures."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> .

coswot:PropertyValue a owl:Class ;
    rdfs:label "Property Value"@en ;
    rdfs:comment "Describes the value for a property. The property value is linked to its value expressed as an RDF literal (DP coswot:hasValue), optionally to the unit of measurement (OP coswot:isMeasuredIn), and optionally to the properties or properties of interest it is a value of (OP coswot:isValueOfProperty)."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/property_values> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:cardinality 1 ;
            owl:onProperty coswot:hasValue ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty coswot:isMeasuredIn ] .

coswot:SensingCommand a owl:Class ;
    rdfs:label "Sensing Command"@en ;
    rdfs:comment "An instance of sensing command is a command that observes something."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/observations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty coswot:observes ],
        coswot:Command .

coswot:connectsSystem a owl:ObjectProperty ;
    rdfs:label "connects system"@en ;
    rdfs:comment "Links a connection to one of the systems it connects."@en ;
    rdfs:domain coswot:Connection ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/systems> ;
    rdfs:range coswot:System ;
    owl:inverseOf coswot:connectedThrough .

coswot:consistsOf a owl:ObjectProperty ;
    rdfs:label "consists of"@en ;
    rdfs:comment "A relationship indicating a composite entity that consists of other entities (e.g., a temperature/humidity sensor that consists of a temperature sensor and a humidity sensor)"@en ;
    rdfs:domain coswot:Entity,
        coswot:Feature ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/features> ;
    rdfs:range coswot:Entity,
        coswot:Feature .

coswot:hasAggregationKind a owl:ObjectProperty ;
    rdfs:label "has aggregation kind"@en ;
    rdfs:comment "Links a property, state, or aggregation, to the kind of aggregation it uses."@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Property coswot:State coswot:Aggregation ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/aggregations> ;
    rdfs:range coswot:AggregationKind .

coswot:hasCommandOfInterest a owl:ObjectProperty ;
    rdfs:label "has command of interest"@en ;
    rdfs:comment "Links a function of interest to one of its commands of interest."@en ;
    rdfs:domain coswot:FunctionOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:CommandOfInterest ;
    rdfs:subPropertyOf coswot:hasCommand ;
    owl:inverseOf coswot:isCommandOfInterestOf .

coswot:hasCommunicator a owl:ObjectProperty ;
    rdfs:label "has communicator"@en,
        "a pour emetteur"@fr ;
    rdfs:comment "The relationship identifying the communication system that originated a communication."@en,
        "Le système de communication qui émet la communication (émetteur)."@fr ;
    rdfs:domain coswot:Communication ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/communications> ;
    rdfs:range coswot:CommunicationSystem .

coswot:hasFunctionOfInterest a owl:ObjectProperty ;
    rdfs:label "has function of interest"@en ;
    rdfs:comment "Links a device of interest to one of its functions of interest."@en ;
    rdfs:domain coswot:DeviceOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:FunctionOfInterest ;
    rdfs:subPropertyOf coswot:hasFunction ;
    owl:inverseOf coswot:isFunctionOfInterestOf .

coswot:hasOperationOfInterest a owl:ObjectProperty ;
    rdfs:label "has operation of interest"@en ;
    rdfs:comment "Links a service of interest to one of its operations of interest."@en ;
    rdfs:domain coswot:ServiceOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:range coswot:OperationOfInterest ;
    rdfs:subPropertyOf coswot:hasOperation ;
    owl:inverseOf coswot:isOperationOfInterestOf .

coswot:hasTransitiveSample a owl:ObjectProperty,
        owl:TransitiveProperty ;
    rdfs:label "has transitive sample"@en ;
    schema:domainIncludes coswot:FeatureOfInterest ;
    schema:rangeIncludes coswot:Sample ;
    rdfs:comment "Relation From a FeatureOfInterest to the Sample used to represent it. The relation is transitive."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    owl:inverseOf coswot:isTransitiveSampleOf .

coswot:isCommandOfInterestOf a owl:FunctionalProperty,
        owl:ObjectProperty ;
    rdfs:label "is command of interest of"@en ;
    rdfs:comment "Links a command of interest to the function of interest it is a command of."@en ;
    rdfs:domain coswot:CommandOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:FunctionOfInterest ;
    rdfs:subPropertyOf coswot:isCommandOf ;
    owl:inverseOf coswot:hasCommandOfInterest .

coswot:isFunctionOfInterestOf a owl:FunctionalProperty,
        owl:ObjectProperty ;
    rdfs:label "is function of interest of"@en ;
    rdfs:comment "Links a function of interest to the device of interest it is a function of."@en ;
    rdfs:domain coswot:FunctionOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:DeviceOfInterest ;
    rdfs:subPropertyOf coswot:isFunctionOf ;
    owl:inverseOf coswot:hasFunctionOfInterest .

coswot:isOfferedBy a owl:FunctionalProperty,
        owl:ObjectProperty ;
    rdfs:label "is offered by"@en ;
    rdfs:comment "Links a service to the device that exposes it to a network"@en ;
    rdfs:domain coswot:Service ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:range coswot:Device ;
    owl:inverseOf coswot:offers .

coswot:isOperationOfInterestOf a owl:FunctionalProperty,
        owl:ObjectProperty ;
    rdfs:label "is operation of interest of"@en ;
    rdfs:comment "Links an operation of interest to the service of interest it is an operation of."@en ;
    rdfs:domain coswot:OperationOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:range coswot:ServiceOfInterest ;
    rdfs:subPropertyOf coswot:isOperationOf ;
    owl:inverseOf coswot:hasOperationOfInterest .

coswot:isTargetOf a owl:ObjectProperty ;
    rdfs:label "is target of"@en ;
    rdfs:comment "Links a feature, property, or state, to the device, function, command, or procedure execution, that targets it."@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Feature coswot:Property coswot:State ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/devices> ;
    rdfs:range [ a owl:Class ;
            owl:unionOf ( coswot:Device coswot:Function coswot:Command coswot:ProcedureExecution ) ] ;
    owl:inverseOf coswot:targets .

coswot:isTransitiveSampleOf a owl:ObjectProperty,
        owl:TransitiveProperty ;
    rdfs:label "is transitive sample of"@en ;
    schema:domainIncludes coswot:Sample ;
    schema:rangeIncludes coswot:FeatureOfInterest ;
    rdfs:comment "Relation from a Sample to a FeatureOfInterest that it is intended to be representative. The relation is transitive."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    owl:inverseOf coswot:hasTransitiveSample .

coswot:offers a owl:ObjectProperty ;
    rdfs:label "offers"@en ;
    rdfs:comment "Links a device to a service it exposes to a network."@en ;
    rdfs:domain coswot:Device ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:range coswot:Service ;
    owl:inverseOf coswot:isOfferedBy .

coswot:Aggregation a owl:Class ;
    rdfs:label "Aggregation"@en ;
    rdfs:comment "Observation that takes as input a collection of observations, and outputs a result based on the aggregation of these observations."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/aggregations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:onProperty coswot:hasInput ;
            owl:someValuesFrom coswot:ObservationCollection ],
        [ a owl:Restriction ;
            owl:onProperty coswot:hasAggregationKind ;
            owl:someValuesFrom coswot:AggregationKind ],
        coswot:Observation .

coswot:Connection a owl:Class ;
    rdfs:label "Connection"@en ;
    rdfs:comment "The class of connections between systems. This class qualifies property coswot:connectedTo. A connection describes potential interactions between systems. Any two connected systems are connected through a connection. A connection can connect more than two systems at the same time."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/systems> ;
    rdfs:subClassOf [ owl:onProperty coswot:connectsSystem ;
            owl:someValuesFrom coswot:System ],
        coswot:Feature ;
    owl:disjointWith coswot:System .

coswot:ObservationCollection a owl:Class ;
    rdfs:label "Observation Collection"@en ;
    rdfs:comment "Collection of one or more observations or observation collections, i.e. collections may be nested."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/aggregations> ;
    rdfs:subClassOf coswot:ProcedureExecutionCollection .

coswot:OperationOfInterest a owl:Class ;
    rdfs:label "Operation Of Interest"@en ;
    rdfs:comment "An operation of interest is specific to a function of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:OperationKind ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:onProperty coswot:hasKind ;
            owl:someValuesFrom coswot:OperationKind ],
        [ a owl:Restriction ;
            owl:cardinality 1 ;
            owl:onProperty coswot:isOperationOfInterestOf ],
        [ a owl:Restriction ;
            owl:minQualifiedCardinality 1 ;
            owl:onClass coswot:CommandOfInterest ;
            owl:onProperty coswot:represents ],
        [ a owl:Restriction ;
            owl:minQualifiedCardinality 1 ;
            owl:onClass coswot:CommandOfInterest ;
            owl:onProperty coswot:represents ],
        coswot:Operation .

coswot:ServiceOfInterest a owl:Class ;
    rdfs:label "Service Of Interest"@en ;
    rdfs:comment "A coswot:Service is a digital representation of a function in a network, making it discoverable, registerable and remotely controllable in the network. An instance of coswot:ServiceOfInterest is specific to a function of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:minQualifiedCardinality 1 ;
            owl:onClass coswot:FunctionOfInterest ;
            owl:onProperty coswot:represents ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:ServiceKind ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:onProperty coswot:hasKind ;
            owl:someValuesFrom coswot:ServiceKind ],
        coswot:Service .

coswot:hasFunctionKind a owl:ObjectProperty ;
    rdfs:label "has function kind"@en ;
    rdfs:comment "Links a device to one of its function kinds."@en ;
    rdfs:domain coswot:Device ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:FunctionKind ;
    rdfs:subPropertyOf coswot:hasFunction ;
    owl:inverseOf coswot:isFunctionKindOf ;
    owl:propertyChainAxiom ( skos:broader coswot:hasFunctionKind ),
        ( coswot:hasKind coswot:hasFunctionKind ),
        ( coswot:hasFunctionOfInterest coswot:hasKind ) .

coswot:hasOperationKind a owl:ObjectProperty ;
    rdfs:label "has operation kind"@en ;
    rdfs:comment "Links a service to one of its operation kinds."@en ;
    rdfs:domain coswot:Service ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:range coswot:OperationKind ;
    rdfs:subPropertyOf coswot:hasOperation ;
    owl:inverseOf coswot:isOperationKindOf ;
    owl:propertyChainAxiom ( skos:broader coswot:hasOperationKind ),
        ( coswot:hasKind coswot:hasOperationKind ),
        ( coswot:hasOperationOfInterest coswot:hasKind ) .

coswot:hasPropertyKind a owl:ObjectProperty ;
    rdfs:label "has property kind"@en ;
    rdfs:comment "Links a feature to one of its property kinds."@en ;
    rdfs:domain coswot:Feature ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/properties> ;
    rdfs:range coswot:PropertyKind ;
    rdfs:subPropertyOf coswot:hasProperty ;
    owl:inverseOf coswot:isPropertyKindOf ;
    owl:propertyChainAxiom ( skos:broader coswot:hasPropertyKind ),
        ( coswot:hasKind coswot:hasPropertyKind ),
        ( coswot:hasPropertyOfInterest coswot:hasKind ) .

coswot:hasPropertyOfInterest a owl:ObjectProperty ;
    rdfs:label "has property of interest"@en ;
    rdfs:comment "Links a feature of interest to one of its properties of interest."@en ;
    rdfs:domain coswot:FeatureOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/properties> ;
    rdfs:range coswot:PropertyOfInterest ;
    rdfs:subPropertyOf coswot:hasProperty ;
    owl:inverseOf coswot:isPropertyOfInterestOf .

coswot:hasState a owl:ObjectProperty ;
    rdfs:label "has state"@en ;
    rdfs:comment "Links a feature or state of interest to one of its states."@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Feature coswot:StateOfInterest ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/states> ;
    rdfs:range coswot:State ;
    owl:inverseOf coswot:isStateOf .

coswot:hasStateKind a owl:ObjectProperty ;
    rdfs:label "has state kind"@en ;
    rdfs:comment "Links a feature to one of its state kinds."@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Feature coswot:StateOfInterest ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/states> ;
    rdfs:range coswot:StateKind ;
    rdfs:subPropertyOf coswot:hasState ;
    owl:inverseOf coswot:isStateKindOf ;
    owl:propertyChainAxiom ( skos:broader coswot:hasStateKind ),
        ( coswot:hasKind coswot:hasStateKind ),
        ( coswot:hasStateOfInterest coswot:hasKind ) .

coswot:hasStateOfInterest a owl:ObjectProperty ;
    rdfs:label "has state of interest"@en ;
    rdfs:comment "Links a feature of interest to one of its states of interest."@en ;
    rdfs:domain coswot:FeatureOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/states> ;
    rdfs:range coswot:StateOfInterest ;
    rdfs:subPropertyOf coswot:hasState ;
    owl:inverseOf coswot:isStateOfInterestOf .

coswot:isCommandOf a owl:ObjectProperty ;
    rdfs:label "is command of"@en ;
    rdfs:comment "Links a command to a function that supports it."@en ;
    rdfs:domain coswot:Command ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:Function ;
    owl:inverseOf coswot:hasCommand .

coswot:isFunctionOf a owl:ObjectProperty ;
    rdfs:label "is function of"@en ;
    rdfs:comment "Links a function to the device it is a function of."@en ;
    rdfs:domain coswot:Function ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:Device ;
    owl:inverseOf coswot:hasFunction .

coswot:isOperationOf a owl:ObjectProperty ;
    rdfs:label "is operation of"@en ;
    rdfs:comment "Links an operation to a service that supports it."@en ;
    rdfs:domain coswot:Operation ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:range coswot:Service ;
    owl:inverseOf coswot:hasOperation .

coswot:isPropertyOf a owl:ObjectProperty ;
    rdfs:label "is property of"@en ;
    rdfs:comment "Links a property to the feature it is a property of."@en ;
    rdfs:domain coswot:Property ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/properties> ;
    rdfs:range coswot:Feature ;
    owl:inverseOf coswot:hasProperty .

coswot:isPropertyOfInterestOf a owl:FunctionalProperty,
        owl:ObjectProperty ;
    rdfs:label "is property of interest of"@en ;
    rdfs:comment "Links a property of interest to the feature of interest it is a property of."@en ;
    rdfs:domain coswot:PropertyOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/properties> ;
    rdfs:range coswot:FeatureOfInterest ;
    rdfs:subPropertyOf coswot:isPropertyOf ;
    owl:inverseOf coswot:hasPropertyOfInterest .

coswot:isStateOf a owl:ObjectProperty ;
    rdfs:label "is state of"@en ;
    rdfs:comment "Links a state to the feature or state of interest it is a state of."@en ;
    rdfs:domain coswot:State ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/states> ;
    rdfs:range [ a owl:Class ;
            owl:unionOf ( coswot:Feature coswot:StateOfInterest ) ] ;
    owl:inverseOf coswot:hasState .

coswot:isStateOfInterestOf a owl:FunctionalProperty,
        owl:ObjectProperty ;
    rdfs:label "is state of interest of"@en ;
    rdfs:comment "Links a state of interest to the feature of interest it is a state of."@en ;
    rdfs:domain coswot:StateOfInterest ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/states> ;
    rdfs:range coswot:FeatureOfInterest ;
    rdfs:subPropertyOf coswot:isStateOf ;
    owl:inverseOf coswot:hasStateOfInterest .

coswot:madeBy a owl:ObjectProperty ;
    rdfs:label "made by"@en ;
    rdfs:comment "Links a procedure execution to the entity (e.g., device) that made it."@en ;
    rdfs:domain coswot:ProcedureExecution ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> ;
    rdfs:range coswot:FeatureOfInterest ;
    owl:inverseOf coswot:madeExecution .

coswot:targets a owl:ObjectProperty ;
    rdfs:label "targets"@en ;
    rdfs:comment "Links a device, function, command, or procedure execution, to the feature, property, or state, it targets."@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Device coswot:Function coswot:Command coswot:ProcedureExecution ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/devices> ;
    rdfs:range [ a owl:Class ;
            owl:unionOf ( coswot:Feature coswot:Property coswot:State ) ] .

coswot:Actuator a owl:Class ;
    rdfs:label "Actuator"@en ;
    rdfs:comment "Actuators are devices designed to control one or more properties or states of features."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/actuations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty coswot:controls ],
        coswot:Device ;
    owl:disjointUnionOf ( coswot:ActuatorOfInterest coswot:ActuatorKind ) .

coswot:AggregationKind a owl:Class ;
    rdfs:label "Aggregation Kind"@en ;
    rdfs:comment "The class of kinds of aggregations, that a property can be associated with using OP coswot:hasAggregationKind"@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/aggregations> ;
    rdfs:seeAlso <https://w3id.org/coswot/core/aggregations/aggregation_kind_thesaurus> ;
    rdfs:subClassOf skos:Concept .

coswot:CommunicationSystem a owl:Class ;
    rdfs:label "Communication System"@en,
        "Système de communication."@fr ;
    rdfs:comment "A communication system denotes a system able to transmit and/or receive a communication."@en,
        "Un système de communication représente un système capable de transmettre et/ou recevoir une communication."@fr ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/communications> ;
    rdfs:subClassOf coswot:System .

coswot:Observation a owl:Class ;
    rdfs:label "Observation"@en ;
    rdfs:comment "A coswot:Observation is the act of carrying out a procedure to estimate or calculate a value of a property of a feature of interest, or a state of a feature of interest. It links to a sensor to describe what made the observation, and to the observed feature, property, property of interest, state, or state of interest. Typically, its result is a property value or a state. An observation of a state (OP coswot:observes) should have a state as a result (OP coswot:hasResult). Respectively, an observation of a property should have a property value as a result."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/observations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:Sensor ;
            owl:onProperty coswot:madeBy ],
        [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty coswot:observes ],
        coswot:ProcedureExecution .

coswot:Sample a owl:Class ;
    rdfs:label "Sample"@en ;
    rdfs:comment "Feature which is intended to be representative of a FeatureOfInterest on which Observations may be made."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/samples> ;
    rdfs:subClassOf coswot:FeatureOfInterest .

coswot:Sensor a owl:Class ;
    rdfs:label "Sensor"@en ;
    rdfs:comment "Sensors are devices designed to observe one or more properties or states of features."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/observations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty coswot:observes ],
        coswot:Device ;
    owl:disjointUnionOf ( coswot:SensorOfInterest coswot:SensorKind ) .

coswot:hasFunction a owl:ObjectProperty ;
    rdfs:label "has function"@en ;
    rdfs:comment "Links a device to one of its functions."@en ;
    rdfs:domain coswot:Device ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:Function ;
    owl:inverseOf coswot:isFunctionOf .

coswot:hasOperation a owl:ObjectProperty ;
    rdfs:label "has operation"@en ;
    rdfs:comment "Links a service to one of its operations."@en ;
    rdfs:domain coswot:Service ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:range coswot:Operation ;
    owl:inverseOf coswot:isOperationOf .

coswot:hasProperty a owl:ObjectProperty ;
    rdfs:label "has property"@en ;
    rdfs:comment "Links a feature to one of its properties."@en ;
    rdfs:domain coswot:Feature ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/properties> ;
    rdfs:range coswot:Property ;
    owl:inverseOf coswot:isPropertyOf .

coswot:isExecutionOf a owl:ObjectProperty ;
    rdfs:label "is execution of"@en ;
    rdfs:comment "Links a procedure execution to the procedure that was executed."@en ;
    rdfs:domain coswot:ProcedureExecution ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> ;
    rdfs:range coswot:Procedure ;
    owl:propertyChainAxiom ( coswot:isExecutionOf skos:broader ),
        ( coswot:isExecutionOf coswot:hasKind ) .

coswot:CommandOfInterest a owl:Class ;
    rdfs:label "Command Of Interest"@en ;
    rdfs:comment "The lowest-level directives a device supports and exposes to some network. Commands can target (OP coswot:targets and its sub-properties) features, properties, or states. A coswot:CommandOfInterest is a directives actually supported by a device and exposed to some network."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:CommandKind ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:onProperty coswot:hasKind ;
            owl:someValuesFrom coswot:CommandKind ],
        [ a owl:Restriction ;
            owl:cardinality 1 ;
            owl:onProperty coswot:isCommandOfInterestOf ],
        coswot:Command ;
    skos:example "The corridor smart light switch supports a command of kind “turn on/off”, which controls the state of the outdoor light."@en,
        "The smart fridge supports a command of kind “observe temperature”, which observes the temperature of the fridge."@en ;
    skos:note "Commands of interest need not always be explicited. It depends on the use case. Typically, commands of interest are useful to specify the actual property of interest or state of interest that is expected as input parameter, output, or that will be targeted."@en,
        "Like for commands, commands of interest may be described in terms of their input parameters, outputs, and of which properties or states they target."@en .

coswot:Communication a owl:Class ;
    rdfs:label "Communication."@en,
        "Communication"@fr ;
    rdfs:comment "A communication occurs through a communicationMedium, conveying a message from a communicator to \"defined\" or \"undefined\" addressees. Messages can be about topics. The communicationMedium can filter or alter messages."@en,
        "une communication est produite à travers un média de communication, transmettant un message d'un émetteur à un ou plusieurs destinataires \"définis\" ou \"indéfinis\". Les messages portent sur des sujets. Le medium de communication peut filtrer ou modifier les messages."@fr ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/communications> ;
    rdfs:subClassOf [ owl:onProperty coswot:conveys ;
            owl:someValuesFrom coswot:Message ],
        [ owl:onProperty coswot:hasMedium ;
            owl:someValuesFrom coswot:CommunicationMedium ],
        [ owl:onProperty coswot:hasCommunicator ;
            owl:someValuesFrom coswot:CommunicationSystem ],
        [ owl:cardinality 1 ;
            owl:onProperty coswot:hasCommunicator ],
        [ owl:onProperty coswot:hasAddressee ;
            owl:someValuesFrom coswot:CommunicationSystem ],
        [ owl:onProperty coswot:isAbout ;
            owl:someValuesFrom xsd:string ],
        coswot:ProcedureExecution .

coswot:DeviceOfInterest a owl:Class ;
    rdfs:label "Device Of Interest"@en ;
    rdfs:comment "A tangible object designed to accomplish a particular task. In order to accomplish this task, the device performs one or more functions. An instance of coswot:Device represents one specific real world entity."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/devices> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:DeviceKind ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:onProperty coswot:hasKind ;
            owl:someValuesFrom coswot:DeviceKind ],
        coswot:Device,
        coswot:FeatureOfInterest ;
    skos:example "Examples of devices are a light switch, a temperature sensor, an energy meter, a water flow meter, and a laundry dryer. A laundry dryer is designed to dry laundry, and to accomplish this task it has a start/stop function."@en .

coswot:Procedure a owl:Class ;
    rdfs:label "Procedure Execution"@en ;
    rdfs:comment "A workflow, protocol, plan, algorithm, or computational method. A Procedure is re-usable, and might be executed multiple times. It explains the steps to be carried out to arrive at reproducible results."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> .

coswot:controls a owl:ObjectProperty ;
    rdfs:label "controls"@en ;
    rdfs:comment "Links an actuator, actuating function, actuating command, or actuation, to the feature, property, or state, it controls."@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Actuator coswot:ActuatingFunction coswot:ActuatingCommand coswot:Actuation ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/actuations> ;
    rdfs:subPropertyOf coswot:targets ;
    owl:inverseOf coswot:isControlledBy .

coswot:hasCommandKind a owl:ObjectProperty ;
    rdfs:label "has command kind"@en ;
    rdfs:comment "Links a function to one of its command kinds."@en ;
    rdfs:domain coswot:Function ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:CommandKind ;
    rdfs:subPropertyOf coswot:hasCommand ;
    owl:inverseOf coswot:isCommandKindOf ;
    owl:propertyChainAxiom ( skos:broader coswot:hasCommandKind ),
        ( coswot:hasKind coswot:hasCommandKind ),
        ( coswot:hasCommandOfInterest coswot:hasKind ) .

coswot:observes a owl:ObjectProperty ;
    rdfs:label "observes"@en ;
    rdfs:comment "Links a sensor, sensing function, sensing command, or observation, to the feature, property, or state, it observes."@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Sensor coswot:SensingFunction coswot:SensingCommand coswot:Observation ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> ;
    rdfs:subPropertyOf coswot:targets ;
    owl:inverseOf coswot:isObservedBy .

coswot:DeviceKind a owl:Class ;
    rdfs:label "Device Kind"@en ;
    rdfs:comment "Device kinds allow to describe kinds of devices, with common properties having the same value, common states being the same, common functions, and common services. An instance of coswot:DeviceKind represents an archetype of real world devices, for example to populate device catalogs."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/devices> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:FeatureKind ;
            owl:onProperty skos:broader ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:FeatureKind ;
            owl:onProperty skos:narrower ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Nothing ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:FunctionKind ;
            owl:onProperty coswot:hasFunction ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:ServiceKind ;
            owl:onProperty coswot:offers ],
        coswot:Device,
        coswot:FeatureKind .

coswot:FunctionOfInterest a owl:Class ;
    rdfs:label "Function of Interest"@en ;
    rdfs:comment "Logical groups of commands that devices support to accomplish their tasks. Function can target (OP coswot:targets and its sub-properties) features, properties, or states. An instance of coswot:FunctionOfInterest is supported by exactly one device."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:FunctionKind ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:onProperty coswot:hasKind ;
            owl:someValuesFrom coswot:FunctionKind ],
        [ a owl:Restriction ;
            owl:cardinality 1 ;
            owl:onProperty coswot:isFunctionOfInterestOf ],
        coswot:Function ;
    skos:note "A function of interest is the function of (OP coswot:isFunctionOfInterestOf) exactly one device."@en,
        "Functions of interest need not always be explicited. It depends on the use case. Typically, functions of interest are useful to specify which command is actually exposed, and which actual property of interest or state of interest it targets."@en .

coswot:hasCommand a owl:ObjectProperty ;
    rdfs:label "has command"@en ;
    rdfs:comment "Links a function to one of the commands it supports."@en ;
    rdfs:domain coswot:Function ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:range coswot:Command ;
    owl:inverseOf coswot:isCommandOf .

coswot:Operation a owl:Class ;
    rdfs:label "Operation"@en ;
    rdfs:comment "A coswot:Operation is the means of a service to communicate in a procedure-type manner over the network (i.e. transmit data to/from other devices). It is the –machine interpretable– exposure of a –human understandable– command to a network. While a coswot:OperationOfInterest is specific to a service of interest, a coswot:OperationKind is an archetype of operations."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:Command ;
            owl:onProperty coswot:represents ],
        coswot:Procedure ;
    owl:disjointUnionOf ( coswot:OperationOfInterest coswot:OperationKind ) ;
    skos:example "In the set of operations exposed by a smart light bulb on a given network, one may be dedicated to turn on and off the light and expect a boolean as input. Another one may be dedicated to set the luminosity status and expect a target luminosity level (a byte) and a transition time (encoded on two bytes)."@en,
        "In the set of operations exposed by a smart washing machine on a given network, one may be dedicated to set the water temperature for the washing cycle, and expected as input a enumerated value. Another one may be dedicated to start, pause, or stop the washing cycle."@en,
        "To turn on a light, send a CoAP PUT request with CBOR content 0xf5 (true)"@en ;
    skos:note "An operation may be described in terms of its inputs and outputs using OP coswot:hasInput and coswot:hasOutput. Inputs and outputs of operations typically describe the expected schema or shape of network messages."@en,
        "Typically, a device connected to a given network offers one service for each of its functions of interest, and each service has one operation per command of interest of the function of interest it represents."@en .

coswot:ServiceKind a owl:Class ;
    rdfs:label "Service Kind"@en ;
    rdfs:comment "A coswot:Service is a digital representation of a function in a network, making it discoverable, registerable and remotely controllable in the network. An instance of coswot:ServiceKind can apply to different functions."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:FunctionKind ;
            owl:onProperty coswot:represents ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:ServiceKind ;
            owl:onProperty skos:broader ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:DeviceKind ;
            owl:onProperty coswot:isOfferedBy ],
        [ owl:allValuesFrom coswot:OperationKind ;
            owl:onProperty coswot:hasOperation ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:ServiceKind ;
            owl:onProperty skos:narrower ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Nothing ;
            owl:onProperty coswot:hasKind ],
        skos:Concept,
        coswot:Service .

coswot:StateKind a owl:Class ;
    rdfs:label "State Kind"@en ;
    rdfs:comment "Identifiable conditions that features are or may be in, and that can be observed or controlled by devices. A state can apply to different features of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/states> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:StateKind ;
            owl:onProperty skos:broader ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:StateKind ;
            owl:onProperty skos:narrower ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Nothing ;
            owl:onProperty coswot:hasKind ],
        skos:Concept,
        coswot:State ;
    skos:note "Concepts from existing code lists, vocabularies, and taxonomies, may be used as instances of coswot:State."@en .

skos:narrower a owl:ObjectProperty .

coswot:PropertyKind a owl:Class ;
    rdfs:label "Property Kind"@en ;
    rdfs:comment "Identifiable qualities of features that can be observed or controlled by devices. A property kind can apply to different features of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/properties> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:PropertyKind ;
            owl:onProperty skos:broader ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:PropertyKind ;
            owl:onProperty skos:narrower ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Nothing ;
            owl:onProperty coswot:hasKind ],
        skos:Concept,
        coswot:Property ;
    skos:example "Air temperature, pressure, luminance, etc. are all property kinds."@en,
        """Two examples using the QUDT Quantity Kind vocabulary, and the British Oceanographic Data Centre Parameter Usage Vocabulary.

<https://qudt.org/2.1/vocab/quantitykind/ActiveEnergy> a coswot:PropertyKind ;
  rdfs:label "Active Energy"@en ;
  rdfs:comment ""Active Energy" is the electrical energy transformable into some other form of energy."@en .

<http://vocab.nerc.ac.uk/collection/P01/current/CDTSZZ01/> a coswot:PropertyKind ;
  skos:prefLabel "Absolute temperature standard deviation of the atmosphere by dry bulb thermometer"@en .
"""@en ;
    skos:note "Concepts from existing code lists, vocabularies, and taxonomies, may be used as instances of coswot:PropertyKind."@en .

skos:Concept a owl:Class .

coswot:FeatureKind a owl:Class ;
    rdfs:label "Feature kind"@en ;
    rdfs:comment "A Feature Kind represents an archetype of real world entities, with common properties having the same value, and common states being the same. Feature Kinds can be used to populate product catalogs."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/features> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:FeatureKind ;
            owl:onProperty coswot:consistsOf ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:FeatureKind ;
            owl:onProperty skos:broader ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:FeatureKind ;
            owl:onProperty skos:narrower ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Nothing ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:PropertyKind ;
            owl:onProperty coswot:hasProperty ],
        skos:Concept,
        coswot:Feature .

coswot:OperationKind a owl:Class ;
    rdfs:label "Operation Kind"@en ;
    rdfs:comment "An operation kind describes an archetype of operation."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:OperationKind ;
            owl:onProperty skos:broader ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:OperationKind ;
            owl:onProperty skos:narrower ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Nothing ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:CommandKind ;
            owl:onProperty coswot:represents ],
        skos:Concept,
        coswot:Operation .

coswot:State a owl:Class ;
    rdfs:label "State"@en ;
    rdfs:comment "Identifiable conditions that features are or may be in, and that can be observed or controlled by devices. A state kind can apply to different features of interest, while a state of interest is specific to a feature of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/states> ;
    owl:disjointUnionOf ( coswot:StateOfInterest coswot:StateKind ) .

coswot:Property a owl:Class ;
    rdfs:label "Property"@en ;
    rdfs:comment "Identifiable qualities of features that can be observed or controlled by devices. A property kind can apply to different features of interest, while a property of interest is specific to a feature of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/properties> ;
    owl:disjointUnionOf ( coswot:PropertyOfInterest coswot:PropertyKind ) .

coswot:Service a owl:Class ;
    rdfs:label "Service"@en ;
    rdfs:comment "A coswot:Service is a digital representation of a function in a network, making it discoverable, registerable and remotely controllable in the network. While an instance of coswot:ServiceKind can apply to different functions, an instance of coswot:ServiceOfInterest is specific to a function of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:Function ;
            owl:onProperty coswot:represents ],
        coswot:ProcedureCollection ;
    owl:disjointUnionOf ( coswot:ServiceOfInterest coswot:ServiceKind ) ;
    skos:example "For example, a light switch can offer the service of remotely switching the lights in a home through mobile phone devices that are connected to the local network (ex:SwitchOnService). This \"remote switching\" service represents the ex:OnOffFunction."@en ;
    skos:note "Typically, a device connected to a given network offers one service of interest for each of its functions of interest."@en .

coswot:Command a owl:Class ;
    rdfs:label "Command"@en ;
    rdfs:comment "The lowest-level directives a function exposes to some network. Commands can target (OP coswot:targets and its sub-properties) features, properties, or states. An instance of coswot:CommandKind is independent of any device, while an instance of coswot:CommandOfInterest is specific to a device."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:Operation ;
            owl:onProperty [ owl:inverseOf coswot:represents ] ],
        coswot:Procedure ;
    owl:disjointUnionOf ( coswot:CommandOfInterest coswot:CommandKind ) ;
    skos:example "Observe property, control property, observe state, control state, invoke action, cancel action, turn on or off, change color, subscribe, publish, etc. are all commands."@en .

coswot:CommandKind a owl:Class ;
    rdfs:label "Command Kind"@en ;
    rdfs:comment "The lowest-level directives a function exposes to some network. Commands can target (OP coswot:targets and its sub-properties) features, properties, or states. An instance of coswot:CommandKind is independent of any device."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:CommandKind ;
            owl:onProperty skos:broader ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:CommandKind ;
            owl:onProperty skos:narrower ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Nothing ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:OperationKind ;
            owl:onProperty [ owl:inverseOf coswot:represents ] ],
        skos:Concept,
        coswot:Command ;
    skos:example "Observe property, control property, observe state, control state, invoke action, cancel action, turn on or off, change color, subscribe, publish, etc. are all commands."@en .

coswot:FunctionKind a owl:Class ;
    rdfs:label "Function Kind"@en ;
    rdfs:comment "Logical groups of commands that devices support to accomplish their tasks. Function kinds can target (OP coswot:targets and its sub-properties) feature kinds, property kinds, or state kinds. An instance of coswot:FunctionKind can apply to different devices."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:subClassOf [ owl:allValuesFrom coswot:CommandKind ;
            owl:onProperty coswot:hasCommand ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:FunctionKind ;
            owl:onProperty skos:broader ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:FunctionKind ;
            owl:onProperty skos:narrower ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Nothing ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:ServiceKind ;
            owl:onProperty [ owl:inverseOf coswot:represents ] ],
        skos:Concept,
        coswot:Function .

coswot:represents a owl:ObjectProperty ;
    rdfs:label "represents"@en ;
    rdfs:comment "Links a service to some function or function of interest it exposes to the network. Also links an operation to some command or command of interest it exposes to the network."@en ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( coswot:Service coswot:Operation ) ] ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/services_operations> ;
    rdfs:range [ a owl:Class ;
            owl:unionOf ( coswot:Function coswot:Command ) ] .

coswot:Device a owl:Class ;
    rdfs:label "Device"@en ;
    rdfs:comment "A tangible object designed to accomplish a particular task. In order to accomplish this task, the device performs one or more functions. An instance of coswot:DeviceOfInterest represents one specific real world entity, while an instance of coswot:DeviceKind represents an archetype of real world devices."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/devices> ;
    rdfs:subClassOf coswot:System ;
    owl:disjointUnionOf ( coswot:DeviceOfInterest coswot:DeviceKind ) ;
    skos:example "Examples of devices are a light switch, a temperature sensor, an energy meter, a water flow meter, and a laundry dryer. A laundry dryer is designed to dry laundry, and to accomplish this task it has a start/stop function."@en .

coswot:PropertyOfInterest a owl:Class ;
    rdfs:label "Property of Interest"@en ;
    rdfs:comment "Identifiable qualities of features of interest that can be observed or controlled by devices. An instance of coswot:PropertyOfInterest is specific to a feature of interest. It is inherent to and cannot exist without that feature of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/properties> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:PropertyKind ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:onProperty coswot:hasKind ;
            owl:someValuesFrom coswot:PropertyKind ],
        [ a owl:Restriction ;
            owl:cardinality 1 ;
            owl:onProperty coswot:isPropertyOfInterestOf ],
        coswot:Property ;
    skos:example """The air temperature of the atmosphere sample at a certain location and altitude, the received signal strength indicator of an wireless IoT connection, the luminance of the ETSI ATHENA amphitheatre.

<etsi_premises/athena#luminance> a coswot:PropertyOfInterest ;
  coswot:isPropertyOfInterestOf <etsi_premises/athena> ;
  coswot:hasKind coswot:Luminance ;
  rdfs:comment "The luminance of amphitheatre ATHENA"@en .
"""@en ;
    skos:note "A property of interest is the property of (OP coswot:isPropertyOfInterestOf) exactly one feature of interest."@en,
        "Per convention, the IRI of properties of interest should consist of the IRI of their feature of interest, suffixed with a fragment identifier #{P} where {P} refers to the name of the property kind."@en,
        "Properties of interest need not always be explicited. It depends on the use case. Typically, properties of interest are useful in applications, where the association between a feature of interest and a property kind needs to be identified and related to other properties of interest."@en .

coswot:System a owl:Class ;
    rdfs:label "System"@en ;
    rdfs:comment "The class of systems, i.e., systems virtually isolated from the environment, whose behaviour and interactions with the environment are modeled. Systems can be connected to other systems. Connected systems interact in some ways. Systems can also have subsystems. Properties of subsystems somehow contribute to the properties of the supersystem."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/systems> ;
    rdfs:subClassOf coswot:Feature .

coswot:FeatureOfInterest a owl:Class ;
    rdfs:label "Feature of interest"@en ;
    rdfs:comment "A feature of interest represents one specific real world entity from which a property or a state may be acted upon, such as observed and controlled."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/features> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:FeatureOfInterest ;
            owl:onProperty coswot:consistsOf ],
        [ a owl:Restriction ;
            owl:allValuesFrom coswot:FeatureKind ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:onProperty coswot:hasKind ;
            owl:someValuesFrom coswot:FeatureKind ],
        coswot:Feature .

coswot:Function a owl:Class ;
    rdfs:label "Function"@en ;
    rdfs:comment "Logical groups of commands that devices support to accomplish their tasks. Function can target (OP coswot:targets and its sub-properties) features, properties, or states. While an instance of coswot:FunctionKind can apply to different devices, an instance of coswot:FunctionOfInterest is specific to a device."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/functions_commands> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:Service ;
            owl:onProperty [ owl:inverseOf coswot:represents ] ],
        coswot:ProcedureCollection ;
    owl:disjointUnionOf ( coswot:FunctionOfInterest coswot:FunctionKind ) .

coswot:StateOfInterest a owl:Class ;
    rdfs:label "State of Interest"@en ;
    rdfs:comment "Identifiable conditions that features of interest are or may be in, and that can be observed or controlled by devices. An instance of coswot:StateOfInterest is specific to a feature of interest. It is inherent to and cannot exist without that feature of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/states> ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom coswot:StateKind ;
            owl:onProperty coswot:hasKind ],
        [ a owl:Restriction ;
            owl:onProperty coswot:hasKind ;
            owl:someValuesFrom coswot:StateKind ],
        [ a owl:Restriction ;
            owl:cardinality 1 ;
            owl:onProperty coswot:isStateOfInterestOf ],
        coswot:State ;
    skos:note "A state of interest is the state of (OP coswot:isStateOfInterestOf) exactly one feature of interest."@en,
        "Per convention, the IRI of states of interest should consist of the IRI of their feature of interest, suffixed with a fragment identifier #{S} where {S} refers to the name of the state."@en,
        "States of interest need not always be explicited. It depends on the use case. Typically, states of interest are useful in applications, where the association between a feature of interest and a state (i.e., the state of interest) needs to be identified and related to other states of interest."@en .

coswot:ProcedureExecution a owl:Class ;
    rdfs:label "Procedure Execution"@en ;
    rdfs:comment "Act of carrying out a Procedure. This class generalizes the Observation, Actuation, OperationExecution, and CommandExecution classes, and is not expected to be used directly."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/procedures> .

skos:broader a owl:ObjectProperty .

coswot:Feature a owl:Class ;
    rdfs:label "Feature"@en ;
    rdfs:comment "Real world entities from which a property or a state may be acted upon, such as observed and controlled. Features of interest represent specific real world entities, while feature kinds represent archetypes of features of interest."@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/features> ;
    owl:disjointUnionOf ( coswot:FeatureOfInterest coswot:FeatureKind ) .

coswot:hasKind a owl:ObjectProperty ;
    rdfs:label "has kind"@en ;
    rdfs:comment "links something of interest interest to its kind"@en ;
    rdfs:isDefinedBy <https://w3id.org/coswot/core/features> ;
    owl:propertyChainAxiom ( coswot:hasKind skos:broader ) .

