SQ186:超过100个密钥

时间:2014-06-25 11:03:10

标签: spring jena virtuoso

我使用apache jena框架创建了一个java应用程序,允许通过SPARQL请求从Virtuoso检索数据。 当我执行SPARQL请求时出现以下错误:

SQ186: Over 100 keys in distinct

从Virtuoso查询的不同属性的数量超过100.这就是我收到此错误的原因。 它是Sparql请求:

PREFIX  ns:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX  tk:   <http://www.trooclick.com/ontologies/2013/10/tk.owl#>
 ....
 SELECT DISTINCT  ?s0 ?s0_type ?s0_acquirer_companyName_normalized ....................
  WHERE
  {
    ?s0 ns:type ?s0_type .
    ?s0 tk:acquirer ?s0_acquirer .
    ?s0_acquirer tk:companyName ?s0_acquirer_companyName .
    OPTIONAL
      { ?s0 tk:deal ?s0_deal
        OPTIONAL
          { ?s0_deal tk:valueDeal ?s0_deal_valueDeal
           ................
         }
      }
   FILTER regex(?s0_type, tk:Acquisition, "i")
}

实际上抛出异常的方法是 execSelect()。我在图表上执行请求时调用了这个方法

 VirtuosoQueryExecution vqe = VirtuosoQueryExecutionFactory.create (sparql, graph);
 ResultSet results = vqe.execSelect();

这是execSelect()方法

    public ResultSet execSelect() {
        ResultSet ret = null;
        try {
            stmt = graph.createStatement();         
            stmt.setFetchSize(1000);    
            java.sql.ResultSet rs = stmt.executeQuery(getQueryString());

            return new VResultSet(graph, rs);
        } catch (Exception e) {
            throw new JenaException("Can not create ResultSet.:" + e);
        }
    }

所以我设置了stmt.setFetchSize(1000);但没有任何改变,我总是犯同样的错误

我使用的是ubuntu 14.04,而virtuoso版本是7

谢谢 尼哈特

1 个答案:

答案 0 :(得分:0)

我通过编辑源代码并重新编译来解决错误。 因此,有必要增加位于SETP_DISTINCT_MAX_KEYS文件中的常量sqlnode.h的值(路径:libsrc / Wi / sqlnode.h