Фильтр по диапазону дат в 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 после данного дата