Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jena SPARQL查询未检索结果_Java_Sparql_Jena_Dbpedia - Fatal编程技术网

Java Jena SPARQL查询未检索结果

Java Jena SPARQL查询未检索结果,java,sparql,jena,dbpedia,Java,Sparql,Jena,Dbpedia,我试图在Java中使用Jena来运行SPARQL查询,并从.ttl文件中检索结果。由于某些原因,无法检索到所需的结果。我查看了SPARQL查询,不确定错误在哪里,但没有结果被传递到我的ResultSet对象。下面是我的代码: BasicConfigurator.configure(); FileManager.get().addLocatorClassLoader(QuerySparql.class.getClassLoader()); Model model = FileManager.get

我试图在Java中使用Jena来运行SPARQL查询,并从
.ttl
文件中检索结果。由于某些原因,无法检索到所需的结果。我查看了SPARQL查询,不确定错误在哪里,但没有结果被传递到我的
ResultSet
对象。下面是我的代码:

BasicConfigurator.configure();
FileManager.get().addLocatorClassLoader(QuerySparql.class.getClassLoader());
Model model = FileManager.get().loadModel(My_Path//sample.ttl", "TTL");
String queryString = 
            "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" +
            "PREFIX foaf: <http://xmlns.com/foaf/0.1/name>\n" +
            "PREFIX dbo: <http://dbpedia.org/ontology/>\n" +
            "PREFIX db: <http://dbpedia.org/resource/>\n " +
            "SELECT ?team WHERE { \n" + 
            "?simeon foaf:name \"Simeon Ikudabo\"@en .\n" +
            "?simeon dbo:team ?team\n" +
            "}";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query, model);
try {
        ResultSet results = qexec.execSelect();
        while(results.hasNext()) {
            QuerySolution soln = results.nextSolution();
            Literal team = soln.getLiteral("team");
            System.out.println(team);
        }
    }
catch(Exception e) {
        e.printStackTrace(System.out);
}

System.out.println("Done");
BasicConfigurator.configure();
FileManager.get().addLocatorClassLoader(QuerySparql.class.getClassLoader());
Model model = FileManager.get().loadModel("My_Path//sample.ttl", "TTL");
String queryString = 
            "PREFIX db: <http://dbpedia.org/resource> \n" +
            "SELECT ?meshId WHERE{ \n" + 
            "?autism <http://xmlns.com/foaf/0.1/name> \"Autism\"@en .\n" +
            "?autism <http://dbpedia.org/ontology/meshId> ?meshId \n" +
            "}";

Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query, model);

ResultSet results = qexec.execSelect();
if(results.hasNext()) {
    System.out.println("has results!");
}
else {
    System.out.println("No Results!");
}

while(results.hasNext()) {
    QuerySolution soln = results.nextSolution();
    Literal r = soln.getLiteral("meshId");
    System.out.println(r);
}
如您所见,我创建了变量
?team
,它是本地dbpedia文件中的一个
dbpedia.org/ontology/team
<代码>?本例中的simeon是正在查找的运动员,simeon将反映
foaf:name“simeon Ikudabo”@en
。我最后的三重陈述是
?simeondbo:team?team
。这应该可以找到与Simeon Ikudabo相对应的dbpedia本体团队值。但是,由于某种原因,
ResultSet
无法检索此值。我在网上查看了我的查询可能有什么问题,但我不确定我的研究可能有什么问题。这是我的
.ttl
文件和数据,它的格式似乎正确:

<http://dbpedia.org/resource/Simeon_Ikudabo> <http://dbpedia.org/ontology/team> 
<http://dbpedia.org/resource/Indiana_Hoosiers> .
<http://dbpedia.org/resource/Simeon_Ikudabo> <http://www.xmlns.com/foaf/0.1/name> "Simeon Ikudabo"@en .
<http://dbpedia.org/resource/Nick_Mangeri> <http://dbpedia.org/ontology/team> <http://dbpedia.org/resource/Akron_Zips> .
<http://dbepdia.org/resource/Nick_Mangeri> <http://www.xmlns.com/foaf/0.1/name> "Nick Mangeri"@en .
以下是输出:

0 [main] DEBUG Jena  - Jena initialization
417 [main] DEBUG org.apache.jena.util.FileManager  - Add location: LocatorFile
419 [main] DEBUG org.apache.jena.util.FileManager  - Add location: ClassLoaderLocator
428 [main] DEBUG org.apache.jena.util.LocationMapper  - Failed to find configuration: file:location-mapping.rdf;file:location-mapping.n3;file:location-mapping.ttl;file:etc/location-mapping.rdf;file:etc/location-mapping.n3;file:etc/location-mapping.ttl
428 [main] DEBUG org.apache.jena.util.FileManager  - Add location: LocatorFile
431 [main] DEBUG org.apache.jena.util.FileManager  - Add location: LocatorURL
431 [main] DEBUG org.apache.jena.util.FileManager  - Add location: ClassLoaderLocator
457 [main] DEBUG org.apache.jena.riot.system.stream.JenaIOEnvironment  - Failed to find configuration: location-mapping.ttl;location-mapping.rdf;location-mapping.n3;etc/location-mapping.rdf;etc/location-mapping.n3;etc/location-mapping.ttl
1793 [main] DEBUG org.apache.jena.info  - System architecture: 64 bit
1912 [main] DEBUG org.apache.jena.info  - System architecture: 64 bit
2254 [main] DEBUG org.apache.jena.riot.system.stream.StreamManager  - Not mapped: My_Path//sample.ttl
2255 [main] DEBUG org.apache.jena.riot.system.stream.StreamManager  - open(My_Path//sample.ttl)
2255 [main] DEBUG org.apache.jena.riot.system.stream.StreamManager  - Not mapped: My_Path//sample.ttl
2288 [main] DEBUG org.apache.jena.riot.system.stream.StreamManager  - Found: My_Path//sample.ttl (LocatorFile)
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:j.0="http://dbpedia.org/ontology/"
    xmlns:j.1="http://dbpedia.org/ontology/"
    xmlns:j.2="http://www.xmlns.com/foaf/0.1/">
<rdf:Description rdf:about="http://dbpedia.org/resource/Nick_Mangeri">
    <j.1:team rdf:resource="http://dbpedia.org/resource/Akron_Zips"/>
</rdf:Description>
<rdf:Description rdf:about="http://dbepdia.org/resource/Nick_Mangeri">
    <j.2:name xml:lang="en">Nick Mangeri</j.2:name>
</rdf:Description>
<rdf:Description rdf:about="http://dbpedia.org/resource/Simeon_Ikudabo">
    <j.2:name xml:lang="en">Simeon Ikudabo</j.2:name>
    <j.0:team rdf:resource="http://dbpedia.org/resource/Indiana_Hoosiers"/>
 </rdf:Description>
</rdf:RDF>
0[main]调试Jena-Jena初始化
417[main]DEBUG org.apache.jena.util.FileManager-添加位置:LocatorFile
419[main]DEBUG org.apache.jena.util.FileManager-添加位置:ClassLoaderLocator
428[main]DEBUG org.apache.jena.util.LocationMapper-未能找到配置:文件:location-mapping.rdf;文件:location-mapping.n3;文件:location-mapping.ttl;文件:etc/location-mapping.rdf;文件:etc/location-mapping.n3;文件:etc/location-mapping.ttl
428[main]DEBUG org.apache.jena.util.FileManager-添加位置:LocatorFile
431[main]DEBUG org.apache.jena.util.FileManager-添加位置:LocatorURL
431[main]DEBUG org.apache.jena.util.FileManager-添加位置:ClassLoaderLocator
457[main]DEBUG org.apache.jena.riot.system.stream.JenaIOEnvironment-未能找到配置:location-mapping.ttl;location-mapping.rdf;定位图3;etc/location-mapping.rdf;etc/location-mapping.n3;etc/location-mapping.ttl
1793[main]DEBUG org.apache.jena.info-系统架构:64位
1912[main]DEBUG org.apache.jena.info-系统架构:64位
2254[main]DEBUG org.apache.jena.riot.system.stream.StreamManager-未映射:My_Path//sample.ttl
2255[main]调试org.apache.jena.riot.system.stream.StreamManager-打开(My_Path//sample.ttl)
2255[main]DEBUG org.apache.jena.riot.system.stream.StreamManager-未映射:My_Path//sample.ttl
2288[main]DEBUG org.apache.jena.riot.system.stream.StreamManager-找到:My_Path//sample.ttl(LocatorFile)
尼克·曼格里
西蒙伊库达博
所以我知道Jena可以读取文件。我使用Virtuoso SPARQL端点为DBpedia创建了一个类似的查询,并始终得到正确的结果。他是一个类似的查询,我在DBpedia的Virtuoso SPARQL端点中作为测试运行:

prefix dbpedia-owl: <http://dbpedia.org/ontology/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix db: <http://dbpedia.org/resource/>

SELECT ?draftTeam WHERE{
?kobe dbpedia-owl:draftTeam ?draftTeam .
?kobe foaf:name "Kobe Bryant"@en .
}
前缀dbpedia owl: 前缀rdfs: 前缀db: 选择?draftTeam在哪里{ 神户宠物猫头鹰:draftTeam?draftTeam。 ?kobe foaf:name“kobe Bryant”@en。 }
我知道Virtuoso SPARQL端点与ApacheJena SPARQL查询略有不同,但它的一般语法相同。我不明白为什么我不能在耶拿执行查询

您的数据具有三重属性

<http://dbpedia.org/resource/Simeon_Ikudabo> <http://dbepdia.org/ontology/team> <http://dbpedia.org/resource/Indiana_Hoosiers> .

我能够解决这个问题。下面是代码示例:

BasicConfigurator.configure();
FileManager.get().addLocatorClassLoader(QuerySparql.class.getClassLoader());
Model model = FileManager.get().loadModel(My_Path//sample.ttl", "TTL");
String queryString = 
            "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" +
            "PREFIX foaf: <http://xmlns.com/foaf/0.1/name>\n" +
            "PREFIX dbo: <http://dbpedia.org/ontology/>\n" +
            "PREFIX db: <http://dbpedia.org/resource/>\n " +
            "SELECT ?team WHERE { \n" + 
            "?simeon foaf:name \"Simeon Ikudabo\"@en .\n" +
            "?simeon dbo:team ?team\n" +
            "}";
Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query, model);
try {
        ResultSet results = qexec.execSelect();
        while(results.hasNext()) {
            QuerySolution soln = results.nextSolution();
            Literal team = soln.getLiteral("team");
            System.out.println(team);
        }
    }
catch(Exception e) {
        e.printStackTrace(System.out);
}

System.out.println("Done");
BasicConfigurator.configure();
FileManager.get().addLocatorClassLoader(QuerySparql.class.getClassLoader());
Model model = FileManager.get().loadModel("My_Path//sample.ttl", "TTL");
String queryString = 
            "PREFIX db: <http://dbpedia.org/resource> \n" +
            "SELECT ?meshId WHERE{ \n" + 
            "?autism <http://xmlns.com/foaf/0.1/name> \"Autism\"@en .\n" +
            "?autism <http://dbpedia.org/ontology/meshId> ?meshId \n" +
            "}";

Query query = QueryFactory.create(queryString);
QueryExecution qexec = QueryExecutionFactory.create(query, model);

ResultSet results = qexec.execSelect();
if(results.hasNext()) {
    System.out.println("has results!");
}
else {
    System.out.println("No Results!");
}

while(results.hasNext()) {
    QuerySolution soln = results.nextSolution();
    Literal r = soln.getLiteral("meshId");
    System.out.println(r);
}
BasicConfigurator.configure();
FileManager.get().addLocatorClassLoader(queryParql.class.getClassLoader());
Model Model=FileManager.get().loadModel(“我的路径//sample.ttl”,“ttl”);
字符串查询字符串=
“前缀db:\n”+
“选择?meshId,其中{\n”+
“孤独症\”孤独症\“@en.\n”+
“?自闭症?meshId\n”+
"}";
Query=QueryFactory.create(queryString);
QueryExecution qexec=QueryExecutionFactory.create(查询,模型);
ResultSet results=qexec.execSelect();
if(results.hasNext()){
System.out.println(“有结果!”);
}
否则{
System.out.println(“无结果!”);
}
while(results.hasNext()){
QuerySolution soln=results.nextSolution();
文字r=soln.getLiteral(“meshId”);
系统输出println(r);
}
错误似乎在查询中。我需要使用dbpedia文件中的完整URL进行查询。在dbpedia文件中,url如下所示:

<http://xmlns.com/foaf/0.1/name> "Autism"@en .
"?autism <http://xmlns.com/foaf/0.1/name> \"Autism\"@en .\n
“孤独症”@en。
在实际查询中使用该URL,如下所示:

<http://xmlns.com/foaf/0.1/name> "Autism"@en .
"?autism <http://xmlns.com/foaf/0.1/name> \"Autism\"@en .\n
“?孤独症\“孤独症\”@en。\n
最终解决了问题。我之前在查询中使用的前缀与dbpedia文件中的前缀不直接匹配。因此前缀:

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
前缀foaf:

将不起作用。相反,我需要放置与dbpedia文件中找到的URL直接匹配的URL。

感谢您捕获该错误。我编辑了我的问题并修复了该错误。我仍然收到相同的错误。好吧,您的FOAF前缀声明是错误的:
前缀FOAF:
-它应该是
前缀FOAF:
,即没有property
name
@AKSW谢谢。我之前看过了,但这并没有解决问题。这是什么意思?即使前缀声明正确,它也不起作用?顺便说一句,如果您编辑您的问题并修复拼写错误,即使它不能解决问题,也会很好-至少可以避免其他人发现同样的问题,请仔细检查数据+查询。在您使用的查询中
前缀foaf:
。在您使用的数据中
http://www.xmlns.com/foaf/0.1/
-两者显然都是错误的,前者必须去掉
名称
,后者是错误的,因为
www.
没有任何意义。FOAF:
http://xmlns.com/foaf/0.1/
@AKSW我是说t将其更改为并没有解决问题。什么?您阅读了我的上一条评论吗?问题是在数据中前缀是
http://www.xmlns.com/foaf/0.1/
在您使用的查询中
http://xmlns.com/foaf/0.1