簡體   English   中英

無法從此SPARQL查詢獲得任何結果

[英]Can't get any results from this SPARQL query

我在這里問過一個問題

生成增量SPARQL查詢

感謝上帝,我設法解決了這個問題。

這是我的解決方案:

private String completeQuery(String coreQuery){
    String completeQuery = "";
    completeQuery += "SELECT * WHERE {"+ "\n";
    completeQuery += coreQuery + "\n";
    completeQuery =completeQuery + "}" + "\n" +"limit 5" ;
    return completeQuery;
}

public String link(String object1, String object2, int distance){
    if(distance == 1){
        String Quer = "<http://dbpedia.org/resource/"+object1+">" + " ?pre1 " +"<http://dbpedia.org/resource/"+object2+">";
        return completeQuery(Quer);
    } 
    else {
        String query = "<http://dbpedia.org/resource/"+object1+">" + " ?pre1 ?obj1 " + ".\n";
        for(int i = 1; i < distance-1; i++){
            query += "?obj" + i + " ?pre" + (i+1) + " ?obj" + (i+1) + ".\n" ;

        }
        query  += "?obj" + (distance-1) + " ?pre" + distance + " " + "<http://dbpedia.org/resource/"+object2+">";
        return completeQuery(query);
    }
}

從頭開始,我只是嘗試打印查詢字符串以查明是否正確:

String queryString = "";

    int maxDistance =2;
    PathFinder pf = new PathFinder();

    for (int distance = 1; distance<=maxDistance ; distance ++)
    {
        System.out.println("\nQueries for distance: "+distance);
        queryString = pf.link("Lionel_Messi","Spanish_language",distance);
        System.out.println(queryString);}

到目前為止效果很好

Queries for distance1: SELECT * WHERE {<http://dbpedia.org/resource/Lionel_Messi> ?pre1 <http://dbpedia.org/resource/Spanish_language>}limit 5

Queries for distance2: SELECT * WHERE { <http://dbpedia.org/resource/Lionel_Messi> ?pre1 ?obj1 . ?obj1 ?pre2 <http://dbpedia.org/resource/Spanish_language> }limit 5

現在,我正在嘗試執行這些查詢,但是如果這是一個簡單的查詢,我不知道如何執行,例如(選擇?abstract where ...),執行將例如:

QueryExecution qe = QueryExecutionFactory.sparqlService(service, query);

                ResultSet results = qe.execSelect();
                for (; results.hasNext();){
                    QuerySolution sol = (QuerySolution) results.next();
                    System.out.println(sol.get("?abstract"));
                }

但是如果查詢類似於(選擇*位置),如何在不知道要打印的特定元素的情況下獲得結果? 這一切都取決於我的距離以及它將返回什么查詢...。

僅靠SPARQL不能解決這個問題-您將需要使用用於處理查詢和結果的API工具箱的功能。 由於您正在使用Jena,因此應該查看Jena的ResultSet對象的文檔。 它具有方法getResultVars() ,該方法為您提供一個列表,其中包含結果中的所有變量名稱。 然后,您可以使用它遍歷結果並獲得每個解決方案中的變量綁定,例如,簡單地打印它們:

 List<String> varNames = results.getResultVars();

 while(results.hasNext()) {
       QuerySolution sol = (QuerySolution) results.next();
       for (String var: varNames) {
              System.out.println("value of " + var + ": " + sol.get(var));
       }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM