使用TopBraid SPIN API运行SPARQL / SPIN模板

时间:2014-10-24 08:52:59

标签: java sparql semantics topbraid-composer spin-rdf

我尝试使用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

1 个答案:

答案 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位。它可能很丑,但至少它有效。