如何计算Sparql Query中的行数

Arc*_*ana 2 eclipse sparql

我在Eclipse中工作并使用2个Java文件:Admin.java和SemanticSearch.java.通过Admin.java我登录并检查我的RDF文件中是否存在用户名和密码.Admin.java中的登录功能调用运行SPARQL查询的SemanticSearch.java.我的查询在Eclipse的Console中给我答案,甚至在另一个文件上.现在我的工作是通过返回值或通过计算行并将该值发送到Admin.java来回复Admin.java的答案.如果行数为1表示用户名和密码匹配,我可以允许用户登录.

但我无法这样做.我已经尝试使用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);
Run Code Online (Sandbox Code Playgroud)

在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();
    }
}   
Run Code Online (Sandbox Code Playgroud)

请帮助,我很难在一周内得到这个,问候,Archana.

Ste*_*ris 13

在您正在使用的三元组中可能支持的SPARQL 1.1中,语法为:

SELECT (COUNT(*) AS ?count)
WHERE {
  ...
}
Run Code Online (Sandbox Code Playgroud)

您应该在?count列中返回一个返回的整数,其中包含结果数.