Фильтр по диапазону дат в SPARQL
Я использую движок SPARQL Jena и пытаюсь написать запрос для фильтрации в диапазоне дат, поскольку мне нужно найти значение свойства после фиксированной даты.
свойство my date имеет следующий формат:
Fri May 23 10:20:13 IST 2014
Как написать запрос SPARQL, чтобы получить другие свойства с датами больше, чем это?
1 ответов
С вашими данными в этом формате вы не можете фильтровать диапазон без добавления пользовательского функции расширения в ARQ (который предназначен для продвинутых пользователей), так как вам нужно будет проанализировать и интерпретировать строку времени даты.
вместо этого вы должны переводить свои данные в стандартный формат даты и времени xsd:dateTime
для поддержки требуются все реализации SPARQL. Вижу XML-схема Часть 2: Типы данных для подробности этого формата.
ваш конкретный пример даты будет переводиться следующим образом:
2014-05-23T10:20:13+05:30
и вы должны убедиться, что объявляете его типизированным литералом типа xsd:dateTime
когда вы используете его в данных и запросах. Например, в читаемом Черепаха синтаксис RDF:
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix : <http://example.org> .
:subject :date "2014-05-23T10:20:13+05:30"^^xsd:dateTime .
затем вы можете написать запрос SPARQL, который фильтруется по диапазону дат следующим образом:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX : <http://example.org>
SELECT *
WHERE
{
?s :date ?date .
FILTER (?date > "2014-05-23T10:20:13+05:30"^^xsd:dateTime)
}
это находит все записи, где ?date
после данного дата