如何在SPARQL regex()中使用逻辑OR?

Jef*_*eff 7 python regex filter sparql

我在我的python程序中的SPARQL查询中使用此行:

FILTER regex(?name, "%s", "i" )
Run Code Online (Sandbox Code Playgroud)

(%s用户输入的搜索文本在哪里)

我想要匹配任何一个?name?featurename包含%s,但我似乎无法找到任何使用regex()的文档或教程.我尝试了几件似乎合理的事情:

FILTER regex((?name | ?featurename), "%s", "i" )
FILTER regex((?name || ?featurename), "%s", "i" )
FILTER regex((?name OR ?featurename), "%s", "i" )
FILTER regex((?name, ?featurename), "%s", "i" )
Run Code Online (Sandbox Code Playgroud)

而且每个人都没有 ()

FILTER regex(?name, "%s", "i" ) || regex(?featurename, "%s", "i" )
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?谢谢

更新:使用UNION工作.但我发现如果你只重复regex()部分它也会起作用:

FILTER (regex(?name, "%s", "i") || regex(?featurename, "%s", "i" ))
Run Code Online (Sandbox Code Playgroud)

这两个解决方案看起来有点混乱,因为你必须使用一个2元素的元组和相同字符串的副本来填充两个%ss.

gle*_*ald 14

那这个呢?

SELECT ?thing
WHERE {
  { 
    ?thing x:name ?name .
    FILTER regex(?name, "%s", "i" )
  } UNION {
    ?thing x:featurename ?name .
    FILTER regex(?featurename, "%s", "i" )
  }
}
Run Code Online (Sandbox Code Playgroud)