0

我想在 DBPedia 上获取所有带有座位容量信息的对象。或者,我想获取他们的标签、地址、纬度和经度信息。

我的问题是即使在按语言过滤后我也会得到很多重复。如何根据“地址”或任何其他属性获得不同的条目?

另外,你能告诉我这个查询的哪一部分可以改进,这样当我使用公共DBpedia 端点时我的查询就不会超时?谢谢!

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")

}
4

1 回答 1

0

您的地点有多个值,例如地址。独特之处在于 URI 本身。此外,您应该将每个属性放在单独的 OPTIONAL 中,或者至少对 lat/long 使用单独的 OPTIONAL 子句。对于标签,DBpedia 中根本不需要 OPTIONAL 子句。获得独特地点的唯一方法是按地点和 sample 或 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

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

于 2019-05-31T05:53:32.167 回答