変数がバインドされているかどうかに基づいてクエリ式を変更するにはどうすればよいですか?
次のように魔法のプロパティを呼び出しています。
WHERE {
VALUES (?subj) {
([my bound positional parameter value goes here...])
}
?subj :myMagicProperty ?result .
}
魔法のプロパティ内で、結合を行います。
?result a :Rule .
{
?result :someProp ?subj .
}
UNION
{
FILTER NOT EXISTS {
?result :someProp ?anyValue .
}
}
:somePropつまり、この値または :someProp定義されていないすべての結果を取得します。
ここがトリッキーな部分です。がバインドされていない場合?subj(つまり、ブロックUNDEF内のように設定した場合VALUES)、上記のクエリは暴走し、すべてを返します。
?subj代わりに、バインドされていないかどうかを確認したいと思います。?subjバインドされていない場合は、次の結果のみ:myMagicPropertyを返す必要があります。
FILTER NOT EXISTS {
?result ?someProp ?anyValue .
}
FILTER関数を使用して実験しBOUNDましたが、正しい動作を取得する方法がわかりません。がバインドされていないUNION場合、クエリから句の 1 つを削除するにはどうすればよいですか??subj
アップデート
VALUESブロックを追加するために最初のクエリを修正しました。
不足している?result a :Rule .ステートメントを追加しました。に
訂正。?someProp:someProp