我试图理解使用多个等效公理和使用这些公理的并集(即,析取)之间的区别。我已经建立了一个具有这种结构的玩具本体:
var run = require('browser-run');
var browser = run();
browser.pipe(process.stdout);
browser.end('console.log(location); window.close()');
使用名为
Class_A
- Class_A.1
Class_B
Class_C
Class_D
- Class_D.1
的对象属性。
has_part
使用等价公理定义:
Class_A.1
EquivalentTo
(Class_A and (has_part some Class_B)) or (Class_A and (has_part some Class_C))
使用两个等价公理定义:
Class_D1
EquivalentTo
Class_D and (has_part some Class_B)
使用HermiT 1.3.8.413,我执行DL查询
EquivalentTo
Class_D and (has_part some Class_C)
。
这会返回子类has_part some Class_B
,这是有道理的。
但是,我不明白为什么Class_D.1
没有被退回。我认为,因为Class_A.1
的等价公理是一个析取,所以它被Class_A.1
析取包含在内。
答案 0 :(得分:1)
让我尝试一个更简单的例子。我们不一定需要引入对象属性来说明这个概念。我们可以用任意命名的类替换'has_part some X'而不改变蕴涵,因为我们没有说任何关于X的内容。同样为了你的例子,我们可以在交集元素列表中省略'A'
让我们尝试:
,而不是你的A.1Prokaryote EquivalentTo Bacteria OR Archaea
选择一个生物学例子,因为我知道你很熟悉,但对于其他人来说,细菌,古菌和真核生物是生命的三个领域。术语“原核生物”是指人工但有时有用的细菌和古细菌群。
好的,现在我们尝试DL查询“细菌”。这不会将原核生物作为子类返回,因为我们知道实际上原核生物是细菌的超类。
希望映射到这个具体的例子有助于潜在的直觉。我个人发现UnionOf可能与抽象的例子有点奇怪的反直觉,但当用具体的例子代替时,它更加明显。
为了更正式的说明,我认为回应ASKW的评论就足够了,等价需要相互的subClassOf,但A subClassOf B or C
不需要A subClassOf B
。希望这会有所帮助。