0

我尝试在多个类之间使用相同的对象属性,但我收到一个警告,即相同的对象属性已被多次设置,如下所示,您能告诉我这是什么问题以及如何解决吗?这是否会限制以后的推理(即由于多次设置相同的对象属性而使推理器感到困惑)?

在此处输入图像描述

谢谢

4

1 回答 1

1

与评论相反,在多个类之间使用相同的对象属性实际上是非常有问题的。

您在可视化中看不到的是,在 RDF/OWL 中,关系箭头的起点建模为rdfs:domain,箭头的目标点建模为rdfs:range

OWL 类的语义是它是一组个体,rdfs:domainrdfs:range分别指定关系的域和范围。也就是说,它们在谓词位置中指定了三元组中允许值的集合,分别是三元组的对象位置。

如果你用 RDF Turtle 表达你的例子,它看起来像这样:

:hasPart rdfs:domain :ClassA, :ClassB;
         rdfs:range :ClassB, :ClassC, :ClassD.

这会导致多个问题:

路口

多个域的语义,分别是范围,是这些类的交集,而不是联合!

即使我们忽略 和 之间的关系:ClassB:ClassD这种方法:hasPart也只有同时属于 C 类和 D 类实例的个体才允许使用!

例如,假设 A 类是“汽车”,B 类是“轮胎”,C 类是“马达”。现在你想说汽车可以有轮胎和马达,但你实际指定的是汽车只能同时有马达和轮胎!

不需要但允许的使用

如果你解决了第一个问题但指定并集而不是交集,那么在序列化的 RDF 中会非常混乱,因为你需要大量的三元组来表示 OWL 限制,例如并集。但即使您这样做,您现在也可以将 A 类的一个实例与 D 类的一个实例连接起来,这在图像中是不允许的。

解决方案

解决方案很简单,只需将这些关系分开,例如分为:hasB、:hasC 和:hasD,尽管在实际场景中您可能会找到更合适的命名方案,其中通常不使用“has”前缀。例如,在 DBpedia 中,城市所在国家/地区的属性使用dbo:country而不是表示dbo:hasCountry

于 2020-08-13T12:13:51.117 回答