如何使用SPARQL中的MONTH()函数提取rdf4j中日期的月份



如何使用rd4j从java中的SPARQL复制以下过滤器?

FILTER(?endDate > NOW() && ?startDate < NOW() && MONTH(?endDate) = MONTH(NOW()))

我已经初始化了MONTH()NOW()的表达式如下,以及图形模式pattern,但不知道如何使用它们从变量?endDateNOW()函数中提取月份

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, ****)

这与设置其他表达式的方式没有什么不同。您希望在两个值表达式(我们称它们为leftArgrightArg(之间进行相等的比较操作,因此:

Expression monthEquals = Expressions.equals(leftArg, rightArg);

leftArgrightArg也是函数,都有一个操作数。leftArg有一个简单的变量作为其函数操作数:

Expression leftArg = Expressions.function(SparqlFunction.MONTH, endDate);

rightArg有一个NOW()函数作为其操作数:

Expression rightArg = Expressions.function(SparqlFunction.MONTH,
Expressions.function(SparqlFunction.NOW));

只要把它们放在一起,你就完了。

最新更新