我创建了一个应用程序,它与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
三元组。
插入部分有效,但删除部分无效。
答案 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 .
}