@base <https://w3id.org/seas/DeviceOntology> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix pep: <../pep/> .
@prefix vs: <http://www.w3.org/2003/06/sw-vocab-status/ns#> .
@prefix seas: <.> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix saref: <../saref#> .
@prefix voaf: <http://purl.org/vocommons/voaf#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

dcterms:contributor
    a owl:AnnotationProperty .

dcterms:creator
    a owl:AnnotationProperty .

dcterms:description
    a owl:AnnotationProperty .

dcterms:issued
    a owl:AnnotationProperty .

dcterms:license
    a owl:AnnotationProperty .

dcterms:modified
    a owl:AnnotationProperty .

dcterms:title
    a owl:AnnotationProperty .

vann:preferredNamespacePrefix
    a owl:AnnotationProperty .

vann:preferredNamespaceUri
    a owl:AnnotationProperty .

voaf:Vocabulary
    a owl:Class .

vs:term_status
    a owl:AnnotationProperty .

foaf:Person
    a owl:Class .

foaf:name
    a owl:DatatypeProperty .

seas:Actuating
    a owl:Class ;
    rdfs:comment "Actuating is a procedure that has an impact on the physical world."@en ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "Actuating"@en ;
    rdfs:subClassOf pep:Procedure ;
    vs:term_status "testing" .

seas:Actuation
    a owl:Class ;
    rdfs:comment "An actuation is the execution of some actuating procedure by some actuator, and has an impact on the physical world."@en ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "Actuation"@en ;
    rdfs:subClassOf pep:ProcedureExecution, [
        owl:onProperty pep:madeBy ;
        owl:someValuesFrom seas:Actuator
    ], [
        owl:onProperty pep:usedProcedure ;
        owl:someValuesFrom seas:Actuating
    ], [
        owl:onProperty seas:actsOnProperty ;
        owl:someValuesFrom seas:Property
    ] ;
    owl:equivalentClass [
        owl:onProperty pep:usedProcedure ;
        owl:someValuesFrom seas:Actuating
    ] ;
    vs:term_status "testing" .

seas:Actuator
    a owl:Class ;
    rdfs:comment "An actuator is a device that implements some actuating procedure, and has thus an impact on the physical world."@en ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "Actuator"@en ;
    rdfs:subClassOf seas:Device, [
        owl:onProperty pep:implements ;
        owl:someValuesFrom seas:Actuating
    ] ;
    owl:equivalentClass [
        owl:onProperty pep:implements ;
        owl:someValuesFrom seas:Actuating
    ] ;
    vs:term_status "testing" .

seas:Device
    a owl:Class ;
    rdfs:comment """Device is a physical system designed to execute one or more procedures that invove the physical world.

A `seas:Device` is also a `pep:ProcedureExecutor` from the [Procedure Execution Ontology (PEP)](https://w3id.org/pep/). As such, it may implement procedures, and generate procedure executions.

If SEAS was to be aligned to the SAREF ontology, `seas:Device` would be more generic than `saref:Device`.

A `seas:Device` may also be aligned with the SSN `ssn:Device`."""@en ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "Device"@en ;
    rdfs:subClassOf pep:ProcedureExecutor ;
    vs:term_status "testing" .

seas:DeviceOntology
    dcterms:creator <http://www.maxime-lefrancois.info/me#> ;
    dcterms:description """The SEAS Device ontology defines `seas:Device` as physical system that are designed to execute one or more procedures that involve the physical world.


Figure below provides an overview of the concepts in this ontology:

[![Overview of the Device ontology](https://w3id.org/seas/device.png)](https://w3id.org/seas/device.png)

This ontology extends the [Procedure Execution Ontology (PEP)](https://w3id.org/pep/) and defines:

- `seas:Actuator`s implements `seas:Actuating` procedures and do `seas:Actuation`s;
- `seas:Sensor`s implements `seas:Sensing` procedures and do `seas:Observation`s.

Sub types of `seas:Actuator`, `seas:Actuating`, and `seas:Actuation`, may constrain the type of the value of the property. For instance ontology `seas:BooleanOntology` defines `seas:BooleanActuator`,  `seas:BooleanActuating`, and  `seas:BooleanActuation`, that constrain the acted upon property to be a `seas:BooleanProperty`. Other ontologies may define many more.

Similarly, sub types of `seas:Sensor`, `seas:Sensing`, and `seas:Observation`, may constrain the type of the value of the property. For instance ontology `seas:BooleanOntology` defines `seas:BooleanSensor`,  `seas:BooleanSensing`, and  `seas:BooleanObservation`, that constrain the observed property to be a `seas:BooleanProperty`. Other ontologies may define many more.


Alignments to the [SSN ontology](http://www.w3.org/ns/ssn/) is proposed in [SSNAlignment](https://w3id.org/seas/SSNAlignment).

"""@en ;
    dcterms:issued "2016-05-10"^^xsd:date ;
    dcterms:license <https://www.apache.org/licenses/LICENSE-2.0> ;
    dcterms:modified "2016-09-26"^^xsd:date ;
    dcterms:title "The SEAS Device ontology"@en ;
    vann:preferredNamespacePrefix "seas" ;
    vann:preferredNamespaceUri seas:DeviceOntology ;
    a voaf:Vocabulary, owl:Ontology ;
    owl:imports <../pep/>, seas:SystemOntology ;
    owl:priorVersion <DeviceOntology-1.0> ;
    owl:versionIRI <DeviceOntology-1.1> ;
    owl:versionInfo "v1.1" .

seas:Observation
    a owl:Class ;
    rdfs:comment "An observation is the execution of some sensing procedure by some sensor."@en ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "Observation"@en ;
    rdfs:subClassOf pep:ProcedureExecution, [
        owl:onProperty pep:usedProcedure ;
        owl:someValuesFrom seas:Sensing
    ], [
        owl:onProperty pep:madeBy ;
        owl:someValuesFrom seas:Sensor
    ], [
        owl:onProperty seas:observesProperty ;
        owl:someValuesFrom seas:Property
    ] ;
    owl:equivalentClass [
        owl:onProperty pep:usedProcedure ;
        owl:someValuesFrom seas:Sensing
    ] ;
    vs:term_status "testing" .

seas:Sensing
    a owl:Class ;
    rdfs:comment "Sensing is a procedure where stimuli from the physical world are used to produce outputs."@en ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "Sensing"@en ;
    rdfs:subClassOf pep:Procedure ;
    vs:term_status "testing" .

seas:Sensor
    a owl:Class ;
    rdfs:comment "A sensor is a device that implements some sensing procedure, and hence uses stimuli from the physical world to produce outputs."@en ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "Sensor"@en ;
    rdfs:subClassOf seas:Device, [
        owl:onProperty pep:implements ;
        owl:someValuesFrom seas:Sensing
    ] ;
    owl:equivalentClass [
        owl:onProperty pep:implements ;
        owl:someValuesFrom seas:Sensing
    ] ;
    vs:term_status "testing" .

seas:actsOn
    a owl:ObjectProperty ;
    rdfs:comment """Links an actuating, actuator, or actuation, to the feature of interest a property of which it acts on.

If `x` acts on a property, then it also acts on the feature of interest of this property:

```
seas:actsOnProperty < seas:actsOn o seas:isPropertyOf .
```

If a acting acts on a feature of interest, then any actuator that implements this acting also acts on this feature of interest, and any actuation that used this acting also acts on this feature of interest. Furthermore, if a actuator acts on a feature of interest, then any actuation executed by this actuator also acts on this feature of interest:

```
seas:actsOn < pep:usedProcedure o seas:actsOn .
seas:actsOn < pep:usedProcedure o seas:actsOn .
seas:actsOn < pep:madeBy o seas:actsOn .
```
"""@en ;
    rdfs:domain [
        owl:unionOf (seas:Actuating
            seas:Actuator
            seas:Actuation
        )
    ] ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "acts on"@en ;
    rdfs:range seas:FeatureOfInterest ;
    vs:term_status "testing" .

seas:actsOnProperty
    a owl:ObjectProperty ;
    rdfs:comment """Links an actuating, actuator, or actuation, to the property it acts on.

If a acting acts on a property, then any actuator that implements this acting also acts on this property, and any actuation that used this acting also acts on this property. Furthermore, if a actuator acts on a property, then any actuation executed by this actuator also acts on this property:

```
seas:actsOnProperty < pep:implements o seas:actsOnProperty .
seas:actsOnProperty < pep:usedProcedure o seas:actsOnProperty .
seas:actsOnProperty < pep:madeBy o seas:actsOnProperty .
```"""@en ;
    rdfs:domain [
        owl:unionOf (seas:Actuating
            seas:Actuator
            seas:Actuation
        )
    ] ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "acts on property"@en ;
    rdfs:range seas:Property ;
    owl:propertyChainAxiom (pep:implements
        seas:actsOnProperty
    ), (pep:madeBy
        seas:actsOnProperty
    ), (pep:usedProcedure
        seas:actsOnProperty
    ) ;
    vs:term_status "testing" .

seas:observes
    a owl:ObjectProperty ;
    rdfs:comment """Links a sensing, sensor, or observation, to the feature of interest a property of which it observes.

If `x` observes a property, then it also observes the feature of interest of this property:

```
seas:observes < seas:observesProperty o seas:isPropertyOf .
```

If a sensing observes a feature of interest, then any sensor that implements this sensing also observes this feature of interest, and any observation that used this sensing also observes this feature of interest. Furthermore, if a sensor observes a feature of interest, then any observation executed by this sensor also observes this feature of interest:

```
seas:observes < pep:usedProcedure o seas:observes .
seas:observes < pep:usedProcedure o seas:observes .
seas:observes < pep:madeBy o seas:observes .
```
  
"""@en ;
    rdfs:domain [
        owl:unionOf (seas:Sensing
            seas:Sensor
            seas:Observation
        )
    ] ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "observes"@en ;
    rdfs:range seas:FeatureOfInterest ;
    owl:propertyChainAxiom (pep:usedProcedure
        seas:observes
    ), (pep:madeBy
        seas:observes
    ), (pep:implements
        seas:observes
    ) ;
    vs:term_status "testing" .

seas:observesProperty
    a owl:ObjectProperty ;
    rdfs:comment """Links a sensing, sensor, or observation, to a property it observes.

If a sensing observes a property, then any sensor that implements this sensing also observes this property, and any observation that used this sensing also observes this property. Furthermore, if a sensor observes a property, then any observation executed by this sensor also observes this property:

```
seas:observesProperty < pep:implements o seas:observesProperty .
seas:observesProperty < pep:usedProcedure o seas:observesProperty .
seas:observesProperty < pep:madeBy o seas:observesProperty .
```
"""@en ;
    rdfs:domain [
        owl:unionOf (seas:Sensing
            seas:Sensor
            seas:Observation
        )
    ] ;
    rdfs:isDefinedBy seas:DeviceOntology ;
    rdfs:label "observes property"@en ;
    rdfs:range seas:Property ;
    owl:propertyChainAxiom (pep:usedProcedure
        seas:observesProperty
    ), (pep:implements
        seas:observesProperty
    ), (pep:madeBy
        seas:observesProperty
    ) ;
    vs:term_status "testing" .

