ДОПОЛНИТЕЛЬНО не работает с запросом SPARQL в локальном редакторе YASGUI

У меня снова возникли проблемы с SPARQL. Прежде всего, немного справочной информации: я использовал службу запросов Wikidata для получения данных из Wikidata. Поскольку конечная точка Wikidata SPARQL ограничена, и для больших задач возникают тайм-ауты, я решил:

  1. Разделите запросы на несколько меньших
  2. Загрузите их как.csv
  3. Конвертируйте их в.nt N-Triples
  4. Импортируйте их в Cliopatra (который использует SWI-Prolog)
  5. Используйте встроенный YASGUI SPARQL Editor для локального запроса данных.

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

Мой код Wikidata выглядит следующим образом (это меньший выбор всех данных, которые я хочу получить):

SELECT ?q ?GTAA_ID ?pseudonym ?date_of_death 
       (group_concat(DISTINCT ?occupationLabel;separator=", ") as ?Occupations )
WHERE{
      ?q wdt:P1741 ?GTAA_ID.
      OPTIONAL {?q wdt:P742 ?pseudonym.}
      OPTIONAL {?q wdt:P570 ?date_of_death.}
      OPTIONAL {?q wdt:P106 ?occupation.}
      SERVICE wikibase:label { bd:serviceParam wikibase:language "nl". 
                            ?occupation rdfs:label ?occupationLabel.}
      }
GROUP BY ?q ?GTAA_ID ?pseudonym ?date_of_death

и это правильно восстанавливает:

q        | GTAA_ID  | pseudonym | date_of_death | occupation
Q3295087 | 102376   |           | 2000-11-05    | acteur
Q2800419 | 89301    |           |               | politicus, staatsman
and so on

Дело в том, что он позволяет мне выбирать все результаты, которые имеют идентификатор Wikidata и идентификатор GTAA и соответствующий псевдоним, date_of_death и профессии (если доступны). Кроме того, если у человека несколько профессий, он разделяет их на "," и помещает их в один ряд.

Однако, как указано выше, я загрузил файлы, чтобы иметь возможность запрашивать их локально. Для этого я преобразовал файлы.csv в.nt со следующим форматом:

<?s> <?p> "?o" 

где объект является строкой. Обратите внимание, что в следующих примерах? P правильно используется, как я конвертировал в.nt. (Поэтому используется PREFIX ps) Загрузил их в Cliopatria и использовал следующий код в редакторе YASGUI:

PREFIX ps: <http://www.wikidata.org/prop/statement/>

SELECT ?q ?GTAA_ID ?date_of_death ?pseudonym 
       (group_concat(DISTINCT ?occupation;separator=", ") as ?occupations )

WHERE{
  ?q ps:P1741 ?GTAA_ID.
  OPTIONAL{?q ps:P742 ?pseudonym.}
  OPTIONAL{?q ps:P106 ?occupation.}
  OPTIONAL{?q ps:P570 ?date_of_death.}
     } 
GROUP BY ?q ?GTAA_ID ?date_of_death ?pseudonym

Однако в этом запросе "псевдоним" занятие и "date_of_death" являются необязательными, но занятия не объединяются в одну строку. Запрос 1

Если я заменю функцию GROUP BY на

GROUP BY ?q ?GTAA_ID

он вообще не отображает псевдоним и date_of_death, но объединяет занятие. Запрос 2

Если я заменю функцию GROUP BY на

GROUP BY ?q ?GTAA_ID ?date_of_death

он объединяет только "занятие" для "q", имеющего "date_of_death". Те, у кого нет? Date_of_death, не объединяются в 1 строку. Кроме того, он вообще не отображает псевдоним. Запрос 3

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

Спасибо заранее!

0 ответов

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