在sparql中更新或创建数字计数器(UPSERT)

在sparql中更新或创建数字计数器(UPSERT),sparql,blazegraph,Sparql,Blazegraph,我想在rdf数据库(Blazegraph)中存储大量整数。这些值需要用新数据更新(递增),或者如果丢失,则创建新数据。在sparql 1.1中,最好的方法是什么?如果我是在SQL()中编写的,那么假设数据库一开始是空的,并且表的唯一键设置为“s,p”(主语和谓语): 生成的RDF数据: :A :cnt 10 . :B :cnt 1 . :A :cnt 13 . :B :cnt 1 . :C :cnt 5 . 下次运行: -- Inserting or addin

我想在rdf数据库(Blazegraph)中存储大量整数。这些值需要用新数据更新(递增),或者如果丢失,则创建新数据。在sparql 1.1中,最好的方法是什么?如果我是在SQL()中编写的,那么假设数据库一开始是空的,并且表的唯一键设置为“s,p”(主语和谓语):

生成的RDF数据:

 :A  :cnt  10 .
 :B  :cnt  1 .
 :A  :cnt  13 .
 :B  :cnt  1 .
 :C  :cnt  5 .
下次运行:

-- Inserting or adding A=3, C=5
INSERT INTO tbl (s,p,o) VALUES ('A','cnt',3), ('C','cnt',5)
  ON DUPLICATE KEY UPDATE o=o+VALUES(o);
生成的RDF数据:

 :A  :cnt  10 .
 :B  :cnt  1 .
 :A  :cnt  13 .
 :B  :cnt  1 .
 :C  :cnt  5 .
因此,问题是-如何构造SPARQL查询以基于现有数据和增量执行批量UPSERT,并使其高效。

前缀:
PREFIX : <http://example.org/>

DELETE { ?letter :cnt ?outdated }
INSERT { ?letter :cnt ?updated }
WHERE {
    VALUES (?letter ?increment) { (:A 10) (:B 1) }
    OPTIONAL { ?letter :cnt ?outdated }
    BIND ((IF(BOUND(?outdated), ?outdated + ?increment, ?increment)) AS ?updated)
}
删除{字母:cnt?过时} 插入{字母:cnt?更新} 在哪里{ 值(?字母?增量){(:a10)(:b1)} 可选{?字母:cnt?过时} 绑定((如果(绑定(?过期),?过期+增量,?增量))为更新) }
您可以使用查询-事实上,我无法在不查看数据的情况下为您提供任何查询信息。感谢您的回复,我已更新了问题以澄清我需要什么。谢谢最初的问题是。另请参见“请仔细测试”。