2016-11-02 15 views
1

gzip을 사용하여 응답이 인코딩 된 원격 triplestore에서 데이터를 요청하고 받아들이도록 dotNetRDF에게 어떻게 말합니까?dotNetRDF로 gzip 콘텐츠 인코딩 받기

SparqlHttpProtocolConnector의 LoadGraph 메서드에 대한 소스 코드를 보면 Accept-Encoding 헤더를 설정하는 메커니즘이 없거나 Content-Encoding 헤더를 처리 할 논리를 보지 못했습니다.

나는 수락 인코딩 설정 LoadGraph을 수정했는데, 내용은

IRdfReader parser = MimeTypesHelper.GetParser(response.ContentType); 
를 다시 올바른 콘텐츠 형식 및 내용 인코딩,하지만 응답을 처리하는 방법을 결정하는 코드의 라인 온다

및 GetParser에는 Content-Encoding을 고려하는 논리가 없습니다.

그러나 조각이있는 것처럼 보입니다. gzipped 파일을 처리하기위한 인프라가 있습니다.

내가 할 수있는 또 다른 방법이 있습니까, 아니면 새로운 기능 요청이 될까요?

감사합니다.

답변

2

SPARQLHttpProtocolConnector을 확장 한 다음 ApplyCustomRequestOptions 메서드를 재정 의하여 Accept-Encoding 헤더를 적용 할 수 있습니다.

은 응답의 Content-Encoding 헤더를 구분하지 않지만 대신 HttpWebRequest.AutomaticDecompression Property을 사용하여 응답 스트림의 자동 압축을 사용하도록 설정할 수 있습니다. 다시 말하지만,이 방법은 ApplyCustomRequestOptions 방법으로 설정할 수 있습니다. 응답에 대한

public class CompressedSparqlHttpProtocolConnector : SparqlHttpProtocolConnector 
{ 
    // Define appropriate constructors with the parameters you need e.g. 
    public CompressedSparqlHttpProtocolConnector(Uri serviceUri) 
: base(serviceUri) { }  

    protected override ApplyCustomRequestOptions(HttpWebRequest request) 
    { 
    // Request GZip encoded response, allow fallback to identity encoding 
    request.Headers[HttpRequestHeader.ContentEncoding] = "gzip;q=1.0, identity;q=0.5" 

    // Enable automatic decompression of the response 
    request.AutomaticDecompression = DecompressionMethods.GZip; 
    } 
} 
+0

감사 :

그래서 확장 클래스는 다음과 같이 될 것이다. 그러나 ApplyCustomRequestOptions는 SparqlHttpProtocolConnector의 기본 클래스 중 하나가 아닌 추상 클래스 인 BaseEndpoint에 정의됩니다. (SparqlHttpProtocolConnector는 BaseRequestOptions가 포함 된 BaseHttpConnector에서 파생되지만 해당 메서드를 재정의 할 수 없습니다.) – MWood

+0

또한 HttpRequestHeader.AcceptEncoding을 의미합니까? 해결 방법으로 제안한대로 파생 클래스를 만들었지 만 위의 기능을 추가하여 SparqlHttpProtocolConnector에서 전체 LoadGraph 기능을 해제했습니다. 올바른 방향으로 나를 가리켜 주셔서 감사합니다. – MWood