我正在TopBraidComposer中构建一个本体,它具有一个类层次结构和一些可以自行运行的规则。在我的本体论中,我正在课堂上工作,所以我创建的所有定义只涉及类,而不是个人。现在我想推断出像这样的子类定义:
我尝试了以下SPARQL查询,它似乎可以完成这项工作:
然后我将所述查询作为SPIN规则添加到owl:Thing类中,如下所示:
按Enter键后,会自动转换为以下格式:
看起来很合理,但是当我现在开始推理过程时,它在我添加测试规则之前就不再终止了。当我强制停止推理时,我可以看到所需的三元组已多次添加到Test类中。
如何在SPIN中推断出一个匿名超类?
修改
解决方法是将限制绑定到类。然后逻辑似乎工作但它没有像匿名超类那样出现;无论是在TBC还是在Protege。
答案 0 :(得分:3)
经过长时间的搜索,我发现解决方案非常简单:
对现有关系的简单检查将阻止无限循环:
FILTER NOT EXISTS {
?test rdfs:subClassOf _:b0 .
} .
将由TBC自动更正为
FILTER NOT EXISTS {
?test rdfs:subClassOf _:0 .
} .
就是这样,规则会起作用。