使用Apache Jenas规则引擎“为所有人”

时间:2019-01-26 14:10:54

标签: jena jena-rules

我目前正在研究有关Apache Jena的一些小例子。我想展示的是通用量化。

比方说,我有每个颜色都不同的球。这些球存放在盒子里。现在,我要确定这些盒子是否仅包含颜色与混合时相同的球。

因此基本上可以遵循以下原则: SAME_COLOR =∃x∀y:{框a中的y→y = x的颜色}

我知道Jena可能无法做到这一点,可以将其转换为以下内容: SAME_COLOR =∃x¬∃y:{框a中的y→y的颜色!= x}

使用“不存在”可以使用Jena的“ NoValue”,但是,这(至少对我而言)不起作用,而且我不知道如何在Jena中翻译上述逻辑表示形式。有什么想法吗?

请参阅下面的代码,这是我唯一想到的方法:

(?box, ex:isA, ex:Box)
(?ball, ex:isIn, ?box)
(?ball, ex:hasColor, ?color)
(?ball2, ex:isIn, ?box)
(?ball2, ex:hasColor, ?color2)
NotEqual(?color, ?color2)
->
(?box, ex:hasSomeColors, "No").


(?box, ex:isA, ex:Box)
NoValue(?box, ex:hasSomeColors)
->
(?box, ex:hasSomeColors, "Yes").

具有混合内容的盒子现在同时具有值​​“是”和“否”。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,这个问题更加简化了。 问题是如何获取对象集合或不计数。规则引擎中的对象。 鉴于有res:subj ont:has res:obj_xxx(几个对象),如何在规则引擎中获得此值?

但是我刚刚找到了一个名为Remove()的基元,这可能会给我带来一些启发。