Class 查询未检测到 Protégé 中的相应实例 OWL
Class query not detecting the corresponding instances in Protégé OWL
我的 ontology 中有 MultiPetsOwner class,根据当前的设置,我希望为它检测到 2 个实例(Harry 和 Alex)。
但是当我运行对其进行DL查询"hasPet min 2 Animal"时,没有对应的实例。
同时,DL 查询 "hasPet some Animal" 似乎有效 - 它给了我预期的 PetOwner class 个实例。
我做错了什么?如果 "hasPet min 2 Animal" 查询不正确,我应该使用什么来获取所有 MultiPetsOwners?
我的 .owl 文件的内容可以在这里找到:http://pastebin.com/5xcriLRE
OWL 正在开放世界假设中工作。在您的情况下,这意味着不假设个体是不同的。你必须明确地断言它。在 Protégé 中,这是在选择所有个体时完成的,在您的情况下是所有动物,然后编辑 -> "Make all individuals different".
如果你 运行 hasPet min 2 Animal
它会给你预期的结果,但你可以在 运行 推理 [=17] 的推断实例后看到它们=] MultiPetsOwner
.
OWL 中没有唯一名称假设 (UNA),这意味着具有不同 URI 的两个人不一定彼此不同。这意味着,一个标准的 OWL 推理机,即用于 DL 查询的推理机,如果没有您的 ontology 中的信息就无法回答您的查询,例如两只动物 a
和 b
不是同一个人(通过 owl:differentFrom):
你的ontology:
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)
请注意,此查询可能不会考虑所需的推论。
我的 ontology 中有 MultiPetsOwner class,根据当前的设置,我希望为它检测到 2 个实例(Harry 和 Alex)。
但是当我运行对其进行DL查询"hasPet min 2 Animal"时,没有对应的实例。
同时,DL 查询 "hasPet some Animal" 似乎有效 - 它给了我预期的 PetOwner class 个实例。
我做错了什么?如果 "hasPet min 2 Animal" 查询不正确,我应该使用什么来获取所有 MultiPetsOwners?
我的 .owl 文件的内容可以在这里找到:http://pastebin.com/5xcriLRE
OWL 正在开放世界假设中工作。在您的情况下,这意味着不假设个体是不同的。你必须明确地断言它。在 Protégé 中,这是在选择所有个体时完成的,在您的情况下是所有动物,然后编辑 -> "Make all individuals different".
如果你 运行 hasPet min 2 Animal
它会给你预期的结果,但你可以在 运行 推理 [=17] 的推断实例后看到它们=] MultiPetsOwner
.
OWL 中没有唯一名称假设 (UNA),这意味着具有不同 URI 的两个人不一定彼此不同。这意味着,一个标准的 OWL 推理机,即用于 DL 查询的推理机,如果没有您的 ontology 中的信息就无法回答您的查询,例如两只动物 a
和 b
不是同一个人(通过 owl:differentFrom):
你的ontology:
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)
请注意,此查询可能不会考虑所需的推论。