SPARQL 查询未在 java 中检索结果
SPARQL Query does not retrieve result in java
嗨,朋友们,抱歉,我问的问题类似于我之前的 question.I 在 SPARQL 网络服务中有 运行 代码 [http://drugbank.bio2rdf.org/sparql] 和 return 结果如下如下:
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 中获取结果,但它不是 return 相同查询的结果。 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" 前缀,但由于缺少这些前缀,我认为它不会 return。但是,在 that.I 之后它仍然无法正常工作 真的不知道为什么它不能 return result.If 可能你能告诉我我哪里出错了吗?非常感谢您的帮助!
问题是自耶拿 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 中是否有配置选项,但您可能应该在邮件列表中询问它,然后 post 在这里得到答案。
我看到的唯一解决方法是使用 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) 中更改为旧行为的配置选项是:
JenaRuntime.isRDF11 = false;
嗨,朋友们,抱歉,我问的问题类似于我之前的 question.I 在 SPARQL 网络服务中有 运行 代码 [http://drugbank.bio2rdf.org/sparql] 和 return 结果如下如下:
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 中获取结果,但它不是 return 相同查询的结果。 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" 前缀,但由于缺少这些前缀,我认为它不会 return。但是,在 that.I 之后它仍然无法正常工作 真的不知道为什么它不能 return result.If 可能你能告诉我我哪里出错了吗?非常感谢您的帮助!
问题是自耶拿 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 中是否有配置选项,但您可能应该在邮件列表中询问它,然后 post 在这里得到答案。
我看到的唯一解决方法是使用 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) 中更改为旧行为的配置选项是:
JenaRuntime.isRDF11 = false;