提问人:Travis 提问时间:10/15/2023 最后编辑:Stanislav KralinTravis 更新时间:10/16/2023 访问量:95
维基数据SPARQL无法给我1月1日的出生日期
Wikidata SPARQL cannot give me birthdates for January 1
问:
我所做的只是我想使用 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
答:
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日
评论