2012-07-08 90 views
3

说一个你认识的人不小心将某些三元组插入RDF数据库,其数据类型为xsd:datetime,而不是正确的xsd:dateTime。纠正这个问题最简单的方法是什么?如何更改一组三元组中的数据类型(或某些值)?

我知道我可以做这样的事情,找到坏的数据:

select * where { 
    ?s ?p ?o. 
    filter (datatype(?o)=xsd:datetime) 
} 

而且我可以把这些结果,在文本编辑器修复它们,删除坏的,然后插入好的。 ..但我必须相信/希望有一个更简单的方法。

回答

4

随着SPARQL 1.1,你可以像这样用SPARQL Update命令做到这一点:

DELETE { ?s ?p ?o } 
INSERT { ?s ?p ?o2 } 
WHERE 
{ 
    ?s ?p ?o . 
    FILTER(datatype(?o) = xsd:datetime) 
    BIND(STRDT(STR(?o), xsd:dateTime) AS ?o2) 
} 

更新命令则适用于特定的图表,让您可以有发出此复式倍增加了WITH <graph>的命令开始对于每个需要更正的指定图形。

+1

你可以做DELETE {GRAPH?g {?s?p?o}}等来处理命名图。 – 2012-07-09 13:59:21

+0

@Steve Harris是的,刚刚提到'WITH'表单,因为它对此用例的更新进行了更简单的修改 – RobV 2012-07-09 15:49:56

相关问题