我有一个图表,我正在尝试按星期几筛选报告。例如,我希望找到它们发生在星期二的所有实例。有没有一种方法可以将日期时间字段格式化为星期几,或者直接在日期时间字段上按星期几过滤?
发布于 2017-01-21 22:48:51
如果您提供了一些背景知识,还可以在标准SPARQL中确定星期几。查询需要引用日期在您的日期和此日期的星期几之前。
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
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")
}
}发布于 2017-01-19 05:42:49
SPARQL没有内置的“星期几”函数,但是,大多数编程语言都内置了对从给定的日历/日期对象中检索星期几的支持。例如,使用Java和RDF4J,您可以简单地检索dateTime文字(表示为具有xsd:dateTime数据类型的Literal对象),转换为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引擎中。这里有一个关于how to add a custom function to SPARQL using Sesame/RDF4J的教程。
发布于 2017-01-19 05:28:12
SPARQL没有日期名称函数,但是如果您的SPARQL端点是一个Virtuoso实例,那么您可以利用它的SQL函数。这是一个query you can run against DBpedia --
SELECT
?birthdate
( bif:dayname(?birthdate) AS ?dayname )
WHERE
{ <http://dbpedia.org/resource/Barack_Obama>
<http://dbpedia.org/ontology/birthDate> ?birthdate
}--这将会得到Barack Obama's birthdate and day --
birthdate dayname
1961-08-04 Friday我认为与其说是不知道如何构建SPARQL FILTER,不如说是因为缺少这样的函数
(ObDisclaimer:OpenLink Software生产Virtuoso,雇佣我。)
https://stackoverflow.com/questions/41729208
复制相似问题