如何使用rd4j从Java中的SPARQL复制以下筛选器?
FILTER(?endDate > NOW() && ?startDate < NOW() && MONTH(?endDate) = MONTH(NOW()))
我有如下MONTH()
和NOW()
的初始化表达式,以及一个图形模式pattern
,但不知道如何使用它们从变量?endDate
和NOW()
函数中提取月份
Expression<?> nowFunc = Expressions.function(SparqlFunction.NOW );
Expression<?> month = Expressions.function(SparqlFunction.MONTH);
Expression<?> endDateGreaterThan = Expressions.gt(endDate, nowFunc);
Expression<?> startDateLessThan = Expressions.lt(startDate, nowFunc);
到目前为止,我的查询如下所示,但我不知道如何将筛选器的最后部分(*)实现到查询中。
SelectQuery query = Queries.SELECT().prefix(ex).select(letter).where(pattern.filter(Expressions.
and(endDateGreaterThan, startDateLessThan, ****)
它与您设置其他表达式的方式没有什么不同。您需要两个值表达式之间的等于比较运算(让我们称它们为leftArg
和rightArg
),因此:
Expression monthEquals = Expressions.equals(leftArg, rightArg);
您的leftArg
和rightArg
都是函数,都只有一个操作数。leftArg
有一个简单变量作为其函数操作数:
Expression leftArg = Expressions.function(SparqlFunction.MONTH, endDate);
rightArg
具有NOW()
函数作为其操作数:
Expression rightArg = Expressions.function(SparqlFunction.MONTH,
Expressions.function(SparqlFunction.NOW));
只需将它们放在一起,您就完成了。