I am trying to define two reverse object properties.
The object properties are :
hasChildhasParent
As it's obvious if JOHN hasParent ANNA, then ANNA hasChild JOHN.
This seems to be accomplished by using Protege's InverseOf but then if we assume ANNA is Happy,
The below DL Query:
hasChild only Happy
returns JOHN too. The reasoner explains that hasChild is inverseOf hasParent.
Can someone help me clear things up? Thanks in advance!
hasChild only Happyis a universal restriction without accompanying existential restriction. Under Open World assumption, these universal restrictions end up including all individuals defined, becausefor allincludes the cases where there is no filler for the property.To verify if this is the case, create a named classe defined as
hasChild only Happyand check which classes are equivalent to it. Most likely, you'll findowl:Thingin the results. therefore, all individuals will be answers to that query.To avoid this, add
hasChild some Happyto your query, so that there must be a filler before the inference can be drawn.However, notice that you want the parent to be happy. Maybe you meant to reverse the direction and say
hasParent only Happy?