Поиск диапазона дат из строковых значений в 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. Другие форматы могут потерпеть неудачу.

Другие вопросы по тегам