如何编写一个返回SPARQL中最大值的查询?

时间:2013-03-17 01:12:13

标签: database sparql semantic-web

我希望在SPARQL中有一个查询,以查找每个州和大多数本科学生的州和大学。

我试过了:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpr: <http://dbpedia.org/resource/>
PREFIX dbpo: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT ?University ?State (MAX(?nu) AS ?size)
    WHERE{
        ?University dbpo:numberOfUndergraduateStudents ?nu.
        ?University a dbpo:University.
        ?University dbpo:state ?State.
        {
        SELECT ?State
            WHERE{
                ?State a dbpo:PopulatedPlace.
                ?State a dbpo:AdministrativeRegion.
                ?State dbpo:country dbpedia:United_States.
                ?State dbpo:capital ?Capital.
                FILTER(bound(?Capital))
            }
        }
    }

但是,它不会返回我的预期输出。它从一个州返回一所以上的学校。 有人可以指导我吗?

2 个答案:

答案 0 :(得分:5)

您不需要内部SELECT(它可以放在外部块中)。

FILTER(bound(?Capital))

- ?必须绑定资本。

然后你需要

GROUP BY ?State

将它放在内部SELECT中,并使用外部SELECT来查找具有该大小状态的实际大小(-ies)。

您的查询目前在技术上是非法的:

SELECT ?University ?State (MAX(?nu) AS ?size)

没有GROUP BY是错误的。您只能选择GROUP BY变量和聚合

答案 1 :(得分:2)

AndyS说:在这里做事的顺序是

  1. 查找每个州的本科生人数最多,
  2. 找到拥有该数量本科生的大学。
  3. 第一步是子查询,第二步是外部查询。 然后你明白了:

    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX dbpr: <http://dbpedia.org/resource/>
    PREFIX dbpo: <http://dbpedia.org/ontology/>
    PREFIX dbpprop: <http://dbpedia.org/property/>
    PREFIX dbpedia: <http://dbpedia.org/resource/>
    SELECT ?University ?State ?size
    WHERE{
        ?University dbpo:numberOfUndergraduateStudents ?size.
        ?University a dbpo:University.
        ?University dbpo:state ?State.
        {
        SELECT ?State (MAX(?nu) as ?size)
            WHERE{
                ?State a dbpo:PopulatedPlace.
                ?State a dbpo:AdministrativeRegion.
                ?State dbpo:country dbpedia:United_States.
                ?State dbpo:capital ?Capital.
                ?University dbpo:numberOfUndergraduateStudents ?nu.
                ?University a dbpo:University.
                ?University dbpo:state ?State.
                FILTER(bound(?Capital))
            }
            GROUP BY ?State
        }
    }