我尝试使用SPIN API运行模板。
对于简单模板,这种方法效果很好,但我在使用包含FILTERs
的模板时遇到了问题。
出于验证目的,我打印模板'运行它们之前的身体和我看到的不是我期望看到的:
Template t = SPINModuleRegistry.get().getTemplate("TheTemplatesURI", myModel);
System.out.printLn(t.getBody().toString());
它打印查询,但FILTER
子句包含4行,如下所示:
FILTER <http://spinrdf.org/sp#notExists>([]) .
因此,当我尝试运行它时查询失败。
有没有人知道如何从我的模型中检索完整的spin:body
?
答案 0 :(得分:1)
我现在使用解决方法。
问题是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位。它可能很丑,但至少它有效。