我试图检索有关某些人的寿命的数据.对于已经活过一段时间的人来说,这是有问题的.例如,数据集 Pythagoras似乎有一个所谓的“空白节点”出生日期(P569).但是这个空白节点引用了另一个节
但由于某种原因,我无法检索该节点. My first try looked like this,但不知何故导致一个完全空的结果集:
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作为某种“快捷方式”-syntax用于我在but this also ends with a empty result set上面做的显式导航.
SELECT DISTINCT ?person ?name ?dateofbirth ?earliestdateofbirth WHERE { ?person wdt:P31 wd:Q5. # Is Human ?person rdfs:label ?name. # Name for better conformation ?person wdt:P569/wdt:P1319 ?earliestdateofbirth. }
那么如何在Wikidata中访问由空白节点引用的节点(在我的情况下,特别是最早的生日)?
But this blank node references another node…
事情略有不同.最早的日期属性不是_:t550690019的属性,而是声明wd:Q10261 wdt:P569 _:t550690019的属性.
在Wikidata data model中,这些注释使用qualifiers表示.
您的查询应该是:
SELECT DISTINCT ?person ?name ?dateofbirth ?earliestdateofbirth WHERE { VALUES (?person) {(wd:Q10261)} ?person wdt:P31 wd:Q5. # --Is human ?person rdfs:label ?name. # --Name for better conformation ?person p:P569/pq:P1319 ?earliestdateofbirth. FILTER (lang(?name) = "en") }
Try it!
顺便说一句,时间精度(在出生日期已知时使用)是另一个限定符:
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" } }
Try it!