2

经过数小时的调试,我在这里写..以下代码没有

public String search(@QueryParam("query") String search_string, @QueryParam("match_type") @DefaultValue("") String match_type, @QueryParam("terminology") @DefaultValue("") List<String> terminology_list)
    throws ServletException, IOException 
{

    VirtGraph set = new VirtGraph (hostURL, userName, password);
    ByteArrayOutputStream out = new ByteArrayOutputStream();

    search_string = search_string.replaceAll(java.util.regex.Pattern.quote(" "), " and ") ;
    String text="";

    for(String term_items:terminology_list) {
        if(!match_type.equals("exact")) {
            text="select ?uri, ?label where { " +
                "quad map virtrdf:DefaultQuadMap " +
                "{ graph ?g { ?uri ?p ?label . ?label bif:contains '" + 
                search_string + 
                "' option ( score ?sc ) . }}} " +
                "order by desc ( ?sc * 3e-1 + sql:rnk_scale ( <LONG::IRI_RANK> ( ?uri ) ) ) limit 20 offset 0";
        }
        else if(match_type.equals("exact")) {
            text="select ?uri, ?label where { quad map virtrdf:DefaultQuadMap { graph <"
    +term_items+"> { ?uri ?p ?label.FILTER (?label = '"+search_string+"'@en) .}}}";
        }

        VirtuosoQueryExecution vqe = VirtuosoQueryExecutionFactory.create(text, set);

        ResultSet results = vqe.execSelect();
        ResultSetFormatter.outputAsJSON(out, results);
    }

    return out.toString();
}

问题出现在else if语句中,因为无论我在链接中声明的列表中有多少项,执行结束时的结果集都是空的。例如,如果我在链接中输入&terminology=test这将转换为:

 text="select ?uri, ?label where { quad map virtrdf:DefaultQuadMap { graph <**test**> { ?uri ?p ?label.FILTER (?label = '"+search_string+"'@en) .}}}";

有趣的是,在端点上运行该 sparql 查询确实会返回结果。只有在eclipse中运行它时,它才不会!

也不能说语句之后的代码中有任何错误,else因为语句使用了相同的代码if并且它运行正常。

4

0 回答 0