我正在尝试使用 SPIN API 运行模板。
对于简单的模板,这很有效,但我在使用包含 FILTERs
的模板时遇到了麻烦。
出于验证目的,我在运行模板之前打印模板的主体,但我看到的并不是我期望看到的:
Template t = SPINModuleRegistry.get().getTemplate("TheTemplatesURI", myModel);
System.out.printLn(t.getBody().toString());
它打印查询,但包含 4 行的 FILTER
子句如下所示:
FILTER <http://spinrdf.org/sp#notExists>([]) .
因此,当我尝试运行查询时,查询失败。
有人知道如何从我的模型中检索完整的 spin:body
吗?
最佳答案
我现在使用一种解决方法。
问题是,如果我将 FILTER 查询设置为
,SPIN API 只能正确读取(即完整)FILTER 查询NOT EXISTS {
?s ?p ?o .
...
}
而不是
FILTER NOT EXISTS {
?s ?p ?o .
...
}
如果我以这种方式手动运行模板,SPARQL 将引发异常,因为正确的方法是使用 FILTER。我现在将所有模板在 Topbraid Composer 中保存为 NOT EXISTS,并在通过 SPIN API 加载它们后通过 String.replace(...) 添加 FILTER 位。它可能很难看,但至少有效。
关于java - 使用 TopBraid SPIN API 运行 SPARQL/SPIN 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26544554/