我试图使用SPARQL Construct查询从现有的查询创建一个新的命名图 . 我查询的数据库包含 http://graph.com/old
作为现有的命名图 . 我使用 Jena TDB 作为数据库,通过 Jena Fuseki endpoints 访问 . 以下查询给出了一个错误:
CONSTRUCT
{
GRAPH <http://graph.com/new> {
?s ?p ?o
}
}
WHERE
{
GRAPH <http://graph.com/old> {
?s ?p ?o
}
}
如果我从CONSTRUCT块中删除图形语句,查询工作正常,但我想将三元组放入我指定的命名图形而不是默认图形 .
据我所知,SPARQL 1.1 section on CONSTRUCT没有说明构建命名图的任何内容 . 有没有办法做到这一点?
1 回答
就像当您有兴趣获取一组变量绑定一样使用SELECT查询时,使用CONSTRUCT查询您有兴趣获取模型 . 正如SELECT结果集中绑定的变量没有放入任何模型或持久的绑定集中一样,由CONSTRUCT构建的模型也不存储在任何地方 . 您想要使用SPARQL 1.1 INSERT . 更新功能在3 SPARQL 1.1 Update Language中描述 . 因此,您的更新请求可以写为:
但是,对于这种特殊情况,您可以使用3.2.3 COPY中描述的COPY操作 . COPY首先从目标图中删除所有数据,因此它可能不适用于您的实际情况(理解您提供的代码可能是一个最小的示例,而不一定是您尝试执行的实际更新) . 关于COPY标准说:
如果COPY不合适,那么ADD可能就是你要找的: