对本地文件的SPARQL更新查询

对本地文件的SPARQL更新查询,sparql,jena,arq,Sparql,Jena,Arq,我正在尝试使用jena arq使用SPARQL更新查询更新本地rdf文件。下面是代码 GraphStore graphstore = GraphStoreFactory.create(); UpdateRequest req = UpdateFactory.create(); req.add(" PREFIX : myprefixuri INSERT DATA { GRAPH file:///path-to-file/file.n3 { :person :name 'xyz'. } } ")

我正在尝试使用jena arq使用SPARQL更新查询更新本地rdf文件。下面是代码

GraphStore graphstore = GraphStoreFactory.create();
UpdateRequest req = UpdateFactory.create();
req.add("  PREFIX : myprefixuri  INSERT DATA { GRAPH file:///path-to-file/file.n3 { :person :name 'xyz'. } } ");
UpdateAction.execute(req, graphstore); 

执行代码后,它表示查询已成功执行,但本地文件未更新。

您已经创建了一个存储并将文件上载到其中,然后在存储上执行更新。因此,您的存储已成功更新,但尚未将存储内容导出回文件

您已经创建了一个存储并将文件上载到其中,然后在存储上执行更新。因此,您的存储已成功更新,但尚未将存储内容导出回文件

我认为您的困惑源于使用文件名作为图形名:

INSERT DATA { GRAPH file:///path-to-file/file.n3
这不会将数据插入名为
file.n3的文件,而是将其插入名为
file:///path-to-file/file.n3
。该图形将位于graphstore创建它的任何位置,在您进行设置时,它将是内存中的对象。为了使更新持久化,您需要使用graphstore来管理持久化图形,例如使用,或者需要在更新后将图形写入磁盘。我猜你想要后者

编写RDF目前在
模型
上使用API方法,该模型是底层Jena
图形
对象的门面,但具有额外的便利函数,包括I/O。因此,您需要从图形存储中获取图形的引用,将其包装为模型,然后将其写出。警告-未测试代码:

Node graphName = Node.createURI( "file:///path-to-file/file.n3" );
Graph g = graphstore.getGraph( graphName );
Model m = ModelFactory.createModelForGraph( g );
g.write( new FileWriter("/path-to-file/file.n3"), "Turtle" );

我认为您的困惑源于使用文件名作为图形名:

INSERT DATA { GRAPH file:///path-to-file/file.n3
这不会将数据插入名为
file.n3的文件,而是将其插入名为
file:///path-to-file/file.n3
。该图形将位于graphstore创建它的任何位置,在您进行设置时,它将是内存中的对象。为了使更新持久化,您需要使用graphstore来管理持久化图形,例如使用,或者需要在更新后将图形写入磁盘。我猜你想要后者

编写RDF目前在
模型
上使用API方法,该模型是底层Jena
图形
对象的门面,但具有额外的便利函数,包括I/O。因此,您需要从图形存储中获取图形的引用,将其包装为模型,然后将其写出。警告-未测试代码:

Node graphName = Node.createURI( "file:///path-to-file/file.n3" );
Graph g = graphstore.getGraph( graphName );
Model m = ModelFactory.createModelForGraph( g );
g.write( new FileWriter("/path-to-file/file.n3"), "Turtle" );

感谢您的回复,但您能否指导我或任何指向执行sparql更新查询并回写到文件的完整代码的指针?我不是Jena专家,但我假设可以在Jena文档中找到答案。请参阅。感谢您的回复,但您能否指导我或任何指向执行sparql更新查询并回写到文件的完整代码的指针?我不是Jena专家,但我假设可以在Jena文档中找到答案。看,非常感谢。您是对的,我错过了将更新后的图表写回文件的部分。@user1876683如果这解决了您的问题,请不要忘记接受答案(单击计票下的勾号),非常感谢。您是对的,我缺少将更新后的图形写回文件的部分。@user1876683如果这解决了您的问题,请不要忘记接受答案(单击计票下的勾号)