簡體   English   中英

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 + regex:

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 ,那將是很好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM