2013-08-21 7 views
5

빈 가게에 그냥이 한 쿼드 추가 :에서 모든 쿼드을 검색하기위한 SPARQL을단일 쿼드 + 가장 기본적인 SPARQL 쿼리 = 예나 1 결과, 참깨 2 결과 - 누가 옳았습니까?

<http://x.com/s> <http://x.com/p> 2 <http://x.com/g> . 

그런 다음 밥 DuCharme의 책 'SPARQL 학습'당에서 찍은 SPARQL 쿼리를 (실행, 그래서 이것은 표준해야합니다 데이터 세트, 구현에 관계없이, 맞나요?) :

SELECT ?g ?s ?p ?o 
WHERE { 
{ ?s ?p ?o } 
UNION 
{ GRAPH ?g { ?s ?p ?o } } } 

하지만 다른 답변으로는 예나와 참깨가 답장합니다. 여기에 내가 볼 수있는 작업은 다음과 같습니다 (! 버전 2.10.0 - 아웃 - 오브 - 박스, 아니 구성을 변경) -

예나 포석 콘솔을 톰캣 6.0.37에 (정답은 내가 일을 이해) :

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

Sesame Workbench on Tomcat 6.0.37 (버전 2.7.3 - 구성 변경 없음) : 수동으로 위의 쿼드를 수동으로 추가하기 위해 Workbench의 'Add'기능을 사용했습니다 ('N -Quad는 데이터 포맷 '을 선택'에서) 드롭 다운 상자 '그런 다음 위의 쿼리 실행,'편집 상자를 업로드하고자하는 RDF 데이터를 입력 :

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
|     | <http://x.com/s> | <http://x.com/p> | 2 | 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

RDF를보기 시작한 누군가가 좀 무서워합니다. 여기서 내가 무엇을 놓치고 있습니까? 참깨는 '틀릴'수 없다고 가정합니다. 그래서 내 생각에 '내 해석'(또는 Bob의 쿼리가 '표준 SPARQL'이 아니므로 여러 가지 결과가 다른 결과를 반환 할 수 있습니다) - 모든 계발은 매우 어려울 것입니다 환영합니다 :)!

+3

'UNION'의 왼쪽은 기본 그래프에 대해 쿼리합니다.나는이 두 시스템의 기본 그래프에 포함 된 것과 차이가 있다고 생각합니다. 예를 들어 Jena에서 기본 그래프는 트리플을 추가하지 않으면 비어 있습니다. 참깨에서 기본 그래프는 명명 된 그래프의 합집합입니까? –

답변

7

@ Joshua Taylor가 그의 의견에서 지적한대로, Sesame과 Jena는 기본 그래프의 다른 해석을 사용합니다.

세서미에서 저장소 전체가 기본 그래프로 간주됩니다. 모든 명명 된 그래프의 모든 문과 명명 된 그래프가없는 모든 문. 따라서 기본 그래프를 쿼리하는 공용체의 첫 번째 인수는 성공하고 ?s, ?p?o (?g은 아님)을 바인딩하고 바인드합니다. 원래의 쿼드는 물론 명명 된 그래프이기 때문에 분명히 노조의 두 번째 인수가 성공하므로 두 가지 대답을 얻을 수 있습니다.

Jena는 기본적으로 "독점"기본 그래프를 사용합니다. 특정 명명 된 그래프에 명시 적으로 추가되지 않은 명령문 만 기본 그래프에 있습니다. 따라서 예나에서는 노조의 첫 번째 부분이 실패합니다. (예나의 기본 그래프에는 일치하는 문장이 없습니다.) 두 번째 부분이 성공하므로 1 개의 결과 만 얻습니다.

이상하게 들리 겠지만 둘 다 맞습니다. 차이점은 단순히 쿼리가 실행되는 데이터 셋이 설정되는 방법에 있습니다.

물론이 문제를 해결할 수있는 방법이 있습니다. Jena와 Sesame 모두에서 FROM (NAMED) 절을 추가하여 쿼리 된 데이터 집합을 명시 적으로 만들 수 있습니다. 세서메는 sesame:nil 그래프 이름을 제공하므로 명명 된 그래프가없는 문을 명시 적으로 쿼리 할 수 ​​있습니다. 또는 쿼리가 실행되는 데이터 집합 정의를 프로그래밍 방식으로 수정할 수 있습니다. Jena와 Sesame의 정확한 메커니즘은 약간 다르지만 둘 다 선택할 수 있습니다. (참깨에서 실행하기 전에 Dataset 오브젝트를 작성하고 쿼리를 제공 할 수 있습니다. Jena에서 실제 상점 또는 모델을 재구성 할 수 있다고 생각합니다. 다르게 동작하도록 쿼리를 실행).

+4

이전 의견을 게시 한 후 Jena에서 기본 그래프와 통합 그래프를 얻는 방법을 살펴 보았습니다. [문서] (http://jena.apache.org/documentation/tdb/datasets.html)에는 'urn : x-arq : UnionGraph'와 'urn : x-arq : DefaultGraph'의 두 가지 특수 그래프가 설명되어 있습니다. –

+4

컨텍스트를 통해 설정 한 경우 쿼리에있을 필요가 없습니다. TDB.getContext(). set (TDB.symUnionDefaultGraph, true); 쿼리 기본 그래프는 명명 된 그래프의 합집합입니다. http://jena.apache.org/documentation/tdb/datasets.html을 참조하십시오. – AndyS