jena.query.ResultSet:hasNext()计算false但应包含某些内容

时间:2014-10-06 10:51:15

标签: java sparql jena virtuoso

我尝试在virtuoso(local,7.0.0)上查询dbpedia 3.9数据集。 查询在SPARQL端点上正常工作,但在使用Jena时,virtuoso查询执行的ResultSet不包含任何内容(hasNext()为false)。我看了herehere,但我仍然有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++;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

最后找到了pb的解决方案,这里有更多细节。

使用以下sparql查询,我想获取给定资源的标签(无论如何),通过属性rdfs:labellexvo: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”。