在Triplestore中更新RDF

在Triplestore中更新RDF,rdf,triplestore,sesame,virtuoso,Rdf,Triplestore,Sesame,Virtuoso,我正在试验芝麻和三重技艺。目前,我使用SesameJavaAPI将RDF数据添加到两个三元组存储中 我的RDF数据表示不同的东西,如视频数据、用户数据等。 目前,我可以将视频的RDF(标题、描述、位置等)添加到Triplestore中 但是如何更新存储中的RDF 例如,如果我使用sesame的REST接口并使用更新的RDF发出PUT请求,则首先删除存储中的所有内容 当我对更新的数据使用POST时(例如,视频的标题已更改),会同时存储标题(旧的和新的) 如何使用triplestores? 也许我错

我正在试验芝麻和三重技艺。目前,我使用SesameJavaAPI将RDF数据添加到两个三元组存储中

我的RDF数据表示不同的东西,如视频数据、用户数据等。 目前,我可以将视频的RDF(标题、描述、位置等)添加到Triplestore中

但是如何更新存储中的RDF

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

当我对更新的数据使用POST时(例如,视频的标题已更改),会同时存储标题(旧的和新的)

如何使用triplestores? 也许我错过了一些重要的东西


编辑:

我现在使用Sesame中的上下文和Virtuoso中的图形来处理每个RDF条目。对于更新,我可以先清除上下文,然后再添加它。当我对两个TripleStore使用Sesame API时(我们仍然不知道要使用哪一个),代码看起来完全相同

ValueFactory f = rep.getValueFactory();
URI uri = f.createURI(urn);
con.clear(uri);
con.add(reader,this.baseURI, RDFFormat.RDFXML,uri);

感谢您的帮助

我想您正在使用SPARQL。如果您没有,那么您可能应该:-)

许多三元组存储支持一种语言,用于在SPARQL存储中修改RDF三元组。这就像SQL的
插入
更新
删除
等等。我不确定Sesame是否支持它,但是SPARQL更新仍然是一个非常新的规范,甚至还没有完全确定


另一个需要注意的有用的事情是,特别是如果你想以一种安静的方式工作的话。这允许在不同的图形中管理三元组,因此可以将数据分开。例如,您可以将每个视频的三元组保存在单独的命名图中,然后在PUT请求中仅更新该命名图。您仍然可以使用SPARQL跨所有命名图查询整个存储。同样,我不完全确定Sesame的RESTAPI是否提供了对命名图的访问。(我很确定Java API确实如此;我认为他们称它为不同的东西。context?

因此,假设您拥有原始RDF,那么以您的具体标题为例:

:something :title "Original Title" .
你想把它改成这样:

:something :title "Updated Title" .
使用Sesame的帖子只会向命名图(Sesame术语中的上下文)添加新信息,重要的是,它不会删除任何现有信息

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

要获得所需的更新行为,您必须删除旧的三元组(Sesame的REST API为此支持HTTP delete),然后添加替换它的新三元组(使用Sesame当前的POST操作)

你使用的几乎任何三联书店都是如此。如果like cyrgi建议您使用SPARQL更新支持存储,那么您可以向更新端点发出以下命令(假设您使用命名图):

DELETE DATA 
{ 
  GRAPH <http://example.org/graph> { :something :title "Original Title" . }
};
INSERT DATA 
{
   GRAPH <http://example.org/graph> { :something :title "Updated Title" . }
}
删除数据
{ 
图{:某物:标题“原始标题”。}
};
插入数据
{
图{:something:title“Updated title”。}
}

谢谢您的回答。还在想什么是对我最好的方法。SPARQL我以后无论如何都要用。所以我尝试一下。是的,Sesame再次调用named graphs ContextHanks来获得这个答案。我不知道我可以为每个rdf条目使用上下文或图形。这非常有用。请注意,Virtuoso Sesame Provider文档提供了将RDF数据添加到四元存储的示例:@hwillams。是的,我用过。但是我还不知道如何用api更新存储中的RDF。Virtuoso有一个SPARUL“modify”操作,它带有一个嵌入的delete和insert操作,执行的操作相当于SQL更新操作,如中所述