Disallow or encourage punning ?
related to #21 (closed)
The SAREF Pipeline does allow punning, provided the ontology is OWL 2 DL.
We could very well consider that it's useful to use punning for using the same name for an instance of feature kind, and a class of feature of interest, and ensure with axioms that these entities live well together.
In fact, this may be a solution to the open question: "shall I define an instance of feature kind, or a sub-class of feature of interest?"
Using instances of feature kind (or property, ...) is easier for the extension developer:
- you can directly link an instance of feature kind to the properties it has,
- you can directly link an instance of device kind to the feature kinds or properties it observes, ...
But from the application developer perspective, it's less natural to have to use saref:hasFeatureKind
than rdf:type
.
My intuition is that we can define some kind of equivalence between the use of the instance and the use of the class, using a common set of OWL axioms.
The initial suggestion is to define classes like this:
:Lamppost a owl:Class ;
rdfs:subClassOf saref:Device ;
owl:equivalentClass [ owl:unionOf (
[ a owl:Class ; owl:oneOf ( :Lamppost ) ] # itself
[ a owl:Class ; owl:onProperty saref:broader ; owl:hasValue :Lamppost ] # narrower kinds
[ a owl:Class ; owl:onProperty saref:hasFeatureKind ; owl:hasValue :Lamppost ] # things of this kind
) ] .
This way, it should be equivalent to be an instance of :Lamppost
, and to have :Lamppost
as device kind
equivalent here means:
if it is defined that :Lamppost saref:controls <light>
, then:
- for any instance of
:Lamppost
<lp>
it is possible to infer that<lp> saref:controls <light>
. - for any device of interest
<lp>
that has:Lamppost
as a kind, it is possible to infer that<lp> saref:controls <light>
.