我试图创建可能最简单的本体,包括两个类(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没有亲属关系。为什么?
(注:我在Protégé创建了本体;我尝试了FacT++和HermiT推理器)
发布于 2015-04-24 21:28:20
我还想指出,每个A的个体都必须与其他个体有一个关系R。
你做得对。当你继续断言
A1RDF:类型:A,owl:NamedIndividual;:R :b1。A2 rdf:类型:A,owl:NamedIndividual。B1 rdf:类型:B,owl:NamedIndividual。
推理者将正确地推断出有一些值,让我们称之为X,这样:a2 :R 和X rdf:type :B。OWL推理使用开放世界假设。这意味着,如果某物没有明确声明为真或假,则不假定为假或真,而是未知。例如,你可以正确地断言
⊑/T1587-1993工业用商品
也就是说,每个人都有一些人作为母亲。如果我这么说
∈/T1581-1988商品商品价格比较产品DanielWebster∈人
这就是我要说的,我并没有产生任何矛盾。有些事情是真的,我们还不知道。我们知道DanielWebster有一个母亲,但我们不知道她是谁。
如果你想关闭这个世界,你可以做一些事情,但结果可能不是你想要的。首先,可以使B成为枚举类。也就是说,您可以显式列出B的个人:
≡/T1581-1988准商品转制机B≡{≡}
但这实际上不会导致不一致。事实上,推理者将推断,既然a2必须与某些B相关,而唯一的B是b1,则a2是由R关联到b1的。
发布于 2015-04-24 17:46:55
您也可以使用等效的。
::owl:等效类rdf:类型owl:限制;owl:onProperty :R;owl:someValuesFrom owl:Thing;
您不需要为R编写域约束,等价物会处理它。您仍然需要编写范围约束。
但推理者并没有抱怨a2没有亲属关系。为什么?
为了回答这个问题。你需要理解开放世界假设。语义网是开放世界的假设。有一些研究论文,我在下面的评论中已经说过,提出了一些概念或角色作为封闭的世界假设。例如,在您的示例中,如果将R设为闭包谓词。你会得到你要求的错误。这完全是一个理论上的想法。
https://stackoverflow.com/questions/29850672
复制相似问题