在R包SPARQL中,默认情况下xsd:date
数据类型都转换为Unix时间。这是一个问题,因为这涉及两个日期转换 - 第一个发生在函数 SPARQL(( 中 - 由本地系统时区确定。如果你说这是一个问题,比如说在澳大利亚悉尼(Sys.timezone() == "Australia/Sydney"
(,因为下面的查询,要求2016年美国总统大选的日期
query <- "SELECT ?date WHERE {wd:Q699872 wdt:P585 ?date}"
res <- SPARQL('https://query.wikidata.org/sparql', query)
as.POSIXct(res$results$date, origin = '1970-01-01')
将返回"2016-11-07"
而不是"2016-11-08"
(正确的日期(,而是返回,如果
Sys.setenv(TZ='GMT')
res <- SPARQL('https://query.wikidata.org/sparql', query)
as.Date(as.POSIXct(res$results$date, origin = '1970-01-01'))
有没有办法要求SPARQL将日期数据类型作为字符返回?
我不确定 R SPARQL 包如何确定它是一个日期,但假设它查看分配的数据类型,您可以通过仅检索词法值来强制字符串:
SELECT (STR(?date) as ?dateString) ....
当然,这仅在Unix时间转换发生在结果处理端时才有效,而不是在查询评估期间。如果是后者:获得更好的SPARQL引擎。