在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将日期数据类型作为字符返回?
发布于 2018-01-10 14:09:07
我不确定R SPARQL包是如何确定它是一个日期的,但是假设它看起来是指定的数据类型,您可以通过仅检索词汇值来强制转换为字符串:
SELECT (STR(?date) as ?dateString) ....
当然,只有当Unix时间转换发生在结果处理端,而不是在查询求值期间时,这才有效。如果是后者:获得更好的SPARQL引擎。
https://stackoverflow.com/questions/48180255
复制相似问题