Java中可用的各种Datalog实现有哪些?

时间:2014-06-10 08:56:51

标签: java datalog

我正在寻找Datalog的Jave实现,它不会评估不必要的规则。我看着IRIS reasoner这似乎是最稳定的一个。

但是,它会评估所有规则,而不仅仅是使用的规则。 举个例子:

parent('homer', 'bart').
parent('abe', 'homer').
ancestor(?a, ?b) :- parent(?a, ?b).
ancestor(?a, ?b) :- ancestor(?a, ?c), ancestor(?c, ?b).

// query.. find all parent-child pairs.
?-parent(?x, ?y).

我发现即使从未使用过,IRIS也会计算关系ancestor

还有哪些其他可用于Java的实现?有没有人执行这种优化?

2 个答案:

答案 0 :(得分:0)

从IRIS网站引用OP链接到:

支持以下程序优化:   - 规则过滤(删除无助于回答的规则)    查询)   - 魔术集和侧身信息传递策略(SIPS)

答案 1 :(得分:0)

IRIS中有一个选项,

From here

import org.deri.iris.optimisations.rulefilter.RuleFilter;
import org.deri.iris.Configuration;

Configuration config = new Configuration();
config.programOptmimisers.add(new RuleFilter());

然而,我无法让它发挥作用。我在使用的基础JGraphT库中得到了“循环异常”。

最后,我最终编写了自己的规则过滤器。这并不困难。 我们需要确保我们只包含在导致最终关系的规则尾部引用的规则。