1

openrdfゴマとowlimモジュールで動作するアプリケーションを作成しました。最近、ライセンスキーをowlimに更新する必要があったので(最新のowlimバージョンのキーを受け取りました)、ゴマも更新する必要がありました。

アプリケーションはゴマ2.6.0とowlim4.3でビルドされ、ゴマ2.6.8とowlim5.2に更新されました。

古いバージョンで機能するdeletesparqlクエリに問題があるので、更新が問題であるという予感がしました。

そのようなクエリの1つを次に示します。

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 に答える