Sparql 使用自旋规则推断匿名超类

Sparql 使用自旋规则推断匿名超类,sparql,rule,inference,inference-engine,spin-rdf,Sparql,Rule,Inference,Inference Engine,Spin Rdf,我正在TopBraidComposer中构建一个本体论,它有一个类层次结构和两个规则,它们自己可以很好地工作。在我的本体中,我是在类级别上工作的,所以我创建的所有定义都只与类相关,而不是与个人相关。现在我想推断子类定义如下: 我尝试了以下SPARQL查询,它似乎可以完成这项工作: 然后,我将上述查询作为旋转规则添加到owl:Thing类中,如下所示: 按enter键后,它将自动转换为以下形式: 它看起来很合理,但当我现在开始推断过程时,它不再在我添加测试规则之前终止。当我强制停止推理时,

我正在TopBraidComposer中构建一个本体论,它有一个类层次结构和两个规则,它们自己可以很好地工作。在我的本体中,我是在类级别上工作的,所以我创建的所有定义都只与类相关,而不是与个人相关。现在我想推断子类定义如下:

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

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

按enter键后,它将自动转换为以下形式:

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

如何推断SPIN中的匿名超类

编辑:


解决方法是将限制绑定到类。逻辑似乎是可行的,但它不像匿名超类那样出现;无论是在TBC还是在Protege中。

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

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

FILTER NOT EXISTS {
  ?test rdfs:subClassOf _:b0 .
} .
这将由TBC自动更正为

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

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

标签“spin”与“spin:A Formal Methods Technology”相关。这似乎不是您对旋转的使用。如果不是,请删除标签。我认为修正是因为您不能再使用空白节点,所以您可能需要将空白节点的限制键入构造和WHERE子句。