2014-04-30 6 views
1

SPARQL/XML 결과 스트림 (Virtuoso 서버에서 되돌아 오는 일이 있습니다)을 가지고 있으며, 스트림에서 다시 스트림으로 처리하고 싶습니다. http 연결.SPARQL/XML 스트림 (Vitruoso의 출력)을 처리하기 위해 Sesame을 사용합니다.

참깨는 이것을하기에 매우 훌륭한 라이브러리를 가지고 있습니다. 당신이 전체 참깨를 말하면 쉽게 만들어지고 구현되었습니다. 하지만 세서미가 요청을 생성하는 대신 전체 참깨를 말하지 않는 다른 HTTP 연결을 통해 요청을 수행하고 있으며 참깨 라이브러리를 만들 수있는 즉각적인 방법을 알지 못합니다.

참깨와 함께 당신은 RepositoryConnection이 (TupleQueryResultHandlerBase를 확장 무언가)를 TupleQuery.prepareTupleQuery로를 만든 다음 .evaluate에게 솔루션 핸들러를 통과 할 수 있습니다.

솔루션 처리기와 InputStream을 전달할 수있는 몇 가지 클래스가 있다고 가정하고 참깨 클래스가 구문 분석, 버퍼링 및 콜백 등을 처리하도록합니다. 코드는 다음과 같습니다. 저기,하지만 몇 시간 동안 출처를 조사 중이었고 내가 서클에있는 것처럼 보였습니다.

괜찮은 라이브러리 나 솔루션이 있다면 포인터를 기꺼이 가져 가겠지만 다른 참깨 관련 코드를 활용할 것이라고 생각했습니다.

답변

2

참깨의 QueryResultIO 유틸리티를 사용할 수 있습니다. 가장 간단한 방법은 스트림을 쿼리 결과 개체로 구문 분석하도록 허용하는 것입니다. 좋아요 :

InputStream in = ...; 
TupleQueryResult result = QueryResultIO.parse(in, TupleQueryResultFormat.SPARQL); 

위의 내용은 결과 객체를 만들기 위해 고정되어 있습니다. 프로세싱을보다 잘 제어하고 싶다면 TupleQueryResultParser 객체를 생성하고 자신의 TupleQueryResultHandler 구현을 할당 할 수 있습니다. 당신은 참깨의 이전 버전 (2.6 이상)로 작업하는 경우

TupleQueryResultParser parser = QueryResultIO.createParser(TupleQueryResultFormat.SPARQL); 

TupleQueryResultHandler handler = new MyCustomStreamingResultHandler(); 
parser.setQueryResultHandler(handler); 

parser.parseQueryResult(in); 

또는 같은

: : 이런 식으로 뭔가가

TupleQueryResultHandler handler = new MyCustomStreamingResultHandler(); 
parser.setTupleQueryResultHandler(handler); 

parser.parse(in); 

참깨는 TupleQueryResultHandler의 여러 재고 구현을 제공하지만 매우이다 파서 (parser) 출력 처리를 완벽하게 제어하고 싶다면 직접 작성하십시오.

+0

감사합니다. parser.setQueryResultHandler 대신 대답에 "오타"가 있다고 생각하지만 parser.setTupleQueryResultHandler 여야합니다. – DrLivingston

+0

적어도 6 자 이상이어야합니다. "Tuple"을 추가 할 수 없으므로 "(편집 됨)"을 하단에도 추가해야합니다. 이상한. – DrLivingston

+0

미안하지만 내 원래의 대답은 실제로 정확했다. 'setTupleQueryResultHandler'는 더 이상 사용되지 않으며,'setQueryResultHandler'가 권장되는 방법입니다. Javadoc에 대한 참조를 추가합니다. 비록 그 논리에 의해'parse' 메쏘드를 사용하는 것은 잘못되었습니다. 이제 해결되었습니다. –