[英]Order SPARQL query results by length of a string?
我正在嘗試使用DBpedia中的術語自動完成用戶在輸入中寫入的內容,類似於此jsFiddle示例 。 嘗試在jsFiddle的輸入中寫狗 ,你會在建議中看到'狗'一詞。
我有以下代碼,問題是我得到的10個術語列表不包含“狗”替代品。 所以,如果我可以按照(字符串表示) ?概念的長度來排序列表,那么我就可以得到那個術語。 這可能嗎?
SELECT DISTINCT ?concept
WHERE {
?concept a skos:Concept .
FILTER regex(str(?concept), "dog", "i")
}
ORDER BY ASC(?concept) LIMIT 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
也就是說,如果您只是檢查字符串成員資格,那么您不需要正則表達式的所有功能,並且使用contains和lcase來檢查小寫的概念是否包含帶有類似過濾器的 “dog” 可能更有效:
filter contains(lcase(str(?concept)), "dog")
SPARQL規范中的目錄包含大量可以瀏覽的函數。 特別是,您需要查看17.4函數定義的小節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.