2016-05-04 11 views
-1

Ich fange an in SPARQL zu programmieren und kenne die Welt von RDF. Ich möchte eine Abfrage erstellen, die alle IDSensor und den Wert anzeigt. Der Code ist wie folgt:Anfrage SPARQL in Java (Jena)

public class HelloRDF { 

    public static void main(String[] args) { 
// 
// //CONNESSIONE RDF METEO 
//  final String uri = "http://www.dati.lombardia.it/resource/647i-nhxk/"; 
//  final Model model = ModelFactory.createDefaultModel(); 
//  model.read(uri); 
//  model.write(System.out); 


     String s2 = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" + 
       "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" + 
       "PREFIX socrata: <http://www.socrata.com/rdf/terms#>\n" + 
       "PREFIX dcat: <http://www.w3.org/ns/dcat#>\n" + 
       "PREFIX ods: <http://open-data-standards.github.com/2012/01/open-data-standards#>\n" + 
       "PREFIX dcterm: <http://purl.org/dc/terms/>\n" + 
       "PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>\n" + 
       "PREFIX skos: <http://www.w3.org/2004/02/skos/core#>\n" + 
       "PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n" + 
       "PREFIX dsbase: <http://www.dati.lombardia.it/resource/>\n" + 
       "PREFIX ds: <http://www.dati.lombardia.it/resource/647i-nhxk/>\n" + 
       "\n" + 
       "SELECT ?idsensore ?valore \n" + 
       "WHERE\n" + 
       " { ?x ds:idsensore ?idsensore .\n" + 
       "?x ds:valore ?valore .\n" + 
       " }\n" + 
       "LIMIT 5\n" + 
       ""; 

     Query query = QueryFactory.create(s2); //s2 = the query above 
     QueryExecution qExe = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query); 
     ResultSet results = qExe.execSelect(); 
     ResultSetFormatter.out(System.out, results, query) ; 


    } 

} 

Die Tabelle, die die Abfrage ist leer wo mache ich falsch? Bitte helfen Sie mir.

+0

welche Art von Problem bekommen Sie? – narko

+0

die Tabelle, die die Abfrage zurückgibt, ist leer – Alberto

+1

Das Ergebnis, das Sie erhalten, ist das erwartete. Sie können es selbst auschecken, wenn Sie die Abfrage direkt im SPARQL-Endpunkt ausführen: http://dbpedia.org/sparql – narko

Antwort

1

DBpedia enthält nicht die Daten, die Sie suchen. Vielleicht ist es ein anderer Endpunkt, aber Sie müssen die Abfrage für einen Endpunkt ausführen, der diese Daten enthält.

Was Sie getan haben, ist im Wesentlichen das Gleiche wie das Schreiben einer Abfrage für die Datenbank eines Unternehmens und erwartet, dass es dieselben Ergebnisse zurückgibt, wenn Sie es in der Datenbank eines anderen Unternehmens ausführen.

+0

ok. Also, wenn ich die RDF-Daten in eine lokale Datei einfügen, auf welche Weise kann ich die Abfrage ändern? – Alberto

+1

Sie müssen die Abfrage nicht ändern, sondern die Daten in eine Datei laden, mit der Sie SPARQL-Abfragen für die Daten ausführen können. Normalerweise heißt es Triple-Store. Einige andere Frameworks unterstützen das Laden von Daten in den Speicher und das Ausführen von SPARQL darauf, z. Jena und Sesam. – AKSW

-1

QueryExecutionFactory übernimmt die URL eines SPARQL-Endpunkts. Wenn Sie noch kein Konto haben, können Sie Ihre Daten nicht mit diesem Ansatz abfragen:

https://jena.apache.org/documentation/javadoc/arq/org/apache/jena/query/QueryExecutionFactory.html#sparqlService-java.lang.String-java.lang.String-

+0

Sie können eine Abfrageausführung für ein lokales Modell erstellen. –

+0

In seinem Beispiel verwendet er einen Remote-Endpunkt, das ist der Grund für meine Antwort ... Außerdem müssen die Daten in einem Datenspeicher verfügbar sein, der SPARQL unterstützt. Wenn das nicht stimmt, geben Sie ein Beispiel an. Vielen Dank! – narko