Sparql 从Wikidata中的空白节点检索数据

Sparql 从Wikidata中的空白节点检索数据,sparql,wikidata,Sparql,Wikidata,我试图检索某些人的寿命数据。对于生活在不久前的人来说,这是个问题。例如,的数据集似乎有一个所谓的“空白节点”,用于出生日期(P569)。但是这个空白节点引用了另一个节点最早日期(P1319),它的数据我可以处理得很好 但由于某种原因,我无法检索该节点,但不知何故,这会导致一个完全空的结果集: SELECT DISTINCT ?person ?name ?dateofbirth ?earliestdateofbirth WHERE { ?person wdt:P31 wd:Q5.

我试图检索某些人的寿命数据。对于生活在不久前的人来说,这是个问题。例如,的数据集似乎有一个所谓的“空白节点”,用于
出生日期(P569)
。但是这个空白节点引用了另一个节点
最早日期(P1319)
,它的数据我可以处理得很好

但由于某种原因,我无法检索该节点,但不知何故,这会导致一个完全空的结果集:

SELECT DISTINCT ?person ?name ?dateofbirth ?earliestdateofbirth WHERE {
  ?person wdt:P31 wd:Q5.         # This thing is Human
  ?person rdfs:label ?name.      # Name for better conformation
  ?person wdt:P569 ?dateofbirth. # Birthday may result in a blank node
  ?dateofbirth wdt:P1319 ?earliestdateofbirth # Problem: Plausbible Birth
}
然后我发现另一种语法建议使用
?person wdt:P569/wdt:P1319?earliestdateofbirth
,作为某种“快捷方式”——我在上面所做的显式导航语法

那么,如何访问Wikidata中空白节点引用的节点(在我的例子中,特别是最早的出生日期)

但是这个空白节点引用了另一个节点

情况略有不同。
最早日期
属性不是
的属性,而是语句
wd:Q10261 wdt:P569
的属性

在Wikidata中,这些注释使用表示

您的查询应该是:

选择不同的人?姓名?出生日期?最早的出生日期{
值(?人){(wd:Q10261)}
人wdt:P31 wd:Q5.#——是人类
?人员rdfs:标签?名称。#——名称,以便更好地确认
?人员p:P569/pq:P1319?最早出生日期。
过滤器(lang(?name)=“en”)
}


顺便说一句,时间精度(出生日期已知时使用)是另一个限定词:

SELECT ?person ?personLabel ?value ?precisionLabel {
  VALUES (?person) {(wd:Q859) (wd:Q9235)}
  ?person  wdt:P31  wd:Q5 ;
           p:P569/psv:P569  [ wikibase:timeValue  ?value ;
                              wikibase:timePrecision  ?precisionInteger ]
  {
  SELECT ?precision (xsd:integer(?precisionDecimal) AS ?precisionInteger) {
    ?precision  wdt:P2803  ?precisionDecimal .
  }
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

我觉得自己很愚蠢,但我无法马上发现:它确实有效,但您的查询有什么不同?
过滤器
似乎只会更严格地限制它。请仔细查看:)。我将在几分钟后解释,现在我正在寻找好的链接。啊,您对
P569
P1319
使用了不同的前缀,我很高兴有一些好的链接!哇,谢谢你如此彻底地更新你的答案,这真的很有帮助!
SELECT ?person ?personLabel ?value ?precisionLabel {
  VALUES (?person) {(wd:Q859) (wd:Q9235)}
  ?person  wdt:P31  wd:Q5 ;
           p:P569/psv:P569  [ wikibase:timeValue  ?value ;
                              wikibase:timePrecision  ?precisionInteger ]
  {
  SELECT ?precision (xsd:integer(?precisionDecimal) AS ?precisionInteger) {
    ?precision  wdt:P2803  ?precisionDecimal .
  }
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}