2016-05-26 9 views
0

Ich bin auf der Suche nach einer Möglichkeit, die Ergebnisse dieser Abfrage in eine 2D-String-Liste mit Jena-Framework hinzuzufügen.SPARQL: Holen Sie sich alle Prädikate und ihre jeweiligen Objekte und organisieren Sie sie in eine Liste

sparqlQueryString=" 
    select distinct ?p ?o where 
     { 
     <http://dbpedia.org/resource/NVA_(film)> ?p ?o 
     } 
    "; 

in einer Weise, in der die erste Zeile die Eigenschaften und zweitens ihre jeweiligen Instanzen enthält. Das Problem besteht darin, dass eine Eigenschaft viele Instanzen haben kann.

List<List<String>> results= new ArrayList<List<String>>(); 
    query = QueryFactory.create(sparqlQueryString); 
    qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query); 
    s = qexec.execSelect(); 
    res = ResultSetFactory.copyResults(s); 
    while(res.hasNext()) 
      { 
       QuerySolution so = res.nextSolution(); 
       results.add(so.getResource("p").toString()); 
       // The part I am looking for to add instance 

      } 


    // the results expected 
    results.get(0) = http://www.w3.org/1999/02/22-rdf-syntax-ns#type 
    results.get(0).get(0) =  http://dbpedia.org/class/yago/2005Films 
    results.get(0).get(1) =  http://www.w3.org/2002/07/owl#Thing 
    results.get(0).get(2) =  http://dbpedia.org/ontology/Work 
+2

Serverseitige Lösung: SPARQL 1.1 Feature GROUP_CONCAT (siehe die W3C Empfehlung für Beispiele). Client-seitige Lösung: Java-Grundlagen. – AKSW

+1

Ihre erwarteten Ergebnisse sind nicht sinnvoll. Sie haben .get (0) eine Eigenschaft zurückgeben und dann .get (0) .get (0) einen Objektwert zurückgeben. Aber die erste get (0) gab eine Eigenschaft und keine Liste von Objektwerten zurück. –

+1

Für das, was es wert ist, würde ich vorschlagen, eine Karte > zu verwenden, um Eigenschaften zu Gruppen von Werten zu nehmen. –

Antwort

0

@AKSW: Serverseitige Lösung: SPARQL 1.1 Feature GROUP_CONCAT (siehe die W3C Empfehlung für Beispiele). Client-seitige Lösung: Java-Grundlagen.