任何方式推断Jena而不将所有数据加载到内存中?

时间:2012-05-11 05:57:18

标签: sparql jena jena-rules

我要推断出大量的RDF数据,我需要开发自己的推理规则。我的问题是,是否有任何方法可以做到这一点?    可以使用Jena规则和SPARQL吗? Jena规则和sparql查询是否必须将所有数据加载到内存中?    希望尽快得到答案,并提前感谢!

2 个答案:

答案 0 :(得分:3)

当所有数据都加载到内存中时,Jena inference engines肯定效果最佳。这是因为,虽然可以将推理引擎连接到任何Jena Model,包括TDB等持久性存储,但推理算法会进行许多调用来检查模型中是否存在特定三元组。当检查需要命中磁盘时,这只会效率低下。

如果您有相对简单的推理要求,您可以通过精心构建的SPARQL查询来表达您的蕴涵,在这种情况下,您可以直接查询TDB或SDB存储。它只取决于查询的复杂性。

如果三元组存储的内容相当稳定,或者可以分区为稳定的持久集和动态内存集,那么策略是预先计算推理闭包并将其存储在持久存储中。换句话说,经典的空间/时间权衡。有两种方法可以做到这一点:首先,使用带有内存存储的推理引擎,使用尽可能多的堆空间;第二次使用耶拿RIOT infer command-line script

对于大规模RDF推理,开源Jena平台的替代品是Clark& Co.的商业产品Stardog。 Parsia(我认为它有一个Jena模型连接器,但我还没有自己使用它。)

答案 1 :(得分:1)

除了Ian所说的并且根据您的规则,如果在您的情况下以流式方式实现所有推断的三元组是可行的,请查看RIOT的推断源代码,如果您需要更多RDFS,请考虑如何可能会添加对OWL子集的支持。您可以在此处找到源代码:

RIOT推断命令的方法也可以和MapReduce一起使用,你可以在这里找到一个例子: