我正在尝试使用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只能正确读取它们(即完成)
NOT EXISTS {
?s ?p ?o .
...
}
而不是
FILTER NOT EXISTS {
?s ?p ?o .
...
}
如果我以这种方式手动运行模板,SPARQL将抛出异常,因为正确的方式是使用FILTER。现在,我将所有模板保存为Topbraid Composer中的NOT EXISTS,并在通过SPIN API加载后通过String.replace(…)添加FILTER位。它可能很难看,但至少它有效。