Java 在DBPedia上查询SPARQL时出现错误HttpException:502

Java 在DBPedia上查询SPARQL时出现错误HttpException:502,java,sparql,jena,dbpedia,httpexception,Java,Sparql,Jena,Dbpedia,Httpexception,在DBPedia上执行查询时,SPARQL有问题 我有一个Java类: public class example { public static void main(String[] args) { String value = "http://dbpedia.org/resource/McLeod's_Daughters_(season_8)"; String object = "tsmgo"; example le = new e

在DBPedia上执行查询时,SPARQL有问题

我有一个Java类:

public class example {

    public static void main(String[] args) {

        String value = "http://dbpedia.org/resource/McLeod's_Daughters_(season_8)";
        String object = "tsmgo";

        example le = new example();
        QueryExecution qe = le.queryColumn(object, value);
        ResultSet results = ResultSetFactory.copyResults( qe.execSelect() );
    }


    public QueryExecution queryColumn(String object, String string) {
        ParameterizedSparqlString qs = new ParameterizedSparqlString( "" +
                "prefix dbpediaont: <http://dbpedia.org/ontology/>\n" +
                "prefix dbpedia: <http://dbpedia.org/resource/>\n" +
                "prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
                "prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#>\n" +
                "\n" +  
                "select ?ob where {\n" +
                "?subj rdfs:label ?ob\n" +
                "FILTER (contains(?ob, ?obj) )\n" +
                "}" );


        Resource risorsa = ResourceFactory.createResource(string);
        qs.setParam( "subj", risorsa );

        Literal obj2 = ResourceFactory.createPlainLiteral(object);
        qs.setParam( "obj", obj2 );

        System.out.println( qs );

        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( "ob" ));
                }

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

        return exec;
    }

}
此错误与帖子回复中报告的错误不同

我还尝试执行主题为“”的同一查询,以确保查询正确执行。 特别是,我得到了一些查询的结果,所以并不是所有的查询都被拒绝。这种行为可以由DBPedia的某些缓存机制给出
为什么会出现这个错误?我做错了什么?

如果您在尝试对DBpedia运行查询时遇到问题,您必须尝试的最重要的调试技术之一是打印查询、复制查询并将其粘贴到基于web的端点。在这种情况下,如果将以下查询复制并粘贴到中,则会收到解释502错误的以下消息:

选择?ob where{

这个问题似乎离题了,因为它是由一个问题引起的,这个问题在撰写本文时可以重现,但在DBpedia维护完成后将无法重现。你确定吗?如果我现在尝试(durint DBpedia维护),这些值是:String value=“DBpedia.org/resource/Adriano_Celentano”;String object=“Adriano”;'查询在Java代码中正确执行,而在Virtuoso Endpoint中,我得到:'您当前尝试访问的网站目前正在维护中。对于由此造成的不便,我们深表歉意。'您之前是否运行过该查询,该查询可能会让upstrem代理缓存结果?我确实得到了您描述的行为。'如果我使用Adriano Celentano和Adriano运行查询,我会得到结果,但是如果我使用不同的字符串,例如,“Celen”而不是“Adriano”,我仍然得到了502。我想你只是幸运地得到了一个已经缓存的查询结果。只是出于好奇,Java有缓存机制?我没有任何设置。我不知道Java是否有,但我不希望它在这种情况下使用任何缓存。我希望每天提供大量请求的DBpedia可能需要一些缓存减少实际查找SPARQL查询结果的服务器上的负载。如果同一个问题出现两次,为什么要让它搜索两次数据?为什么不只搜索一次(相反)前面的代理将相同的结果发送两次?这很有趣。您之前运行过该查询吗?是否可能缓存了结果?如果您尝试运行一个以前没有运行过的查询会怎么样?也许您是对的。我尝试运行一个带值的查询​​从未被用作“”和“Freddie”,我也会犯同样的错误。
Exception in thread "main" HttpException: 502
    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.queryColumn(example.java:176)
    at MyPackage.example.main(example.java:28)