我在试验芝麻和维托索三宫。目前,我使用Sesame向两个Triplestore添加RDF数据。
我的RDF数据代表了不同的东西,比如视频数据、用户数据等等。现在我可以添加一个视频的RDF (标题、描述、位置等)。去Triplestore
但是如何更新商店中的RDF呢?
例如,如果我使用sesame的REST接口并使用更新的RDF发出PUT请求,那么存储中的所有内容都会首先被删除。
当我使用POST与更新的数据(例如,视频的标题已经改变),标题(旧的和新的)存储。
你是怎么处理三层楼的?也许我想念这里一些重要的东西。
编辑:
我现在在Sesame中使用上下文,在Virtuoso中对每个RDF条目使用图形。这样,我就可以先清除上下文,然后再添加它。由于我对两个Triplestore都使用了Sesame (我们仍然不知道我们将使用哪个),所以代码看起来完全一样。
ValueFactory f = rep.getValueFactory();
URI uri = f.createURI(urn);
con.clear(uri);
con.add(reader,this.baseURI, RDFFormat.RDFXML,uri);谢谢你的帮助
发布于 2011-06-20 12:10:57
我猜你是和斯派克一起工作的。如果你不这样做,那么你很可能应该:-)
许多三重存储支持SPARQL更新,这是一种在SPARQL存储中修改RDF三元组的语言。它类似于SQL的INSERT、UPDATE、DELETE等等。我不确定芝麻是否支持它-SPARQL更新仍然是一个非常新的规范,甚至还没有完全确定。
另一件需要注意的有用的事情,特别是如果你想以RESTful的方式工作,那就是命名图。这允许在不同的图中管理三元组,这样就可以保持数据分离。例如,您可以将每个视频的三元组保存在单独的命名图中,然后在PUT请求中只更新该命名图。您仍然可以使用SPARQL查询所有命名图的整个存储区。同样,我不完全确定Sesame的REST是否提供了对命名图形的访问。(我很确定Java会这么做;我认为他们称它为不同的东西。(背景?)
发布于 2011-06-20 13:47:30
因此,以标题的具体例子为例,假设您有原始的RDF,如下所示:
:something :title "Original Title" .你想把它改变成这样:
:something :title "Updated Title" .使用sesame的文章只向命名图添加新信息(芝麻术语中的上下文),重要的是它不删除任何现有的信息。
在RDF术语中,这两个三元组代表着不同的事实。芝麻(或任何其他三分店)不知道第二个三重应该取代第一个。这与传统的SQL/关系模型(您可能习惯于在其中更新属性)有很大不同,RDF对此没有正确的概念,因为您不能这样修改三元组。可以添加新的三元组,也可以删除现有的三元组。
要获得您想要的更新行为,您必须删除旧的三元组(Sesame的REST支持HTTP ),然后添加替换它的新三元组(像当前一样使用Sesame的POST操作)。
同样的也适用于你使用的任何三合一商店。如果像cyrgi建议的那样,使用SPARQL更新支持存储,那么您可以向更新端点发出以下命令(假设您使用了命名的图形):
DELETE DATA
{
GRAPH <http://example.org/graph> { :something :title "Original Title" . }
};
INSERT DATA
{
GRAPH <http://example.org/graph> { :something :title "Updated Title" . }
}https://stackoverflow.com/questions/6410716
复制相似问题