Допустим, у меня есть предикат типа «возраст», где значения всех троек возрастов являются целочисленными литералами. Какой запрос 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 }
В настоящее время это поддерживается не во всех тройных магазинах.
person
Manuel Salvadores
schedule
28.01.2011
спасибо, я надеялся, что есть лучший способ, чем просто ограничение результатов более общего запроса, но, думаю, мне придется подождать до 1.1. для этого :)
- person Alb; 29.01.2011
В дополнение к запросам Мануэля вам может понадобиться использовать 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.
person
RobV
schedule
30.01.2011