Using Property Chains to get inferred Knowledge in an OWL Ontology(Protege)
Asked Answered
H

1

9

I have modelled the following in my Ontology:

Club employs some Player, Player hasNationality some Nationality, Player hasNationalStatus value National_Player, Country is equivalent to Nationality.

I want the Ontology to infer that:

If a Player hasNationality some Nationality and, Player hasNationalStatus value National_Player then, Country(Same as the nationality the player has) employs Player.

As an example:

{Steven_Gerrard} hasNationality value England and, {Steven_Gerrard} hasNationalStatus value National_Player therefore, {England} employs [Steven_Gerrard}.

Is there a possible way to add this knowledge to Protege?

Thanks.

Edit:

Error Messages:

Error 42 Logged at Tue Apr 01 20:49:24 BST 2014

OWLReasonerRuntimeException: Non-simple object property 'http://www.semanticweb.org/u1cjd/ontologies/2014/1/untitled-ontology-2#employs' is used as a simple one

and

Error 43 Logged at Tue Apr 01 20:49:24 BST 2014 ReasonerInternalException: tRole.cpp:243: assertion 'Ancestor.empty() && Descendant.empty()' fails

Hartill answered 1/4, 2014 at 17:5 Comment(0)
L
13

This is possible, and it's actually very similar to the technique I mentioned in an answer to your previous question, Adding statements of knowledge to an OWL Ontology in Protege), and the structure of this answer is almost identical to my answer to a recent answers.semanticweb.com question, OWL property inference from blank node - modelling.

You just need to use some rolification and a property chain axiom. The point to note is that the existing data has the form of the upper arrows, and the desired information is in the lower arrows.

diagrm

It's not enough to give employs the subproperty hasNationality-1, because you want to ensure that the player has a particular national status. This is where you need rolification. You want employs to have a subproperty chain of hasNationality-1 • p, where p is a special property that only relates players with national status to themselves. You can do that with rolification. Just declare a new object property RNationalPlayers and assert the axioms

  1. hasNationalStatus value National_Player EquivalentTo R_NationalPlayer some Self
  2. inverse(hasNationality) o R_NationalPlayer subPropertyOf employs

In the description logic syntax, these would be something like:

  1. =hasNationalStatus.National_Player ≡ ∃RNationalPlayer.Self
  2. hasNationality-1 • RNationalPlayer ⊑ employs

This will work in some reasoners, but unfortunately, this does bring us out of OWL 2 DL and into OWL full. This was discussed in some detail in the comments on this answer. As the error message in the updated question indicates, employs is now a non-simple property, and used in a place where only simple properties should be used. See 11.1 Property Hierarchy and Simple Object Property Expressions for more about what makes a property simple or not, and 11.2 The Restrictions on the Axiom Closure for more about properties can appear where.

However, it sounds like you're using a reasoner that supports SWRL rules, in which case you could simply add the rule:

hasNationality(?player,?country) ∧ hasNationalStatus(?player,National_Player) → employs(?country,?player)

Loony answered 1/4, 2014 at 18:58 Comment(11)
So 1. is a new ObjectProperty?Hartill
Yes, the new property, R_NationalPlayer, has the special feature that it only relates individuals that have a national status of national player to themselves. It's called the rolification of the class (hasNationalStatus value NationalPlayer), and it's only really useful in helping to ensuring that a property chain "goes where you want it to".Loony
This gives two error message when I try to reason with FaCT++.I'll add them to the main post.Hartill
@Hartill It might bring you out of OWL DL into OWL Full.Loony
To make sure I have everything correct, I add R_NationalPlayer as a new role(ObjectProperty), "hasNationalStatus value National_Player EquivalentTo R_NationalPlayer some Self" as a General Class Axiom and " inverse (hasNationality) o R_NationalPlayer SubPropertyOf employs" as a chain of employs?Hartill
@Hartill You have it right, and the error message is correct: this construction brings you out of OWL 2 DL, and some reasoners will reject it (others might work with it). As a simpler alternative, you could use a SWRL rule. Many reasoners handle SWRL rules, and you won't need to do any rolification at all. I've updated my answer.Loony
And this statement would also go in General Class Axioms as well?Hartill
No, it's a SWRL rule, so you'd add it under the Rules view. This answer includes how to add it, if it's not already there (although you can add the view to an existing tab, you don't have to create a new tab). Then you'd type in the rule as hasNationality(?player,?country), hasNationalStatus(?player,National_Player) -> employs(?country,?player).Loony
Thanks, that's brilliant and much easier to understand for me as well, I can add a lot of other things I wanted to add now as well in a similar format.Hartill
@JoshuaTaylor: I apologize first as I am not sure if this's a morally correct way to notify you about my question, as you may have already seen it, but I am really hoping that you can kindly help me with almost the same issue but a bit more complex: #31457844Medievalist
@JoshuaTaylor this is a great question and answer. I tried to implement the OWL property chain solution but haven't succeeded yet. #44978928Lanceolate

© 2022 - 2024 — McMap. All rights reserved.