2016-07-10 25 views
0

Ich möchte alle Ressource/Objekt-Paare von DBPedia im Zusammenhang mit Jupiter und konstruieren Abfrage, die Ergebnisse in RDF-Format in Java mit Hilfe von Apache Jena. Mein Konstrukt Abfrage funktioniert in http://dbpedia.org/sparql Dienst, ist wie folgt:SPARQL Construct Abfrage funktioniert nicht auf Java

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 


construct {<http://dbpedia.org/resource/Jupiter> ?o ?r. } 
{{ <http://dbpedia.org/resource/Jupiter> ?o ?r } 
    UNION 
{?o ?r <http://dbpedia.org/resource/Jupiter>}} 

ich ein Java-Programm schrieb die CONSTRUCT Abfrageergebnisse in Jupiter.rdf Datei in RDF-Format zu schreiben, aber es zeigte Ausnahme. Mein Java-Code ist wie folgt:

import java.io.BufferedWriter; 
import java.io.FileWriter; 
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.QuerySolution; 
import org.apache.jena.query.ResultSetFactory; 
import org.apache.jena.query.ResultSetRewindable; 

public class Jupiter { 

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

     ParameterizedSparqlString querystring = new ParameterizedSparqlString("" 
       + "construct {<http://dbpedia.org/resource/Jupiter> ?o ?r } where {{ <http://dbpedia.org/resource/Jupiter> ?o ?r } UNION" 
       + " {?r ?o <http://dbpedia.org/resource/Jupiter>}}"); 

     QueryExecution exec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", querystring.asQuery()); 

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

     try (BufferedWriter bw = new BufferedWriter(new FileWriter("Jupiter.rdf"))) 

     { 

      while (result.hasNext()) { 

       QuerySolution querysolution = result.next(); 
       bw.write(querysolution.get("o").toString()); 
       bw.write(querysolution.get("r").toString()); 

      } 
      bw.flush(); 
      bw.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 

Und die Ausnahme ist somit:

Exception in thread "main" org.apache.jena.sparql.resultset.ResultSetException: Not a string: key: value 
    at org.apache.jena.sparql.resultset.JSONInput.stringOrNull(JSONInput.java:230) 
    at org.apache.jena.sparql.resultset.JSONInput.parseOneTerm(JSONInput.java:201) 
    at org.apache.jena.sparql.resultset.JSONInput.parse(JSONInput.java:172) 
    at org.apache.jena.sparql.resultset.JSONInput.process(JSONInput.java:100) 
    at org.apache.jena.sparql.resultset.JSONInput.fromJSON(JSONInput.java:63) 
    at org.apache.jena.query.ResultSetFactory.fromJSON(ResultSetFactory.java:331) 
    at org.apache.jena.sparql.engine.http.QueryEngineHTTP.execResultSetInner(QueryEngineHTTP.java:385) 
    at org.apache.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:351) 

Können Sie mir sagen, warum dies geschieht, bitte? Ihre Hilfe wird sehr geschätzt

+4

Sie haben eine SPARQL CONSTRUCT-Abfrage, keine SELECT-Abfrage. Sie müssen also 'exec.execConstruct()' aufrufen und erhalten ein 'Model'-Objekt zurück, das anstelle eines Resultsets Tripel enthält. – AKSW

+2

@AKSW Ich denke, du solltest das als Antwort posten. – svick

Antwort

1

Sie haben eine SPARQL CONSTRUCT-Abfrage, keine SELECT-Abfrage. Sie müssen also anrufen und Sie erhalten ein Model Objekt zurück, das anstelle einer ResultSet Tripel enthält.