1

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

应用程序是用 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三元组。

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

4

1 回答 1

7

这不再起作用的原因是您的 DELETE 子句包含一个?sessionID永远不会绑定到任何地方的值的变量 (),因此在计算操作期间,这会转换为不完整的三元组模式并被忽略。

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

?sessionID您应该通过将模式添加到 WHERE 子句来稍微修改您的 DELETE 操作,如下所示:

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 .
}
于 2012-08-03T00:45:31.013 回答