Sparql 有没有办法不用将所有数据加载到内存中就用Jena进行推理?

Sparql 有没有办法不用将所有数据加载到内存中就用Jena进行推理?,sparql,jena,jena-rules,Sparql,Jena,Jena Rules,我有大量的RDF数据需要推断,我需要开发自己的推断规则。我的问题是,是否有任何方法可以做到这一点? 使用Jena规则和SPARQL这样做可以吗?Jena规则和sparql查询是否必须将所有数据加载到内存中? 希望尽快得到答案,提前感谢 当所有数据都加载到内存中时,Jena肯定工作得最好。这是因为,尽管可以将推理机连接到任何Jena模型,包括持久性存储(例如),但推理算法会多次调用以检查模型中是否存在特定的三元组。当检查需要点击磁盘时,这会变得效率低下 如果您有相对简单的推理需求,那么您可能能够通

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

当所有数据都加载到内存中时,Jena肯定工作得最好。这是因为,尽管可以将推理机连接到任何Jena模型,包括持久性存储(例如),但推理算法会多次调用以检查模型中是否存在特定的三元组。当检查需要点击磁盘时,这会变得效率低下

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

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

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

当所有数据都加载到内存中时,Jena肯定工作得最好。这是因为,尽管可以将推理机连接到任何Jena模型,包括持久性存储(例如),但推理算法会多次调用以检查模型中是否存在特定的三元组。当检查需要点击磁盘时,这会变得效率低下

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

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


对于大规模的RDF推断,开源Jena平台的另一种选择是Clark&Parsia的商业产品,我相信它有一个Jena模型连接器,但我自己没有使用过。

除了Ian所说的,根据您的规则,如果在您的案例中,以流式方式实现所有推断出的三元组是可行的,那么请查看RIOT的推断源代码,如果您需要更多的RDF,请考虑如何添加对OWL子集的支持。您可以在此处找到源代码:

RIOT的推断命令方法也可用于MapReduce,您可以在此处找到一个示例:


除了Ian所说的之外,根据您的规则,如果在您的案例中以流式方式实现所有推断的三元组是可行的,那么请查看RIOT的推断源代码,如果您需要更多的RDF,请考虑如何添加对OWL子集的支持。您可以在此处找到源代码:

RIOT的推断命令方法也可用于MapReduce,您可以在此处找到一个示例:


由于我的英语很差,我希望我能说清楚。如果我使用Jena从TDB加载模型,这是否意味着该模型的所有数据都将加载到内存中?如果我使用Jena执行'select'sparql查询,例如:QueryExecution qexec=QueryExecutionFactory.createsparqlQueryString,dataset;哪个参数是数据集,这是否意味着不会将所有数据加载到内存中?因为我的英语很差,我希望我能说清楚。如果我使用Jena从TDB加载模型,这是否意味着该模型的所有数据都将加载到内存中?如果我使用Jena执行“选择”sparql查询,例如:QueryExecution qexec=QueryExecutionFactory.createsparqlQueryString,dataset;哪个参数是数据集,这是否意味着不会将所有数据加载到内存中?这是否意味着可以使用Jena进行推断,而不将所有数据加载到内存中?我的rdf数据是skos,因此RIOT无法使用它进行推断。开始时,数据会随着更多数据的添加而频繁更改,但之后,就我所记得的,没有一个内置的Jena推理机在任何情况下都有SKOS推理。我想
你的意思是skos的及物性:更广泛,等等?在这种情况下,您将不得不编写一些自定义代码——至少是自定义推理规则。但是,如果您主要关心的是能够流式处理SKOS处理,那么您最好构建自己的流式代码来处理输入,并构建一个SKOS概念索引,以便您自己增量完成传递闭包。这是否意味着可以使用Jena来推断,而无需将所有数据加载到内存中?我的rdf数据是SKOS,所以暴动不能用它来推断。一开始,数据会随着更多数据的加入而频繁变化,但之后,数据会相对稳定。据我所记得的,任何内置的Jena推理机在任何情况下都没有SKOS推理。我想你指的是skos的及物性:更广泛,等等?在这种情况下,您将不得不编写一些自定义代码——至少是自定义推理规则。但是,如果您主要关心的是能够流式处理SKOS处理,那么您最好构建自己的流式代码来处理输入,并构建一个SKOS概念索引,以便您自己增量地完成传递闭包。