[英]Reasoner does not check cardinalities and/or restrictions?
我试图创建可能最简单的本体,由两个类(A,B)和两个类之间的关系(R)组成。 我还想说明A的每个人必须与其他人有关系R.
:R rdf:type owl:ObjectProperty ;
rdfs:domain :A ;
rdfs:range :B .
:A rdf:type owl:Class ;
rdfs:subClassOf owl:Thing ,
[ rdf:type owl:Restriction ;
owl:onProperty :R ;
owl:someValuesFrom :B
] ;
owl:disjointWith :B .
:B rdf:type owl:Class ;
rdfs:subClassOf owl:Thing .
现在有些人:
:a1 rdf:type :A , owl:NamedIndividual ; :R :b1 .
:a2 rdf:type :A , owl:NamedIndividual .
:b1 rdf:type :B , owl:NamedIndividual .
但是理由并没有抱怨a2没有关系R.为什么?
(注意:我在Protégé创建了本体;我尝试过Fact ++和HermiT reasoners)
我还想说明A的每个人必须与其他人有关系R.
您已正确完成此操作。 当你继续断言
:a1 rdf:type :A , owl:NamedIndividual ; :R :b1 . :a2 rdf:type :A , owl:NamedIndividual . :b1 rdf:type :B , owl:NamedIndividual .
推理器将正确地推断出有一些值,让我们称之为X ,这样:a2:RX和那个X rdf:type:B 。 OWL推理使用开放世界假设 。 这意味着如果某些事情没有明确说明是真或假,那么它不会被认为是虚假或真实的,而是未知的 。 例如,你可以正确断言
人类⊑∃hasMother.Human
也就是说,每个人都有一些人作为母亲。 如果我这样说
DanielWebster∈人类
这就是我所说的一切; 我没有说不一致。 我们还不知道有些事情是真的。 我们知道,丹尼尔·韦伯斯特有一个母亲,但我们不知道她是谁。
如果你想要关闭世界,你可以做一些事情,但结果可能不是你想要的。 首先,您可以使B成为枚举类。 也就是说,您可以明确列出B的个体:
B≡{b1}
但这实际上不会导致不一致。 事实上,推理者将推断,因为a2必须与某些B相关,并且唯一的B是b1,所以a2与R相关联为b1。
你也可以使用同等的。
:猫头鹰:equivalentClass [rdf:type owl:Restriction; 猫头鹰:onProperty:R; owl:someValuesFrom owl:Thing];
您不需要为R编写域约束。等效的将处理它。 您仍然需要编写范围约束。
但是理由并没有抱怨a2没有关系R.为什么?
回答这个问题。 您需要了解开放世界的假设 。 语义网是开放世界的假设。 我在下面的评论中提到了一些研究论文,将一些概念或角色作为封闭世界的假设。 例如,在您的示例中,如果将R作为闭合谓词。 你会得到你问的错误。 这完全是一个理论上的想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.