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

Marklogic:如何在纯SPARQL查询中执行不区分大小写的搜索?,sparql,marklogic,Sparql,Marklogic,我有一个场景,试图使用SPARQL查询marklogic中存储的三元组来查找内容。SPARQL查询中的筛选条件需要对特定术语执行不区分大小写的搜索。我可以知道我怎么做吗 例如: filter(strstarts(?personName, "FA"^^xs:string)) 上面的过滤器应该为我获取personName值也以大写开头的结果(如:fa)。我认为这将清楚地让您了解我所问的问题。我相信您有两种选择,可以在MarkLogic中使用SPARQL进行不区分大小写的搜索 如果只想使用SPARQ

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

例如:

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

上面的过滤器应该为我获取personName值也以大写开头的结果(如:fa)。我认为这将清楚地让您了解我所问的问题。

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

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

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

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

select * where {
 ?personName ?p ?o
 FILTER (?personName, fn:lower-case("FA"))
}
前缀fn: 选择*where{ ?人员姓名?p?o 过滤器(?personName,fn:小写(“FA”)) } 不要忘记,在MarkLogic中,您也可以使用任何fn:*或cts:*函数(cts:*函数的前缀是
前缀cts:


我希望这能有所帮助。

除了Tamas的好建议之外,还有。它接受一个案例不敏感标志。类似于:

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

HTH!

是的,你是对的。即使我尝试了这些选项,但它们在获取结果时会对性能产生影响。正如我在一些博客中所读到的,使用正则表达式将对性能产生影响。由于我们在每个人名上使用正则表达式,我们获取结果的时间显著增加。当然,您的sp越复杂arql查询对性能的影响越大。但您最好用实际数据来衡量自己的性能。Regex通常被告知速度慢,但慢到什么程度可能取决于triple store的品牌。lcase可能更快,在MarkLogic中,可能最快的是带有忽略大小写的cts:word查询的cts:contains。很难说它还可能取决于数据(容量、多样性等)以及您在sparql查询中执行的其他操作。是的,您是对的。但是应用这些函数会影响性能。因为我们通过应用函数来转换每个人名,所以查询性能会降低。
select * where {
  ?personName ?p ?o
  FILTER( regex(str(?personName), "^fa", "i") )
}