Marklogic:我们如何在纯SPARQL查询中执行不区分大小写的搜索?

时间:2017-07-12 05:40:38

标签: sparql marklogic

我有一个场景,我试图使用SPARQL查询找到存储在marklogic中的三元组的内容。 SPARQL查询中的过滤条件需要对特定术语执行不区分大小写的搜索。我可以知道我该怎么做?

例如:

filter(strstarts(?personName, "FA"^^xs:string))

上面的过滤器应该获取其personName值也以upperCase开头的结果(如:fa)。我认为这显然会对我所询问的问题有所了解。

2 个答案:

答案 0 :(得分:0)

我相信您有两种方法可以在MarkLogic中使用SPARQL进行不区分大小写的搜索。

如果您只想使用SPARQL,则可以执行以下操作(根据需要修改select语句):

select * where {
  ?personName ?p ?o
  FILTER (lcase(str(?personName)) = "fa"^^xs:string)
}

作为替代方案,您还可以将一些fn:*函数与SPARQL语句混合使用,这样您就可以执行类似的操作:

prefix fn: <http://www.w3.org/2005/xpath-functions#>

select * where {
 ?personName ?p ?o
 FILTER (?personName, fn:lower-case("FA"))
}

不要忘记在MarkLogic中您也可以使用任何fn:*或cts:*函数(cts:*函数的前缀为prefix cts: <http://marklogic.com/cts#>

我希望这会有所帮助。

答案 1 :(得分:-1)

除了Tamas的好建议之外,还有REGEX。它接受不区分大小写的标志。类似的东西:

select * where {
  ?personName ?p ?o
  FILTER( regex(str(?personName), "^fa", "i") )
}

HTH!