SPARQL DBPedia запрашивает вместимость, оптимизирует и удаляет дубликаты

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

}

это не сработает. Ваши места имеют несколько значений, например. адрес, уникальная вещь - это сам URI. Кроме того, вы должны поместить каждое свойство в отдельный НЕОБЯЗАТЕЛЬНЫЙ или, по крайней мере, использовать отдельные НЕОБЯЗАТЕЛЬНЫЕ предложения для широты/долготы. Для метки вам вообще не нужно предложение OPTIONAL в DBpedia. Единственный способ получить уникальные места — это сгруппировать по месту и сэмплировать или сгруппировать все остальные свойства.

UninformedUser 27.05.2019 20:38
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 - вы можете видеть, что для мест также есть несколько значений вместимости
UninformedUser 27.05.2019 21:27

@AKSW Спасибо, это очень полезно! Если вы опубликуете это как ответ, я приму это.

Mike 27.05.2019 21:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваши места имеют несколько значений, например адрес. Уникальной вещью является сам 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

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

Другие вопросы по теме