Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xsd:date是否应该在SPARQL中转换为公共纪元之前的日期时间_Date_Datetime_Xsd_Sparql_Wikidata - Fatal编程技术网

xsd:date是否应该在SPARQL中转换为公共纪元之前的日期时间

xsd:date是否应该在SPARQL中转换为公共纪元之前的日期时间,date,datetime,xsd,sparql,wikidata,Date,Datetime,Xsd,Sparql,Wikidata,考虑这个SPARQL,其中datetime是公元前36年的一个日期: SELECT ?date ?year WHERE { wd:Q1180731 wdt:P577 ?datetime . BIND(xsd:date(?datetime) AS ?date) # BIND(YEAR(?datetime) AS ?year) } xsd:date(?.datetime)函数在Wikidata查询服务Blazegraph实例上失败,出现java.lang.IllegalArgument

考虑这个SPARQL,其中datetime是公元前36年的一个日期:

SELECT ?date ?year WHERE {
  wd:Q1180731 wdt:P577 ?datetime .
  BIND(xsd:date(?datetime) AS ?date)
  # BIND(YEAR(?datetime) AS ?year)
}
xsd:date(?.datetime)
函数在Wikidata查询服务Blazegraph实例上失败,出现
java.lang.IllegalArgumentException:-036-01-01T00:00:00Z

它能起作用吗?带有
YEAR
的行没有抱怨(未注释时)

我提出了这个变化:

SELECT ?date WHERE {
  wd:Q1180731 wdt:P577 ?datetime .
  BIND(REPLACE(STR(?datetime), 'T.*', '') AS ?date)
}
在这种情况下,结果是
-036-01-01
。这种BC日期的可排序性可能不好。我们是否有其他方法/函数使(字符串?)日期在1000年之前(包括公元前几年日期)可排序

一年中的日期预计至少有四位数字(实施不愿意处理超过四位数字的情况也不得而知)。这意味着日期的文本字符串可能应该是
'-0036-01-01'
,而不是
'-036-01-01'

一些实现不愿意考虑BCE日期;这算是一种资源限制,类似于不愿意考虑超过
10^10^10^10^10^10
字节的字符串,因此值得注意的是,这是一个实现质量问题,而不是一致性问题

请注意,如果您认真使用BCE日期,您将希望使用,其中文字
'-0036-01-01'
表示公元前37年(公历)的一天,而不是公元前36年。(年
0000
1bce
-0001
2bce
,等等)据工作组中的任何人所知,在基督教纪元之前的时期,格里高利日的主要用途是天文学家,而由于这一用途是他们的(卡西尼号引入以简化日期计算),使用
-0036
来表示
36 BCE
确实不是一个好主意