2013-03-17 3 views
1

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

:

나는이 시도. 한 주에서 한 개 이상의 학교를 돌려줍니다. 아무도 나를 안내 할 수 있습니까?

답변

5

내부 SELECT는 필요하지 않습니다 (외부 블록에 배치 할 수 있음).

FILTER(bound(?Capital)) 

-? 캐피탈은 바인딩되어야합니다.

은 그럼 당신은
GROUP BY ?State 

는 내부 SELECT이를 넣고, 상태를 그 크기가 실제 univerity (-ies)를 찾기 위해 외부 하나를 사용합니다.

귀하의 질의는 현재 기술적으로 불법입니다 : 없음 GROUP BY와

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

가 잘못된 것입니다. AndyS가 말한대로 당신은 변수에 의해 그룹을 선택하고

+0

답변 해 주셔서 감사합니다. 나는 네가 언급 한 것을했으나 여전히 나는 주에서 여러 번 대학을 얻고있다. 이는 각 주마다 최대 크기의 대학을 반환하지 않음을 의미합니다. 문제의 위치를 ​​알고 계십니까? – Sina

+2

[SPARQL 1.1 spec, §11.2] (http://www.w3.org/TR/sparql11-query/#groupby)에는 다음과 같은 내용이 포함되어 있습니다. "집계가 SELECT, HAVING 또는 ORDER BY의 쿼리 수준에서 사용되지만 GROUP 용어를 사용하지 않으면 모든 솔루션이 속한 단일 암시 적 그룹이됩니다. " 따라서 주어진 질의가 원래의 질문에 답하지는 않지만 합법적 인 것처럼 보입니다. (왜 DBpedia가 하나 이상의 응답을 리턴하는지, 나는 이해하지 못한다.) –

2

를 집계 할 수있는 여기 일을하는 순서를

  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 
    } 
} 
관련 문제