SPARQL更新示例,用于在单个查询中更新多个三元组

SPARQL更新示例,用于在单个查询中更新多个三元组,sparql,Sparql,有人能在任何文档(W3C、virtuoso、语义网页或您自己的自定义代码等)中为我指出SPARQL中的有效更新语句吗 它必须包含WHERE规范,并且在一个查询中更新了一个以上的三元组 谢谢 编辑/示例: 这是我的当前代码,其目标是用INSERT子句中指定的值替换dc:creator、dc:title和dc:description的所有当前值。此查询在逻辑和语法上是否正确 WITH GRAPH <http://127.0.0.1:3000/dendro_graph> DELETE

有人能在任何文档(W3C、virtuoso、语义网页或您自己的自定义代码等)中为我指出SPARQL中的有效更新语句吗

它必须包含WHERE规范,并且在一个查询中更新了一个以上的三元组

谢谢

编辑/示例:

这是我的当前代码,其目标是用INSERT子句中指定的值替换
dc:creator
dc:title
dc:description
的所有当前值。此查询在逻辑和语法上是否正确

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 .
} 
带图形的

删除
{ 
:teste dc:creator?o0。
:测试dc:标题?o1。
:测试仪直流:说明?氧气。
}
插入
{ 
:teste dc:creator“creator%201”。
:teste dc:creator“creator%202”。
:teste dc:标题“标题%201”。
:teste dc:说明“说明%201”。
} 
哪里
{ 
:teste dc:creator?o0。
:测试dc:标题?o1。
:测试仪直流:说明?氧气。
} 

在SPARQL更新中,表示为删除,后跟插入:

前缀foaf:
具有
删除{person foaf:firstName'Bill}
插入{个人foaf:名字“William”}
哪里
{人a foaf:人。
?foaf人员:名字“比尔”
}
哈利路亚感谢上帝

3天后,我的头撞到了墙上,我相信我找到了解决方案,这就像是一个变通办法。首先,你做
DELETE
语句,然后用分号指定要插入的三元组。这仍然是两个操作,但至少它们是由查询服务器控制的,也就是说,你不必执行两个单独的操作请求,一个用于删除,另一个用于更新(非常危险)

这是我的工作代码,现在(显然)已修复:


我仍然不完全清楚您想要实现什么,以及为什么您给出的示例更新没有达到您想要的效果,但是如果目标是更新以替换给定主题的三元组,您可以这样做:

@前缀rdf:
@前缀ex:
删除{s?p?o}
插入{例如:标题“foo”;
例如:说明“栏”;
rdf:type ex:FooBar。
}
哪里{s?p?o。
过滤器(?s=ex:subject1)
}
上述操作将删除所有以
ex:subject1
为主题的现有三元组,并插入新的标题、说明和类型

或者,如果你不喜欢过滤器,你也可以这样表述:

@前缀rdf:
@前缀ex:
删除{ex:subject1?p?o}
插入{ex:subject1 ex:title“foo”;
例如:说明“栏”;
rdf:type ex:FooBar。
}
何处{
例:受试者1?p?o。
}
如果只想删除给定主题(而不是该主题的所有三元组)的特定属性,可以按如下方式修改操作:

@前缀rdf:
@前缀ex:
删除{ex:subject1 ex:title?t;
例:描述?d;
rdf:c型。
}
插入{ex:subject1 ex:title“foo”;
例如:说明“栏”;
rdf:type ex:FooBar。
}
何处{
ex:subject1 ex:title?t;
例:描述?d;
rdf:c型。
}

无法插入sparql。sparql处理已映射并转储rdf文件。 它只是对链接数据或图形数据的查询处理,而不是mysql、sql等的数据库

主宾谓词格式的rdf文件


select*where{s?p?o.}的sparql查询获取结果

谢谢,我已经阅读了该文档。我需要一个能够在一次操作中更新多个三元组的查询。实际上,删除所有匹配WHERE条件的三元组并替换为其他三元组。因为我不想知道三元组中所有元素的旧值,所以我不能使用DELETE DATA或者插入数据语句;我需要在查询中进行绑定。就我所知,您的示例查询是正确的。我不太明白您试图解决的问题。我想制作一个简单的网页,让用户csn更新图形中的信息,而不是像dbpedia中那样仅执行选择。如果给定dc:des的指令不止一个,那么Scriptor,在用新值替换这些值之前,必须将它们全部删除。是的,是这样吗?现在还不清楚什么对您不起作用。您尝试上面的SPARQL操作时做了什么?您希望它做什么?可能会显示一些示例数据、预期结果和实际结果。这只是一个简单的更新,尽可能基本。…更新所有以资源X为主题的三元组。这不需要单独的操作(尽管原则上没有问题)。如果系统同时使用,则删除和插入的顺序可能会使数据库处于不一致的状态。至少在每两次操作结束时,服务器将以tjis方式处理提交,即使据我所知,Virtuo上没有ACID事务。你没有领会我的意思。你可以o这种更新只需要一个SPARQL操作。你不需要像这里这样创建两个或多个操作的序列。这就是我3天来一直在尝试做的……我的搜索前3页的所有google结果都被访问了,所以如果你有一个不需要操作序列的解决方案,我会喜欢的听它说:-)问题是你自己在你的问题中给出了这样一个解决方案的例子,你没有解释为什么这个解决方案对你不起作用。尽管如此,我还是试着给你一个替代方案,请看我的答案。非常感谢你花时间提供这样一个详细的例子。我将在Virtuoso界面中运行一些查询来说明我的需要,并将
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'
  }
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 .
}; 
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"  .
}