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 ?resourcen" +
                "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;
    }
}

我想检索谓词为"RDF:type"的资源"http://dbpedia.org/resource/Fred_Guy"的对象。但是我有这个错误,我不明白:

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 "

不写字符串,我得到这个错误:

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结果

我如何用耶拿代码写它?

这里有两个查询。在问题的最后,您使用了一个没有过滤器的查询,但这与代码中嵌入的查询不同。如果在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参数

你需要用str()dbpediaont:,因为它是一个IRI,而不是字符串:

filter strstarts(str(?resource), str(dbpediaont:))

最新更新