我有一个场景,我试图使用SPARQL查询找到存储在marklogic中的三元组的内容。 SPARQL查询中的过滤条件需要对特定术语执行不区分大小写的搜索。我可以知道我该怎么做?
例如:
filter(strstarts(?personName, "FA"^^xs:string))
上面的过滤器应该获取其personName值也以upperCase开头的结果(如:fa)。我认为这显然会对我所询问的问题有所了解。
答案 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!