dbpedia 的 snorql sparql 按最后一个字符排序
dbpedia's snorql sparql sorting by the last character
我想按最后一个字符对 ?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
从 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:)), ".*(.)$", "") as ?lastChar)
通过正则表达式选择最后一个字符,</code>代表正则表达式中的组。</p>
<p>最终查询将是</p>
<pre><code>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:)), ".*(.)$", "") 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
而不是 onto
和 xsd
而不是 xs
。
我想按最后一个字符对 ?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
从 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:)), ".*(.)$", "") as ?lastChar)
通过正则表达式选择最后一个字符,</code>代表正则表达式中的组。</p>
<p>最终查询将是</p>
<pre><code>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:)), ".*(.)$", "") 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
而不是 onto
和 xsd
而不是 xs
。