同様のクエリを試しましたが、解析の例外も発生しました。rdflibのSPARQLパーサーIN
コードを確認しましたが、またはを処理するルールが存在しないようですNOT IN
。この機能は実装されていないと思います。
とにかく、正しく使っているかわかりません。SPARQL 1.1仕様NOT IN
の定義を見ると、式のリストに対して使用される演算子が定義されています。したがって、次のようにします。IN
FILTER (?item NOT IN (?SetB))
また、仕様のすべての例で用語が使用されているため、右側で変数を使用できるかどうかは完全にはわかりません。 編集:RobVメッセージを参照してください。RLHで変数を使用することが可能です。
1つのクエリによる回避策
OPTIONAL
考えられる解決策の1つは、とを使用することですbound
(どちらもrdflibでサポートされています)。何かのようなもの ...
SELECT ?title WHERE {
some logic defining ?item
OPTIONAL {
some logic defining ?SetB
}
FILTER (bound(?SetB) && ?setB != ?item)
}
あなたの質問についてもっと知らなければ、私はこの場合より良いアドバイスをすることはできません。
2つのクエリによる回避策
rdlibでこれを解決する最も簡単な方法は、フィルターと2つのクエリを使用することです。最初のクエリは、のすべての可能な値を取得します?SetB
。2番目のクエリのAntは、動的にフィルターを作成します。
SELECT ?title WHERE {
some logic defining ?item
FILTER (?item != <setb_val1> && ?item != <setb_val2> &&
... && ?item != <setb_val2>)
}