【发布时间】:2017-02-09 06:58:28
【问题描述】:
我目前正在使用http://dbpedia.org/snorql 网站发起一些基本请求,如下所示:
PREFIX dbpedia0: <http://dbpedia.org/ontology/>
SELECT ?body ?value WHERE {
?body a dbpedia0:Person.
?body dbpedia0:birthDate ?value.
}
ORDER BY ?value
我想找到一种过滤结果的方法,以便只选择出生于 X 月 Y 的人(无论出生年份)。我一直在尝试使用许多方法来做到这一点,例如:
1) 基本过滤:FILTER(xsd:date(?value) = "2000-01-01"^^xsd:date)
但我现在不知道如何准确地说我不在乎这一年......
2) 使用 MONTH() 和 DAY() 函数,它们应该导致表示月份和日期的整数值...但是这些似乎不起作用,因为据说我的日期类型是无效的输入参数。
3) 将日期转换为字符串变量。然后测试这个字符串变量的结束字符(对应月和日)是否匹配所需的月和日。就像这样:FILTER(STRENDS(CONVERT(CHAR, ?value),"01-01") = true)
显然,上面列出的方法都没有正常工作......哈哈。 请不要因为我的请求语法不佳而责备我,因为我刚开始使用 SPARQL 命令。
我将非常感谢那里或其他人的任何帮助!!!
【问题讨论】:
-
为什么要加标签MYSQL和SQL?你为什么要谈论“我只是从 SQL 开始”命令? SPARQL != SQL
-
格式化问题也会有所帮助,请关注stackoverflow.com/help/formatting
-
DBpedia 数据非常异构,尤其是日期文字是 xsd:date、xsd:dateTime、xsd:gYear 等,这使得转换和过滤非常困难
-
根据 SPARQL 规范,函数
year()需要一个 dateTime 参数:w3.org/TR/sparql11-query/#func-year