我在使用Java Code时遇到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;
}
}
我想检索资源的对象&#34; http://dbpedia.org/resource/Fred_Guy&#34;其谓词&#34; RDF:type&#34;。但我有这个错误,我不明白:
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)
为什么我会收到此错误?
我试图在
上执行此查询&#34; http://dbpedia.org/sparql&#34;
没有写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
}
我如何用Jena代码编写它?
答案 0 :(得分:2)
你这里有两个问题。在问题的最后,您使用的查询没有过滤器,但这与查询中嵌入的查询不同。如果您使用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:))