Java中的HttpException 400 SPARQL

时间:2015-06-12 20:11:52

标签: java sparql jena dbpedia virtuoso

我正在尝试编写一个只会搜索dbpedia影片的查询,并找到包含关键字“Inception”的影片。该查询正在http://dbpedia.org/sparql,但不在我的java代码中。我正在使用jena库。

这是我的查询

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?Concept where {
?Concept a dbpedia-owl:Film.
?Concept rdfs:label ?label. FILTER (strStarts(str(?label), 'Inception')). } limit 10

这是我的Java函数

public static String extractDbpedia (String jenaString) {
    String result;
    String queryString =
            "prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>" +
            "prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>" +
            "prefix dbpedia-owl:<http://dbpedia.org/ontology/>" +
            "prefix xsd: <http://www.w3.org/2001/XMLSchema#>" +
            "SELECT * WHERE { " +
            "    SERVICE <http://141.117.3.88:8890/sparql> { " +
            "select ?Concept where { ?Concept a dbpedia-owl:Film. ?Concept rdfs:label ?label. FILTER (strStarts(str(?label), 'Inception')). } limit 10" +
            "    }" +
            "}" ;
    LogCtl.setCmdLogging();
    Query query = QueryFactory.create(queryString) ;
    try(QueryExecution qexec = QueryExecutionFactory.create(query, ModelFactory.createDefaultModel())) {
        ResultSet rs = qexec.execSelect();
        result = (ResultSetFormatter.asText(rs));
    }
    return result;

我收到错误HttpException:400,我不知道为什么。 谢谢!

1 个答案:

答案 0 :(得分:2)

您的查询可能在DBpedia上有效,但应该在http://141.117.3.88:8890/sparql上执行的部分在http://141.117.3.88:8890/sparql不起作用。如果您尝试运行

prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix dbpedia-owl:<http://dbpedia.org/ontology/>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>

select ?Concept where {
  ?Concept a dbpedia-owl:Film.
  ?Concept rdfs:label ?label.
  FILTER (strStarts(str(?label), 'Inception')).
}

SPARQL Results (an error message)

那里,你得到:

Virtuoso 37000 Error SP030: SPARQL compiler, line 11: syntax error at 'strStarts' before '('

SPARQL query:
define sql:big-data-const 0 
#output-format:text/html
define sql:signal-void-variables 1 prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix dbpedia-owl:<http://dbpedia.org/ontology/>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>

select ?Concept where {
  ?Concept a dbpedia-owl:Film.
  ?Concept rdfs:label ?label.
  FILTER (strStarts(str(?label), 'Inception')).
}

服务器的about文本说:

  

版权所有©2015 OpenLink Software Virtuoso 06.01.3127版   Linux(x86_64-pc-linux-gnu),单服务器版

也许该版本的Virtuoso不支持所有SPARQL 1.1功能?您需要检查Virtuoso文档,但基于 Does Virtuoso versions <=6.0 support SPARQL 1.1? ,听起来您所拥有的版本6.01可能不完全支持SPARQL 1.1。另一方面,公共DBpedia端点is running a 7.x version

  

版权所有©2015 OpenLink Software Virtuoso版本07.20.3213 on   Linux(x86_64-redhat-linux-gnu-FX2),单服务器版