2014-03-03 23 views
2

我在TopBraidComposer中构建了一个本体,它有一个类层次结构和一些独立工作的规则。在我的本体论中,我正在研究一个班级,所以我创建的所有定义只与班级有关,而不是个人。现在我想推断出这样的一个子类定义:使用SPIN规则推断匿名超类

anonymous subclass

我尝试以下SPARQL查询这似乎做的工作:

SPARQL test

然后我说所说查询作为SPIN治以猫头鹰:类事情是这样的:

SPIN rule 1

之后按Enter,它会自动转换为以下形式:

SPIN rule 2

它看起来合理,但是当我现在开始推理过程,它不会再当它没有之前我加入了测试规则终止。当我强行停止推理时,我可以看到期望的三元组已经多次添加到Test类中。

如何推断SPIN中的匿名超类?

编辑:

一种解决方法是结合限制类。这个逻辑似乎可行,但它并不像匿名超类所显示的那样;在TBC和Protege中都没有。

+0

'旋转'标签与'SPIN:形式方法技术'有关。这似乎并不是你使用SPIN的原因。如果不是,请删除标签。 – GoZoner

回答

3

经过长时间的搜寻后,我找到了解决办法非常简单:

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

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

将由TBC进行自动修正

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

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

+0

我认为这是因为你不能重复使用空白节点,所以你可能必须在CONSTRUCT和WHERE子句中输入带有空白节点的限制。 – casualcoder