如何使用SPARQL查询查找属性的最高值?

8
假设我有一个谓词叫做“age”,其中所有年龄三元组的值都是整数文字。哪个SPARQL查询将返回数据中年龄最高的主题?
2个回答

11

你只需要对年龄条件进行 order by desc,然后使用 limit 来获取第一个结果。

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

查看SPARQL中order by的语义请点击这里

在下个版本的SPARQL 1.1中,一些系统已经支持使用聚合函数并执行..

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

目前并不是所有的三元存储库都支持此功能。


谢谢,我希望有比仅从更一般的查询中限制结果更好的方法,但我想我必须等到1.1版本才能实现 :) - Alb

5

除了Manuel的查询外,如果您的数据有一些无效/不良值,您可能需要使用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查询中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接