Как сделать запрос 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)