Yoa*_*man 15 rdf sparql jena fuseki named-graphs
我试图使用SPARQL Construct查询从现有的查询创建一个新的命名图.我查询的数据库包含http://graph.com/old现有的命名图.我使用Jena TDB作为数据库,通过Jena Fuseki端点访问.以下查询给出了一个错误:
CONSTRUCT
{
GRAPH <http://graph.com/new> {
?s ?p ?o
}
}
WHERE
{
GRAPH <http://graph.com/old> {
?s ?p ?o
}
}
Run Code Online (Sandbox Code Playgroud)
如果我从CONSTRUCT块中删除图形语句,查询工作正常,但我想将三元组放入我指定的命名图形而不是默认图形.
据我所知,CONSTRUCT上的SPARQL 1.1部分没有说明构建命名图的任何内容.有没有办法做到这一点?
Jos*_*lor 19
就像当您有兴趣获取一组变量绑定一样使用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
}
}
Run Code Online (Sandbox Code Playgroud)
但是,对于这种特殊情况,您可以使用3.2.3 COPY中描述的COPY操作.COPY首先从目标图中删除所有数据,因此它可能不适用于您的实际情况(理解您提供的代码可能是一个最小的示例,而不一定是您尝试执行的实际更新).关于COPY标准说:
COPY操作是将输入图形中的所有数据插入目标图形的快捷方式.来自输入图的数据不受影响,但是在插入之前删除了目标图中的数据(如果有).
Run Code Online (Sandbox Code Playgroud)COPY ( SILENT )? ( ( GRAPH )? IRIref_from | DEFAULT) TO ( ( GRAPH )? IRIref_to | DEFAULT )在操作上类似于:
Run Code Online (Sandbox Code Playgroud)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操作是将输入图形中的所有数据插入目标图形的快捷方式.输入图表中的数据不受影响,目标图表中的初始数据(如果有)保持不变.
Run Code Online (Sandbox Code Playgroud)ADD ( SILENT )? ( ( GRAPH )? IRIref_from | DEFAULT) TO ( ( GRAPH )? IRIref_to | DEFAULT)相当于:
Run Code Online (Sandbox Code Playgroud)INSERT { ( GRAPH IRIref_to )? { ?s ?p ?o } } WHERE { ( GRAPH IRIref_from )? { ?s ?p ?o } }如果目标图形不存在,则将创建它.默认情况下,如果输入图形不存在,服务可能会返回失败.如果存在SILENT,则操作结果将始终成功.
| 归档时间: |
|
| 查看次数: |
5014 次 |
| 最近记录: |