使用SPIN规则推断匿名超类

时间:2014-03-03 11:31:54

标签: sparql rule inference inference-engine spin-rdf

我正在TopBraidComposer中构建一个本体,它具有一个类层次结构和一些可以自行运行的规则。在我的本体论中,我正在课堂上工作,所以我创建的所有定义只涉及类,而不是个人。现在我想推断出像这样的子类定义:

anonymous subclass

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

SPARQL test

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

SPIN rule 1

按Enter键后,会自动转换为以下格式:

SPIN rule 2

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

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

修改

解决方法是将限制绑定到类。然后逻辑似乎工作但它没有像匿名超类那样出现;无论是在TBC还是在Protege。

1 个答案:

答案 0 :(得分:3)

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

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

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

将由TBC自动更正为

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

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