我正在尝试使用jena arq使用SPARQL Update查询更新本地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);
执行代码后,它表明查询已成功执行,但本地文件未更新。
答案 0 :(得分:3)
我认为您的混淆源于使用文件名作为图名:
INSERT DATA { GRAPH file:///path-to-file/file.n3
这不会将数据插入名为file.n3
的文件中,而是将其插入名为 file:///path-to-file/file.n3
的图形中。该图表将在graphstore创建它的任何位置,正如您设置的那样,它将是一个内存中的对象。为了保持更新,您需要使用管理持久性图形的图形库,例如使用TDB,或者需要在更新后将图形写入磁盘。我猜你想要后者。
编写RDF当前在Model
上使用API方法,Graph
是基础Jena 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" );
对象的外观,但具有其他便利功能,包括I / O.因此,您需要从图形存储中获取对图形的引用,将其作为模型包装,然后将其写出来。警告 - 未经测试的代码:
{{1}}
答案 1 :(得分:2)
您已创建商店并将文件上传到商店,然后通过商店执行更新。因此,您的商店已成功更新,但您尚未将商店内容导出回文件。