Sparql Jena querybuilder ClearWhere值不是';行不通
我想清除selectBuilder对象中的where子句值,但无法使其正常工作Sparql Jena querybuilder ClearWhere值不是';行不通,sparql,jena,jena-querybuilder,Sparql,Jena,Jena Querybuilder,我想清除selectBuilder对象中的where子句值,但无法使其正常工作 import org.apache.jena.arq.querybuilder.SelectBuilder; 公共类TestClearWhere{ 公共静态void main(字符串[]args){ SelectBuilder sb=新建SelectBuilder(); sb.addVar(“r”)。addVar(“单位”)。addVar(“时间”)。addVar(“价值”)。addVar(“利息”); sb.add
import org.apache.jena.arq.querybuilder.SelectBuilder;
公共类TestClearWhere{
公共静态void main(字符串[]args){
SelectBuilder sb=新建SelectBuilder();
sb.addVar(“r”)。addVar(“单位”)。addVar(“时间”)。addVar(“价值”)。addVar(“利息”);
sb.addWhere(“?r”、“a”、“sao:Point”);
System.out.println(“在清除之前”+sb.toString());
sb.clearWhereValues();/?
sb.clearValues();/?clearValues都不起作用
System.out.println(“清除后\n”+sb.buildString());
}
}
输出
Before clear
SELECT ?r ?unit ?time ?value ?interest
WHERE
{ ?r a "sao:Point"}
After clear
SELECT ?r ?unit ?time ?value ?interest
WHERE
{ ?r a "sao:Point"}
请让我知道我做错了什么。您没有做错任何事情,只是误解了clear方法只对
value
子句起作用,例如,如果您做了sb..addValueVar(“?v”,“val1”)
您将向查询添加内联数据SELECT。。。WHERE{}VALUES?v{“val1”}
这将使用clear()
方法删除(一个用于在中包含值,另一个用于在WHERE
子句之外)。您需要的是创建一个新的生成器,因为没有重置方法。谢谢!是的,我误解了方法。因此,每当我想使用selectBuilder对象时,我就通过创建新的selectBuilder对象来解决我的问题。如果有一个实际的ClearWhere语句方法来清除where语句,那就太好了。这将使它更容易作为单例使用,也更容易用于依赖项注入。或者更好的选择是自动重置request语句及其参数(这样就不会为每个请求都创建对象)。至少可以使用复制当前状态的clone()
方法。因此,最初,您可以添加一些前缀和所有常见内容,然后克隆它,然后每次添加WHERE部分。此处还建议使用以下模板: