Вопрос SPARQL: как вернуть метки свойств и соответствующие квалификаторы даты из Викиданных - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь вернуть результаты для группы лиц (выпускников Эдинбургского университета), которые занимали политические должности.Я хотел бы вернуть заголовок названия занимаемой должности, а также даты начала и окончания для каждой должности, причем многие лица занимают несколько должностей.Кажется, я могу заставить одного или другого или заставить его работать, если человек занимал только одну должность, но не может заставить их собраться вместе, где было несколько офисов.

Моя текущая версия запроса ниже.Это даст мне даты начала и окончания, а не метку, если политический офис, такой как член [x] парламента Великобритании,? OfficeLabel возвращает значение, такое как: statement/Q4668868-E3734C7D-40F0-4D4A-8208-E3D6B8C944CB

SELECT DISTINCT ?alumni ?fullName ?roleLabel ?officeLabel ?start ?end WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  ?alumni wdt:P69 wd:Q160302.
  ?alumni rdfs:label ?fullName.
  ?alumni wdt:P106 ?role.
  #Use Values to separate out politicians - Q82955
  VALUES (?role) {
    (wd:Q82955)
  }
  #Select only where position of office is stated but make dates optional
  ?alumni p:P39 ?office.
  OPTIONAL { ?office pq:P580 ?start. }
  OPTIONAL { ?office pq:P582 ?end. }
  FILTER(LANGMATCHES(LANG(?fullName), "en"))
  FILTER(NOT EXISTS { FILTER(LANGMATCHES(LANG(?fullName), "en-ca")) })
  FILTER(NOT EXISTS { FILTER(LANGMATCHES(LANG(?fullName), "en-gb")) })
}
ORDER BY ?fullName
LIMIT 10

1 Ответ

0 голосов
/ 04 марта 2019

Да, я все еще споткнулся о квалификаторах и Модели данных Wikidata тоже.

enter image description here

Диаграмма Майкла Ф. Шеницера - собственная работа, основанная на файле: Rdf mapping.svg, CC BY 4.0, https://commons.wikimedia.org/w/index.php?curid=63880194

После прохождения "p: маршрута"из «элемента» вам нужен «ps: маршрут», чтобы вернуться к «простому значению».

Итак, использование этого для незначительного изменения вашего запроса дает результаты, которые, я думаю, вам нужны.

SELECT DISTINCT ?alumni ?fullName ?roleLabel ?officeLabel ?start ?end WHERE {
  ?alumni wdt:P69 wd:Q160302.
  ?alumni rdfs:label ?fullName.
  ?alumni wdt:P106 ?role.
  VALUES (?role) {
    (wd:Q82955)
  }
  ?alumni p:P39 ?officeStmnt.
  ?officeStmnt ps:P39 ?office.
  OPTIONAL { ?officeStmnt pq:P580 ?start. }
  OPTIONAL { ?officeStmnt pq:P582 ?end. }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  FILTER(LANGMATCHES(LANG(?fullName), "en"))
  FILTER(NOT EXISTS { FILTER(LANGMATCHES(LANG(?fullName), "en-ca")) })
  FILTER(NOT EXISTS { FILTER(LANGMATCHES(LANG(?fullName), "en-gb")) })
}
ORDER BY ?fullName
LIMIT 10

Ссылка на запрос в Викиданных

...