Jena SPARQL Выполнение запроса зависло - PullRequest
0 голосов
/ 16 мая 2018

Я использую конечную точку Virtuoso SPARQL для выполнения запроса. но пока я выполняю запрос, мое выполнение зависло.

QueryExecution qexec = null;
    try {
        System.out.println("now inside");
        String queryString = "PREFIX  ns:  <http://example.org/ns#>" +
                "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\r\n" + 
                "SELECT  ?title ?price" + 
                "  {" + 
                "    ?x ns:price ?p ." + 
                "    ?x ns:discount ?discount ." + 
                "    ?x <http://purl.org/dc/elements/1.1/title> ?title . " + 
                "    BIND ('12'^^xsd:integer AS ?price)" + 
                "    FILTER( ?price < 20 )" + 
                "  }";
        System.out.println(queryString);
        System.out.println("inside the sparql just before call");
        qexec = QueryExecutionFactory.sparqlService("http://192.168.99.100:8890/sparql", queryString);

        ResultSet results = qexec.execSelect();
        System.out.println("inside the sparql just after call");
        // write to a ByteArrayOutputStream
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ResultSetFormatter.outputAsJSON(outputStream, results);

        String json = outputStream.toString();
        System.out.println(json);

        return json;
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        qexec.close();
    }
    return "Error";

образец данных

@prefix dc:   <http://purl.org/dc/elements/1.1/> .
@prefix :     <http://example.org/book/> .
@prefix ns:   <http://example.org/ns#> .

:book1  dc:title     "SPARQL Tutorial" .
:book1  ns:price     42 .
:book1  ns:discount  0.2 .

:book2  dc:title     "The Semantic Web" .
:book2  ns:price     23 .
:book2  ns:discount  0.25 .

При выполнении qexec.execSelect() он не должен давать ни ошибки, ни результата вывода. Но это случается иногда.

Как при трассировке он распечатает все детали вплоть до следующего утверждения

System.out.println("inside the sparql just before call");

но не после этого.

Как мне отследить это? Как мне выяснить, что вызывает проблему?

Примечание. Мой запрос очень маленький, поэтому времени не возникает.

Также я замечаю, что после обновления новой обновленной версии Jena 3.7.0 я получаю эту проблему

1 Ответ

0 голосов
/ 30 мая 2018

Если я правильно прочитал комментарии, я думаю, что проблема была решена путем изменения -

qexec = QueryExecutionFactory.sparqlService("http://192.168.99.100:8890/sparql", queryString);

- на -

QueryEngineHTTP qexec = new QueryEngineHTTP ("http://192.168.99.100:8890/sparql", queryString);

- что является обходным решениемэто не раскрывает причину первоначальной проблемы, но, тем не менее, прошло успешно.

...