我使用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
谢谢 尼哈特
答案 0 :(得分:0)
我通过编辑源代码并重新编译来解决错误。
因此,有必要增加位于SETP_DISTINCT_MAX_KEYS
文件中的常量sqlnode.h
的值(路径:libsrc / Wi / sqlnode.h
)