Как сделать запрос SPARQL, чтобы найти наибольшее значение для свойства? - PullRequest
6 голосов
/ 28 января 2011

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

Ответы [ 2 ]

10 голосов
/ 28 января 2011

Вам просто нужно сделать 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 }

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

5 голосов
/ 30 января 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.

...