Sparql - 删除查询在更新后停止工作

时间:2012-08-02 14:47:15

标签: rdf sesame

我创建了一个应用程序,它与openrdf sesame和owlim模块一起使用。最近,我需要更新owlim的许可证密钥(我收到了最新的owlim版本的密钥),所以我也被迫更新芝麻。

应用程序是使用sesame 2.6.0和owlim 4.3构建的,现在更新为sesame 2.6.8和owlim 5.2

删除sparql查询存在问题,这些问题适用于旧版本,所以我有预感,更新是问题所在。

以下是一个这样的查询:

PREFIX oporg: <http://sesame.company.org/OPropertiesOrg#>

WITH <users:>
DELETE {
?userID oporg:sessionID ?sessionID
}
INSERT {
?userID oporg:sessionID "qafnsi9p1172c0dprf9e4bhm23"
}
WHERE{
?userID oporg:name "admin"
}

这应该(根据我记得:)用sessionID删除每个userID=admin三元组并插入新的sessionID三元组。

插入部分有效,但删除部分无效。

1 个答案:

答案 0 :(得分:7)

这不再起作用的原因是你的DELETE子句包含一个永远不会绑定到任何值的变量(?sessionID),因此在评估操作时,这会转换为不完整的三重模式,并且忽略。

在早期版本的Sesame中,DELETE子句中的未绑定变量被解释为表示通配符。但是,这与SPARQL规范相冲突,因此被修复为Sesame版本2.6.7中的错误。有关详细信息,请参阅http://www.openrdf.org/issues/browse/SES-1047

您应该稍微修改DELETE操作,方法是将?sessionID patern添加到WHERE子句中,如下所示:

PREFIX oporg: <http://sesame.company.org/OPropertiesOrg#>

WITH <users:>
DELETE {
   ?userID oporg:sessionID ?sessionID
}
INSERT {
   ?userID oporg:sessionID "qafnsi9p1172c0dprf9e4bhm23"
}
WHERE{
   ?userID oporg:name "admin" ; 
           oporg:sessionID ?sessionID .
}