任何人都可以在任何文档中指出我在SPARQL中的有效 UPDATE语句(无论是W3C,virtuoso,语义网页,还是您自己的自定义代码等?
必须完成WHERE规范,并且在一个查询中更新多个三元组。
感谢。
编辑/示例:
这是我当前的代码,其目标是将dc:creator
,dc:title
和dc:description
的所有当前值替换为INSERT子句中指定的值。这个查询在逻辑和语法方面都是正确的吗?
WITH GRAPH <http://127.0.0.1:3000/dendro_graph>
DELETE
{
:teste dc:creator ?o0 .
:teste dc:title ?o1 .
:teste dc:description ?o2 .
}
INSERT
{
:teste dc:creator "Creator%201" .
:teste dc:creator "Creator%202" .
:teste dc:title "Title%201" .
:teste dc:description "Description%201" .
}
WHERE
{
:teste dc:creator ?o0 .
:teste dc:title ?o1 .
:teste dc:description ?o2 .
}
答案 0 :(得分:14)
我仍然不完全清楚你想要实现的目标,以及为什么你提供的示例更新不是你想要的,但如果目标是更新替换给定主题的三元组,你可以做这样的事情:
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@prefix ex: <http://example.org/>
DELETE {?s ?p ?o}
INSERT {?s ex:title "foo" ;
ex:description "bar" ;
rdf:type ex:FooBar .
}
WHERE { ?s ?p ?o .
FILTER (?s = ex:subject1)
}
上述操作将删除所有以ex:subject1
为主题的现有三元组,并插入新标题,说明和类型。
或者,如果您不喜欢过滤器,您也可以像这样制定上述内容:
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@prefix ex: <http://example.org/>
DELETE {ex:subject1 ?p ?o}
INSERT {ex:subject1 ex:title "foo" ;
ex:description "bar" ;
rdf:type ex:FooBar .
}
WHERE {
ex:subject1 ?p ?o .
}
如果您只想删除给定主题的特定属性(而不是具有该主题的所有三元组),您可以像这样修改操作:
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@prefix ex: <http://example.org/>
DELETE {ex:subject1 ex:title ?t ;
ex:description ?d ;
rdf:type ?c .
}
INSERT {ex:subject1 ex:title "foo" ;
ex:description "bar" ;
rdf:type ex:FooBar .
}
WHERE {
ex:subject1 ex:title ?t ;
ex:description ?d ;
rdf:type ?c .
}
答案 1 :(得分:5)
在SPARQL中,更新表示为DELETE,后跟INSERT:
http://www.w3.org/TR/2010/WD-sparql11-update-20100126/#t413
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
WITH <http://example/addresses>
DELETE { ?person foaf:firstName 'Bill' }
INSERT { ?person foaf:firstName 'William' }
WHERE
{ ?person a foaf:Person .
?person foaf:firstName 'Bill'
}
答案 2 :(得分:2)
哈利路亚感谢上帝。
在墙上撞了3天后,我相信我有解决方案,就像一个解决方案。首先,您创建DELETE
语句,然后使用分号指定要插入的三元组。它仍然是两个操作,但至少它们是由查询服务器控制的,i。即您不必执行两个单独的请求,一个用于DELETE
其他UPDATE
(非常危险)。
这是我的工作代码,现在(显然)已修复:
WITH GRAPH <http://127.0.0.1:3000/dendro_graph>
DELETE
{
:teste dc:creator ?o0 .
:teste dc:title ?o1 .
}
WHERE
{
:teste dc:creator ?o0 .
:teste dc:title ?o1 .
};
&lt; ------注意第一部分末尾的SEMICOLON
INSERT DATA
{
:teste dc:creator "criador%20do%20teste" .
:teste dc:creator "second%20criador%20do%20teste" .
:teste dc:creator "third%20criador%20do%20teste" .
:teste dc:creator "fourth%20criador%20do%20teste" .
:teste dc:title "t1" .
:teste dc:title "t3" .
:teste dc:title "second%20title" .
}
答案 3 :(得分:-3)
sparql insert是不可能的。已经映射的sparql处理&amp; dump rdf文件。 它是链接数据或图形数据的唯一查询处理。不像mysql,sql等数据库...
主题对象谓词格式的rdf文件。
select *的sparql查询其中{?s?p?o。得到结果