关于循环中DBPedia SPARQL端点上的SPARQL查询 whilereader=br.readLine=无效的 { System.out.printlreader; 类型=; 字符串queryNew=选择?y?z,其中{+reader+?z.}; Query Query=QueryFactory.createqueryNew; ARQ.getContext.setTrueARQ.useSAX; QueryExecution qexec=QueryExecutionFactory.sparqlServicehttp://dbpedia.org/sparql查询 ResultSet results=qexec.execSelect; whileresults.hasNext { QuerySolution soln=results.nextSolution; type=type++soln.get?z; System.out.printlnsoln.get?y++soln.get?z; } bw.writereader++类型+\n; }

关于循环中DBPedia SPARQL端点上的SPARQL查询 whilereader=br.readLine=无效的 { System.out.printlreader; 类型=; 字符串queryNew=选择?y?z,其中{+reader+?z.}; Query Query=QueryFactory.createqueryNew; ARQ.getContext.setTrueARQ.useSAX; QueryExecution qexec=QueryExecutionFactory.sparqlServicehttp://dbpedia.org/sparql查询 ResultSet results=qexec.execSelect; whileresults.hasNext { QuerySolution soln=results.nextSolution; type=type++soln.get?z; System.out.printlnsoln.get?y++soln.get?z; } bw.writereader++类型+\n; },sparql,jena,semantic-web,Sparql,Jena,Semantic Web,我从一个文件中读取参与者名称,然后尝试获取每个参与者的所有rdf:type链接。当第一个参与者的结果打印出来时,执行的其余部分就卡住了。“reader”只是一个参与者的名字,它是dbpedia资源。谁能告诉我代码中可能出了什么问题吗?您不显示数据,但假设文件只包含参与者的名称,如您所说,那么您实际询问的查询类似于: select ?y ?z where { "Matt Damon" rdf:type ?z } 这永远不会返回任何结果,因为RDF三元组的主题始终是RDF资源,而不是字符串

我从一个文件中读取参与者名称,然后尝试获取每个参与者的所有rdf:type链接。当第一个参与者的结果打印出来时,执行的其余部分就卡住了。“reader”只是一个参与者的名字,它是dbpedia资源。谁能告诉我代码中可能出了什么问题吗?

您不显示数据,但假设文件只包含参与者的名称,如您所说,那么您实际询问的查询类似于:

select ?y ?z where {
    "Matt Damon" rdf:type ?z
}
这永远不会返回任何结果,因为RDF三元组的主题始终是RDF资源,而不是字符串文本

您应该将查询更改为:

prefix dbpprop: <http://dbpedia.org/property/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

select ?actor ?type where {
    ?actor dbpprop:name "Matt Damon"@en ;
           rdf:type ?type
}

换句话说,英文名称为Matt Damon的资源的rdf:类型是什么?

您不显示数据,但假设文件只包含参与者的名称,如您所说,那么您实际询问的查询如下:

select ?y ?z where {
    "Matt Damon" rdf:type ?z
}
这永远不会返回任何结果,因为RDF三元组的主题始终是RDF资源,而不是字符串文本

您应该将查询更改为:

prefix dbpprop: <http://dbpedia.org/property/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

select ?actor ?type where {
    ?actor dbpprop:name "Matt Damon"@en ;
           rdf:type ?type
}

换句话说,英文名称为Matt Damon的资源的rdf:类型是什么?

正如Ian Dickinson在中指出的,您没有向我们展示数据,也没有向我们展示reader的确切价值,因此很难准确地说出到底出了什么问题。听起来您确实需要调整查询,使其符合

?actor rdfs:label ?label
哪里?标签是你感兴趣的演员的名字。如果像在中一样使用字符串连接

String queryNew = "select ?y ?z where {" + reader + " <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?z . }";
------------------------------------------------------------------------- |资源类型| ================================================================================================================================================= | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -------------------------------------------------------------------------
正如伊恩·迪金森(Ian Dickinson)在中指出的那样,您没有向我们展示数据,也没有向我们展示reader的确切价值,因此很难准确地说出到底出了什么问题。听起来你确实需要调整你的查询来适应一些事情 g

?actor rdfs:label ?label
哪里?标签是你感兴趣的演员的名字。如果像在中一样使用字符串连接

String queryNew = "select ?y ?z where {" + reader + " <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?z . }";
------------------------------------------------------------------------- |资源类型| ================================================================================================================================================= | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -------------------------------------------------------------------------
嗨,伊恩和约书亚,谢谢你的回答。我提到的参与者名称实际上是来自维基百科的资源名称。程序运行了很长时间,但在30分钟内给出了部分结果。@harrypotter您能再显示一点数据或输入列表吗?除非它特别大,否则对于一个相当简单的查询来说,这似乎需要很长时间。另外,如果你得到了伊恩的列表,你可能会考虑使用一个值块来运行一个大的查询,而不是每个演员的一个查询,在那里你会遇到速率限制问题。我提到的参与者名称实际上是来自维基百科的资源名称。程序运行了很长时间,但在30分钟内给出了部分结果。@harrypotter您能再显示一点数据或输入列表吗?除非它特别大,否则对于一个相当简单的查询来说,这似乎需要很长时间。此外,如果您获得了DbPEdiaIRIS列表,您可能会考虑使用值块来运行一个大查询,而不是每个演员的一个查询,在那里您将遇到速率限制问题。