2017-01-27 8 views
0

ARC2 기반의 RDF 저장소 설정이 있으며 일부 데이터로 채워져 있습니다. 나는를 실행하여 app:id 특성을 갖는 것들을 제외 할 때ARC2에서 작동하는`filter not exists` 쿼리를 얻는 방법은 무엇입니까?

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX app: <http://example.com#> 

SELECT ?person 
WHERE { 
    ?person rdf:type ?type . 
    FILTER (?type = vcard:Individual || ?type = foaf:Person) 
    FILTER NOT EXISTS { 
    ?person app:id ?id 
    } 
} 

: 다음 쿼리는 내가없이 FILTER NOT EXISTS 부분이 를 실행할 때 예상되는 결과 (유형 vcard:Individual 또는 foaf:Person의 모든 것들을 URI를) 반환 전체 쿼리는 다음과 같은 메시지와 함께 실패합니다

Incomplete FILTER in ARC2_SPARQLPlusParser 
Incomplete or invalid Group Graph pattern. Could not handle &quot;  FILTER NOT EXISTS { &quot; in ARC2_SPARQLPlusParser 

query validator on sparql.org에서 쿼리를 테스트 아무런 문제가 없습니다. 내가 빠진 쿼리 나 ARC2의 단점이 있습니까?

원하는 결과를 얻기 위해 ARC2를 사용할 수있는 다른 쿼리를 생각해보십시오.

답변

3

ARC2는 않습니다 하지 지원 SPARQL 1.1, 따라서, 당신은 일반적인 선택 사항-FILTER 패턴을 사용해야합니다 (구속()!) :

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX app: <http://example.com#> 

SELECT ?person 
WHERE { 
    ?person rdf:type ?type . 
    FILTER (?type = vcard:Individual || ?type = foaf:Person) 
    OPTIONAL { 
    ?person app:id ?id 
    } 
    FILTER (!BOUND(?id)) 
} 
+0

감사합니다 많이! https://jena.apache.org/tutorials/sparql_optionals.html에서이 부분을 발견했습니다. – hielsnoppe