Skip to content
saref.ttl 67.8 KiB
Newer Older
@prefix : <https://saref.etsi.org/core/> .
Maxime Lefrançois's avatar
Maxime Lefrançois committed
@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 foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix saref: <https://saref.etsi.org/core/> .
Maxime Lefrançois's avatar
Maxime Lefrançois committed
@prefix dcterms: <http://purl.org/dc/terms/> .
Maxime Lefrançois's avatar
Maxime Lefrançois committed
@prefix vann: <http://purl.org/vocab/vann/> .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

<https://saref.etsi.org/core/> a owl:Ontology ;
                          owl:versionInfo "v3.2.1" ;
                          owl:versionIRI <https://saref.etsi.org/core/v3.2.1/> ;
                          dcterms:issued "2023-12-31"^^xsd:date ;
                          dcterms:modified "2020-12-31"^^xsd:date ;
                          dcterms:title "SAREF: the Smart Applications REFerence ontology"@en ;
                          dcterms:publisher <https://www.etsi.org/> ;
                          dcterms:license <https://forge.etsi.org/etsi-software-license> ;
                          dcterms:creator <https://www.linkedin.com/in/lauradaniele> ;
                          dcterms:creator <http://www.garcia-castro.com/foaf.rdf#me> ;
                          dcterms:creator <https://w3id.org/people/mpoveda/> ;
                          dcterms:creator <http://maxime-lefrancois.info/me#> ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
                          dcterms:source <https://saref.etsi.org/sources/saref-core/> ;
                          rdfs:seeAlso <https://www.etsi.org/deliver/etsi_ts/103200_103299/103264/03.02.01_60/ts_103264v030201p.pdf> ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
                          vann:preferredNamespacePrefix "saref" ;
                          vann:preferredNamespaceUri "https://saref.etsi.org/core/" ;
                          dcterms:description "The Smart Applications REFerence ontology (SAREF) is intended to enable interoperability between solutions from different providers and among various activity sectors in the Internet of Things (IoT), thus contributing to the development of the global digital market."@en ;
                          rdfs:comment """Information about changes compared to version 3.1.1: 
- Added the saref:FeatureKind class
- Added the saref:PropertyOfInterest class
- Added the saref:StateOfInterest class
""" ;
                          rdfs:comment """Information about changes compared to version 2.1.1: 
 - Added the saref:FeatureOfInterest class and the properties used to relate it to saref:Measurement (saref:hasMeasurement and saref:isMeasurementOf) and to saref:Property (saref:hasProperty and saref:isPropertyOf).
 - Added the saref:measurementMadeBy property as inverse of saref:makesMeasurement.
 - The saref:relatesToProperty and saref:relatesToMeasurement properties are now inverse of each other.
 - The range of saref:hasValue, which was defined as xsd:float, has been removed to support other datatypes for measurements.
 - The range of datatype properties, which was defined as xsd:string, has been removed in order to support strings with language tags (rdf:langString). This affects saref:hasDescription, saref:hasManufacturer, saref:hasModel and saref:hasName, which now have implicitly a range of rdfs:Literal.
 - The saref:hasName property has been removed and the use of rdfs:label is recommended. 
 - The saref:hasDescription property has been deprecated and the use of rdfs:comment is recommended. 
 - Too restrictive restrictions have been removed and in some cases the ontology documentation has been updated to reflect this: a saref:Command having at most one saref:hasDescription; a saref:Task being accomplished by at least one saref:Device; a saref:Device having a typical consumption of only energy or power; a saref:Commodity being measured in units of measure; restrictions on the values of saref:accomplishes that only covered specific use cases; universal restrictions on the saref:actsUpon property have been changed to existential ones; restrictions on the commands that a saref:Function may have, since there could be others not included in the defined enumerations; restrictive documentation of saref:EventFunction and saref:SmokeSensor.
 - Bugs have been fixed: some devices (saref:DoorSwitch, saref:EnergyMeter, saref:LigthSwitch, saref:SmokeSensor, and saref:TemperatureSensor) were defined as subclass of a device and at the same time as consisting of such device; a saref:LightSwitch controls light and does not measure light, since it is an actuator; incorrect documentation of saref:OnState and saref:OffState.
 - The saref:BuildingRelated, saref:EnergyRelated and saref:FunctionRelated classes have been removed, since the different extensions already classify the device types.
 - The instances of the subclasses of saref:Command have been removed, since they represent examples.
 - The instances of saref:UnitOfMeasure have been moved to examples.
 - The classes related to the SAREF4ENER extension have been removed: saref:Generator, saref:Storage, saref:Load and saref:EnergyMeter.
 - Some instances of saref:Device have been moved to examples: saref:WashingMachine, saref:LightingDevice, saref:MicroRenewable, saref:Multimedia, and saref:Network.
 - Added domain and range axioms wherever the definition of a property unambiguously identifies the domain or the range of the property.
 - The OWL Time ontology is not imported anymore.
 - The documentation of some ontology terms has been updated for clarification.
 - Language tags have been added to all labels and comments.
""" ;
                          rdfs:comment """Information about changes compared to version 1.1.1:
Maxime Lefrançois's avatar
Maxime Lefrançois committed
 - The classes and properties related to how to represent devices in building spaces (such as the saref:BuildingSpace class,  saref:BuildingObject class and saref:isLocatedIn property) have been removed from SAREF and incorporated  into the SAREF4BLDG extension related to buildings, including the reuse of the W3C? WGS84 geo positioning vocabulary.
 - The saref:DeviceCategory and saref:FunctionCategory classes have been removed. Instead, the hierarchy of device categories has been implemented directly as subclasses of the saref:Device class.
 - The information specific for energy efficiency has been moved to the SAREF4ENER extension. For example, the saref:Profile class has been redefined to accommodate only the properties that are general enough for any type of profile, not only for energy and power. Details on how to specifically model a power profile can be found in the SAREF4ENER extension. 
 - The subclasses of the saref:Energy class  have been removed (i.e., Average Energy, Maximum Energy, Minimum Energy, Total Energy, HVAC Energy, Hot Water Energy and Lighting Energy).
 - The saref:Property class has been split into two classes (saref:Property and saref:Measurement), as it is done in the SAREF4ENVI extension, in order to properly accommodate the distinction between the concept of property (an observable quality of something) and the concept of measurement (a concrete value observed for a property).
 - Too restrictive cardinality restrictions have been revised, sometimes making them optional rather than mandatory (better to make properties mandatory in the extensions that specialize SAREF for a specific purpose, rather than restricting SAREF, whose purpose is more general). For example, definitions of units of measurement using an enumeration (owl:oneOf) were too restrictive because they did not allow using other units than those enumerated. Therefore, the individuals of each class are still there, but the owl:oneOf enumeration has been removed.
 - The saref:UnitOfMeasure subclasses use individuals from the OM ontology for unit of measures, but this is not the only solution. It has been clarified in the comments that the OM ontology is an example, but other ontologies can be used.
 - The global restrictions (rdfs:domain and rdfs:range) in object properties have been completely removed not to hinder interoperability. Object properties are now only restricted locally in the classes. 
 - The subclasses of saref:Task have been transormed in individuals.
 - The saref:hasTask property has been removed from the saref:Profile class to resolve an ambiguity with the saref:Task class.""" .

dcterms:issued a owl:AnnotationProperty .
dcterms:modified a owl:AnnotationProperty .
dcterms:source a owl:AnnotationProperty .
dcterms:creator a owl:AnnotationProperty .
dcterms:title a owl:AnnotationProperty .
dcterms:description a owl:AnnotationProperty .
dcterms:license a owl:AnnotationProperty .
dcterms:publisher a owl:AnnotationProperty .
vann:preferredNamespacePrefix a owl:AnnotationProperty .
vann:preferredNamespaceUri a owl:AnnotationProperty .

# ETSI TS 103264 Clause 5.2: Feature kinds and features of interest


saref:FeatureOfInterest a owl:Class ;
    rdfs:comment "A feature of interest represents any real world entity from which a property or a state may be acted upon, such as measured and controlled. An instance of saref:FeatureOfInterest represents one specific real world entity."@en ;
    rdfs:label "Feature of interest"@en .

saref:FeatureKind a owl:Class ;
    rdfs:comment "Feature kinds allow to describe kinds of features of interest, with common properties having the same value, and common states being the same. An instance of saref:FeatureKind represents an archetype of real world entities, for example to populate product catalogs."@en ;
    rdfs:label "Feature kinds"@en .

saref:hasNarrowerFeatureKind a owl:ObjectProperty , owl:TransitiveProperty ;
    rdfs:label "has narrower feature kind"@en ;
    rdfs:comment "links a feature kind to a narrower feature kind"@en ;
    owl:inverseOf saref:hasBroaderFeatureKind ;
    rdfs:domain saref:FeatureKind ;
    rdfs:range saref:FeatureKind .

saref:hasBroaderFeatureKind a owl:ObjectProperty , owl:TransitiveProperty ;
    rdfs:label "has broader feature kind"@en ;
    rdfs:comment "links a feature kind to a broader feature kind"@en ;
    owl:inverseOf saref:hasNarrowerFeatureKind ;
    rdfs:domain saref:FeatureKind ;
    rdfs:range saref:FeatureKind .
    
saref:hasFeatureKind a owl:ObjectProperty ;
    rdfs:label "has feature kind"@en ;
    rdfs:comment "links a feature of interest to its kind, a feature kind"@en ;
    rdfs:domain saref:FeatureOfInterest ;
    rdfs:range saref:FeatureKind ;
    owl:propertyChainAxiom ( saref:hasFeatureKind saref:hasBroaderFeatureKind ) .

saref:consistsOf a owl:ObjectProperty ;
    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:label "consists of"@en .

saref:FeatureKind rdfs:subClassOf [ 
    a owl:Restriction ; 
    owl:onProperty saref:consistsOf ; 
    owl:allValuesFrom saref:FeatureKind ] .

saref:FeatureOfInterest rdfs:subClassOf [ 
    a owl:Restriction ; 
    owl:onProperty saref:consistsOf ; 
    owl:allValuesFrom saref:FeatureOfInterest ] .

saref:hasDescription a owl:DatatypeProperty ;
    owl:deprecated true ; 
    rdfs:comment "DEPRECATED: The use of rdfs:comment is recommended instead."@en ;
    rdfs:comment "A relationship providing a description of an entity (e.g., device). The value is expected to be a string or a string with language tag."@en ;
    rdfs:label "has description"@en .

saref:hasManufacturer a owl:DatatypeProperty ;
    rdfs:comment "A relationship identifying the manufacturer of an entity (e.g., device). The value is expected to be a string or a string with language tag."@en ;
    rdfs:domain [ 
        a owl:Class ; 
        owl:unionOf ( saref:FeatureKind saref:FeatureOfInterest ) ] ;
    rdfs:label "has manufacturer"@en .

saref:hasModel a owl:DatatypeProperty ;
    rdfs:comment "A relationship identifying the model of an entity (e.g., device). The value is expected to be a string or a string with language tag."@en ;
    rdfs:domain [
        a owl:Class ;
        owl:unionOf ( saref:FeatureKind saref:FeatureOfInterest ) ] ;
    rdfs:label "has model"@en .


# ETSI TS 103264 Clause 5.3: Devices

saref:Device a owl:Class ;
    rdfs:subClassOf saref:FeatureOfInterest , s4syst:System ;
    # rdfs:subClassOf 
        # [ a owl:Restriction ;
        # owl:onProperty saref:consistsOf ;
        # owl:allValuesFrom saref:Device
        # ] , # deleted because a device can have something else than a device as a component
        # [ a owl:Restriction ;
        # owl:onProperty saref:controlsProperty ;
        # owl:allValuesFrom saref:Property
        # ] , # deleted because range of controlsProperty is saref:Property
        # [ a owl:Restriction ;
        # owl:onProperty saref:hasProfile ;
        # owl:allValuesFrom saref:Profile
        # ] , # deleted because range of hasProfile is saref:Profile
        # [ a owl:Restriction ;
        # owl:onProperty saref:hasState ;
        # owl:allValuesFrom saref:State
        # ] , # deleted because range of hasState is saref:State
        # [ a owl:Restriction ;
        # owl:onProperty saref:makesMeasurement ;
        # owl:allValuesFrom saref:Measurement
        # ] , # deleted because range
        # [ a owl:Restriction ;
        # owl:onProperty saref:measuresProperty ;
        # owl:allValuesFrom saref:Property
        # ] , # deleted because range
        # [ a owl:Restriction ;
        # owl:onProperty saref:offers ;
        # owl:allValuesFrom saref:Service
        # ] , # deleted because range
        # [ a owl:Restriction ;
        # owl:onProperty saref:accomplishes ;
        # owl:minCardinality 1 ;
        # ] , # proved unecessary
        # [ a owl:Restriction ;
        # owl:onProperty saref:hasFunction ;
        # owl:minCardinality 1 ;
        # ] , # proved unecessary
        # [ a owl:Restriction ;
        # owl:onProperty saref:hasManufacturer ;
        # owl:maxCardinality "1"^^xsd:nonNegativeInteger
        # ] , # relax for corner case use cases
        # [ a owl:Restriction ;
        # owl:onProperty saref:hasModel ;
        # owl:maxCardinality "1"^^xsd:nonNegativeInteger
        # ] ; # relax for corner case use cases
    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 saref:Device represents one specific real world entity."@en ;
    skos:example "For example, a washing machine is designed to wash (task) and to accomplish this task it performs a start and stop function."@en ;
    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 ;


saref:hasDeviceKind a owl:ObjectProperty ;
    rdfs:label "has device kind"@en ;
    rdfs:comment "links a device to its kind, a feature kind"@en ;
    rdfs:domain saref:Device ;
    rdfs:range saref:FeatureKind .

# Do deprecate (and move) the examples, keep only saref:Appliance, saref:Actuator, saref:Sensor, saref:Meter 
## actual examples of devices 

saref:Appliance a owl:Class ;
    rdfs:subClassOf saref:Device ;
    rdfs:comment "An electrical/mechanical machine that accomplish some household functions, such as cleaning or cooking"@en ;
    rdfs:label "Appliance"@en .

saref:Sensor ...

saref:Actuator ...

saref:Meter ...




saref:actsUpon a owl:ObjectProperty ;
    rdfs:comment "Links a device, function, command, or command execution, to the feature, property, or state, it acts upon."@en ;
    rdfs:domain [ a owl:Class ; owl:unionOf ( saref:Device saref:Function saref:Command saref:CommandExecution ) ] ;
    rdfs:range [ a owl:Class ; owl:unionOf ( saref:FeatureKind saref:FeatureOfInterest saref:Property saref:PropertyOfInterest saref:State saref:StateOfInterest ) ] ;
    rdfs:label "acts upon"@en .

saref:isActedUponBy a owl:ObjectProperty ;
    owl:inverseOf saref:actsUpon ;
    rdfs:comment "Links a feature, property, or state, to the device, function, command, or command execution that acts on it."@en ;
    rdfs:domain [ a owl:Class ; owl:unionOf ( saref:FeatureKind saref:FeatureOfInterest saref:Property saref:PropertyOfInterest saref:State saref:StateOfInterest ) ] ;
    rdfs:range [ a owl:Class ; owl:unionOf ( saref:Device saref:Function saref:Command saref:CommandExecution ) ] ;
    rdfs:label "is acted upon by"@en .

    saref:measures a owl:ObjectProperty ;
        rdfs:subPropertyOf saref:actsUpon ;
        rdfs:comment "Links a device, function, command, or command execution, to the feature, property, or state, it measures."@en ;
        rdfs:label "measures"@en .

    saref:isMeasuredBy a owl:ObjectProperty ;
        rdfs:subPropertyOf saref:isActedUponBy ;
        owl:inverseOf saref:measures ;
        rdfs:comment "Links a feature, property, or state, to the device, function, command, or command execution that measures it."@en ;
        rdfs:label "measures"@en .

    saref:observes a owl:ObjectProperty ;
        rdfs:subPropertyOf saref:actsUpon ;
        rdfs:comment "Links a device, function, command, or command execution, to the feature, property, or state, it observes."@en ;
        rdfs:label "observes"@en .

    saref:controls a owl:ObjectProperty ;
        rdfs:subPropertyOf saref:actsUpon ;
        rdfs:comment "Links a device, function, command, or command execution, to the feature, property, or state, it controls."@en ;
        rdfs:label "controls"@en .



saref:measuresProperty a owl:ObjectProperty ;
    owl:deprecated true ;
    skos:note "Will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A relationship specifying the property that can be measured by a certain device"@en ;
    rdfs:domain saref:Device ;
    rdfs:range saref:Property ;
    rdfs:label "measures property"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:isMeasuredByDevice a owl:ObjectProperty ;
    rdfs:comment "A relationship specifying the devices that can measure a certain property"@en ;
    rdfs:domain saref:Property ;
    rdfs:range saref:Device ;
    rdfs:label "is measured by device"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:isControlledByDevice a owl:ObjectProperty ;
    rdfs:comment "A relationship specifying the devices that can control a certain property"@en ;
    rdfs:domain saref:Property ;
    rdfs:range saref:Device ;
    rdfs:label "is controlled by device"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:controlsProperty a owl:ObjectProperty ;
    owl:deprecated true ;
    skos:note "Will be deleted in the next major revision of SAREF"@en ;
    rdfs:subPropertyOf saref:controls ;
    rdfs:comment "A relationship specifying the property that can be controlled by a certain device"@en ;
    rdfs:domain saref:Device ;
    rdfs:range saref:Property ;
    rdfs:label "controls property"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed


# ETSI TS 103264 Clause 5.4: Tasks
Maxime Lefrançois's avatar
Maxime Lefrançois committed

    rdfs:comment "The goal for which a device is designed, from a user perspective."@en ;
    skos:example "For example, a washing machine is designed for the task of washing."@en ;
    skos:note "Tasks can be accomplished by devices (saref:isAccomplishedBy)."@en ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:hasNarrowerTask a owl:ObjectProperty , owl:TransitiveProperty ;
    rdfs:label "has narrower task"@en ;
    rdfs:comment "links a task to a narrower task"@en ;
    owl:inverseOf saref:hasBroaderTask ;
    rdfs:domain saref:Task ;
    rdfs:range saref:Task .

saref:hasBroaderTask a owl:ObjectProperty , owl:TransitiveProperty ;
    rdfs:label "has broader task"@en ;
    rdfs:comment "links a task to a broader task"@en ;
    owl:inverseOf saref:hasNarrowerTask ;
    rdfs:domain saref:Task ;
    rdfs:range saref:Task .

saref:accomplishes a owl:ObjectProperty ;
    owl:inverseOf saref:isAccomplishedBy ;
    rdfs:comment "A relationship between a certain entity (e.g., a device) and the task it accomplishes."@en ;
    rdfs:range saref:Task ;
    rdfs:label "accomplishes"@en .

saref:isAccomplishedBy a owl:ObjectProperty ;
    rdfs:comment "A relationship identifying an entity (e.g., a device) that can accomplish a task."@en ;
    rdfs:domain saref:Task ;
    rdfs:label "is accomplished by"@en .


## first draft of a taxonomy
# we deprecate the individual tasks, and move them to a separate example document tasks.ttl
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:Cleaning a saref:Task ;
    owl:deprecated true ;
    skos:note "DEPRECATED: will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A type of task for which a device is designed"@en ;
    rdfs:label "Cleaning"@en .
saref:Comfort a saref:Task ;
    owl:deprecated true ;
    skos:note "DEPRECATED: will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A type of task for which a device is designed"@en ;
    rdfs:label "Comfort"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:Drying a saref:Task ;
    owl:deprecated true ;
    skos:note "DEPRECATED: will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A type of task for which a device is designed"@en ;
    rdfs:label "Drying"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:EnergyEfficiency a saref:Task ;
    owl:deprecated true ;
    skos:note "DEPRECATED: will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A type of task for which a device is designed"@en ;
    rdfs:label "EnergyEfficiency"@en .
saref:Entertainment a saref:Task ;
    owl:deprecated true ;
    skos:note "DEPRECATED: will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A type of task for which a device is designed"@en ;
    rdfs:label "Entertainment"@en .
saref:Lighting a saref:Task ;
    owl:deprecated true ;
    skos:note "DEPRECATED: will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A type of task for which a device is designed"@en ;
    rdfs:label "Lighting"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:MeterReading a saref:Task ;
    owl:deprecated true ;
    skos:note "DEPRECATED: will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A type of task for which a device is designed"@en ;
    rdfs:label "Meter reading"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:Safety a saref:Task ;
    owl:deprecated true ;
    skos:note "DEPRECATED: will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A type of task for which a device is designed"@en ;
    rdfs:label "Safety"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:Washing a saref:Task ;
    owl:deprecated true ;
    skos:note "DEPRECATED: will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A type of task for which a device is designed"@en ;
    rdfs:label "Washing"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:WellBeing a saref:Task ;
    owl:deprecated true ;
    skos:note "DEPRECATED: will be deleted in the next major revision of SAREF"@en ;
    rdfs:comment "A type of task for which a device is designed"@en ;
    rdfs:label "WellBeing"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

# ETSI TS 103264 Clause 5.5: Commodities
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:Commodity a owl:Class ;
    rdfs:comment "A marketable item which may be supplied without qualitative differentiation. "@en ;
    skos:note "SAREF refers to energy commodities such as electricity, gas, coal and oil."@en ;
    rdfs:label "Commodity"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:Electricity a owl:Class ;
    owl:deprecated true ;
    rdfs:comment "A type of energy commodity"@en ;
    rdfs:label "Electricity"@en .
saref:Gas a owl:Class ;
    owl:deprecated true ;
    rdfs:comment "A type of energy commodity"@en ;
    rdfs:label "Gas"@en .
    owl:deprecated true ;
    rdfs:comment "A type of commodity"@en ;
    rdfs:label "Coal"@en .


saref:Water a owl:Class ;
    owl:deprecated true ;
    rdfs:comment "A type of commodity"@en ;
    rdfs:label "Water"@en .

# the following entities wxill be introduced in the next major revision of SAREF

# saref:EnergyCommodity a owl:Class ;
#     rdfs:subClassOf saref:Commodity ;
#     rdfs:label "Energy Commodity"@en ;
#     rdfs:comment "The class of energy commodities"@en .

# saref:Electricity a saref:EnergyCommodity ;
#     rdfs:comment "The electricity energy commodity"@en ;
#     rdfs:label "Electricity"@en .

# saref:Gas a saref:EnergyCommodity ;
#     rdfs:comment "The gas energy commodity"@en ;
#     rdfs:label "Gas"@en .

# saref:Propane a saref:EnergyCommodity ;
#     saref:hasBroaderCommodity saref:Gas ;
#     rdfs:comment "The propane energy commodity"@en ;
#     rdfs:label "Propane"@en .

# saref:Coal a saref:EnergyCommodity ;
#     rdfs:comment "The coal energy commodity"@en ;
#     rdfs:label "Coal"@en .

# saref:NaturalResourceCommodity a owl:Class ;
#     rdfs:subClassOf saref:Commodity ;
#     rdfs:label "Natural Resource Commodity"@en ;
#     rdfs:comment "The class of natural resource commodities"@en .

# saref:Water a saref:NaturalResourceCommodity ;
#     rdfs:comment "The water natural resource commodity"@en ;
#     rdfs:label "Water"@en .


saref:isUsedFor a owl:ObjectProperty ;
    rdfs:comment "Links a feature kind, feature of interest, or device, to the commodity it is used for"@en ;
    rdfs:label "is used for"@en ;
    rdfs:domain [ a owl:Class ; owl:unionOf ( saref:FeatureKind saref:FeatureOfInterest saref:Device ) ] ;
    rdfs:range saref:Commodity .

# saref:Device rdfs:subClassOf [ a owl:Restriction ;
#     owl:onProperty saref:isUsedFor ;
#     owl:allValuesFrom saref:Commodity ] . # not needed because range of saref:isUsedFor

saref:consumes a owl:ObjectProperty ; 
    rdfs:label "consumes"@en ;
    rdfs:subPropertyOf saref:isUsedFor ;
    rdfs:comment "Links a feature kind, feature of interest, or device, to the commodity it consumes"@en .

saref:produces a owl:ObjectProperty ; 
    rdfs:label "consumes"@en ;
    rdfs:subPropertyOf saref:isUsedFor ;
    rdfs:comment "Links a feature kind, feature of interest, or device, to the commodity it produces"@en .

saref:stores a owl:ObjectProperty ; 
    rdfs:label "stores"@en ;
    rdfs:subPropertyOf saref:isUsedFor ;
    rdfs:comment "Links a feature kind, feature of interest, or device, to the commodity it stores"@en .


saref:hasNarrowerCommodity a owl:ObjectProperty , owl:TransitiveProperty ;
    rdfs:label "has narrower commodity"@en ;
    rdfs:comment "links a commodity to a narrower commodity"@en ;
    owl:inverseOf saref:hasBroaderCommodity ;
    rdfs:domain saref:Commodity ;
    rdfs:range saref:Commodity .

saref:hasBroaderCommodity a owl:ObjectProperty , owl:TransitiveProperty ;
    rdfs:label "has broader commodity"@en ;
    rdfs:comment "links a commodity to a broader commodity"@en ;
    owl:inverseOf saref:hasNarrowerCommodity ;
    rdfs:domain saref:Commodity ;
    rdfs:range saref:Commodity .


# ETSI TS 103264 Clause 5.6: Properties, properties of interest, and property values

# ETSI TS 103264 Clause 5.6.2: Properties

saref:FeatureKind a owl:Class ;
    rdfs:subClassOf [ a owl:Restriction ;
        owl:onProperty saref:hasProperty ;
        owl:allValuesFrom saref:Property 
    ] .

saref:Property a owl:Class ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:onProperty saref:isControlledByDevice ;
            owl:allValuesFrom saref:Device
        ] ,
        [ a owl:Restriction ;
            owl:onProperty saref:isMeasuredByDevice ;
            owl:allValuesFrom saref:Device
        ] ,
        [ a owl:Restriction ;
            owl:onProperty saref:isPropertyOf ;
            owl:allValuesFrom saref:FeatureOfInterest
        ] ,
        [ a owl:Restriction ;
            owl:onProperty saref:relatesToMeasurement ;
            owl:allValuesFrom saref:Measurement
        ] ;
    rdfs:comment "The class of properties refer to the identifiable qualities of features of interest that can be acted upon by devices, such as measured or controlled. A property can apply to different features of interest."@en ;
    skos:note "Until SAREF V3.1.1, there was an ambiguity between whether properties should be specific or generic to features of interest. This ambiguity has been solved in SAREF V3.2.1, and the new modeling will be enforced in the next major revision of SAREF."@en ;
    skos:note "Concepts from existing code lists, vocabularies, and taxonomies, may be used as instances of saref:Property."@en ;
    skos:example "Air temperature, pressure, luminance, etc. are all properties."@en ;
    skos:example """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 saref:Property ;
    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 saref:Property ;
    skos:prefLabel "Absolute temperature standard deviation of the atmosphere by dry bulb thermometer"@en .
"""@en ;
    rdfs:label "Property"@en .

saref:hasNarrowerProperty a owl:ObjectProperty , owl:TransitiveProperty ;
    rdfs:label "has narrower property"@en ;
    rdfs:comment "links a property to a narrower property"@en ;
    owl:inverseOf saref:hasBroaderProperty ;
    rdfs:domain saref:Property ;
    rdfs:range saref:Property .

saref:hasBroaderProperty a owl:ObjectProperty , owl:TransitiveProperty ;
    rdfs:label "has broader property"@en ;
    rdfs:comment "links a property to a broader property"@en ;
    owl:inverseOf saref:hasNarrowerProperty ;
    rdfs:domain saref:Property ;
    rdfs:range saref:Property .

saref:hasProperty a owl:ObjectProperty ;
    owl:inverseOf saref:isPropertyOf ;
    rdfs:comment "Links a feature kind or a feature of interest to one of its properties. Generically used to link feature kinds to properties, features of interest to properties, or features of interest to properties of interest."@en ;
    rdfs:domain [ a owl:Class ; owl:unionOf ( saref:FeatureKind saref:FeatureOfInterest ) ] ;
    rdfs:range [ a owl:Class ; owl:unionOf ( saref:Property saref:PropertyOfInterest ) ] ;
    rdfs:label "has property"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:isPropertyOf a owl:ObjectProperty ;
    rdfs:comment "Links a property to the feature kind or feature of interest it is a property of. Generically used to link properties to feature kinds, properties to features of interest, or properties of interest to features of interest."@en ;
    rdfs:domain [ a owl:Class ; owl:unionOf ( saref:Property saref:PropertyOfInterest ) ] ;
    rdfs:range [ a owl:Class ; owl:unionOf ( saref:FeatureKind saref:FeatureOfInterest ) ] ;
    rdfs:label "is property of"@en .

# ETSI TS 103264 Clause 5.6.3: Properties of interest

saref:PropertyOfInterest a owl:Class ;
    rdfs:subClassOf 
        # [ a owl:Restriction ;
        #     owl:onProperty saref:isControlledByDevice ;
        #     owl:allValuesFrom saref:Device
        # ] , # not needed, from range 
        # [ a owl:Restriction ;
        #     owl:onProperty saref:isMeasuredByDevice ;
        #     owl:allValuesFrom saref:Device
        # ] , # not needed, from range 
        [ a owl:Restriction ;
            owl:onProperty saref:isPropertyOf ;
            owl:allValuesFrom saref:FeatureOfInterest
        ] ,
        [ a owl:Restriction ;
            owl:onProperty saref:isPropertyOf ;
            owl:cardinality 1
        ] ;
        # [ a owl:Restriction ;
        #     owl:onProperty saref:relatesToMeasurement ;
        #     owl:allValuesFrom saref:Measurement
        # ] ; #  not needed, from range 
    rdfs:comment "The class of quantifiable qualities of features of interest that can be acted upon, such as measured or controlled. An instance of saref:PropertyOfInterest is specific to a feature of interest. It is inherent to and cannot exist without that feature of interest."@en ;
    skos:note "Until SAREF V3.1.1, there was an ambiguity between whether properties should be specific or generic to features of interest. This ambiguity has been solved in SAREF V3.2.1, and the new modeling will be enforced in SAREF V4.1.1."@en ;
    skos:note "A property of interest is the property of (OP saref:isPropertyOf) exactly one feature of interest."@en ;
    skos:note "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."@en ;
    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 saref:PropertyOfInterest ;
saref:isPropertyOf <etsi_premises/athena> ;
saref:hasKind saref:Luminance ;
rdfs:comment "The luminance of amphitheatre ATHENA"@en .
"""@en ;
    skos:note """Properties of interest need not always be explicited. It depends on the use case."""@en ;
    rdfs:label "Property of Interest"@en .
    
# ETSI TS 103264 Clause 5.6.4: Property values

saref:PropertyValue a owl:Class ;
    rdfs:label "Property Value"@en ;
    rdfs:comment "A value (which may have a unit of measurement) that is related to a property or property of interest (i.e., is not a measurement)."@en ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:onProperty saref:hasValue ;
            owl:cardinality 1 ] ,
        [ a owl:Restriction ;
            owl:onProperty saref:isMeasuredIn ;
            owl:maxCardinality 1 ] .

    
saref:hasValue a owl:DatatypeProperty ;
    rdfs:comment "A relationship defining the value of a certain property, e.g., energy or power. Note that, even if numeric values are expected to enable reasoning, measurement values could use other datatypes."@en ;
    rdfs:label "has value"@en .

saref:isMeasuredIn a owl:ObjectProperty ;
    rdfs:comment "A relationship identifying the unit of measure used for a certain entity."@en ;
    # rdfs:domain saref:Measurement ; # relaxed
    rdfs:range saref:UnitOfMeasure ;
    rdfs:label "is measured in"@en .

saref:UnitOfMeasure a owl:Class ;
    rdfs:comment "The unit of measure is a standard for measurement of a quantity, such as a Property."@en ;
    rdfs:label "Unit of measure"@en ;
    skos:example "For example,  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 called \"watt\"."@en ;
    skos:note "Our definition is based on the definition of unit of measure in the Ontology of units of Measure (OM)." .
saref:isValueOfProperty ...
saref:hasPropertyValue ...

# ETSI TS 103264 Clause 5.7: States and states of interest

saref:State a owl:Class ;
    rdfs:comment "States are identifiable conditions that a feature or device is or may be in, and that can be acted upon by devices, such as observed and controlled. A state can apply to different features of interest."@en ;
    rdfs:label "State"@en ;
    skos:example "A switch can be found in the saref:OnOffState, which is further specialized in saref:OnState and saref:OffState."@en ;
    skos:note "SAREF is not restricted to binary states such as the saref:OnOffState, but allows to define also n-ary states (see, for example, the saref:MultiLevelState class)."@en ;
    skos:note "Concepts from existing code lists, vocabularies, and taxonomies, may be used as instances of saref:State."@en ;


# Option 1 SKOS  Raul +2   Max +2  Cornelis +2  David +2

# Option 2 Just one pair of properties like below: Raul +1 Max +1 Cornelis +1 David +1
# saref:hasNarrower
# saref:hasBroader

# Option 3:  one pair of properties for every main concept, like below   Raul +0 Max -0 Cornelis 0  Option 0

saref:hasNarrowerState a owl:ObjectProperty , owl:TransitiveProperty ;
    rdfs:label "has narrower state"@en ;
    rdfs:comment "links a state to a narrower state"@en ;
    owl:inverseOf saref:hasBroaderState ;
    rdfs:domain saref:State ;
    rdfs:range saref:State .

saref:hasBroaderState a owl:ObjectProperty , owl:TransitiveProperty ;
    rdfs:label "has broader state"@en ;
    rdfs:comment "links a state to a broader state"@en ;
    owl:inverseOf saref:hasNarrowerState ;
    rdfs:domain saref:State ;
    rdfs:range saref:State .

saref:hasState a owl:ObjectProperty ;
    owl:inverseOf saref:isStateOf ;
    rdfs:comment "Links a feature kind or a feature of interest to one of its states. Generically used to link feature kinds to states, features of interest to states, or features of interest to states of interest."@en ;
    rdfs:domain [ a owl:Class ; owl:unionOf ( saref:FeatureKind saref:FeatureOfInterest ) ] ;
    rdfs:range [ a owl:Class ; owl:unionOf ( saref:State saref:StateOfInterest ) ] ;
saref:isStateOf a owl:ObjectProperty ;
    rdfs:comment "Links a state to the feature kind or feature of interest it is a state of. Generically used to link states to feature kinds, states to features of interest, or states of interest to features of interest."@en ;
    rdfs:domain [ a owl:Class ; owl:unionOf ( saref:State saref:StateOfInterest ) ] ;
    rdfs:range [ a owl:Class ; owl:unionOf ( saref:FeatureKind saref:FeatureOfInterest ) ] ;
    rdfs:label "is state of"@en .


# ETSI TS 103264 Clause 5.8: Commands and device commands

saref:Command a owl:Class ;
    rdfs:subClassOf [ a owl:Restriction ;
        owl:onProperty saref:actsUpon ;
        owl:allValuesFrom saref:State
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:isCommandOf ;
        owl:minQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onClass saref:Function
        ] ;
    rdfs:comment "A directive that a device must support to perform a certain function. A command may act upon a state, but does not necessarily act upon a state. For example, the ON command acts upon the ON/OFF state, but the GET command does not act upon any state, it simply gives a directive to retrieve a certain value. We propose here a list of commands that are relevant for the purpose of SAREF, but this list can be extended."@en ;
    rdfs:label "Command"@en .

saref:ToggleCommand a owl:Class ;
    rdfs:subClassOf saref:Command ,
        [ a owl:Restriction ;
            owl:onProperty saref:isCommandOf ;
            owl:allValuesFrom saref:OnOffFunction
        ] ;
    rdfs:comment "A type of command"@en ;
    rdfs:label "Toggle command"@en .

saref:GetCommand a owl:Class ;
    rdfs:subClassOf saref:Command ;
    rdfs:comment "A type of command"@en ;
    rdfs:label "Get command"@en .

# ETSI TS 103264 Clause 5.9: Functions and device functions

saref:Function a owl:Class ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:onProperty saref:hasCommand ;
            owl:minQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
            owl:onClass saref:Command
        ] ;
    rdfs:comment "The functionality necessary to accomplish the task for which a device is designed. A device can be designed to perform more than one function. Functions can be structured in categories (subclasses) that reflect different points of view, for example, considering the specific application area for which a function can be used (e.g., light, temperature, motion, heat, power, etc.), or the capability that a function can support (e.g., receive, reply, notify, etc.), and so forth. "@en ;
    rdfs:label "Function"@en .

saref:hasFunction a owl:ObjectProperty ;
    rdfs:comment "A relationship identifying the function of a device"@en ;
    rdfs:domain saref:Device ;
    rdfs:range saref:Function ;
    rdfs:label "has function"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:isCommandOf a owl:ObjectProperty ;
    rdfs:comment "A relationship between a command and a function."@en ;
    rdfs:domain saref:Command ;
    rdfs:range saref:Function ;
    rdfs:label "is command of"@en .

saref:hasCommand a owl:ObjectProperty ;
    owl:inverseOf saref:isCommandOf ;
    rdfs:comment "A relationship between a function and a command"@en ;
    rdfs:domain saref:Function ;
    rdfs:range saref:Command ;
    rdfs:label "has command"@en .


# ETSI TS 103264 Clause 5.10: Services and Operations

saref:Service a owl:Class ;
    rdfs:subClassOf [ a owl:Restriction ;
        owl:onProperty saref:isOfferedBy ;
        owl:minQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onClass saref:Device
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:represents ;
        owl:minQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onClass saref:Function
        ] ;
    rdfs:comment "A service is a representation of a function to a network that makes the function discoverable, registerable, remotely controllable by other devices in the network. A service can represent one or more functions. A Service is offered by a device that wants (a certain set of) its function(s) to be discoverable, registerable, remotely controllable by other devices in the network. A Service must specify the device that is offering the service and the function(s) to be represented."@en ;
    rdfs:label "Service"@en .

saref:offers a owl:ObjectProperty ;
    rdfs:comment "A relationship between a device and a service"@en ;
    rdfs:domain saref:Device ;
    rdfs:range saref:Service ;
    rdfs:label "offers"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:isOfferedBy a owl:ObjectProperty ;
    owl:inverseOf saref:offers ;
    rdfs:comment "A relationship between a service and a device that offers the service"@en ;
    rdfs:domain saref:Service ;
    rdfs:range saref:Device ;
    rdfs:label "is offered by"@en .

saref:represents a owl:ObjectProperty ;
    rdfs:comment "A relationship between a service and a function."@en ;
    rdfs:domain saref:Service ;
    rdfs:range saref:Function ;
    rdfs:label "represents"@en .

# ETSI TS 103264 Clause 5.11: Procedure executions

saref:FeatureOfInterest
    rdfs:subClassOf [ a owl:Restriction ;
        owl:onProperty saref:hasMeasurement ;
        owl:allValuesFrom saref:Measurement 
    ] .

saref:hasTimestamp a owl:DatatypeProperty ;
Maxime Lefrançois's avatar
Maxime Lefrançois committed
                   rdfs:comment "A relationship stating the timestamp of an entity (e.g. a measurement)."@en ;
                   rdfs:label "has timestamp"@en .

saref:Measurement a owl:Class ;
    rdfs:subClassOf [ a owl:Restriction ;
        owl:onProperty saref:isMeasurementOf ;
        owl:allValuesFrom saref:FeatureOfInterest
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:isMeasuredIn ;
        owl:allValuesFrom saref:UnitOfMeasure
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:relatesToProperty ;
        owl:allValuesFrom saref:Property
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:isMeasuredIn ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onClass saref:UnitOfMeasure
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:relatesToProperty ;
        owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ;
        owl:onClass saref:Property
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:hasTimestamp ;
        owl:allValuesFrom xsd:dateTime
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:hasValue ;
        owl:cardinality "1"^^xsd:nonNegativeInteger
        ] ;
    rdfs:comment "Represents the measured value made over a property. It is also linked to the unit of measure in which the value is expressed and the timestamp of the measurement."@en ;
    rdfs:label "Measurement"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:hasMeasurement a owl:ObjectProperty ;
    rdfs:comment "A relationship between a feature of interest and a measurement about it"@en ;
    rdfs:domain saref:FeatureOfInterest ;
    rdfs:range saref:Measurement ;
    rdfs:label "has measurement"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:isMeasurementOf a owl:ObjectProperty ;
    owl:inverseOf saref:hasMeasurement ;
    rdfs:comment "A relationship between a measurement and the feature of interest whose quality was measured"@en ;
    rdfs:domain saref:Measurement ;
    rdfs:range saref:FeatureOfInterest ;
    rdfs:label "isMeasurementOf"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:makesMeasurement a owl:ObjectProperty ;
    owl:inverseOf saref:measurementMadeBy ;
    rdfs:comment "A relation between a device and the measurements it makes. Such measurement will link together the value of the measurement, its unit of measure and the property to which it relates."@en ;
    rdfs:domain saref:Device ;
    rdfs:range saref:Measurement ;
    rdfs:label "makes measurement"@en .

saref:measurementMadeBy a owl:ObjectProperty ;
    rdfs:comment "A relation between a measurement and the device that made it."@en ;
    rdfs:domain saref:Measurement ;
    rdfs:range saref:Device ;
    rdfs:label "measurement made by"@en .

saref:relatesToMeasurement a owl:ObjectProperty ;
    rdfs:comment "A relationship between a property and the measurements it relates to"@en ;
    rdfs:domain saref:Property ;
    rdfs:range saref:Measurement ;
    rdfs:label "relates to measurement"@en .

saref:relatesToProperty a owl:ObjectProperty ;
    owl:inverseOf saref:relatesToMeasurement ;
    rdfs:comment "A relationship between a measurement and the property it relates to"@en ;
    rdfs:domain saref:Measurement ;
    rdfs:range saref:Property ;
    rdfs:label "relates to property"@en .


# ETSI TS 103264 Clause 5.12: Profiles

saref:Profile a owl:Class ;
    rdfs:subClassOf [ a owl:Restriction ;
        owl:onProperty saref:consistsOf ;
        owl:allValuesFrom saref:Profile
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:hasPrice ;
        owl:allValuesFrom saref:Price
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:hasTime ;
        owl:allValuesFrom saref:Time
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:isAbout ;
        owl:allValuesFrom [ a owl:Class ; owl:unionOf ( saref:Commodity saref:Property ) ]
        ] ;
    rdfs:comment "A specification associated to a device to collect information about a certain Property (e.g., Energy) for optimizing its usage in the home, office or building in which the device is located. This specification is about a certain Property (saref:isAbout), can be calculated over a time span (saref:hasTime) and can be associated to some costs (saref:hasPrice). An example is the Power Profile defined in the SAREF4ENER extension that can be associated to a device for optimizing the Energy efficiency in the home, office or building in which the device is located."@en ;
    rdfs:label "Profile"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:hasProfile a owl:ObjectProperty ;
    rdfs:comment "A relationship associating a profile to a certain device"@en ;
    rdfs:domain saref:Device ;
    rdfs:range saref:Profile ;
    rdfs:label "has profile"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:isAbout a owl:ObjectProperty ;
    rdfs:comment "A relationship identifying what an entity, such as a profile, is about"@en ;
    rdfs:label "isAbout"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed


Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:hasSensingRange a owl:ObjectProperty ;
    rdfs:comment "A relationship between a sensing function and a measurement identifying the range of a sensor detection"@en ;
    rdfs:domain saref:SensingFunction ;
    rdfs:range saref:Measurement ;
    rdfs:label "has sensing range"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:hasSensorType a owl:ObjectProperty ;
    rdfs:comment "A relationship identifying the sensing type of a sensor detection (i.e., Temperature, Occupancy, Humidity, Motion , Smoke, Pressure, etc.) "@en ;
    rdfs:domain saref:SensingFunction ;
    rdfs:range saref:Property ; 
    rdfs:label "has sensor type"@en .
    
saref:hasTypicalConsumption a owl:ObjectProperty ;
    rdfs:comment "A relationship identifying the typical (energy or power) consumption of a device"@en ;
    rdfs:label "has typical consumption"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:hasTime a owl:ObjectProperty ;
    rdfs:comment "A relationship to associate time information to an entity"@en ;
    rdfs:range saref:Time ;
    rdfs:label "has time"@en .

saref:Time a owl:Class ;
    owl:deprecated true ;
    rdfs:comment "A class that allows to specify the time concept."@en ;
    rdfs:label "Time"@en .


# Example related to sensors

saref:Sensor a owl:Class ;
    rdfs:subClassOf saref:Device ,
        [ a owl:Restriction ;
        owl:onProperty saref:hasFunction ;
        owl:someValuesFrom saref:SensingFunction
        ] ;
    rdfs:comment "A device that detects and responds to events or changes in the physical environment such as light, motion, or temperature changes. Further, a device of category saref:Sensor that performs a saref:SensingFunction."@en ;
    rdfs:label "Sensor"@en .

saref:SensingFunction a owl:Class ;
    rdfs:subClassOf saref:Function ,
        [ a owl:Restriction ;
        owl:onProperty saref:hasSensingRange ;
        owl:someValuesFrom saref:Measurement
        ] ,
        [ a owl:Restriction ;
        owl:onProperty saref:hasSensorType ;
        owl:allValuesFrom saref:Property
        ] ;
    rdfs:comment "A function that allows to transmit data from sensors, such as measurement values (e.g., temperature) or sensing data (e.g., occupancy)"@en ;
    rdfs:label "Sensing function"@en .

saref:GetSensingDataCommand a owl:Class ;
    rdfs:subClassOf saref:GetCommand ,
        [ a owl:Restriction ;
        owl:onProperty saref:isCommandOf ;
        owl:allValuesFrom saref:SensingFunction
        ] ;
    rdfs:comment "A type of get command"@en ;
    rdfs:label "Get sensing data command"@en .

# Example related to events

saref:EventFunction a owl:Class ;
    rdfs:subClassOf saref:Function ,
        [ a owl:Restriction ;
            owl:onProperty saref:hasThresholdMeasurement ;
            owl:minQualifiedCardinality "1"^^xsd:nonNegativeInteger ;
            owl:onClass saref:Measurement
        ] ;
    rdfs:comment "A function that allows to notify about some relevant activity; e.g., that a certain threshold value has been exceeded or that some object has moved."@en ;
    rdfs:label "Event function"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:hasThresholdMeasurement a owl:ObjectProperty ;
    rdfs:comment "A relationship associated with an event function to notify that a certain threshold measurement has been exceeded"@en ;
    rdfs:domain saref:EventFunction ;
    rdfs:range saref:Measurement ;
    rdfs:label "has threshold measurement"@en .


# Example related to meters

saref:Meter a owl:Class ;
    rdfs:subClassOf saref:Device ,
        [ a owl:Restriction ;
            owl:onProperty saref:hasFunction ;
            owl:someValuesFrom saref:MeteringFunction
        ] ;
    rdfs:comment "A device built to accurately detect and display a quantity in a form readable by a human being. Further, a device of category saref:Meter that performs a saref:MeteringFunction."@en ;
    rdfs:label "Meter"@en .
    
saref:MeteringFunction a owl:Class ;
    rdfs:subClassOf saref:Function ,
        [ a owl:Restriction ;
            owl:onProperty saref:hasMeterReading ;
            owl:allValuesFrom saref:Measurement
        ] ,
        [ a owl:Restriction ;
            owl:onProperty saref:hasMeterReadingType ;
            owl:allValuesFrom [ a owl:Class ; owl:unionOf ( saref:Commodity saref:Property ) ]
        ] ;
    rdfs:comment "A function that allows to get data from a meter, such as current meter reading or instantaneous demand"@en ;
    rdfs:label "Metering function"@en .
Maxime Lefrançois's avatar
Maxime Lefrançois committed

saref:hasMeterReading a owl:ObjectProperty ;
    rdfs:comment "A relationship between a metering function and the measurement of the reading"@en ;
    rdfs:domain saref:MeteringFunction ;
    rdfs:range saref:Measurement ;
    rdfs:label "has meter reading"@en .