如何在MarkLogic中处理不区分大小写的SPARQL数据

时间:2014-12-02 17:30:59

标签: rdf sparql marklogic

我试图了解如何最好地处理Marklogic SPARQL数据中的文字,这在任何情况下都是如此。我希望能够进行不区分大小写的搜索,但我相信语义查询是不可能的。我想要一个简单的例子:

SELECT *
WHERE { ?s ?p "Red"}

SELECT *
WHERE { ?s ?p "red"}

返回所有值,无论对象是"红色"," RED","红色"或者" rED"。

我的数据来自另一个具有可变大写规则的来源。目前我唯一能想到的是添加一个额外的三元组,它总是包含小写的文本,所以我总是可以搜索该值。或者,使用不区分大小写的排序规则在MarkLogic中创建一些新的范围查询是否有意义(如果三重数据可能的话)?

1 个答案:

答案 0 :(得分:7)

您可以使用忽略大小写的过滤器。

select * where {
  ?s ?p ?o
  FILTER (lcase(str(?o)) = "red")
}

Based on the answer to another question

编辑:我问过MarkLogic PM的Steve Buxton语义功能,他建议:

let $store := sem:store( (), cts:element-value-query(xs:QName("sem:object"), "red", "case-insensitive") )
return
  sem:sparql('
    SELECT ?o
    WHERE {
      ?s ?p ?o
      FILTER (lcase(str(?o)) = "red")
    }', (), (), $store
 )

sem:store是MarkLogic 8(现在通过Early Access提供)功能,可选择一组三元组。然后,SPARQL查询在简化集上运行,限制需要过滤的三元组数。