6

我在我的本体中建模了以下内容:

Club 雇佣了一些 Player,Player hasNationality 一些 Nationality,Player hasNationalStatus 值 National_Player,Country 相当于 Nationality。

我希望本体推断:

如果玩家拥有某个国籍,并且玩家的国家状态值为 National_Player,则国家(与玩家拥有的国籍相同)雇用玩家。

举个例子:

{Steven_Gerrard} 具有 Nationality 值 England 并且 {Steven_Gerrard} 具有 NationalStatus 值 National_Player 因此,{England} 雇用 [Steven_Gerrard}。

有没有可能将这些知识添加到 Protege 中?

谢谢。

编辑:

错误信息:

错误 42 记录于 2014 年 4 月 1 日星期二 20:49:24 BST

OWLReasonerRuntimeException: Non-simple object property ' http://www.semanticweb.org/u1cjd/ontologies/2014/1/untitled-ontology-2#employs ' 被用作一个简单的

错误 43 记录于 2014 年 4 月 1 日星期二 20:49:24 BST ReasonerInternalException: tRole.cpp:243: assertion 'Ancestor.empty() && Descendant.empty()' 失败

4

1 回答 1

11

这是可能的,它实际上与我在回答您之前的问题(在 Protege 中向 OWL 本体中添加知识陈述)中提到的技术非常相似,并且该答案的结构几乎与我对最近答案的回答相同.semanticweb.com 问题,来自空白节点的 OWL 属性推断 - 建模

您只需要使用一些rolification和属性链公理。需要注意的一点是,现有数据具有上箭头的形式,所需的信息在下箭头中。

图表

雇员子属性hasNationality -1是不够的,因为您要确保玩家具有特定的国家身份。这是你需要的地方。您希望employees拥有hasNationality -1 • p的子属性链,其中p是一个特殊属性,仅将具有国家身份的玩家与他们自己相关联。你可以通过 rolification 做到这一点。只需声明一个新的对象属性R NationalPlayers并断言公理

  1. hasNationalStatusNational_Player EquivalentTo R_NationalPlayer some Self
  2. inverse (hasNationality) o R_NationalPlayer subPropertyOf使用

在描述逻辑语法中,这些将类似于:

  1. =hasNationalStatus.National_Player ≡ ∃R NationalPlayer自己
  2. hasNationality -1 • R NationalPlayer ⊑雇用

这在某些推理器中会起作用,但不幸的是,这确实使我们脱离了 OWL 2 DL 并完全进入了 OWL。在对此答案的评论中对此进行了详细讨论。正如更新问题中的错误消息所表明的那样,employs现在是一个非简单属性,并且用于应该只使用简单属性的地方。请参阅11.1 属性层次结构和简单对象属性表达式了解更多关于什么使属性简单或不简单的信息,以及11.2 公理闭包的限制了解更多关于属性可以出现在哪里的信息。

但是,听起来您正在使用支持 SWRL 规则的推理器,在这种情况下,您可以简单地添加规则:

hasNationality(?player,?country) ∧ hasNationalStatus(?player,National_Player) → 雇用(?country,?player)

于 2014-04-01T18:58:01.327 回答