我尝试在virtuoso(local,7.0.0)上查询dbpedia 3.9数据集。 查询在SPARQL端点上正常工作,但在使用Jena时,virtuoso查询执行的ResultSet不包含任何内容(hasNext()为false)。我看了here和here,但我仍然有pb。
我正在使用的代码下面。 有人会知道出了什么问题吗?
感谢。
import virtuoso.jena.driver.VirtGraph;
import virtuoso.jena.driver.VirtuosoQueryExecution;
import virtuoso.jena.driver.VirtuosoQueryExecutionFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
public static void testDbpediaLex(Resource dbpedia)
{
String query = " PREFIX lexvo: <http://lexvo.org/ontology#> \n"
+ " PREFIX rdf: <http://www.w3.org/2000/01/rdf-schema#> \n\n"
+ " SELECT ?lexlabel WHERE { \n"
+ " <http://dbpedia.org/resource/Fernando_Alonso> lexvo:label ?lexlabel . \n"
+ " <http://dbpedia.org/resource/Fernando_Alonso> rdf:label ?label . \n"
+ " FILTER (?lexlabel != ?label) . } ";
VirtGraph graph = new VirtGraph ("http://dbpedia.org/", "jdbc:virtuoso://localhost:1111", "dba", "dba");
VirtuosoQueryExecution vqLex = VirtuosoQueryExecutionFactory.create(query, graph);
ResultSet rLex = VirtuosoConnection.executeVirtuosoQuery(vqLex);
if(rLex != null)
{
while (rLex.hasNext())
{
QuerySolution result = rLex.nextSolution();
System.out.println(result.get("lexlabel"));
i++;
}
}
}
答案 0 :(得分:0)
最后找到了pb的解决方案,这里有更多细节。
使用以下sparql查询,我想获取给定资源的标签(无论如何),通过属性rdfs:label
和lexvo:label
定义。第一个适用于三元组(dbpedia标签数据集),第二个适用于四边形(dbpedia spotlight lexicalization数据集)。
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX lexvo: <http://lexvo.org/ontology#>
SELECT ?lexlabel
WHERE
{ <http://dbpedia.org/resource/Fernando_Alonso> lexvo:label ?lexlabel .
<http://dbpedia.org/resource/Fernando_Alonso> rdfs:label ?label
FILTER langMatches(lang(?label), "en")
FILTER langMatches(lang(?lexlabel), "en")
FILTER ( ?lexlabel != ?label )
}
在本地sparql端点(virtuoso.ini)上,未指定默认图。因此,sparql端点上的Graph IRI为空,并且查询在这些条件下运行良好。
使用Virtuoso Jena Provider,VirtGraph
定义为图http://dbpedia.org
,在这种情况下,查询不会给出结果。实际上,在sparql端点的Graph IRI字段中指定http://dbpedia.org
时会发生同样的情况,这是我没有检查它的错误。
最后,要通过Jena检索结果(即使用带有VirtGraph
的{{1}}),查询应在需要时指定图表的数据集:
http://dbpedia.org
给出了以下标签:“Alonso”,“Fernando”和“Alo”。