【问题标题】:How to compare 2 dates in SPARQL如何在 SPARQL 中比较 2 个日期
【发布时间】:2017-03-30 09:40:48
【问题描述】:

我正在研究非时间 SPARQL 查询,我对 RDF 三元组的概念有点困惑..

假设,我想找到所有取消工作的员工,然后选择完成他们取消的相同工作。那么如何存储他们取消工作的日期以及他们选择执行相同工作的日期?

以下方法有用吗?

SELECT ?emp
    WHERE
    {
      ?emp :cancelledJob ?job
      ?emp :dateCancelled ?date1 
      ?emp :selectedJob ?job 
      ?emp :dateSelectedJob ?date2 
      FILTER(?date1 < ?date2) 
    }

【问题讨论】:

  • 如果两个日期具有 SPARQL 支持的相同数据类型,例如xsd:date,它会工作的。
  • @AKSW 你确定它可以与xsd:date 一起使用吗?查看operating mappings,我不确定是否需要除xsd:dateTime 之外的日期类型的支持,即使某些端点可能支持它。 (例如,RobV 在 stackoverflow.com/questions/24051435/… 中提到将事物转换为 xsd:dateTime)。
  • 嗯,看看文件我猜你是对的。该标准似乎只涵盖xsd:dateTime。我想知道是否存在某种包含,即xsd:dateTime 应该比xsd:date 更具体。但我想这甚至不是 XML Schema 的一部分,只是一个语法错误。感谢指正!

标签: sparql rdf triplestore triples turtle-rdf


【解决方案1】:

如果 ?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)

因此,如果您的日期是这些类型中的任何一种,那么您的查询将有效。一些实现也可能处理其他类型。

【讨论】:

    猜你喜欢
    • 2012-11-27
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多