2

我正在尝试使用 Jena 创建一个 SPARQL 查询来查询 DBpedia。该查询在我使用 Virtuoso 时有效,但当我将其插入以下 Java 代码时,它返回一个空集。

String sr="Christopher_Nolan";
String sparqlQueryString1 = "PREFIX dbont: <http://dbpedia.org/ontology/> "+            
        "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"+ 
        "PREFIX foaf: <http://xmlns.com/foaf/0.1/> "+
        "   SELECT distinct   ?s"+        
        "   WHERE {  "+       
        "?s foaf:name ?label  ."  +
        "filter(?label=\"Christpher_Nolan\"@en)." +             
        "        }";
          Query query = QueryFactory.create(sparqlQueryString1);
          QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query);

          ResultSet results = qexec.execSelect();
          ResultSetFormatter.out(System.out,results, query);       

         qexec.close() ;    
4

1 回答 1

2

我认为这不是 Jena 的问题,而是您的特定查询。您的查询在 DBpedia SPARQL 端点上运行时不会产生任何结果

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT distinct ?s      
WHERE {
  ?s foaf:name ?label .
  filter(?label="Christpher_Nolan"@en)
}

SPARQL 结果(无结果)

没有结果

但是,如果您将 an 添加o到名称 Christopher,并将下划线更改为空格,则会得到三个结果:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT distinct ?s      
WHERE {
  ?s foaf:name ?label .
  filter(?label="Christopher Nolan"@en)
}

SPARQL 结果(3 个结果)

s
http://dbpedia.org/resource/Christopher_Nolan_(作者)
http://dbpedia.org/resource/Christopher_Nolan
http://dbpedia.org/resource/Chris_Nolan_(音乐家)

三个结果

我还要指出,这是一个相当不寻常的使用filter. 如果要选择使用特定值的三元组,只需将该值放入三元组模式中:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT distinct ?s      
WHERE {
  ?s foaf:name "Christopher Nolan"@en 
}

SPARQL 结果(相同的 3 个结果)

于 2013-10-28T17:20:32.203 回答