2

我正在 TopBraidComposer 中构建一个本体,它有一个类层次结构和几个单独工作的规则。在我的本体中,我在类级别上工作,所以我创建的所有定义都只与类有关,而不是与个人相关。现在我想推断像这样的子类定义:

匿名子类

我尝试了以下 SPARQL 查询,它似乎可以完成这项工作:

SPARQL 测试

然后我将所说的查询作为 SPIN 规则添加到 owl:Thing 类中,如下所示:

旋转规则 1

回车后,自动转换成如下形式:

旋转规则 2

它看起来很合理,但是当我现在开始推理过程时,它不会在我添加测试规则之前终止。当我强制停止推理时,我可以看到所需的三元组已多次添加到 Test 类中。

如何在 SPIN 中推断出匿名超类?

编辑:

一种解决方法是将限制绑定到类。然后逻辑似乎有效,但它不像匿名超类那样显示出来;在 TBC 和 Protege 中都没有。

4

1 回答 1

3

经过长时间的搜索,我发现解决方案非常简单:

对现有关系的简单检查将防止无限循环:

FILTER NOT EXISTS {
  ?test rdfs:subClassOf _:b0 .
} .

这将由 TBC 自动更正为

FILTER NOT EXISTS {
  ?test rdfs:subClassOf _:0 .
} .

就是这样,规则将起作用。

于 2014-03-28T11:44:44.263 回答