Рассмотрим этот 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)
не работает в экземпляре Blazegraph службы запросов Wikidata с 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
. Сортировка таких дат до нашей эры может быть плохой. Есть ли у нас другие методы / функции для сортировки (строковых?) Дат до 1000 года (включая даты до нашей эры)?