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



我正在尝试使用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位。它可能很难看,但至少它有效。

相关内容

  • 没有找到相关文章

最新更新