1

我正在尝试使用 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); 

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

4

2 回答 2

3

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

INSERT DATA { GRAPH file:///path-to-file/file.n3

这不会将数据插入到名为的文件file.n3中,而是将其插入到名为 file:///path-to-file/file.n3的图中。该图形将位于图形存储创建它的任何位置,正如您设置的那样,它将是一个内存对象。为了使您的更新持续存在,您需要使用管理持久图的图形存储,例如使用TDB,或者您需要在更新后将您的图写入磁盘。我猜你想要后者。

写出 RDF 目前在 a 上使用 API 方法Model,这是底层 JenaGraph对象的外观,但具有额外的便利功能,包括 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" );
于 2012-12-05T08:22:15.943 回答
2

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

于 2012-12-04T21:50:58.523 回答