SPARQL:日期转换

SPARQL: Date conversion

在 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')

将 return "2016-11-07" 而不是 "2016-11-08" (正确的日期),如果

则 returned
Sys.setenv(TZ='GMT')
res <- SPARQL('https://query.wikidata.org/sparql', query)
as.Date(as.POSIXct(res$results$date, origin = '1970-01-01'))

有什么方法可以让 SPARQL return 日期数据类型作为字符?

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

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

当然,这只有在 Unix 时间转换发生在结果处理端而不是查询评估期间才有效。如果是后者:获得更好的 SPARQL 引擎。