Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何执行apache jena tdb的多个添加操作_Java_Sparql_Jena_Semantic Web_Tdb - Fatal编程技术网

Java 如何执行apache jena tdb的多个添加操作

Java 如何执行apache jena tdb的多个添加操作,java,sparql,jena,semantic-web,tdb,Java,Sparql,Jena,Semantic Web,Tdb,我必须序列化DBpedia中1500个实体的一些特定属性(大约10个film的属性)。因此,对于每个实体,我运行sparql查询以检索它们,然后,对于每个结果集,我使用默认的ApacheJena tdb API将所有数据存储在tdb数据集中。我为每个属性创建一条语句,并使用以下代码添加它们: public void addSolution(QuerySolution currSolution, String subjectURI) { if(isWriteMode) {

我必须序列化DBpedia中1500个实体的一些特定属性(大约10个film的属性)。因此,对于每个实体,我运行sparql查询以检索它们,然后,对于每个结果集,我使用默认的ApacheJena tdb API将所有数据存储在tdb数据集中。我为每个属性创建一条语句,并使用以下代码添加它们:

public void addSolution(QuerySolution currSolution, String subjectURI) {
    if(isWriteMode) {
        Resource currResource = datasetModel.createResource(subjectURI);

        Property prop = datasetModel.createProperty(currSolution.getResource("?prop").toString());
        Statement stat = datasetModel.createStatement(currResource, prop, currSolution.get("?value").toString());
        datasetModel.add(stat);
    }
}
如何在单个数据集上执行多个添加操作?我应该使用什么策略

编辑:

我能够无错误地执行所有代码,但TDBFactory没有创建任何文件。为什么会发生这种情况?
我想我需要Joshua Taylor的帮助

听起来查询正在远程dbpedia端点上运行。假设这是正确的,你可以做几件事

首先:

其次,您可以通过使用
CONSTRUCT
获取模型来节省自己的工作量,而不必循环查看结果。然而,我不清楚
虚拟体系结构
到底发生了什么,但它可能很简单:

CONSTRUCT { <subjectURI> ?prop ?value }
WHERE
... existing query body ...
CONSTRUCT{prop?value}
哪里
... 现有查询正文。。。

我已经解决了我的问题,我想把我遇到的问题放在这里,因为任何人都会遇到同样的问题。 对于您执行的每个事务,您需要重新获取数据集模型,而不是对所有事务使用相同的数据集模型

因此,对于启动的每个事务,您需要在调用begin()之后获取数据集模型。
我希望这会有所帮助。

是的,它正在dbpedia端点上运行。我已经这么做了。检查每个结果集后提交,但在出现错误之前可以执行多少次提交?大小并不重要。问题是数据集正在关闭,有一个未完成的事务,即,
dataset.end()
在某个地方丢失。但是我什么时候需要这样做呢?在整个过程的最后?或者何时完成单个结果集?取决于对应用程序有意义的内容。如果出现问题,您是希望获得部分数据,还是希望返回到不添加任何内容的状态?对于每个结果集之后的前一次提交。我在尝试第一次提交时收到此错误:14/06/26 19:09:09警告impl.Log4jLoggerAdapter:不一致性:base.allocofset()=5532:allocofset=0第二次:线程“main”com.hp.hpl.jena.sparql.JenaTransactionException:不在事务中(位置:--mem--/)在此之后,例外情况不允许我继续。。。
CONSTRUCT { <subjectURI> ?prop ?value }
WHERE
... existing query body ...