SPARQL DBPedia 查询座位容量,优化和删除重复项
SPARQL DBPedia query for seating capacity, optimize and remove duplicates
我想获取DBPedia上所有带有座位信息的对象。或者,我想获取他们的标签、地址、纬度和经度信息。
我的问题是,即使按语言过滤后,我仍然得到很多重复项。我怎样才能根据 'address' 或任何其他属性获得不同的条目?
此外,您能告诉我该查询的哪一部分可以改进,以便我的查询在使用 public DBpedia endpoint 时不会超时吗?谢谢!
PREFIX dbpediaO: <http://dbpedia.org/ontology/>
SELECT ?place ?label ?capacity ?address ?lat ?lon WHERE {
?place dbpedia2:seatingCapacity ?capacity .
OPTIONAL{
?place dbpediaO:address ?address .
?place rdfs:label ?label .
?plage geo:lat ?lat .
?place geo:long ?lon .
}
filter (lang(?label) = "en" || lang(?label) = "eng")
filter (lang(?address) = "en" || lang(?address) = "eng")
}
您的地点有多个值,例如地址。独特之处在于 URI 本身。此外,您应该将每个 属性 放在单独的 OPTIONAL 中,或者至少为 lat/long 使用单独的 OPTIONAL 子句。对于标签,在 DBpedia 中根本不需要 OPTIONAL 子句。获得独特地点的唯一方法是按地点分组并抽样或 group_concat 所有其他属性。像这样:
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?place (sample(?_label) as ?label)
(group_concat(?capacity; separator=";") as ?capacities)
(group_concat(?address; separator=";") as ?adresses) ?lat ?lon
WHERE {
?place dbo:seatingCapacity ?capacity ;
rdfs:label ?_label .
filter (langmatches(lang(?_label),"en"))
OPTIONAL {
?place dbo:address ?address .
filter (langmatches(lang(?address), "en"))
} OPTIONAL {
?place geo:lat ?lat ; geo:long ?lon .
}
}
group by ?place ?lat ?lon
order by desc(?place)
limit 100
如您所见,地点也有多个容量值。
我想获取DBPedia上所有带有座位信息的对象。或者,我想获取他们的标签、地址、纬度和经度信息。
我的问题是,即使按语言过滤后,我仍然得到很多重复项。我怎样才能根据 'address' 或任何其他属性获得不同的条目?
此外,您能告诉我该查询的哪一部分可以改进,以便我的查询在使用 public DBpedia endpoint 时不会超时吗?谢谢!
PREFIX dbpediaO: <http://dbpedia.org/ontology/>
SELECT ?place ?label ?capacity ?address ?lat ?lon WHERE {
?place dbpedia2:seatingCapacity ?capacity .
OPTIONAL{
?place dbpediaO:address ?address .
?place rdfs:label ?label .
?plage geo:lat ?lat .
?place geo:long ?lon .
}
filter (lang(?label) = "en" || lang(?label) = "eng")
filter (lang(?address) = "en" || lang(?address) = "eng")
}
您的地点有多个值,例如地址。独特之处在于 URI 本身。此外,您应该将每个 属性 放在单独的 OPTIONAL 中,或者至少为 lat/long 使用单独的 OPTIONAL 子句。对于标签,在 DBpedia 中根本不需要 OPTIONAL 子句。获得独特地点的唯一方法是按地点分组并抽样或 group_concat 所有其他属性。像这样:
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?place (sample(?_label) as ?label)
(group_concat(?capacity; separator=";") as ?capacities)
(group_concat(?address; separator=";") as ?adresses) ?lat ?lon
WHERE {
?place dbo:seatingCapacity ?capacity ;
rdfs:label ?_label .
filter (langmatches(lang(?_label),"en"))
OPTIONAL {
?place dbo:address ?address .
filter (langmatches(lang(?address), "en"))
} OPTIONAL {
?place geo:lat ?lat ; geo:long ?lon .
}
}
group by ?place ?lat ?lon
order by desc(?place)
limit 100
如您所见,地点也有多个容量值。