1

我的问题基本上是如何使用 Tinkerpop 创建的 SailGraph 正确执行 SPARQL 更新。

DELETE { ?i_id_iri rdfs:label "BII-I-1" }
INSERT { ?i_id_iri rdfs:label "BII-I-4" }
WHERE
  { 
    ?investigation rdf:type obi:0000011.
    ?i_id_iri rdf:type iao:0000577.
    ?i_id_iri iao:0000219 ?investigation.
  } 

到目前为止,我有这个查询,在另一个文件的顶部添加了前缀,但它不起作用。我运行的代码如下

query = parser.parseUpdate(queryString, baseURI);
UpdateExpr expr = query.getUpdateExprs().get(0);
Dataset dataset = query.getDatasetMapping().get(expr);
GraphDatabase.getSailConnection().executeUpdate(expr, dataset, new EmptyBindingSet(), false);
4

1 回答 1

0

我对 Tinkerpop GraphSail 不是特别熟悉,但假设它正确地实现了 Sesame SAIL API,如果你将它包装在 中,执行 SPARQL 查询要容易得多SailRepository,如下所示:

 TinkerGraph graph = new TinkerGraph();
 Sail sail = new GraphSail(graph);    

 Repository rep = new SailRepository(sail);
 rep.initialize();

然后,您可以使用 Sesame 的Repository API,它比尝试直接在 SAIL 上进行操作(不是为此目的而设计的)更加用户友好。

例如,要打开连接并执行 SPARQL 更新,您可以:

RepositoryConnection conn = rep.getConnection();
try {
      String sparql = "INSERT {?s a <foo:example> . } WHERE {?s ?p ?o } ";

      Update update = conn.prepareUpdate(QueryLanguage.SPARQL, sparql);
      update.execute();
}
finally {
  conn.close();
}

有关 Sesame 的存储库 API 的更多详细信息,请参阅上面的链接,或查看Javadoc

于 2013-07-22T09:38:21.483 回答