Java jena.query.ResultSet:hasNext()的计算结果为false,但应包含某些内容

Java jena.query.ResultSet:hasNext()的计算结果为false,但应包含某些内容,java,sparql,jena,virtuoso,Java,Sparql,Jena,Virtuoso,我尝试在virtuoso(本地,7.0.0)上查询dbpedia 3.9数据集。 查询在SPARQL端点上运行良好,但在使用Jena时,virtuoso查询执行的结果集不包含任何内容(hasNext()为false)。我看了一下,但是我还有pb 下面是我正在使用的代码。 有人知道怎么回事吗 谢谢 import virtuoso.jena.driver.VirtGraph; import virtuoso.jena.driver.VirtuosoQueryExecution; import vir

我尝试在virtuoso(本地,7.0.0)上查询dbpedia 3.9数据集。 查询在SPARQL端点上运行良好,但在使用Jena时,virtuoso查询执行的结果集不包含任何内容(hasNext()为false)。我看了一下,但是我还有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++;
        }
    }
}
导入virtuoso.jena.driver.VirtGraph;
导入virtuoso.jena.driver.VirtuosoQueryExecution;
导入virtuoso.jena.driver.VirtuosoQueryExecutionFactory;
导入com.hp.hpl.jena.query.QuerySolution;
导入com.hp.hpl.jena.query.ResultSet;
导入com.hp.hpl.jena.rdf.model.RDFNode;
导入com.hp.hpl.jena.rdf.model.Resource;
公共静态void testDbpediaLex(资源dbpedia)
{
String query=“前缀lexvo:\n”
+“前缀rdf:\n\n”
+“选择标签,其中{\n”
+“lexvo:label?lexlabel。\n”
+“rdf:标签?标签。\n”
+“过滤器(?lexlabel!=?label)。}”;
VirtGraph图形=新VirtGraph(“http://dbpedia.org/“,”jdbc:virtuoso://localhost:1111“,“dba”,“dba”);
VirtuosoQueryExecution vqLex=VirtuosoQueryExecutionFactory.create(查询,图形);
ResultSet rLex=virtuosconnection.executeVirtualQuery(vqLex);
如果(rLex!=null)
{
while(rLex.hasNext())
{
QuerySolution result=rLex.nextSolution();
System.out.println(result.get(“lexlabel”);
i++;
}
}
}

终于找到了pb的解决方案,下面是更多细节

通过下面的sparql查询,我希望获得给定资源(无论什么)的标签,这些标签是通过属性
rdfs:label
lexvo:label
定义的。第一个应用于三元组(dbpedia标签数据集),第二个应用于四元组(dbpedia聚焦词汇化数据集)


它给出了以下标签:“阿隆索”@en、“费尔南多”@en和“阿洛”@en.

既然你问的是主题为
的三元组,你能给我们看看
?p?o
的结果吗。使用它,我们可以更好地猜测您的查询将返回什么http://www.w3.org/2000/01/rdf-schema#是
rdfs:
。它不会改变查询的含义,但人们可能会看到您的(
rdf:
)并期望您输入了一个拼写错误。(ii)语言标签可能会使标签比较复杂。
的行为=可能比您预期的匹配更多(或者不匹配,这只是一个想法)。(iii)这看起来不像是完整的代码。也许我遗漏了什么,但是我没有看到任何
I
的声明,但是您的循环包含
I++
。帮助编写我们可以编译和运行的代码更容易。@Joshua,非常感谢您的评论。我会修正,我会限制label@en只有(ii)是的,我删除了部分代码,忘记了那一部分,对不起(iii)。关于ResultSet为空的主要问题,我发现了我的错误:DBpedia词汇化数据集是一个命名图,这应该在查询中显式显示(
graph?g{lexvo:label?lexlabel}
)。我通过Jena查询的图形数据集与通过sparql端点查询的图形数据集之间存在一些差异,我没有立即注意到这一点。@ehrmama如果您已经找到了自己的答案,您可以将其发布为suchi如果这是一个解决方案,并且对您有效,那么您应该这样做。如果这只是我在对问题的评论中要求的信息,那么您应该用这些附加信息编辑问题。
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 )
  }
SELECT ?lexlabel WHERE 
{
GRAPH ?g {<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) .  }