2016-07-12 3 views
0

나는 DBpedia 모든 수학자을 얻으려면, 그래서 DBpedia's SPARQL service이 쿼리를 썼다 :경로에서 노드를 제외하는 방법은 무엇입니까?

SELECT DISTINCT ?person 
{ 
    ?person dct:subject ?category. 
    ?category skos:broader* dbc:Mathematicians. 
} 

이 문제는 범주 Mathematicians 인해 다음 유클리드 모두 포함 dbc:Euclid, 같은 카테고리에 오염 때문이다 기하학. 나는 이것들이 쿼리를 실패하게하는 이들 카테고리라고 생각한다.

Virtuoso 42000 Error TN ... : transient temp memory에서 1000000000 바이트를 초과했다. t_distinct, t_max 또는 더 많은 T_MAX_memory 옵션을 사용하여 검색을 제한하거나 풀을 늘리십시오.

많은 문제가있는 범주는 dbc:Wikipedia_categories_named_after_mathematicians입니다.

skos:broader* 경로에서 오류를 제거 할 수있는 이러한 범주를 무시할 수있는 방법이 있습니까?

SELECT DISTINCT ?person 
{ 
    ?person dct:subject ?category. 
    ?category skos:broader* dbc:Mathematicians. 
    FILTER (?category NOT IN (dbc:Euclid)) 
} 

을하지만 비르투 오조 여전히 skos:broader 계층을 통과해야하기 때문에 그 이행을 '소진, 오류를 제거하지 않습니다

+1

여기에 문제가 위키 백과의 카테고리를 기반으로하는 DBpedia 범주 계층 구조 오류에 대한 이유가 될 수있는, 즉 사이클을 포함 할 수 있다는 것입니다 생각 - 비록이 안 참으로 일어난다. – AKSW

답변

0

당신이 그들을 필터링하여 당신이 포함하지 않는 범주를 나열 할 수 있습니다 힙 메모리 '. 다른 방법으로는 특정 범주를 선택하거나 계층 구조의 일부를 탐색하는 방법이 있습니다.

특정 범주 UNION 문을 사용할 수 있지만 VALUES 바로 가기 간단한 구문입니다

SELECT DISTINCT ?person 
{ 
    VALUES ?category {dbc:Mathematicians dbc:Mental_calculators dbc:Lists_of_mathematicians} 
    ?person dct:subject ?category. 
} 

계층 구조의 일부를 쿼리를 들어, 당신은 몇 가지 속성 경로 표현식을 사용할 수 있습니다. 이것은 하나의 부모와 조부모를 얻을 것이다 :

SELECT DISTINCT ?person 
{ 
    ?person dct:subject ?category. 
    ?category skos:broader | (skos:broader/skos:broader) dbc:Mathematicians. 
    # filter as desired - FILTER (?category NOT IN (dbc:Euclid)) 
} 
관련 문제