I know that I will hurt some specialists of ontologies in speaking about inheritance of features.
But let me tell a story.
I’m quite enthusiast about using ontologies but also I was recently a newbie in the domain. I do quick progress :).
I had a very common need, but I was stuck on that for a while.
- I have a tree
- Nodes have direct ancestor (parent) and indirect ancestors
- hasParent is a property which links a node to another, with a direct in the tree
- hasAncestor is a property which links a node to another which somewhere between the node and the tree’s root
- hasAncestor must be transitive
- hasParent isn’t transitive
I would like to get the rule:
if a :hasParent b then a :hasAncestor b
I’ve checked a lot of documents and I don’t figure how to do it (directly in XML/RDF or interactively with Protégé).
The solution was simple and, so, not clearly visible; here in Turtle syntax:
:hasParent rdfs:subPropertyOf :hasAncestor.
My blindness was due to my inability to think that a subProperty doesn’t share his ‘features’ with his super-property.
:hasParent rdfs:subClassOf :hasAncestor
:hasAncestor rdf:type owl:TransitiveProperty
does not mean that :hasParent is also transitive.
Transitivity isn’t “inherited” down the property hierarchy, so it’s possible to have a non-transitive sub property of a transitive super property.
As soon as I have understood that fact, I searched where I had missed something.
First, I spontaneously think that a sub-property inherit behavior from his super-property.
Some good specialists -like Dave Reynolds- thinks that for OWL ontologies, and the underlying logic, using terms like “inheritance” can trip you up. Especially when it comes to property axioms. In the RDF/OWL way of thinking then a property corresponds to set of pairs of things that are related by the property. So saying
:hasParent rdfs:subPropertyOf :hasAncestor
means, and only means, that the set of pairs of things related by :hasParent is a subset of the set of pairs of things related by :hasAncestor.
We can’t assume that property characteristics are inherited – some are (e.g. functionality), some aren’t (e.g. transitivity and symmetry). And, surely, think of that in terms of inheritance is very confusing.
Some “features” of OWL are “inherited”. Others are not. For example:
(a subPropertyOf b) and (b inverseOf c) doesn't imply (a inverseOf c) (a subPropertyOf b) and (b equivalentPropertyOf c) doesn't imply (a equivalentPropertyOf c) (a subPropertyOf b) and (b type SymetricProperty) doesn't imply (a type SymProperty) (a subPropertyOf b) and (b type TransitiveProperty) doesn't imply (a type TransitiveProperty)
Where can we find that?
Aidan Hogan suggest that “if you want a non-technical means of introducing the features of OWL, examples using IF — THEN — (i.e., rules) will give a sound but incomplete picture. Studying the rules in OWL 2 RL/RDF is a great starting point for anyone wanting to learn a bit about what the *key* entailments of the OWL (2) features are (and without having to get into the formal semantics):
The OWL features mean more than what’s represented in these rules, but IF you can understand these rules, THEN you’ll have a working knowledge of OWL.”