2015-08-19 5 views
1

Я видел ответ на How to return SPARQL results in JSON-LD?, но он не удовлетворяет/работает. Я использовал JSON-LD Java Integration для кунжута, а также отдельную версию.Результаты поиска Sesame/Jena SPARQL для JSON-LD

Что я хочу достичь: Отправьте запрос SPARQL CONSTRUCT в конечную точку SPARQL через Blazegraph RemoteRepository (на основе Sesame/SAIL), получите результат RDF, сериализуйте этот RDF в JSON-LD. Результат RDF работает отлично.

Проблема заключается в том, что следующий код (с кунжутом) не производит ровно никакого вывода:

StringWriter sw = new StringWriter(); 
final RDFWriter writer = Rio.createWriter(RDFFormat.JSONLD, sw); 
//writer.getWriterConfig().set(JSONLDSettings.JSONLD_MODE, JSONLDMode.COMPACT); 
GraphQueryResult queryResults; 
Rio.write(QueryResults.asModel(queryResults), writer); 

Я также использовал преобразование к внутренней модели Jena, потому что я знаю, что Jena JSON-LD выход отлично работал в другом боковом проекте. К сожалению, такой же подход не подходит для преобразования в Йену.

Мой код с Sesame to Jena Adapter:

while(queryResults.hasNext()) { 
    JenaUtils.asJenaStatement(); 
} 
StringWriter sw = new StringWriter(); 
// JenaUtils.getModel() returns the Jena model with the added statements above 
RDFDataMgr.write(sw, JenaUtils.getModel(), RDFFormat.JSONLD); 

Что я могу сделать сейчас?

+0

Здесь недостаточно информации, чтобы ответить на этот вопрос, но проблема в вашем конце, а не в сезаме или Йене. Выполняя ваш код кунжута, я не могу воспроизвести эту проблему: когда я создаю непустой «GraphQueryResult» и запускаю его через ваш код, выводя его в System.out (вместо использования StringWriter), я получаю вывод просто отлично. Таким образом, либо проблема заключается в том, как вы получаете «GraphQueryResult» (вы уверены, что он не пуст?), Или это происходит в том, что вы делаете с «StringWriter» после этого. –

+0

Похоже, я был немного преждевременным, чтобы заявить, что это «на твоем конце». Благодарим за предоставленный ответ, полезный, чтобы узнать об этой несовместимости библиотеки. –

ответ

1

Хорошо, проблема была не в моем процессе, упомянутом выше.

Проблема была вызвана из-за подавленного исключения в библиотеке интеграции json-ld Sesame несовместимой версией HTTP-клиента в Blazegraph.

java.lang.NoClassDefFoundError: org/apache/http/impl/client/SystemDefaultHttpClient 

привело к тому, что GraphQueryResults не обработал json-ld. Исключение произошло из-за несовместимой версии клиента клиента Blazegraph (4.1.3), которая переопределила версию клиентского клиента json-ld (> 4.1.3).

Вы должны переопределить зависимость вашего проекта по HTTP Client со следующим:

<!-- necessary for (sesame) json-ld integration, --> 
<!-- because BlazeGraph uses an older version. See https://github.com/jsonld-java/jsonld-java/issues/64 --> 
    <dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <version>4.4</version> 
    </dependency> 

Я надеюсь, что это минимаркет сейф чье-то время!

Смежные вопросы