Найдите свойства Wikidata с помощью SPARQL и используйте их в одном запросе (или: Использование темы в качестве предиката) - PullRequest
2 голосов
/ 26 мая 2019

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

Я начал с поиска всех свойств, которые являются своего рода авторитетной записью, вместе с их ярлыками, шаблонами ссылок и т. Д. Это прекрасно работает:

SELECT ?auth ?authLabel ?desc ?linkPattern ?countryLabel ?remoteID WHERE {
 ?auth wdt:P31 wd:Q19595382; # Properties of type "person authority"
   schema:description ?desc; # Plain-english description
   wdt:P1630 ?linkPattern . # Link pattern
 OPTIONAL { ?auth wdt:P17 ?country. } # Country of origin, if you have it
 FILTER((LANG(?desc)) = "en")
 SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}

Это дает мне список всех авторитетных лиц в Викиданных с их вспомогательной информацией, которая является хорошей отправной точкой. Тем не менее, я хочу, чтобы этот список, но только показ записей для конкретного человека

Я подумал, что это сработает, поскольку запросы Wikidata SPARQL должны обрабатывать переменные как предикаты:


SELECT ?auth ?authLabel ?desc ?linkPattern ?countryLabel ?remoteID WHERE {
  ?auth wdt:P31 wd:Q19595382;
    schema:description ?desc;
    wdt:P1630 ?linkPattern .
    wd:Q5145349 ?auth ?remoteID . # <-- Authority record property must appear in person Q5145349 (Colin McCahon)
  OPTIONAL { ?auth wdt:P17 ?country. }
  FILTER((LANG(?desc)) = "en")
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}

но это возвращает ноль результатов. Нет ошибок, просто пусто.

Единственная подсказка, которую я получил, заключается в том, что список идентификаторов свойств, даже если они являются свойствами, возвращается с префиксом "wd:", а не с префиксом "wdt:" / пространством имен обычно используется предикатами, поэтому, возможно, его нужно каким-то образом преобразовать в другое пространство типов / имен. Но я не уверен, имеет ли это значение.

Может быть, есть способ сделать это с помощью фильтров или другой хитрости после запроса, но то, что я написал во втором примере (сохранение моего элемента person как части графика), представляется предпочтительным. И я определенно хотел бы сохранить это в одном запросе.

Любая помощь будет приветствоваться. Я много искал, не найдя примера, который решает проблему превращения субъекта в предикат в том же запросе. Спасибо!

...