Получить несколько необязательных свойств с несколькими необязательными квалификаторами (Wikidata Query Service, SPARQL) - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу загрузить следующие данные о конкретных c людях с помощью службы запросов Wikidata:

свойства

  • дата рождения
  • образ жизни

квалификатор

  • время начала образа жизни
  • время окончания образа жизни

И мне нужна ровно одна строка для каждого человека на выходе, независимо от того, установлены ли свойства / квалификаторы или несколько свойств / квалификаторов.

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

Это запрос для людей. Q185140 , Q463434 и Q3378937 и Q3378937 не имеют образа жизни, но все же образ жизни , образ жизниStarts и образ жизниEnds клетки не может быть пустым, как ожидалось, и вместо этого заполнено значениями:

SELECT ?human ?humanLabel 
(GROUP_CONCAT(DISTINCT ?lifestyleLabel;separator="|") AS ?lifestyles) 
(GROUP_CONCAT(DISTINCT ?lifestyleStart;separator="|") AS ?lifestylesStarts) 
(GROUP_CONCAT(DISTINCT ?lifestyleEnd;separator="|") AS ?lifestylesEnds) 
(GROUP_CONCAT(DISTINCT ?dateBirth;separator="|") AS ?dateBirths) 
WHERE { 
    VALUES ?human { wd:Q185140 wd:Q463434 wd:Q3378937 } . 
    OPTIONAL{ ?human p:P1576 ?statement . }
    OPTIONAL{ ?statement ps:P1576 ?lifestyle . } 
    OPTIONAL{ ?statement pq:P580 ?lifestyleStart . } 
    OPTIONAL{ ?statement pq:P582 ?lifestyleEnd . } 
    OPTIONAL{ ?human wdt:P569 ?dateBirth . } 
    SERVICE wikibase:label { 
        bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" . 
        ?human rdfs:label ?humanLabel . 
        ?lifestyle rdfs:label ?lifestyleLabel . 
    }
}
GROUP BY ?human ?humanLabel

Вы можете выполнить запрос и посмотреть вывод здесь .

Что мне нужно изменить получить пустые ячейки, если свойства / квалификаторы не установлены?

Спасибо!

...