dbpedia的snorql sparql按最后一个字符排序

时间:2018-01-06 08:53:05

标签: sparql dbpedia

我想按其最后一个字符对?Artis进行排序。我试着做order by, 但结果按其第一个字符排序。

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 (?Artis) LIMIT 10

1 个答案:

答案 0 :(得分:2)

从SPARQL 1.1开始,您可以使用BIND将值绑定到变量。其余的只是字符串黑客的问题,例如替换+正则表达式,例如:

replace(strafter(str(?Artis), str(dbr:))

将IRI http://dbpedia.org/resource/Some_Example转换为字符串 Some_Example

然后

replace(strafter(str(?Artis), str(dbr:)), ".*(.)$", "$1") as ?lastChar)

通过正则表达式选择最后一个字符,$1代表正则表达式中的组。

最终查询将是

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT * WHERE {
 ?Artis dbo:birthDate ?Tanggal_Lahir . 
 FILTER (?Tanggal_Lahir = "1990-01-05"^^xsd:date)
 BIND(replace(strafter(str(?Artis), str(dbr:)), ".*(.)$", "$1") as ?lastChar)
} 
ORDER BY DESC (?lastChar) 
LIMIT 10

结果(样本):

+------------------------------------------------------+---------------+----------+
|                        Artis                         | Tanggal_Lahir | lastChar |
+------------------------------------------------------+---------------+----------+
| http://dbpedia.org/resource/Barış_Memiş              | 1990-01-05    | ş        |
| http://dbpedia.org/resource/Asha_Roy                 | 1990-01-05    | y        |
| http://dbpedia.org/resource/Gaurav_Pandey            | 1990-01-05    | y        |
| http://dbpedia.org/resource/Eldar_Ragib_Ogly_Mamedov | 1990-01-05 v  |          |
| http://dbpedia.org/resource/Akeem_Thomas             | 1990-01-05    | s        |
| ...                                                  | ...           | ...      |
+------------------------------------------------------+---------------+----------+

注意,这确实也会选择像)这样的字符结果值,例如对于资源http://dbpedia.org/resource/Stephen_Stirling_(footballer),结果将是

+-----------------------------------------------------------+-------------+---+
| http://dbpedia.org/resource/Stephen_Stirling_(footballer) | 1990-01-05  | ) |
+-----------------------------------------------------------+-------------+---+

此外,这仅适用于以命名空间http://dbpedia.org/resource/开头的DBpedia资源。对于任意数据集,省略strafter部分,只使用给定的正则表达式。

作为旁注,如果你坚持常见的命名空间声明,例如, dbo代替ontoxsd代替xs