Protégé中的OWL中的基数DL查询

时间:2014-03-31 11:54:24

标签: owl protege description-logic dlquery

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

  

ClassA (roleA min 2 ClassB)

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

  

ClassA (roleA some ClassB)

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

更具体地说,我有 Team Player Position 这两个类,对象属性使用 (与团队玩家相关)和 hasPosition (关联玩家职位 >)。我正在尝试进行查询

  

团队使用 min 2(播放器 hasPosition 部分 { Striker **} **)

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

编辑:

Protege中来自Pellet的错误消息 Error Message 在Ontology XML中显示的前锋 Striker shown in Ontology XML

1 个答案:

答案 0 :(得分:1)

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

  • 玩家{p1,p2}
  • 团队{team1}
  • 职位{Striker}

和公理

  • p1≠p2
  • team1使用p1
  • team1使用p2
  • p1 hasPosition Striker
  • p2 hasPosition Striker

然后查询

  • 团队使用 min 2(玩家 hasPosition Striker)

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

results in 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 .