1

我正在尝试使用基数限制进行查询。查询看起来像

ClassA(roleA min 2 ClassB)

但这会返回一个空集。另一方面,当我进行查询时

ClassA(roleA一些ClassB)

它返回一些 A 类个体。当我知道某些 A 类个人肯定至少有两个角色时,为什么基数查询不起作用?

更具体地说,我有类TeamPlayerPosition,以及对象属性使用(与TeamsPlayers相关)和hasPosition(与PlayersPositions相关)。我正在尝试进行查询

团队雇员最少2 (球员hasPosition some { Striker**}**)

这应该返回有两个或更多前锋的球队,但显然因为 OWL 没有做出唯一名称假设,它返回一个空集。我试图声明我的一些个体是不同的,但是当我对不同个体执行查询时,它会导致 Protégé 崩溃。在没有不同个体的情况下运行查询时,Protégé 不会崩溃。

编辑:

错误信息 本体 XML 中显示的 Protege Striker 中的 Pellet 错误消息 Ontology XML 中显示的前锋

4

1 回答 1

1

这个问题中没有足够的信息来确定为什么你没有得到你正在寻找的结果,但是我们可以很好地重现这个场景来证明这是可以实现的。考虑一个包含三个类和一些个体的本体:

  • 玩家 {p1, p2}
  • 团队 {team1}
  • 位置{前锋}

和公理

  • p1≠p2
  • team1 雇用 p1
  • team1 雇用 p2
  • p1 hasPosition 前锋
  • p2 hasPosition 前锋

然后查询

  • 团队雇员最少2 名(球员hasPosition前锋)

返回个人 team1。(这也适用于“hasPosition some {Striker}”,但对于一个值,我认为value关键字更合适。)

结果在Protege

这是本体:

@prefix :      <http://stackoverflow.com/q/22688901/1281433/competitions#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://stackoverflow.com/q/22688901/1281433/competitions>
        a       owl:Ontology .

:Player  a      owl:Class .
:Position  a    owl:Class .
:Team   a       owl:Class .

:hasPosition  a  owl:ObjectProperty .

:Striker  a     owl:NamedIndividual , :Position .

:p1     a             owl:NamedIndividual , :Player ;
        :hasPosition  :Striker .

:p2     a             owl:NamedIndividual , :Player ;
        :hasPosition  :Striker .

[ a                    owl:AllDifferent ;
  owl:distinctMembers  ( :p1 :p2 )
] .

:team1  a         owl:NamedIndividual , :Team ;
        :employs  :p1 , :p2 .
于 2014-03-31T20:13:40.107 回答