2
私はユーザ定義クエリをSPARQLに変換しています。例えば、ユーザが "abc"と言うと、 "abc"という名前の属性を持つ与えられた型のすべてのノードを私に渡すことを意味します。これを拡張して、ユーザが "abcまたは(pqrとlmn)"と言うと、属性が "abcまたは(pqrとlmn)"である特定の型のすべてのノードを見つける必要があります。以下は私が思いついた質問です:SPARQLクエリを使用するUNIONと交差
SELECT DISTINCT ?node, ?type
WHERE
{
{
?node a ?type .
FILTER (?type != <sometype>)
}
{
{
?node ?reln0 ?obj0 .
FILTER (regex(str(?obj0), 'abc', "i"))
}
UNION
{
{
?node ?reln1 ?obj1 .
FILTER (regex(str(?obj1), 'pqr', "i"))
}
{
?node ?reln2 ?obj2 .
FILTER (regex(str(?obj2), 'lmn', "i"))
}
}
}
}
ORDER BY ?node
しかし、それは適切な結果を返しません。上記の質問に何か問題はありますか?条件を動的に生成する必要があるため、各節を別々にする必要があるため、以下を使用する必要はありません。
FILTER (regex(str(?obj2), 'abc', "i") || regex(str(?obj2), 'pqr', "i") && regex(str(?obj2), 'lmn', "i"))
あなたは一つの大きな 'FILTER'と第二のアプローチを使用していない理由を私は理解していません。それは簡単で動作します。 – cygri
それぞれの用語はより複雑になり、{}の本体が大きくなり、これらの基本的なケースと混合されます。 FILTERはこの場合にのみ機能します。 –
また、上記のクエリはRedlandでは動作しないことがわかりました。その後、私はARQをインストールしようとしました。したがって、それはその特定の実装に関連している可能性があります。 –