2014-04-14 2 views
1

SPARQL을 사용하여 대학교 동문 목록을 추출하려고합니다.dbpedia에있는 기관의 모든 사람들을위한 SPARQL 쿼리

내가 온톨로지를 확인했습니다

내가이 필요합니다

SELECT * WHERE { 
    ?University dbpedia2:alumni ?Person . 
    } 

이해 듯 :

  • http://mappings.dbpedia.org/server/ontology/classes/University
  • http://mappings.dbpedia.org/server/ontology/classes/Person 내가이 쿼리, you can examine here 시도 , 이것은 peopl 대신에 count를 반환한다. 온톨로지가 그 속성이 포함한다고 말했듯이.

    나는 대학을 찾는 데 더 나은 직업을 찾은듯한 어딘가에서 this query을 찾았지만 매우 느립니다.

    SELECT * WHERE { 
        { <http://dbpedia.org/ontology/University> ?property ?hasValue } 
        UNION 
        { ?isValueOf ?property <http://dbpedia.org/ontology/University> } 
    } 
    

    은 또한 모든 사람들과 함께 시작하고 자신의 almae의 matres을 찾아 다른 길을 가고 in this form 시도 :

    SELECT * WHERE { 
        ?person dbpedia2:almaMater ?University 
        } 
    

    을하지만이 사람들의 공간을 통해 검색이 너무 가능성이 있기 때문에, 훨씬 느립니다 힘드는. 이것은 실제로 효과가 있지만 신청서에 다른 결과 집합을 반환합니다. 즉, 동창으로 대학에 등록 된 모든 사람들이 아니라 나열된 모범을 가진 모든 사람들을 반환합니다. 나에게 졸업생을 얻는 구문을 선호 할 것이다.

    대학에 등록 된 모든 동창을 반환하려면 어떻게해야합니까?

답변

3

DBpedia의 SPARQL 엔드 포인트 성능은 때때로 불안정 할 수 있습니다. 결국, 그것은 apublic 서비스이고 거대한 쿼리를위한 것이 아닙니다. 그럼에도 불구하고, 나는 당신이 너무 많은 문제없이 여기서 찾고있는 것을 얻을 수 있다고 생각합니다. 먼저, public SPARQL endpoint에서이 같은 쿼리가 얼마나 많은 결과를 확인할 수 있습니다

select (count(*) as ?nResults) where { 
?person dbpedia-owl:almaMater ?almaMater 
} 

SPARQL results (64928)

를 이제, 당신은 단지 큰 목록을 원한다면, 당신은 이런 식으로 그것을 얻을 것 . order by 쉽게 소비에 대한 결과를 구성 할 수 있지만, 기술적으로 필요하지 않습니다 : 다음, 당신은 ?almaMater에 몇 가지 추가 제한을해야하는 경우

select ?almaMater ?person where { 
?person dbpedia-owl:almaMater ?almaMater 
} 
order by ?almaMater ?person 

SPARQL results

, 예를 들면, 그것은 대학의 것을 보장하기 위해 그것들을 쿼리에 추가 할 수 있습니다. 예를 들어 :

select ?almaMater ?person where { 
?person dbpedia-owl:almaMater ?almaMater . 
?almaMater a dbpedia-owl:University . 
} 
order by ?almaMater ?person 

SPARQL results

+0

멋지다. 이해할 만하다.하지만 고등학교 나 군대와 같은 대학이 아니라면 동창이 될 수있는 것 같다. almaMater 특성은 educationalInstitution 오브젝트를 사용합니다. 죄송합니다. SPARQL을 처음 접해 보았습니다. 그렇지만이 객체를 유효한 형태로 제한하려면 위의 양식에서 하위 객체를 어떻게 사용합니까? – Mittenchops

+0

'? almaMater'가'dbpedia-owl : University' 타입의 것을 어떻게 제한 할 수 있는지 보여주는 답을 업데이트했습니다. –

2

귀하의 첫 번째 쿼리 :

SELECT * WHERE { 
    ?University dbpedia2:alumni ?Person . 
} 

단지 수를 반환하지 않습니다; 그것은 카운트와 개인 동문 모두를 반환합니다. 여기 dbpedia의 데이터는 품질이 좋지 않으며 dbpedia2:alumni 관계를 오용하는 여러 가지 트리플이 있습니다.

당신은 엔티티가 Person 해당 클래스의 구성원이 만족 것을 요구하는 두 번째 조건을 추가하여 카운트를 필터링 할 수 있습니다

이 매우 소수의 개인이로 태그 있다는 것입니다 실행을 참조하십시오 무엇
SELECT * WHERE { 
    ?university dbpedia2:alumni ?person . 
    ?person rdf:type <http://dbpedia.org/ontology/Person> 
} 

동창; 데이터는 놀라 울 정도로 부족합니다.

2

마지막 쿼리에서 거의 다 왔을 것입니다. 그러나 현재 ?University 변수를 대신 할 수있는 모든 리소스를 요청하고 있습니다. 당신은 단지 대학이 그 장소를 먹고 싶어, 당신은 더 그 변수를 제한하는 트리플 서로를 사용할 수 있습니다 (dbpedia-owlhttp://dbpedia.org/ontology/에 매핑되는 경우)이 ?University는 클래스 dbpedia-owl:University의 개별 될 수 있다는 것을 의미한다

SELECT * WHERE { 
    ?University a dbpedia-owl:University. 
    ?person dbpedia2:almaMater ?University. 
} 

.