我正在尝试创建一个基本的DBpedia应用程序(仅用于测试)。当我使用此查询时:
SELECT ?person WHERE {
?person dbo:birthPlace:Norway ?person
}
我收到以下消息:
SPARQL编译器,第6行:''之前'}'
中的未定义名称空间前缀
有人可能会告诉我我做错了什么吗?它适用于DBpedia查询测试程序。
package jena_test;
import java.io.Writer;
import java.sql.ResultSet;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
public class Dbpedia {
String test = "123";
static String sparqlQueryString="PREFIX dbo:<http://dbpedia.org/ontology/> "
+ "SELECT ?person "
+ "WHERE { ?person dbo:birthPlace dbo:Norway } ";
public static void main(String[] args) {
// TODO Auto-generated method stub
Model model = ModelFactory.createDefaultModel();
Query query = QueryFactory.create(sparqlQueryString);
QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", sparqlQueryString);
try {
com.hp.hpl.jena.query.ResultSet results = qexec.execSelect();
for ( ; results.hasNext() ; )
{
QuerySolution soln = results.nextSolution() ;
String x = soln.get("Concept").toString();
System.out.print(x +"\n");
}
}
finally { qexec.close() ; }
}
}
答案 0 :(得分:3)
我无法让你的例子在dbpedia上工作,并假设你打算在某处定义dbo命名空间,因为它抱怨不知道dbo是什么。
例如
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT ?person WHERE { ?person dbo:birthPlace dbpedia:Norway }
哪个有效。但它会回归你想要的吗?
答案 1 :(得分:3)
正如KevinY's answer指出的那样,您需要定义您使用的命名空间。在the public DBpedia SPARQL endpoint上,为您预定义了许多名称空间,包括dbpedia-owl:
和dbpedia:
。使用这些,您的查询应该类似于以下内容。 (我添加了limit 50
,以减少用户点击链接对DBpedia施加的负担。)
select ?person where {
?person dbpedia-owl:birthPlace dbpedia:Norway .
}
limit 50
在对KevinY的回答的评论中,您链接了一些pastebin代码(但实际上,所有相关代码都应包含在问题中;请更新您的问题!),其中查询定义为
static String sparqlQueryString="PREFIX dbo:<http://dbpedia.org/ontology/> "
+ "SELECT ?person "
+ "WHERE { ?person dbo:birthPlace dbo:Norway } ";
,在一些字符串连接之后,是:
PREFIX dbo:<http://dbpedia.org/ontology/>
SELECT ?person
WHERE { ?person dbo:birthPlace dbo:Norway }
不与KevinY发布的代码相同。请注意,在工作查询中,birthPlace
以dbpedia-owl:
为前缀,即本体的命名空间,而Norway
是一个简单的DBpedia资源,以{{1}为前缀}。这意味着查询中的IRI与工作查询中的IRI非常不同。我提出的工作查询产生了很多结果。实际上,修改后的版本:
dbpedia:
表示DBpedia包含1694名出生于挪威的已知人员。