我想使用 Wikidata 查询服务加载特定人的以下数据:
特性
- 出生日期
- 生活方式
限定词
- 生活方式的开始时间
- 生活方式的结束时间
而且我希望输出中的每个人都只有一行,无论是否设置了属性/限定符或多个属性/限定符。
我设法创建了一个查询,该查询适用于至少有一种生活方式的人,但是当没有时,查询需要很长时间,而不是空单元格,许多生活方式,开始和结束时间被加载,与人类无关。
这是对人类Q185140、Q463434和Q3378937和Q3378937没有生活方式的查询,但生活方式、生活方式开始和生活方式结束单元格并不像预期的那样为空,而是充满了值:
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
您可以运行查询并在此处查看输出。
如果未设置属性/限定符,我必须更改什么以获得空单元格?