2

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

4

2 回答 2

3

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

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

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

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

于 2012-05-11T07:54:44.300 回答
1

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

RIOT 的 infer 命令的方法也可以与 MapReduce 一起使用,您可以在此处找到示例:

于 2012-05-12T08:13:49.257 回答