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

Rdf Sparql-删除查询在更新后停止工作,rdf,sesame,Rdf,Sesame,我创建了一个应用程序,它与openrdf sesame和owlim模块一起工作。最近,我需要将许可证密钥更新到owlim(我收到了最新owlim版本的密钥),因此我也被迫更新sesame 应用程序是使用芝麻2.6.0和owlim 4.3构建的,现在更新为芝麻2.6.8和owlim 5.2 deletesparql查询存在问题,它在旧版本中工作,所以我有一个预感,更新就是问题所在 这里有一个这样的问题: PREFIX oporg: <http://sesame.company.org/OPr

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

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

deletesparql查询存在问题,它在旧版本中工作,所以我有一个预感,更新就是问题所在

这里有一个这样的问题:

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:
具有
删除{
?用户标识oporg:sessionID?sessionID
}
插入{
?用户ID oporg:sessionID“qafnsi9p1172c0dprf9e4bhm23”
}
在哪里{
?用户ID oporg:名称“管理员”
}
这应该(根据我的记忆:)删除带有
userID=admin
的每个
sessionID
三元组,并插入新的
sessionID
三元组


Insert part有效,但delete part无效。

这不再有效的原因是delete子句包含一个变量(
?sessionID
),该变量从未绑定到任何位置的值,因此在操作求值期间,这将转换为不完整的三元组模式,并被忽略

在Sesame的早期版本中,DELETE子句中的未绑定变量被解释为通配符。然而,这与SPARQL规范相冲突,因此在Sesame 2.6.7版中作为一个bug修复。有关详细信息,请参阅

您应该通过在WHERE子句中添加
?sessionID
paten来稍微修改删除操作,如下所示:

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 .
}
前缀oporg:
具有
删除{
?用户标识oporg:sessionID?sessionID
}
插入{
?用户ID oporg:sessionID“qafnsi9p1172c0dprf9e4bhm23”
}
在哪里{
?用户名oporg:name“admin”;
oporg:sessionID?sessionID。
}

这不再有效的原因是DELETE子句包含一个变量(
?sessionID
),该变量从未绑定到任何位置的值,因此在计算操作期间,这将转换为不完整的三元组模式,并被忽略

在Sesame的早期版本中,DELETE子句中的未绑定变量被解释为通配符。然而,这与SPARQL规范相冲突,因此在Sesame 2.6.7版中作为一个bug修复。有关详细信息,请参阅

您应该通过在WHERE子句中添加
?sessionID
paten来稍微修改删除操作,如下所示:

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 .
}
前缀oporg:
具有
删除{
?用户标识oporg:sessionID?sessionID
}
插入{
?用户ID oporg:sessionID“qafnsi9p1172c0dprf9e4bhm23”
}
在哪里{
?用户名oporg:name“admin”;
oporg:sessionID?sessionID。
}

Lol,我没有足够的声望去投票。所以谢谢你,你的答案是正确的,而且现在可以了。哈哈,我没有足够的声望去投票。所以谢谢你,你的答案是正确的,它现在起作用了。