【问题标题】:SPARQL Update query over local files对本地文件的 SPARQL 更新查询
【发布时间】:2012-12-04 18:40:39
【问题描述】:

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

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

【问题讨论】:

    标签: sparql jena arq


    【解决方案1】:

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

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

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

    写出 RDF 目前在 Model 上使用 API 方法,这是底层 Jena Graph 对象的外观,但具有额外的便利功能,包括 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" );
    

    【讨论】:

    • 谢谢一百万。你是对的,我错过了将更新的图表写回文件的部分。
    • @user1876683 如果这解决了您的问题,请不要忘记接受答案(点击投票计数下方的勾号)
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回复,但您能否指导我或任何指向执行 sparql 更新查询并写回文件的完整代码的指针?
    • 我不是耶拿专家,但我认为可以在耶拿文档中找到答案。见jena.apache.org/documentation
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多