Сортировка результатов SPARQL по дате

Есть ли способ отсортировать результаты по дате создания?

Пример запроса, который необходимо отсортировать:

SELECT * WHERE {?s ?p ?o} limit 200

person cupakob    schedule 20.07.2009    source источник


Ответы (2)


Вы можете использовать предложение order by точно так же, как и в SQL. Обратите внимание, что согласно спецификации SPARQL ORDER BY применяется только к SELECT запросам. Вам нужно будет создать привязку для свойства, которое вы хотите использовать для заказа.

SELECT ?s ?p ?o
WHERE {?s ?p ?o .
       ?s <creationDatePredicate> ?date . }
ORDER BY DESC(?date)
LIMIT 200

Обновление. Если вы еще не сохранили дату создания, вам нужно будет сохранить метаданные самостоятельно. Что касается того, как это сделать, у вас есть несколько вариантов:

  1. Сохраните тройку в диаграмме по умолчанию, у которой есть дата создания для каждого предмета. Если вы храните более одного графика, это очень быстро станет громоздким и, вероятно, это не то, что вам нужно.

  2. Сохраните каждый график как именованный график в тройном хранилище RDF. Затем вы можете сохранить метаданные о каждом графике в графике по умолчанию или в одном «общем» именованном графике для времени создания.

  3. Храните данные в именованном графике и используйте именованный график для хранения метаданных времени создания.

Примером запроса SPARQL варианта № 2 может быть:

SELECT ?s ?p ?o
WHERE {
        GRAPH ?g { ?s ?p ?o . }
        ?g <creationDatePredicate> ?date . }
ORDER BY DESC(?date)
LIMIT 200
person Phil M    schedule 20.07.2009
comment
такого предиката нет :( - person cupakob; 20.07.2009
comment
@Sirakov Верно, вам придется указать любой предикат, соответствующий вашему набору данных. - person Phil M; 21.07.2009
comment
я имею в виду, что в моем наборе данных нет объекта, который содержит дату... соответственно, такого предиката нет :) - person cupakob; 21.07.2009

Поскольку вы сказали, что на самом деле не сохраняете дату создания в своем RDF, любой возможный механизм для этого будет зависеть от используемой вами реализации SPARQL и резервного хранилища RDF или чего-то еще. Вполне вероятно, что это просто невозможно.

person tialaramex    schedule 21.07.2009