我试图理解为什么我在Stardog和Protege推理之间获得不同的结果。
我在这两个工具中都有以下本体:
数
Class: Number
Number DisjointUnionOf OddNumber,EvenNumber
OddNumber
OddNumber subClassOf Number
EvenNumber
EvenNumber subClassOf Number
EvenNumber EquivalentTo hasValue {"2", "4", "6" }
hasValue的
DataProperty: hasValue
hasValue Range xsd:string
hasValue SubPropertyOf: owl:topDataProperty
hasValue Domain Number
Functional: hasValue
然后我创建两个名为num1和num2的实例,其定义如下:
NUM1
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应用reasoners时,Protege说num1是OddNumber和Number的实例,而Stardog说num1只是Number的一个实例。
我需要Stardog将num1归类为OddNumber。我是否为了实现这种行为而错过了一些限制?是否可以将Stardog配置为这样?
注意:默认情况下,我使用默认安装的Stardog(版本4.2.3)和Protege(版本5.1.0),并使用推理器Hermit 1.3.8。
感谢。
答案 0 :(得分:3)
Stardog没有返回结果的原因是你的本体(EvenNumber EquivalentTo hasValue {"2", "4", "6" }
)中有一个不受支持的公理,这个公理被忽略了。你的stardog.log文件中应该有一行说同样的内容。
有两种可能的解决方案:
Configure your Stardog server近似支持的公理,而不是忽略不支持的公理(通过reasoning.approximate=true
)。这不保证,但在这种情况下它可以工作。
用支持的公理替换这个公理; stardog rule可以很好地工作。
如需进一步了解其中任何一项,请随时在Stardog community的支持论坛上发帖。