Поиск диапазона дат из строковых значений в SPARQL
У меня есть тройки, которые организованы следующим образом.
<nc:person1> <nc:hasDate> "201701"
<nc:person2> <nc:hasDate> "201703"
<nc:person3> <nc:hasDate> "201705"
<nc:person4> <nc:hasDate> "201706"
<nc:person5> <nc:hasDate> "201606"
Здесь объектная часть тройки содержит информацию о дате в строковом формате. Во-первых, четыре цифры даты представляют год, а последние две цифры представляют месяц. Например, в "201701" 2017 год - это год, а 01 - январь месяц.
Мне нужно написать запрос SPARQL, чтобы найти все даты, которые находятся в диапазоне от марта 2017 года до июня 2017 года. Мой результат должен выглядеть следующим образом.
"201703"
"201705"
"201706"
Я думаю, что мне нужно написать запрос SPARQL, как показано ниже:
SELECT ?date WHERE{
?person nc:hasdate ?date.FILTER(?)
}
Я не уверен, какое условие фильтра мне нужно написать. Не могли бы вы дать мне знать, как разобрать строку как дату и найти диапазон дат? Заранее спасибо.
1 ответ
Поэтому я проверил это (просто чтобы убедиться), и прямое сравнение строк работает для приведенного выше примера:
SELECT ?date
WHERE {
?person nc:hasDate ?date .
FILTER( (?date > "201702") && (?date < "201707") )
}
Обратите внимание, что это будет работать только для строк даты, соответствующих ISO. Другие форматы могут потерпеть неудачу.