SPARQL DBPedia запрос на вместимость, оптимизировать и удалить дубликаты - PullRequest
0 голосов
/ 27 мая 2019

Я хочу получить все объекты с информацией о вместимости на 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")

}

1 Ответ

0 голосов
/ 31 мая 2019

Ваши места имеют несколько значений, например, адреса.Уникальной вещью является сам URI.Более того, вы должны поместить каждое свойство в отдельный OPTIONAL или, по крайней мере, использовать отдельные OPTIONAL предложения для lat / long.Для метки вам не нужно дополнительное предложение вообще в DBpedia.Единственный способ получить уникальные места - это сгруппировать по месту и сэмплировать или 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

Как видите, для мест есть также несколько значений емкости.

...