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

时间:2010-07-17 15:18:59

标签: python regex filter sparql

我在我的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 个答案:

答案 0 :(得分:14)

这个怎么样?

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