我希望在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))
}
}
}
但是,它不会返回我的预期输出。它从一个州返回一所以上的学校。 有人可以指导我吗?
答案 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说:在这里做事的顺序是
第一步是子查询,第二步是外部查询。 然后你明白了:
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
}
}