3

我试图理解为什么我在 Stardog 和 Protege 推理之间得到不同的结果。

我在这两个工具中都有以下本体:

数字

Class: Number

Number DisjointUnionOf OddNumber,EvenNumber

奇数

OddNumber subClassOf Number

偶数

EvenNumber subClassOf Number

EvenNumber EquivalentTo hasValue {"2", "4", "6" }

有值

DataProperty: hasValue

hasValue Range xsd:string

hasValue SubPropertyOf: owl:topDataProperty

hasValue Domain Number

Functional: hasValue

然后我创建了两个名为 num1 和 num2 的实例,它们的定义如下:

数字1

num1 hasValue "1"^^xsd:string

individual: num1

num1 Type Number

num2

num2 hasValue "2"^^xsd:string

individual: num2

num2 Type Number

在 Protege 和 Stardog 中应用推理时,两个推理器都表明 num2 是 EvenNumber 和 Number 的一个实例。当用 num1 应用推理器时,Protege 说 num1 是 OddNumber 和 Number 的一个实例,而 Stardog 说 num1 只是 Number 的一个实例。

我也需要 Stardog 将 num1 归类为 OddNumber。为了实现这种行为,我是否缺少一些限制?是否可以将 Stardog 配置为这样?

注意:我使用默认安装的 Stardog(4.2.3 版)和 Protege(5.1.0 版),默认情况下,推理机 Hermit 1.3.8。

谢谢。

4

1 回答 1

3

Stardog 没有返回任何结果的原因是您的本体 ( EvenNumber EquivalentTo hasValue {"2", "4", "6" }) 中有一个不受支持的公理,它被忽略了。您的 stardog.log 文件中应该有一行说明。

对此有两种可能的解决方案:

  1. 将您的 Stardog 服务器配置为近似受支持的公理,而不是仅仅忽略不受支持的公理(通过reasoning.approximate=true)。这不能保证,但在这种情况下它可以工作。

  2. 用支持的公理替换这个公理;stardog规则会很好地工作。

如需进一步帮助,请随时在Stardog 社区的支持论坛中发帖。

于 2017-04-12T19:21:45.830 回答