Мы используем фреймворк RDF4J (ранее sesame) для выполнения запросов sparql к удаленному хранилищу троек GraphDB.
Это успешно работает через интерфейс rdf4j HTTPRepository, который принимает URL-адрес сервера Graphdb и идентификатор репозитория, но не работает при использовании интерфейса rdf4j SPARQLRepository, который принимает URL-адрес конечной точки sparlq в качестве параметра.
При запуске запроса мы получаем исключение при проверке запроса.
"Не удалось получить протокол сервера; на этом сервере нет такого ресурса: http: /// sparql? Sparql? QueryLn = SPARQL & query =",
где http://<host:port>/sparql
- это то, что мы думаем, это URL-адрес конечной точки sparql. Это происходит как с библиотеками Sesame 2.7.8, так и с rdf4j M3, а также с двумя «из коробки», т.е. запускается с помощью сценария запуска, установки graphdb free 6.6.2 и 7.0.3. Это также происходит при попытке подключиться через интерфейс rdf4j SPARQLRepository к конечной точке sparlq http://factforge.net/sparql, который, как мы понимаем, работает на graphdb.
Мы полагаем, что фактический URL-адрес конечной точки sparql может быть не http: /// sparql, а каким-то другим, что мы не смогли найти в документации по graphdb. Оцените любой свет, который может светить на это место.
РЕДАКТИРОВАТЬ: Код, выполненный для конечной точки sparql Factforge:
final String endPoint = "http://factforge.net/sparql";
final String query = "Select distinct ?airport where {?airport a dbp-ont:Airport} LIMIT 2";
SPARQLRepository repository = new SPARQLRepository(endPoint,endPoint);
repository.initialize();
RepositoryConnection connection = repository.getConnection();
TupleQueryResult result = connection.prepareTupleQuery(QueryLanguage.SPARQL,query)
.evaluate();
Создается следующее исключение:
Caused by: org.eclipse.rdf4j.repository.RepositoryException: Failed to get server protocol; no such resource on this server: http://factforge.net/sparql?queryLn=SPARQL&query=Select+distinct+%3Fairport+where+%7B%3Fairport+a+dbp-ont%3AAirport%7D+LIMIT+2&infer=true
at org.eclipse.rdf4j.http.client.SparqlSession.executeOK(SparqlSession.java:1023)
at org.eclipse.rdf4j.http.client.SparqlSession.sendTupleQueryViaHttp(SparqlSession.java:787)
at org.eclipse.rdf4j.http.client.SparqlSession.getBackgroundTupleQueryResult(SparqlSession.java:684)
at org.eclipse.rdf4j.http.client.SparqlSession.sendTupleQuery(SparqlSession.java:341)
at org.eclipse.rdf4j.repository.sparql.query.SPARQLTupleQuery.evaluate(SPARQLTupleQuery.java:43)
... 1 more
Спасибо за помощь