我创建了一个应用程序,它与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"
}
Run Code Online (Sandbox Code Playgroud)
这应该(根据我记得:)删除每个sessionID三元组userID=admin并插入新的sessionID三元组.
插入部分有效,但删除部分无效.
这不再起作用的原因是你的DELETE子句包含一个?sessionID永远不会绑定到任何值的变量(),因此在评估操作时,这会转换为不完整的三重模式并被忽略.
在早期版本的Sesame中,DELETE子句中的未绑定变量被解释为表示通配符.但是,这与SPARQL规范相冲突,因此被修复为Sesame版本2.6.7中的错误.有关详细信息,请参见http://www.openrdf.org/issues/browse/SES-1047.
您应该稍微修改DELETE操作,方法是将?sessionIDpatern 添加到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 .
}
Run Code Online (Sandbox Code Playgroud)