首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新Triplestore中的RDF

更新Triplestore中的RDF
EN

Stack Overflow用户
提问于 2011-06-20 11:54:18
回答 2查看 3.8K关注 0票数 9

我在试验芝麻和维托索三宫。目前,我使用Sesame向两个Triplestore添加RDF数据。

我的RDF数据代表了不同的东西,比如视频数据、用户数据等等。现在我可以添加一个视频的RDF (标题、描述、位置等)。去Triplestore

但是如何更新商店中的RDF呢?

例如,如果我使用sesame的REST接口并使用更新的RDF发出PUT请求,那么存储中的所有内容都会首先被删除。

当我使用POST与更新的数据(例如,视频的标题已经改变),标题(旧的和新的)存储。

你是怎么处理三层楼的?也许我想念这里一些重要的东西。

编辑:

我现在在Sesame中使用上下文,在Virtuoso中对每个RDF条目使用图形。这样,我就可以先清除上下文,然后再添加它。由于我对两个Triplestore都使用了Sesame (我们仍然不知道我们将使用哪个),所以代码看起来完全一样。

代码语言:javascript
复制
ValueFactory f = rep.getValueFactory();
URI uri = f.createURI(urn);
con.clear(uri);
con.add(reader,this.baseURI, RDFFormat.RDFXML,uri);

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-20 12:10:57

我猜你是和斯派克一起工作的。如果你不这样做,那么你很可能应该:-)

许多三重存储支持SPARQL更新,这是一种在SPARQL存储中修改RDF三元组的语言。它类似于SQL的INSERTUPDATEDELETE等等。我不确定芝麻是否支持它-SPARQL更新仍然是一个非常新的规范,甚至还没有完全确定。

另一件需要注意的有用的事情,特别是如果你想以RESTful的方式工作,那就是命名图。这允许在不同的图中管理三元组,这样就可以保持数据分离。例如,您可以将每个视频的三元组保存在单独的命名图中,然后在PUT请求中只更新该命名图。您仍然可以使用SPARQL查询所有命名图的整个存储区。同样,我不完全确定Sesame的REST是否提供了对命名图形的访问。(我很确定Java会这么做;我认为他们称它为不同的东西。(背景?)

票数 5
EN

Stack Overflow用户

发布于 2011-06-20 13:47:30

因此,以标题的具体例子为例,假设您有原始的RDF,如下所示:

代码语言:javascript
复制
:something :title "Original Title" .

你想把它改变成这样:

代码语言:javascript
复制
:something :title "Updated Title" .

使用sesame的文章只向命名图添加新信息(芝麻术语中的上下文),重要的是它不删除任何现有的信息。

在RDF术语中,这两个三元组代表着不同的事实。芝麻(或任何其他三分店)不知道第二个三重应该取代第一个。这与传统的SQL/关系模型(您可能习惯于在其中更新属性)有很大不同,RDF对此没有正确的概念,因为您不能这样修改三元组。可以添加新的三元组,也可以删除现有的三元组。

要获得您想要的更新行为,您必须删除旧的三元组(Sesame的REST支持HTTP ),然后添加替换它的新三元组(像当前一样使用Sesame的POST操作)。

同样的也适用于你使用的任何三合一商店。如果像cyrgi建议的那样,使用SPARQL更新支持存储,那么您可以向更新端点发出以下命令(假设您使用了命名的图形):

代码语言:javascript
复制
DELETE DATA 
{ 
  GRAPH <http://example.org/graph> { :something :title "Original Title" . }
};
INSERT DATA 
{
   GRAPH <http://example.org/graph> { :something :title "Updated Title" . }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6410716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档