繁体   English   中英

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

[英]How can I write a query which returns the maximum value in SPARQL?

我想在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))
            }
        }
    }

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

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

FILTER(bound(?Capital))

-?资本必须受到约束。

那你需要

GROUP BY ?State

将其放入内部S​​ELECT中,然后使用外部SELECT查找具有该大小,状态的实际大学(-ies)。

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

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

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

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

  1. 找出每个州的本科生人数上限,
  2. 查找拥有相同数量的本科生的大学。

第一步进入子查询,第二步进入外部查询。 然后你得到这个:

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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM