2016-02-12 69 views
3

我正尝试自动完成用户在输入中写入的内容,其中包含DBpedia中的术语,与this jsFiddle example类似。尝试在该jsFiddle的输入中写入,并且您会在建议中看到“狗”字。通过字符串的长度来订购SPARQL查询结果?

我有以下代码,问题在于我得到的10项列表不包含“Dog”选项。所以,如果我可以通过?概念(的字符串表示)的长度来排列列表,那么我就可以得到这个词。这可能吗?

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

回答

6

所以,如果我可以的了lenght对列表进行排序?概念有可能获得这个术语。但我找不到正确的说法。可能吗?

这听起来像你正在寻找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

这就是说,如果你只是检查字符串的成员,你不需要正则表达式的所有功能,而且它可能使用效率更高containslcase检查小写是否概念包含“狗”过滤样?

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

的内容在SPARQL规范表有,你可以浏览功能的大名单。特别是,你想看看17.4 Function Definitions的小节。