SPARQL子查询和删除
我试图删除一个特定的三元组,这个三元组与一系列类似的事情相关。那么,我们在哪里SPARQL子查询和删除,sparql,Sparql,我试图删除一个特定的三元组,这个三元组与一系列类似的事情相关。那么,我们在哪里 someURI a our:thing; our:name "literal". someOtherURI a our:thing; our:name "literal". ...n 我想特别删除所有someURI:name“literal”三元组,并保留已定义的内容 我知道我可以通过删除数据来做到这一点,但这需要我首先了解所有URI,这本身就太多了 我在删除WHERE方面有点困难,但我认为答案是 DELETE
someURI a our:thing;
our:name "literal".
someOtherURI a our:thing;
our:name "literal".
...n
我想特别删除所有someURI:name“literal”
三元组,并保留已定义的内容
我知道我可以通过删除数据来做到这一点,但这需要我首先了解所有URI,这本身就太多了
我在删除WHERE
方面有点困难,但我认为答案是
DELETE{ ?uri our:name ?literal }
WHERE{ ?uri a our:thing. }
首先,我的DELETE WHERE
是否正常
其次,我想知道是否可以在删除数据
中嵌套选择
查询?所以
DELETE DATA{
?uri our:name ?literal
{
SELECT ?uri
WHERE {?uri a our:thing.}
}
}
具体来说,子查询会提供基本三元组(URI来替换?URI
变量,还是删除数据的无变量规则会首先抛出错误?这似乎很明显,但我一直在想,无法在我的三元组存储库上测试它。我使用的是OWLIM-SE
首先,我的DELETE WHERE
是否正常
差不多,但不完全一样。DELETE
子句不能包含任何未绑定在WHERE
子句中的变量(在您的情况下,变量?literal
)。因此您需要稍微修改它,如下所示:
DELETE {
?uri our:name ?literal .
}
WHERE {
?uri a our:thing;
our:name ?literal .
}
其次,我想知道是否可以在
a删除数据
这是不可能的。DELETE DATA
操作只能包含固定的RDF三元组-没有变量,当然也没有子查询
但是,如果需要,可以在DELETE WHERE
操作中使用嵌套的SELECT
。因此以下操作是合法的:
DELETE {
?uri our:name ?literal .
}
WHERE {
{ SELECT ?uri ?literal
WHERE { ?uri a our:thing;
our:name ?literal .
}
}
}
但是,在您的特定情况下,这样做并不会给您带来任何好处:此更新与第一个更新表达的内容完全相同,只是更为迂回。为什么您说不能在triplestore上测试它?非常确定OWLIM-SE支持SPARQL 1.1更新,除非您使用的是非常旧的版本…存储库是内容生命周期的一部分。我不喜欢玩弄东西,第二个问题确实是我一直想知道的。虽然我们有一个冗余的开发实例,但我尝试使数据与生产保持一致。随着偏差的增加,我的测试变得越来越无意义。谢谢Jeen的确认。