Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I make a SPARQL query to find the highest value for a property?

Lets say I have a predicate like 'age' where the values of all age triples are integer literals. What SPARQL query would return the subject with the highest age in the data?

like image 888
Alb Avatar asked Jan 28 '11 11:01

Alb


2 Answers

You just need to do order by desc with the age predicate and then limit to just get the first one.

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

See the semantics of order by in SPARQL here

With the next version of SPARQL , 1.1, that is already supported in some systems you can use function aggregates and do ..

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

This is not supported in all triple stores currently.

like image 73
Manuel Salvadores Avatar answered Nov 04 '22 03:11

Manuel Salvadores


In addition to Manuel's queries you may need to use xsd:integer to force values to be cast to integer if your data has some invalid/dodgy values:

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

Depending on your data you may need to add this into his second SPARQL 1.1 query as well.

like image 5
RobV Avatar answered Nov 04 '22 04:11

RobV