如何在 SPARQL 中比较两个日期
How to compare 2 dates in SPARQL
我正在研究非时态 SPARQL 查询,我对 RDF 三元组的概念有点困惑..
比如说,我想找到所有取消工作然后又选择完成他们取消的相同工作的员工。那么我该如何存储他们取消工作的日期和他们选择做同样工作的日期呢?
下面的方法行得通吗?
SELECT ?emp
WHERE
{
?emp :cancelledJob ?job
?emp :dateCancelled ?date1
?emp :selectedJob ?job
?emp :dateSelectedJob ?date2
FILTER(?date1 < ?date2)
}
您的查询将有效 if ?date1 和 ?date2 的值是这样的它们与标准中定义的 < 相当,或者如果您使用的特定实现扩展了 < 运算符来处理它们。 SPARQL 的运算符映射在标准中给出,位于 17.3 Operator Mapping。标准规定的数据类型及其映射是:
numeric op:numeric-less-than(A, B)
simple literal op:numeric-equal(fn:compare(A, B), -1)
xsd:string op:numeric-equal(fn:compare(STR(A), STR(B)), -1)
xsd:boolean op:boolean-less-than(A, B)
xsd:dateTime op:dateTime-less-than(A, B)
因此,如果您的日期是这些类型中的任何一种,您的查询将有效。一些实现也可能处理其他类型。
我正在研究非时态 SPARQL 查询,我对 RDF 三元组的概念有点困惑..
比如说,我想找到所有取消工作然后又选择完成他们取消的相同工作的员工。那么我该如何存储他们取消工作的日期和他们选择做同样工作的日期呢?
下面的方法行得通吗?
SELECT ?emp
WHERE
{
?emp :cancelledJob ?job
?emp :dateCancelled ?date1
?emp :selectedJob ?job
?emp :dateSelectedJob ?date2
FILTER(?date1 < ?date2)
}
您的查询将有效 if ?date1 和 ?date2 的值是这样的它们与标准中定义的 < 相当,或者如果您使用的特定实现扩展了 < 运算符来处理它们。 SPARQL 的运算符映射在标准中给出,位于 17.3 Operator Mapping。标准规定的数据类型及其映射是:
numeric op:numeric-less-than(A, B)
simple literal op:numeric-equal(fn:compare(A, B), -1)
xsd:string op:numeric-equal(fn:compare(STR(A), STR(B)), -1)
xsd:boolean op:boolean-less-than(A, B)
xsd:dateTime op:dateTime-less-than(A, B)
因此,如果您的日期是这些类型中的任何一种,您的查询将有效。一些实现也可能处理其他类型。