繁体   English   中英

SPARQL查询无法在Java中检索结果

[英]SPARQL Query does not retrieve result in java

嗨,朋友们,抱歉,我问的问题与我以前的问题类似。我已经在SPARQL Web服务中运行代码[ http://drugbank.bio2rdf.org/sparql],并返回以下结果:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX drugbank: <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT  distinct ?resource WHERE { ?resource dcterms:identifier "drugbank:DB01051"^^xsd:string} 

但是,我尝试在java中获取结果,并且它没有使用相同的查询返回结果。 Java代码如下:

import java.io.IOException;
import org.apache.jena.query.ParameterizedSparqlString;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.ResultSetFactory;
import org.apache.jena.query.ResultSetFormatter;
import org.apache.jena.query.ResultSetRewindable;

public class DrugbankResourceProperty {

    public static void main(String[] args) throws IOException {

        ParameterizedSparqlString pss = new ParameterizedSparqlString(""
                + "PREFIX  rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"
                + "PREFIX  xsd:     <http://www.w3.org/2001/XMLSchema#>\n"
                + "PREFIX  rdfs:    <http://www.w3.org/2000/01/rdf-schema#>\n"
                + "PREFIX  dcterms: <http://purl.org/dc/terms/>\n"
                + "PREFIX  drugbank: <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/>"
                + "\n"
                + "SELECT  distinct ?resource WHERE { ?resource dcterms:identifier \"drugbank:DB01051\"^^xsd:string}");

        QueryExecution exec = QueryExecutionFactory.sparqlService("http://drugbank.bio2rdf.org/sparql", pss.asQuery());

        ResultSetRewindable results = ResultSetFactory.makeRewindable(exec.execSelect());

        while (results.hasNext()) {

            System.out.println(ResultSetFormatter.asText(results));
        }

    }

}

首次运行后,我添加了“ xsd”和“ drugbank”前缀,并认为由于这些前缀缺失而不会返回。 但是之后它仍然无法工作。我真的不知道为什么它不返回结果。如果可能的话,请告诉我我在哪里出错了? 非常感谢您的帮助!

问题是从Jena 3.x开始的RDF 1.1。 使用RDF 1.1,字符串文字的语义和处理已更改。 因此,查询将被解析为

   PREFIX  drugbank: <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/>
   PREFIX  xsd:  <http://www.w3.org/2001/XMLSchema#>
   PREFIX  dcterms: <http://purl.org/dc/terms/>
   PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-schema#>
   PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT DISTINCT  ?resource
WHERE
  { ?resource  dcterms:identifier  "drugbank:DB01051" }

请参阅缺少的数据类型的文字。 但是,这就是问题所在,SPARQL端点不适用于新的RDF 1.1语义,并且将文字作为普通文字处理,而实际上与xsd:string文字不匹配。

我不知道JENA中是否有配置选项,但您可能应该在邮件列表中要求它,然后在此处发布答案。

我看到的唯一解决方法是使用QueryEngineHTTP ,它可以避免内部解析,例如

QueryEngineHTTP qe = new QueryEngineHTTP("http://drugbank.bio2rdf.org/sparql", pss.toString());
System.out.println(ResultSetFormatter.asText(qe.execSelect()));
qe.close();

更新资料

根据@RobV的以下注释,更改为Apache JENA( javadoc )中旧行为的config选项为:

JenaRuntime.isRDF11 = false;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM