SPARQL:日期转换

时间:2018-01-10 04:20:47

标签: r date datetime timezone sparql

在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将日期数据类型作为字符返回?

1 个答案:

答案 0 :(得分:2)

我不确定R SPARQL程序包如何确定它是一个日期,但假设它查看指定的数据类型,您可以通过仅检索词法值来强制转换为字符串:

SELECT (STR(?date) as ?dateString) ....

当然,这仅适用于在结果处理端进行Unix时间转换,而不是在查询evalation期间。如果是后者:获得更好的SPARQL引擎。