Я хочу получить все объекты с информацией о вместимости в 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")
}
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
- вы можете видеть, что для мест также есть несколько значений вместимости
@AKSW Спасибо, это очень полезно! Если вы опубликуете это как ответ, я приму это.
Ваши места имеют несколько значений, например адрес. Уникальной вещью является сам URI. Кроме того, вы должны поместить каждое свойство в отдельный НЕОБЯЗАТЕЛЬНЫЙ или, по крайней мере, использовать отдельные НЕОБЯЗАТЕЛЬНЫЕ предложения для широты/долготы. Для метки вам вообще не нужно предложение OPTIONAL в DBpedia. Единственный способ получить уникальные места — это сгруппировать по месту и сэмплировать или сгруппировать все остальные свойства. Что-то вроде этого:
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
Как видите, для мест также существует несколько значений вместимости.
это не сработает. Ваши места имеют несколько значений, например. адрес, уникальная вещь - это сам URI. Кроме того, вы должны поместить каждое свойство в отдельный НЕОБЯЗАТЕЛЬНЫЙ или, по крайней мере, использовать отдельные НЕОБЯЗАТЕЛЬНЫЕ предложения для широты/долготы. Для метки вам вообще не нужно предложение OPTIONAL в DBpedia. Единственный способ получить уникальные места — это сгруппировать по месту и сэмплировать или сгруппировать все остальные свойства.