就像当您有兴趣获取一组变量绑定时使用 SELECT 查询一样,使用 CONSTRUCT 查询您有兴趣获取一个模型。就像绑定在 SELECT 结果集中的变量不会放入任何模型或持久绑定集一样,由 CONSTRUCT 构建的模型也不会存储在任何地方。您想使用 SPARQL 1.1 INSERT。更新特性在3 SPARQL 1.1 更新语言中描述。因此,您的更新请求可以写成:
INSERT {
GRAPH <http://graph.com/new> {
?s ?p ?o
}
}
WHERE {
GRAPH <http://graph.com/old> {
?s ?p ?o
}
}
但是,对于这种特殊情况,您可能可以使用3.2.3 COPY中描述的 COPY 操作。COPY 首先从目标图中删除所有数据,因此它可能不适用于您的实际情况(请理解您提供的代码可能是一个最小示例,不一定是您尝试执行的实际更新)。关于 COPY 标准说:
COPY 操作是将输入图中的所有数据插入到目标图中的快捷方式。输入图表中的数据不受影响,但目标图表中的数据(如果有)在插入之前被删除。
COPY ( SILENT )? ( ( GRAPH )? IRIref_from | DEFAULT) TO ( ( GRAPH )? IRIref_to | DEFAULT )
操作类似于:
DROP SILENT (GRAPH IRIref_to | DEFAULT);
INSERT { ( GRAPH IRIref_to )? { ?s ?p ?o } } WHERE { ( GRAPH IRIref_from )? { ?s ?p ?o } }
COPY 和 DROP/INSERT 组合之间的区别在于,如果使用 COPY 将图形复制到自身,则不会执行任何操作,数据将保持原样。在这种情况下使用 DROP/INSERT 会导致图表为空。
如果目标图不存在,则会创建它。默认情况下,如果输入图不存在,服务可能会返回失败。如果存在 SILENT,则操作的结果将始终是成功的。
如果 COPY 不合适,那么ADD可能就是您要查找的内容:
3.2.5 添加
ADD 操作是将输入图中的所有数据插入到目标图中的快捷方式。来自输入图的数据不受影响,并且来自目标图的初始数据(如果有)保持不变。
ADD ( SILENT )? ( ( GRAPH )? IRIref_from | DEFAULT) TO ( ( GRAPH )? IRIref_to | DEFAULT)
相当于:
INSERT { ( GRAPH IRIref_to )? { ?s ?p ?o } } WHERE { ( GRAPH IRIref_from )? { ?s ?p ?o } }
如果目标图不存在,则会创建它。默认情况下,如果输入图不存在,服务可能会返回失败。如果存在 SILENT,则操作的结果将始终是成功的。