Я пытаюсь использовать Jena для записи в локальный бесплатный автономный репозиторий GraphDB (версия 8.5.0).
Что я пробовал
(1) Прямое использование из Йены
Я использовал этот фрагмент кода Jena 3.7.0:
String strInsert =
"INSERT DATA {"
+ "<http://dbpedia.org/resource/Grace_Hopper> "
+ "<http://dbpedia.org/ontology/birthDate>"
+ " \"1906-12-9\"^^<http://www.w3.org/2001/XMLSchema#date> .}";
UpdateRequest updateRequest = UpdateFactory.create(strInsert);
UpdateProcessor updateProcessor = UpdateExecutionFactory.createRemote(updateRequest,
"http://localhost:7200/repositories/PersonData");
updateProcessor.execute();
что приводит к следующему исключению
org.apache.jena.atlas.web.HttpException: 415 -
at org.apache.jena.riot.web.HttpOp.exec(HttpOp.java:1091)
at org.apache.jena.riot.web.HttpOp.execHttpPost(HttpOp.java:718)
at org.apache.jena.riot.web.HttpOp.execHttpPost(HttpOp.java:501)
at org.apache.jena.riot.web.HttpOp.execHttpPost(HttpOp.java:459)
at org.apache.jena.sparql.modify.UpdateProcessRemote.execute(UpdateProcessRemote.java:81)
at org.graphdb.jena.tutorial.SimpleInsertQueryExample.main(SimpleInsertQueryExample.java:91)
На стороне GraphDB я получаю следующую ошибку:
[INFO ] 2018-06-29 11:33:05,605 [repositories/PersonData | o.e.r.h.s.ProtocolExceptionResolver] Client sent bad request ( 415)
org.eclipse.rdf4j.http.server.ClientHTTPException: Unsupported MIME type: application/sparql-update
(2) GraphDB через Йену Фусеки
В качестве альтернативы я изучил документацию GraphDB, в которой говорится, что доступ к GraphDB можно получить с помощью сервера Jena Joseki, теперь Fuseki. Но для этого необходимо настроить Fuseki для чтения GraphDB как набора данных Jena, а затем доступа к нему через адаптер Ontotext Jena com.ontotext.jena.SesameDataset
. Но я не могу найти библиотек GraphDB, которые включают этот класс.
(3) Доступ к GraphDB с помощью RDF4J
Доступ к GraphDB из RDF4J работает без проблем:
Repository repository = new HTTPRepository(GRAPHDB_SERVER, REPOSITORY_ID);
repository.initialize();
RepositoryConnection repositoryConnection = repository.getConnection();
repositoryConnection.begin();
Update updateOperation = repositoryConnection.prepareUpdate(QueryLanguage.SPARQL, strInsert);
updateOperation.execute();
try {
repositoryConnection.commit();
} catch (Exception e) {
if (repositoryConnection.isActive())
repositoryConnection.rollback();
}
Мой вопрос
Есть ли способ эффективно получить доступ к GraphDB из Йены? Я видел этот связанный с этим вопрос SO, но я надеялся на лучший подход .