类查询未检测到ProtégéOWL中的相应实例

时间:2017-03-22 08:41:51

标签: owl protege

我的本​​体中有MultiPetsOwner类,并且在当前设置中我希望能够检测到2个实例(Harry和Alex)。

但是当我为它运行DL查询“hasPet min 2 Animal”时,没有相应的实例。

与此同时,DL查询“hasPet some Animal”似乎有效 - 它为我提供了我期望的PetOwner类实例。

我做错了什么?如果“hasPet min 2 Animal”查询不正确,我应该使用什么来获取所有MultiPetsOwner s

我的.owl文件的内容可以在这里找到:http://pastebin.com/5xcriLRE

2 个答案:

答案 0 :(得分:3)

在OWL中没有唯一名称假设(UNA),这意味着具有不同URI的两个人不一定彼此不同。这意味着,标准的OWL推理器,即用于DL查询的推理器,如果没有本体中的信息,则无法回答您的查询。两只动物ab不是同一个人(通过猫头鹰:differentFrom):

你的本体论:

hasPet(x, a), Animal(a)
hasPet(x, b), Animal(b)

-> Q: hasPet min 2 Animal? 
-> A: NO RESULT

使用额外的OWL公理

hasPet(x, a), Animal(a)
hasPet(x, b), Animal(b)
a ≠ b

-> Q: hasPet min 2 Animal? 
-> A: x

替代方法:使用SPARQL作为查询语言

SELECT ?x WHERE {
  ?x :hasPet ?pet .
  ?pet a :Animal
} GROUP BY ?x 
  HAVING(COUNT(?pet) >= 2)

请注意,此查询可能不会考虑所需的推断。

答案 1 :(得分:2)

OWL正在开放世界假设中工作。在你的情况下,这意味着没有假设个人是不同的。你必须明确断言。在Protégé中,选择所有个体,在您的情况下选择所有动物,然后编辑 - > “让所有人都与众不同”。

如果您运行hasPet min 2 Animal,它会为您提供预期的结果,但您可以在类MultiPetsOwner的推断实例中运行推理器后看到它们。