変数がバインドされているかどうかに基づいてクエリ式を変更するにはどうすればよいですか?
次のように魔法のプロパティを呼び出しています。
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