我已经创建了一个应用程序,它使用openrdf sesame和owlim模块。最近,我需要将许可证密钥更新为owlim (我收到了最新owlim版本的密钥),所以我被迫也更新了芝麻。
应用程序是使用sesame 2.6.0和owlim 4.3构建的,现在更新到sesame 2.6.8和owlim 5.2
delete 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"
}这应该(根据我的记忆:)用userID=admin删除每个sessionID三元组,并插入新的sessionID三元组。
插入零件有效,但删除零件无效。
发布于 2012-08-03 08:45:31
这不再起作用的原因是,您的DELETE子句包含一个从未绑定到任何地方的值的变量(?sessionID),因此在操作的计算过程中,这将转换为不完整的三元组模式,并被忽略。
在早期版本的Sesame中,DELETE子句中的未绑定变量被解释为通配符。但是,这与SPARQL规范相冲突,因此在Sesame版本2.6.7中被修复为错误。详情请参见http://www.openrdf.org/issues/browse/SES-1047。
您应该稍微修改一下删除操作,将?sessionID模式添加到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 .
}https://stackoverflow.com/questions/11780014
复制相似问题