2012-08-25 45 views
1

我寫其中一個用戶可以上傳.RDF檔案,然後在其上執行SPARQL查詢的應用。現在我被困在如何格式化查詢的結果。例如:一個ASK -Query輸出一個布爾和SELECT -Query返回ResultSet。 CONSTRUCTDESCRIBE返回一個新的RDF-圖。
如何獲得的形式給定的查詢的結果將它傳遞給我的看法?在那裏,我希望打印出一個HTML表格。如何在播放中顯示SPARQL查詢的輸出!視圖?

爲了更好地理解我的問題我創造了這個簡約的代碼示例:

import java.io.InputStream; 

import com.hp.hpl.jena.*; 

public class playground { 

    public static void main(String[] args) { 

     InputStream in = FileManager.get().open("vc-db-1.rdf"); 
     Model model = ModelFactory.createDefaultModel(); 
     model.read(in, null); 

     String queryStringSelect = "SELECT ?subject ?predicate ?object WHERE { ?subject ?predicate ?object }"; 
     String queryStringAsk = "ASK WHERE { ?subject ?predicate ?object }"; 
     String queryStringDescribe = "DESCRIBE * WHERE { ?subject ?predicate ?object }"; 
     String queryStringConstruct = "CONSTRUCT { ?subject ?predicate ?object } WHERE { ?subject ?predicate ?object }"; 

     QueryExecution qe = QueryExecutionFactory.create(queryStringDescribe, 
     model); 
     Query q = QueryFactory.create(queryStringDescribe); 

     int queryType = q.getQueryType(); 
     switch (queryType) { 
     case Query.QueryTypeAsk: 
      boolean b = qe.execAsk(); // Result that has to be formatted 
      ResultSetFormatter.outputAsTSV(System.out, b); 
      break; 
     case Query.QueryTypeConstruct: 
      model = qe.execConstruct(); // Result that has to be formatted 
      model.write(System.out); 
      break; 
     case Query.QueryTypeDescribe: 
      model = qe.execDescribe(); // Result that has to be formatted 
      model.write(System.out); 
      break; 
     case Query.QueryTypeSelect: 
      ResultSet results = qe.execSelect(); // Result that has to be 
       // formatted 
      ResultSetFormatter.outputAsTSV(System.out, results); 
      break; 
     } 

     model.close(); 
     qe.close(); 

    } 

} 

.RDF文件的mentionend可以在這裏下載:http://jena.apache.org/tutorials/sparql_data/vc-db-1.rdf

回答

1

我終於找到了答案:

我使用ByteArrayOutputStream並使用其餘的各種功能。對於SELECT -Query我用文字表述,因爲提供的ResultSetFormatter.outputAsRDF()給我的方式多廢話了。不管怎麼說,這裏的相關代碼

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
... 
int queryType = q.getQueryType(); 
switch (queryType) { 
case Query.QueryTypeAsk: 
    boolean b = qe.execAsk(); 
    ResultSetFormatter.outputAsRDF(baos, notation, b); 
    retval = baos.toString(); 
    break; 
case Query.QueryTypeConstruct: 
    model = qe.execConstruct(); 
    model.write(baos, notation); 
    retval = baos.toString(); 
    break; 
case Query.QueryTypeDescribe: 
    model = qe.execDescribe(); 
    model.write(baos, notation); 
    retval = baos.toString(); 
    break; 
case Query.QueryTypeSelect: 
    ResultSet results = qe.execSelect(); 
    ResultSetFormatter.out(baos, results); 
    retval = baos.toString(); 
    break; 
} 
相關問題