2012-03-21 2 views
3

SPARQL 문에 OPTIONAL 문구를 사용하는 데 문제가 있습니다. dbpedia를 다음과 같이 조정할 때 :혼란스러운 OPTIONAL - 사라지는 레코드

CONSTRUCT { ?guitarist rdfs:label ?name . ?guitarist rdfs:comment ?desc . ?guitarist dbpprop:placeOfBirth ?placebirth } 
WHERE { 
    ?guitarist dbpprop:wikiPageUsesTemplate <http://dbpedia.org/resource/Template:Infobox_musical_artist> . 
    ?guitarist rdfs:label ?name . 
    ?guitarist rdfs:comment ?desc . 
    ?guitarist dbpprop:placeOfBirth ?placebirth . 
    FILTER (lang(?name) = "en" && lang(?desc) = "en") 
} 

로저 워터스 생가 및 기타 데이터가 반환됩니다. 나는이 그것을 켤 때, 모든 Roger_Waters 기록이 누락 :

CONSTRUCT { ?guitarist rdfs:label ?name . ?guitarist rdfs:comment ?desc . ?guitarist dbpprop:placeOfBirth ?placebirth } 
WHERE { 
    ?guitarist dbpprop:wikiPageUsesTemplate <http://dbpedia.org/resource/Template:Infobox_musical_artist> . 
    ?guitarist rdfs:label ?name . 
    ?guitarist rdfs:comment ?desc . 
    OPTIONAL { ?guitarist dbpprop:placeOfBirth ?placebirth } 
    FILTER (lang(?name) = "en" && lang(?desc) = "en") 
} 

내가 잘못하고 있어요 - 내가 ... 전체 기록이 선택 사양 적용 후 누락하지 않는 가정

답변

4

DBpedia 엔드 포인트 너무 비싸다고 판단되는 쿼리에 대해서는 부분 결과를 반환합니다.

이 두 쿼리를 사용하여 SELECT COUNT(*) WHERE …을 수행하면 첫 번째 쿼리는 8k 결과를 반환하고 두 번째 쿼리는 60k 결과를 반환해야합니다. CONSTRUCT은 결과 당 2-3 개의 트리플을 생성해야하므로 첫 번째 쿼리는 16-24k 트리플을, 두 번째 쿼리는 120-180k를 반환해야합니다. 쿼리를 실행할 때 두 쿼리 중 정확히 10001 개의 트리플이 궁금합니다. 그래서 결과는 잘립니다.

시도 LIMITOFFSET (가능하면 ORDER BY).

+0

음, 기타리스트 dbpprop : shortDescription "British Musician"을 추가하여 결과를 제한하려고했습니다. WHERE 절에 constarint하지만 이제 빈 집합을 반환합니다 (http://dbpedia.org/page/Roger_Waters에 따라 반환해야 함). – deha