2016-02-12 70 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的小節。