特定のテキスト文字列を含む、一致する URI またはテキスト ノードのリストを返したいと考えています。
これにより、一致する文字列を持つサブジェクトを検索できますが、一致する述語またはオブジェクトもすべて同じクエリで返したいと考えています。
select ?s ?p ?o WHERE {
?s ?p ?o .
FILTER (REGEX(STR(?s), "SEARCHTEXT", "i"))
}
これを変更する方法はありますか?
特定のテキスト文字列を含む、一致する URI またはテキスト ノードのリストを返したいと考えています。
これにより、一致する文字列を持つサブジェクトを検索できますが、一致する述語またはオブジェクトもすべて同じクエリで返したいと考えています。
select ?s ?p ?o WHERE {
?s ?p ?o .
FILTER (REGEX(STR(?s), "SEARCHTEXT", "i"))
}
これを変更する方法はありますか?
select ?s ?p ?o WHERE {
?s ?p ?o .
FILTER ( REGEX(STR(?s), "SEARCHTEXT", "i") ||
REGEX(STR(?p), "SEARCHTEXT", "i") ||
REGEX(STR(?o), "SEARCHTEXT", "i") )
}
これはどのようなユースケースを想定していますか? それを検索したいので、正規表現は、一致するトークンに関する貴重な情報を表現しているようです。この場合、この知識を明確にする何らかの関係でデータをマークアップするのが賢明に思えます!
意図したとおりの正規表現検索は、DBMS 管理のフロント エンドなど、非常に少数の場合にのみ有効と思われます。問題を解決したいだけなら、次のようにします (クエリとしてではなく、コードで):
result = data.subjectSet().add(data.predicateSet()).add(data.objectSet())
FOREACH (token ε result) {
result.remove(token) unless(token ≙ regex)
}
return result;