Ошибка HttpException при вызове запроса SPARQL (в DBPedia) в коде Java

У меня проблема с конечной точкой SPARQL, использующей код Java.

В частности, у меня есть этот класс Java:

public class example {

    public static void main(String[] args) {

        String value = "http://dbpedia.org/resource/Fred_Guy";

        example exam = example();
        QueryExecution qe = exam.query(value);
        ResultSet results = ResultSetFactory.copyResults( qe.execSelect() );

    }


    public QueryExecution query(String stringa){

        ParameterizedSparqlString qs = new ParameterizedSparqlString( "" +
                "prefix dbpediaont: <http://dbpedia.org/ontology/>\n" +
                "prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
                "\n" +  
                "select ?resource where {\n" +
                "?mat rdf:type ?resource\n" +
                "filter strstarts(str(?resource), dbpediaont:)\n" +
                "}" );


        Resource risorsa = ResourceFactory.createResource(stringa);
        qs.setParam( "mat", risorsa );

        QueryExecution exec = QueryExecutionFactory.sparqlService( "http://dbpedia.org/sparql", qs.asQuery() );

        ResultSet results = ResultSetFactory.copyResults( exec.execSelect() );

        while ( results.hasNext() ) {

            System.out.println( results.next().get( "resource" ));
        }

        // A simpler way of printing the results.
        ResultSetFormatter.out( results );

        return exec;
    }
}

Я хочу получить объекты ресурса "http://dbpedia.org/resource/Fred_Guy" чей предикат "RDF: тип". Но у меня есть эта ошибка, которую я не понимаю:

Exception in thread "main" HttpException: 500
    at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execGet(HttpQuery.java:340)
    at com.hp.hpl.jena.sparql.engine.http.HttpQuery.exec(HttpQuery.java:276)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:345)
    at MyPackage.example.main(example.java:19)

Почему я получаю эту ошибку?

Я пытаюсь выполнить этот запрос на

"http://dbpedia.org/sparql"

без записи strstarts, и я получаю эту ошибку:

Virtuoso 37000 Error SP031: SPARQL compiler: No one quad map pattern is suitable for GRAPH <http://dbpedia.org> { "http://dbpedia.org/resource/Fred_Guy" <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?resource } triple at line 7

SPARQL query:
define sql:big-data-const 0 
#output-format:text/html
define sql:signal-void-variables 1 define input:default-graph-uri <http://dbpedia.org> prefix dbpediaont: <http://dbpedia.org/ontology/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select ?resource where {
"http://dbpedia.org/resource/Fred_Guy" rdf:type ?resource
}

Что я здесь делаю неправильно?

Я попытался написать этот код в Virtuoso:

prefix dbpediaont: <http://dbpedia.org/ontology/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select ?resource where {
dbpedia:Fred_Guy rdf:type ?resource
}

результаты SPARQL

Как я могу написать это в коде Jena?


person Musich87    schedule 07.07.2014    source источник


Ответы (1)


У вас тут два вопроса. В конце вашего вопроса вы используете запрос без фильтра, но он отличается от запроса, встроенного в ваш код. Если вы используете запрос, встроенный в ваш код на конечной точке DBpedia, вы получите очень четкое сообщение об ошибке:

Virtuoso 22023 Error SL001: The SPARQL 1.1 function STRSTARTS() needs a string value as 2d argument

SPARQL query:
define sql:big-data-const 0 
#output-format:text/html
define sql:signal-void-variables 1 define input:default-graph-uri <http://dbpedia.org> prefix dbpediaont: <http://dbpedia.org/ontology/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

select ?resource where {
?mat rdf:type ?resource
filter strstarts(str(?resource), dbpediaont:)
}

Ключ

Функция SPARQL 1.1 STRSTARTS() требует строкового значения в качестве аргумента 2d.

Вам нужно написать dbpediaont: с str(), так как это IRI, а не строка:

filter strstarts(str(?resource), str(dbpediaont:))
person Joshua Taylor    schedule 07.07.2014