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

8

我在我的Python程序中使用以下代码行进行SPARQL查询:

FILTER regex(?name, "%s", "i" )

(其中%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" )

并且每一个都没有()

FILTER regex(?name, "%s", "i" ) || regex(?featurename, "%s", "i" )

如何正确地完成这个任务?谢谢。

更新:使用UNION可以实现。但是我发现,只需重复regex()部分也可以实现:

FILTER (regex(?name, "%s", "i") || regex(?featurename, "%s", "i" ))

这两种解决方案似乎有些混乱,因为你必须使用一个包含相同字符串副本的2元组来填充两个%s

1个回答

15

这个怎么样?

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接