2011-02-09 17 views
1

我在Eclipse中工作,正在使用2個Java文件:Admin.java和SemanticSearch.java。通過Admin.java,我登錄並檢查用戶名和密碼是否存在於我的RDF文件中。 Admin.java中的登錄函數調用運行SPARQL查詢的SemanticSearch.java。我的查詢給了我Eclipse的控制檯甚至另一個文件的答案。現在我的工作是通過返回值或計算行並將該值發送給Admin.java來回答Admin.java的答案。有了這個如果行數是1,這意味着用戶名和密碼匹配,我可以讓用戶登錄。如何計算Sparql查詢中的行數

但我無法這樣做。我曾嘗試使用count(),Count()作爲CNT,甚至嘗試過int res = results.next。但似乎沒有任何幫助。

我粘貼下面的代碼:

Admin.java

SemanticSearch semsearch = new SemanticSearch(request.getSession()); 
semsearch.loadData(REALPATH + RDFDATASOURCEFILE1); 
semsearch.searchForUser(response.getOutputStream(),null, userName, password); 

在SemanticSearch.java

public void searchForUser(OutputStream out, String xslfile1, String userName, String password) { 
    String prolog = "PREFIX kb:<"+VUSER.getURI()+">"; 
    System.out.println("Search for user in semantic search.java"); 
    String queryString1 = prolog +"\n" +"SELECT * " +"WHERE {" +"?x kb:Uname ?username. ?x kb:Password ?password. ?x kb:Interest ?interest. " +"FILTER regex(?username, \"" +userName +"\")}"; 

    System.out.println(queryString1); 
    Query query=QueryFactory.create(queryString1); 
    QueryExecution qexec = QueryExecutionFactory.create(query, model); 
    ResultSet results1 = qexec.execSelect(); --> here the two rows are printed 
    int res=results1.getRowNumber(); 
    System.out.println(results1); -->here answer is 0 
    ResultSetFormatter.out(results1); 
    ResultSetFormatter.out(out, results1); 
    System.out.println(res); 
    try { 
     if (xslfile1 != null) 
     { 
      out.write(ResultSetFormatter.asXMLString(results1, xslfile1).getBytes("UTF-8")); 
       System.out.println(results1); 
       System.out.println(xslfile1); 
      System.out.println("I am in if"); 
     } 
     else 
     { 
      out.write(ResultSetFormatter.asXMLString(results1).getBytes(
         "UTF-8")); 
      System.out.println("I am in else"); 
     } 

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

請幫幫忙,我掙扎着從一個星期,問候得到這個,Archana。

回答

9

在SPARQL 1.1,它可以在您使用的triplestore支持,語法是:

SELECT (COUNT(*) AS ?count) 
WHERE { 
    ... 
} 

你應該得到的整數返回數列,與結果的數量?