Jersey上的多个查询可从多个图中进行选择

时间:2014-04-23 11:40:22

标签: java jersey sparql

我希望能够运行看起来像

的网址
  

主机/到/源极/搜索查询=东西&安培;术语= TERM1,TERM2等

我最感兴趣的是条款参数。我想运行一个SPARQL查询,该查询将使用 terms 的值作为要搜索的图表的名称。

    public String search(@QueryParam("query") String search_string, @QueryParam("match") @DefaultValue("") String match_string, @QueryParam("terms") @DefaultValue("") String terms_string)
        throws ServletException, IOException {  

    List<String> splitted =Arrays.asList(terms_string.split(","));      

    VirtGraph set = new VirtGraph (hostURL, userName, password);
    //String replaceString = "//s"+"AND"+"//s";
    String srch = search_string.replaceAll(java.util.regex.Pattern.quote(" "), " AND ") ;
    VirtuosoQueryExecution vqe = VirtuosoQueryExecutionFactory.create ("select ?s1 as ?uri, ?o1 as ?label where { { { select ?s1, ( ?sc * 3e-1 ) as ?sc, ?o1, ( sql:rnk_scale ( <LONG::IRI_RANK> ( ?s1 ) ) ) as ?rank, ?g where { quad map virtrdf:DefaultQuadMap { graph ?g { ?s1 ?s1textp ?o1 . ?o1 bif:contains '(" + srch + ")' option ( score ?sc ) . }}} order by desc ( ?sc * 3e-1 + sql:rnk_scale ( <LONG::IRI_RANK> ( ?s1 ) ) ) limit 20 offset 0  } }}", set);;


     if (match_string.equals("exact")){
     vqe = VirtuosoQueryExecutionFactory.create(
                "select ?uri, ?label where {quad map virtrdf:DefaultQuadMap { graph ?g { ?uri ?p ?label. FILTER (?label = '"+search_string+"'@en) .}}}",set
                );
    }
    ResultSet results = vqe.execSelect();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ResultSetFormatter.outputAsJSON(out, results);

    return out.toString();

}

目前我正在将用户的输入作为一个字符串,然后我将其拆分,但是知道如何使用Jersey的一些特权将其直接用作List是更好的。

但主要问题是如何将List项目视为SPARQL的图形,以便在上面的查询中使用。

0 个答案:

没有答案