如何在DBpedia的Snorql中用SPARQL按?Artis最后一个字符排序?
按?Artis最后一个字符排序的SPARQL解决方案
嘿,我明白你遇到的问题了——直接对?Artis用ORDER BY确实会按整个字符串的首字符开始排序,而不是最后一个。要实现按最后一个字符排序,我们得用SPARQL的字符串处理函数来提取出每个?Artis的最后一个字符,再基于这个字符排序。
核心思路
- 用
STR(?Artis)把资源URI转换成字符串格式(因为DBpedia里的?Artis通常是资源而非纯字符串); - 用
STRLEN()获取这个字符串的总长度; - 用
SUBSTR()从字符串的最后一位开始截取(SPARQL字符串索引从1开始,所以起始位置设为字符串长度即可); - 最后基于截取到的最后一个字符进行排序。
修改后的完整查询
PREFIX onto: <http://dbpedia.org/ontology/> PREFIX xs: <http://www.w3.org/2001/XMLSchema#> SELECT * WHERE { ?Artis onto:birthDate ?Tanggal_Lahir . FILTER (?Tanggal_Lahir= "1990-01-05"^^xs:date) } ORDER BY DESC(SUBSTR(STR(?Artis), STRLEN(STR(?Artis)))) LIMIT 10
补充说明
- 如果你的
?Artis本身就是字符串字面量(而非URI),可以去掉STR()函数,直接用SUBSTR(?Artis, STRLEN(?Artis)); - 要是想升序排序,把
DESC()去掉或者换成ASC()就行。
内容的提问来源于stack exchange,提问作者Sinta Anjelina
相关产品推荐
相关产品推荐

