维基数据SPARQL无法给我1月1日的出生日期

Wikidata SPARQL cannot give me birthdates for January 1

提问人:Travis 提问时间:10/15/2023 最后编辑:Stanislav KralinTravis 更新时间:10/16/2023 访问量:95

问:

我所做的只是我想使用 wikiservice sparql 按出生日期获取名人。除 1 月 1 日外,一年中每隔一天工作一次。当我研究这个问题时,我发现它与时间精度和维基数据存储日期的方式有关。例如,如果它看到 1980 年 1 月,则会自动返回 1980 年 1 月 1 日。如果我在不精确的情况下查询 1 月 1 日,我会得到出生日期不是 1 月 1 日的人(即 12 月 8 日出生的 Joy Reid)。如果我增加精度,我什么也得不到。在wikidata sparql中,真的不可能恢复1月1日的出生日期吗?

PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?person ?personLabel ?birthdate ?followers ?uniqueImage ?countryLabel (GROUP_CONCAT(DISTINCT ?occupationLabel; separator=", ") as ?occupations)
WHERE {
  VALUES ?country {wd:Q30 wd:Q145}
  ?person wdt:P31 wd:Q5 ;  # Instance of human
    wdt:P569 ?birthdate ;  # Date of birth
    wdt:P27 ?country ;  # Citizenship
    wdt:P8687 ?followers; # Social Media Followers 
    wdt:P106 ?occupation ;  # Occupation
    wdt:P18 ?uniqueImage .  # Image;

  FILTER(MONTH(?birthdate) = 1  && DAY(?birthdate) = 1)
  FILTER(LANG(?occupationLabel) = "en")
  ?occupation rdfs:label ?occupationLabel .

  ?birthdate wikibase:timePrecision "12"^^xsd:integer .  #remove this to have results come back (though wrong like Joy Reid)

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
GROUP BY ?person ?personLabel ?birthdate ?followers ?uniqueImage ?countryLabel
ORDER BY DESC(?followers)
LIMIT 40

你可以在这里运行它:SPARQL Wikidata

SPARQL 维基数据

评论

0赞 Travis 10/15/2023
如果这简直是不可能的,那么我想我将不得不忍受这一点,并手动研究 1 月 1 日的出生日期。如果是这样的话,请告诉我伙计们。

答:

4赞 Stanislav Kralin 10/15/2023 #1

精度是完整值的属性,而不是简单值的属性(顺便说一句,文字在RDF中不能是主题)。请参阅 RDF 转储格式

而不是

?person wdt:P569 ?birthday .
?birthday wikibase:timePrecision 12 .

它应该是这样的

?person p:P569 ?statement .
?statement a wikibase:BestRank ;
           ps:P569 ?birthdate ;
           psv:P569/wikibase:timePrecision 11 .

另请参阅 T57755

评论

0赞 Travis 10/15/2023
多么不幸的是,我无法判断这是否有效,因为我每次尝试时都会超时。
0赞 Stanislav Kralin 10/15/2023
也许你没有注释掉第 10 行。
1赞 Travis 10/15/2023
是的,就是这样,谢谢,似乎有效。有趣的是,维基数据的宇航员示例sparql示例没有考虑精度,并返回了一些宇航员的错误出生日期,错误地显示了一些宇航员出生于1月1日