3

我想使用 Wikidata 查询服务加载特定人的以下数据:

特性

  • 出生日期
  • 生活方式

限定词

  • 生活方式的开始时间
  • 生活方式的结束时间

而且我希望输出中的每个人都只有一行,无论是否设置了属性/限定符或多个属性/限定符。

我设法创建了一个查询,该查询适用于至少有一种生活方式的人,但是当没有时,查询需要很长时间,而不是空单元格,许多生活方式,开始和结束时间被加载,与人类无关。

这是对人类Q185140Q463434Q3378937Q3378937没有生活方式的查询,但生活方式生活方式开始和生活方式结束单元格并不像预期的那样为空,而是充满了值:

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

您可以运行查询并在此处查看输出。

如果未设置属性/限定符,我必须更改什么以获得空单元格?

4

0 回答 0