2011-03-01 4 views
13

SPARQL 쿼리를 사용하여 DBpedia 리소스 (Person)에 대한 정보를 검색하려고합니다. 동일한 URI를 매개 변수화하여 모든 Person에 대한 데이터를 검색하는 동일한 쿼리를 사용하고 싶습니다. 특정 자원에 대해 일부 속성이 존재하지 않을 수 있으므로 OPTIONAL 문을 사용하고 있습니다. 나는 다른 사람에 대해 같은 쿼리를 사용하는 경우, 그들은 이러한 속성이 없을 수 있기 때문에 내가 선택 사양 라벨, 추상적 페이지를 제외한 모든 떠 났어요SPARQL OPTIONAL을 사용하여 존재할 수있는 자원의 속성을 올바르게 검색하는 방법은 무엇입니까?

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
    PREFIX dbo: <http://dbpedia.org/ontology/> 
    PREFIX dbpprop: <http://dbpedia.org/property/> 
    PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
    SELECT DISTINCT ?label ?abstract ?placeOfBirth 
     ?birthPlace ?birthDate ?deathDate ?page ?thumbnail 
    WHERE { 
     <http://dbpedia.org/resource/Neil_Simon> rdfs:label ?label ; 
      dbo:abstract ?abstract ; 
      foaf:page ?page . 
     OPTIONAL { 
      <http://dbpedia.org/resource/Neil_Simon> dbpprop:placeOfBirth ?placeOfBirth ; 
       dbpprop:birthPlace ?birthPlace ; 
       dbo:birthDate ?birthDate ; 
       dbo:deathdate ?deathDate ; 
       dbo:thumbnail ?thumbnail . 
     } 
     FILTER (LANG(?label) = 'en')  
     FILTER (LANG(?abstract) = 'en') 
    } 
    LIMIT 1 

: 여기 내 쿼리입니다. 문제는 선택 속성 중 아무 것도 결과에 나타나지 않는다는 것입니다. Neil Simon의 경우 birthDate, birthPlace 및 미리보기 이미지의 값인 http://dbpedia.org/resource/Neil_Simon이 있음을 알 수 있습니다. 그러나 쿼리를 실행하면 해당 값이 표시되지 않습니다. DBpedia SPARQL query. 내가 뭘 잘못하고 있으며, 어떻게 선택적으로 그 속성을 검색 할 수 있습니까?

답변

14

선택적 구성을 사용했지만 맵 패턴 자체는 일치하는 모든 속성을 필요로합니다. 출생지, 생년월일, 사망 일자 및 미리보기 이미지가있는 경우에만 내부 선택적 구성이 충족됩니다.

선택 구성을 여러 선택적 구성으로 분해하는 것이 좋습니다.

+0

물론, 그렇게 많은 의미가 있습니다! 나는 OPTIONAL 구문을 각 속성에 대해 별도의 구문으로 분리하여 완벽하게 작동합니다. –

+0

우리와 함께 작업 코드를 공유하십시오. –