我在我的Ontology中建模了以下内容:
俱乐部雇用一些玩家,玩家拥有国籍一些国籍,玩家拥有国家地位值National_Player,国家相当于国籍。
我希望Ontology推断:
如果玩家拥有一些国籍,而玩家拥有国家状态值National_Player则国家(与玩家所拥有的国籍相同)使用玩家。
举个例子:
{Steven_Gerrard}具有国家价值英格兰和{Steven_Gerrard}具有NationalStatus值National_Player因此,{England}雇用[Steven_Gerrard}。
有没有办法将这些知识添加到Protege?
感谢。
编辑:
错误讯息:
错误42登录于2014年4月1日星期二20:49:24
OWLReasonerRuntimeException:非简单对象属性“http://www.semanticweb.org/u1cjd/ontologies/2014/1/untitled-ontology-2#employs”用作简单对象
和
错误43登录于2014年4月1日星期二20:49:24 BST ReasonerInternalException:tRole.cpp:243:断言'Ancestor.empty()&& Descendant.empty()'失败
答案 0 :(得分:9)
这是可能的,它实际上与我在上一个问题Adding statements of knowledge to an OWL Ontology in Protege)的答案中提到的技术非常相似,这个答案的结构几乎与我最近的答案相同。 answers.semanticweb.com问题,OWL property inference from blank node - modelling。
你只需要使用一些rolification和一个属性链公理。需要注意的是,现有数据的格式为上箭头,所需信息位于下箭头。
使用子属性 hasNationality -1 是不够的,因为你想确保玩家有一个特别的国家地位。这是您需要滚动的地方。您希望使用具有 hasNationality -1 •p 的子属性链,其中 p 是一个特殊属性,只关注具有国家地位的球员。你可以通过rol化来做到这一点。只需声明一个新的对象属性 R NationalPlayers 并断言公理
- hasNationalStatus 值 National_Player EquivalentTo R_NationalPlayer some self
- 反向(hasNationality) o R_NationalPlayer subPropertyOf 使用
醇>
在描述逻辑语法中,这些类似于:
- =hasNationalStatus.National_Player≡∃R NationalPlayer 。 Self
- hasNationality -1 •R NationalPlayer ⊑雇用
醇>
这将在一些推理者中起作用,但不幸的是,这确实将我们带出了OWL 2 DL并进入了OWL。在this answer的评论中对此进行了详细讨论。正如更新后的问题中的错误消息所示,使用现在是一个非简单属性,并且在只应使用简单属性的地方使用。有关使属性变得简单的更多信息,请参阅11.1 Property Hierarchy and Simple Object Property Expressions,有关属性的更多信息,请参见11.2 The Restrictions on the Axiom Closure。
但是,听起来您正在使用支持SWRL规则的推理器,在这种情况下您只需添加规则:
hasNationality(?player,?country)∧hasNationalStatus(?player,National_Player)→雇用(?country,?player)