当前位置:  开发笔记 > 编程语言 > 正文

确定SPARQL中的日期时间

如何解决《确定SPARQL中的日期时间》经验,为你挑选了2个好方法。

我有一个图表,我试图按周计算过滤报告.例如,我希望找到周二发生的所有实例.有没有办法将日期时间字段格式化为星期几,或者直接在日期时间字段中按星期几来过滤?



1> Jeen Broekst..:

SPARQL没有内置的"星期几"功能,但是,大多数编程语言都内置支持从给定的日历/日期对象中检索星期几.例如,使用Java和RDF4J,您可以简单地检索dateTime文字(表示为Literal具有xsd:dateTime数据类型的对象),转换为Java日历对象,然后检索工作日:

Literal value = ... ; // the RDF4J literal value from your query result
Calendar calendar = value.calendarValue().toGregorianCalendar(); 
int weekday = calendar.get(Calendar.DAY_OF_WEEK);

此外,大多数SPARQL引擎都提供添加自定义功能的选项.

因此,您可以只检索dateTime并对结果进行后处理以获取星期几,也可以实际创建自定义函数并将其添加到SPARQL引擎中.这是一个关于如何使用Sesame/RDF4J向SPARQL添加自定义函数的教程.



2> Jindřich Myn..:

如果您提供了一些背景知识,也可以确定标准SPARQL中的星期几。查询需要在您的日期之前的参考日期和该日期的星期几。

PREFIX xsd:  

SELECT ?date ?dayName
WHERE {
  # Sample dates
  VALUES ?date {
    "1961-08-04"^^xsd:date
    "1986-04-03"^^xsd:date
  }
  # Compute days since a reference date
  # This works in Virtuoso, which returns the difference in days.
  # For example, Fuseki returns xsd:duration instead.
  BIND (?date - "1900-01-01"^^xsd:date AS ?days)
  # Compute modulo by 7 without a modulo operator
  BIND (floor(?days - (7 * floor(?days/7))) AS ?mod)
  VALUES (?mod ?dayName) {
         (0    "Monday") # 1900-01-01 was Monday
         (6    "Tuesday")
         (5    "Wednesday")
         (4    "Thursday")
         (3    "Friday")
         (2    "Saturday")
         (1    "Sunday")
  }
}

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有