gpt4 book ai didi

java - 如何在java中将Sparql端点写入DBpedia

转载 作者:行者123 更新时间:2023-12-01 22:42:53 24 4
gpt4 key购买 nike

下面是获取美国地点的 sparql 查询,当我在 virtuoaso SPARQL 上运行此代码时,我得到了所需的输出。但是当我用 java 编写这段代码时,它没有给出输出。

  select (str(?label) as ?strLabel) where {  
?place a dbpedia-owl:PopulatedPlace ;
dbpedia-owl:country dbpedia:United_States ;
rdfs:label ?label
filter langMatches( lang(?label), 'en' )`
}
limit 100

据我所知,我写了它,但没有给出任何结果。

   public class TestDbpedia {
public static void main(String[] args) {

String sparqlQueryString = " select (str(?label) as ?strLabel) "+
"where {"+
"?place a dbpedia-owl:PopulatedPlace ;"+
"dbpedia-owl:country dbpedia:United_States ;"+
"rdfs:label ?label"+
"filter langMatches( lang(?label), 'en' )"+
"limit 10"+
"}";

Query query = QueryFactory.create(sparqlQueryString);

QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query);


try {
ResultSet results = qexec.execSelect();
for ( ; results.hasNext() ; )
{
QuerySolution soln = results.nextSolution() ;
System.out.println(soln.get("?strLabel"));
}
}
catch(Exception e){

e.printStackTrace();
}

finally { qexec.close(); }

}
}

最佳答案

您需要声明前缀

第一,您需要在 SPARQL 查询中包含必要的前缀。也就是说,您需要编写

prefix dbpedia-owl: <http://dbpedia.org/ontology/>

其余部分位于查询开头。据我所知,预定义的前缀仅适用于您使用基于浏览器的 Web 界面进行的查询。

您需要使用一些空格或换行符

当您从字符串构造查询时,您需要非常小心换行符和空格等。例如,Java 行

"rdfs:label ?label"+                                
"filter langMatches( lang(?label), 'en' )"+

最终给你一个包含的查询字符串

rdfs:label ?labelfilter langMatches( lang(?label), 'en' )

您最终得到了无效的查询。在字符串中添加一些空格或换行符。

您需要编写正确的查询

您的查询未正确结束。你有

"filter langMatches( lang(?label), 'en' )"+
"limit 10"+
"}";

这会给你(一旦你添加一些换行符和空格):

  filter …
limit 10
}

这不是正确的语法。你需要有

  filter …
}
limit 10

如果没有收到有用的错误消息,请打印并检查您的查询

令我惊讶的是,DBpedia 没有给您提供更有用的错误消息(或者也许确实给了您;毕竟您没有向我们展示堆栈跟踪)。您可以在 sparql.org's query validator 测试您的查询, 也。另外,如果您使用 Jena 的 ParameterizedSparqlStrings 之一,您可以事先解析查询,这应该会捕获语法错误。

关于java - 如何在java中将Sparql端点写入DBpedia,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com