2016-07-20 7 views
0

こんにちは友人申し訳ありません:SPARQLクエリはJavaで結果を取得していない私は、次のようにSPARQL Webサービス[<a href="http://drugbank.bio2rdf.org/sparql]" rel="nofollow">http://drugbank.bio2rdf.org/sparql]</a>でコードを実行している結果を返してきた私の前のquestion.Iに似ている質問を求めています

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」接頭辞を追加し、それが原因でこれらの不足している接頭辞を返しませんと思いました。しかし、それ以降はまだ動作していません。結果が返ってこない理由は分かりません。可能であれば、私が間違っている箇所を教えてください。あなたの助けが大変ありがとう!

答えて

2

問題は、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)で以前の動作に変更するための設定オプションは次のとおりです。

JenaRuntime.isRDF11 = false; 
+1

'JenaRuntime.isRdf11 =偽; '古い行動に変わります – RobV

+0

はい、私はそれを理解しました。良い説明のために@AKSWに感謝します。私は以前の質問でも私を助けてくれたことを覚えています。 configオプションを手伝ってくれてありがとうRobVに感謝します。 –

関連する問題