当前位置: 首页 > 面试题库 >

在Java代码中调用SPARQL查询(在DBPedia上)时出现HttpException错误

丌官远
2023-03-14
问题内容

我对使用Java代码的SPARQL端点有问题。

特别是,我有这个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;
    }
}

我想检索谓词为“ 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 ”

没有写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结果

如何用耶拿代码编写?


问题答案:

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


 类似资料:
  • Virtuoso 37000错误SP030:SPARQL编译器,第21行:“_new_south_wales”之前“,”处的语法错误SPARQL查询:#output-format:application/SPARQL-results+JSON define输入:default-graph-uri PREFIX owl:PREFIX xsd:PREFIX rdfs:PREFIX rdfs:PREFI

  • 问题内容: 我正在尝试使用耶拿创建一个SPARQL查询来查询DBpedia。 当我将查询与独立工具(Twinkle)一起使用时,该查询正在运行,但是当我将其插入此Java代码时,它将返回一个空集。 有什么想法我做错了吗? 问题答案: 问题是你的条款。删除它,一切都很好。有了该子句,我怀疑端点将查询限制在具有该名称的图上,但是不存在这样的图,因此没有结果。 令人困惑的是,查询似乎可以在http://

  • 问题内容: 是否有一个库,可以像JPA中那样以编程方式构建SPARQL查询,或者可以像使用for SQL 一样构建查询? 问题答案: 您可以使用两种方法在Jena中以编程方式构建查询:语法或代数。耶拿维基上有一个介绍。 使用代数,您将执行以下操作: (摘自Wiki页面) 不是(也不是预期的),但是那是其中的一些方式。您而不是AND,而您想要进行OR等。痛点是我的经验中的表达式:您可能想从字符串中解

  • 他们说现在com.hp.hpl.jena.sparql.Engine.Binding.BindingMap在这个版本中不是一个简单的类,而是一个接口。 如果是这样,那么如何在当前版本中运行sparql查询。请根据我分享的代码给出一个例子。提前道谢。

  • 问题内容: Lucene的新手在这里。我在Java客户端中将它与Hibernate一起使用,并且在特定查询中遇到此错误: 搜索适用于所有其他查询,即使结果集为空。我的测试数据库确实具有“ a”的记录。这有什么问题吗? 问题答案: “ a”是停用词,StandardAnalyzer会将其从查询中过滤掉。停用词是在您使用的搜索语言中足够普遍的词,并且对生成搜索结果没有意义。这是一个简短的列表,但是“

  • 给定以下模式: ...以及附加到列表查询listWaterQualities的以下解析器: ...和以下db表结构(主键uuid): ...并在AppSync控制台和通过代码运行查询。我要暂停了。 道歉如果这已经解决了,但我找不到相关的解决方案,有人能发现我的错误/问题吗。我忽略了什么,或者是明显的错误原因? 一如既往地感谢任何和所有的反馈和提前感谢!