Как сделать запрос SPARQL, чтобы найти наибольшее значение для свойства?

Допустим, у меня есть предикат типа "возраст", где значения всех возрастных троек являются целочисленными литералами. Какой запрос SPARQL вернет в данные субъект с наибольшим возрастом?

2 ответа

Решение

Вам просто нужно сделать order by desc с предикатом возраста, а затем limit просто получить первый.

PREFIX ns:    <http://namespace.org/ontology/>
SELECT ?s ?age
WHERE { ?s ns:age ?age }
ORDER BY DESC(?age) LIMIT 1

Смотрите семантику order by в SPARQL здесь

В следующей версии SPARQL 1.1, которая уже поддерживается в некоторых системах, вы можете использовать агрегаты функций и делать..

SELECT (max(?age) as ?maxage)
WHERE { ?s ns:age ?age }

Это не поддерживается во всех тройных магазинах в настоящее время.

В дополнение к запросам Мануэля вам может понадобиться xsd:integer заставить значения быть приведенными к целому числу, если ваши данные имеют недопустимые / хитрые значения:

PREFIX ns:    <http://namespace.org/ontology/>
PREFIX xsd:   <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?age
WHERE { ?s ns:age ?age }
ORDER BY DESC(xsd:integer(?age)) LIMIT 1

В зависимости от ваших данных вам может потребоваться добавить это и в его второй запрос SPARQL 1.1.

Ответ msalvadores хорош, однако в запросе SPARQL 1.1 есть небольшая опечатка:

SELECT (MAX(?age) AS ?maxage)
WHERE { ?s ns:age ?age }

(пропущенные скобки вокруг AS)

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