2014-01-30 1 views
0

내가 좋아하는 뭔가가있다. 직관적으로 카운터에는 실제로 교차로에 속한 몇 가지 이름이 있습니다. 이것은 b (집합 A의) = b (집합 B의)이기 때문에 발생합니다. . 정확하게 =!의 의미는 무엇입니까? 이 문제를 어떻게 극복 할 수 있습니까?SPARQL 다른 운영자

+0

명명 된 그래프는 단지 트리플의 모음입니다. 그것의 트리플에 나타나는 자원을 소유하지는 않습니다. RDF 자원은 URI, 빈 노드 또는 리터럴입니다. URI는 어떤 그래프로 나타나도 상관 없습니다. 실제로 URI를 식별자로 사용하는 것의 큰 특징 중 하나입니다. 그것은 당신이 어떤 자원을 기술 할 수 있다는 것을 의미합니다. –

+0

URI가 표시되는 위치에 관계없이 동일하다는 점을 감안할 때 이것은 이전 질문 [Set SPARQL의 차이 설정] (http://stackoverflow.com/q/21391444/1281433)의 복제본처럼 보입니다. 다른 패턴을 사용하여 변수를 바인드합니다. 여전히 같은 문제입니다 : 만약 당신이'{? e : e, e in B}'를 원한다면'... ... e는 A의 원소입니다. {...? e는 B의 요소입니다.}'. –

답변

3

!=의 의미는 정확히 왼쪽 인수가 오른쪽 인수와 같지 않음을 나타냅니다. 그러나 FILTER는 가능한 모든 값 조합에 대해 평가됩니다. 따라서 공식화 된 쿼리는 의 모든 이름 값을 반환하며 일부 값은 ?y과 동일하지 않습니다.

SELECT DISTINCT ?name1 
WHERE { 
GRAPH <blabla> 
{ 
    ?k swrc:author ?x. 
    ?x foaf:name ?name1. 
} 
FILTER NOT EXISTS { 
    GRAPH <blabla2> 
    { 
     ?l swrc:author ?x. 
    } 
    } 

}

: 다시 ?y의 모든 값이 동일하지있는 에 대한 ?x의 이름 값을 얻고 싶다면

, 당신은 NOT EXISTS 절을 사용한다 이 방법을 사용하면 실제로 변수 ?y을 제거 할 수 있습니다. 두 번째 그래프에서도 첫 번째 그래프에서 찾은 사람 ?x이 발생하지 않았는지 확인하기 위해 조건을 변경합니다.