在Wikidata(维基数据SPARQL端点)中,有没有办法用类似PageRank的方式来订购SPARQL查询结果?
SELECT DISTINCT ?entity ?entityLabel WHERE {
?entity wdt:P31 wd:Q5.
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
} LIMIT 100 OFFSET 0
Run Code Online (Sandbox Code Playgroud)
我们是否可以指定一个字段来对结果进行排序,并且该字段表示顶部的实体更显着/重要/可识别以下一个等等?
即使使用DISTINCT子句,以下SPARQL查询也会在Virtuoso中提供重复项。您可以在DBpedia公共端点中测试查询。查询有什么问题?
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX dbpedia:<http://dbpedia.org/resource/>
PREFIX dbpedia-owl:<http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX vrank:<http://purl.org/voc/vrank#>
SELECT DISTINCT ?person1 ?person1_id ?person2 ?person2_id ?person2_rank
FROM <http://dbpedia.org>
FROM <http://people.aifb.kit.edu/ath/#DBpedia_PageRank>
WHERE {
?person1 rdf:type dbpedia-owl:Person.
?person2 rdf:type dbpedia-owl:Person.
?person1 ?link ?person2.
?person1 dbpedia-owl:wikiPageID ?person1_id.
?person2 dbpedia-owl:wikiPageID ?person2_id.
?person2 vrank:hasRank/vrank:rankValue ?person2_rank.
FILTER (?person1_id != ?person2_id).
FILTER (?person1_id = 308)
} ORDER BY DESC(?person2_rank) ASC(?person2_id)
Run Code Online (Sandbox Code Playgroud)
结果包括看似重复的行,例如:
http://dbpedia.org/resource/Aristotle 308 http://dbpedia.org/resource/Democritus 8211 27.281
http://dbpedia.org/resource/Aristotle 308 http://dbpedia.org/resource/Democritus 8211 27.281
http://dbpedia.org/resource/Aristotle 308 http://dbpedia.org/resource/Heraclitus …Run Code Online (Sandbox Code Playgroud)