How do I make a SPARQL query to find the highest v

2020-04-05 06:49发布

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?

2条回答
成全新的幸福
2楼-- · 2020-04-05 07:41

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.

查看更多
家丑人穷心不美
3楼-- · 2020-04-05 07:45

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.

查看更多
登录 后发表回答