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

如您所见,地点也有多个容量值。