按字符串长度排序SPARQL查询结果?

时间:2016-02-12 17:40:04

标签: sparql dbpedia

我正在尝试使用DBpedia中的术语自动完成用户在输入中写入的内容,类似于this jsFiddle example。尝试在jsFiddle的输入中写 dog ,你会在建议中看到'狗'一词。

我有以下代码,问题是我得到的10个术语列表不包含“Dog”替代方案。所以,如果我可以按照?concept 的(字符串表示)的长度来排序列表,那么我可以得到该术语。这可能吗?

SELECT DISTINCT ?concept
WHERE {
  ?concept a skos:Concept . 
  FILTER regex(str(?concept), "dog", "i")
}
ORDER BY ASC(?concept) LIMIT 10

1 个答案:

答案 0 :(得分:10)

  

所以,如果我可以按照概念的长度订购列表,那么就可以得到这个词。但我找不到合适的陈述。有可能吗?

听起来你正在寻找 strlen

order by strlen(str(?concept))

,例如,

select distinct ?concept where {
  ?concept a skos:Concept . 
  filter regex(str(?concept), "dog", "i")
}
order by strlen(str(?concept))
limit 10

SPARQL results

也就是说,如果您只是检查字符串成员身份,那么您就不需要正则表达式的所有功能,并且可能可能更有效地使用 { {3}} contains 检查小写?概念是否包含" dog" 使用过滤器,如:

filter contains(lcase(str(?concept)), "dog")

SPARQL规范中的目录包含大量可以浏览的功能。特别是,您需要查看lcase的小节。