我目前正在使用 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 命令。
我将非常感谢那里的任何帮助!!!
最佳答案
您会收到错误消息,因为(正如我在评论中所说)并非所有文字都属于或可以是 CAST
到,输入 xsd:date
. A filter
因为那可以工作
PREFIX dbpedia0: <http://dbpedia.org/ontology/>
SELECT ?body ?value WHERE
{
?body a dbpedia0:Person .
?body dbpedia0:birthDate ?value .
FILTER ( datatype(?value) = xsd:date
&& year(?value) = 2000
)
}
limit 10
错误:
Virtuoso 22003 Error SR586: Incomplete RDF box as argument 0 for year().
再次尝试
cast
ing 给我的印象是 FILTER
参数以任意顺序执行,并导致另一个错误:PREFIX dbpedia0: <http://dbpedia.org/ontology/>
SELECT ?body ?value
WHERE
{
?body a dbpedia0:Person .
?body dbpedia0:birthDate ?value .
FILTER ( datatype(?value) = xsd:date
&& year(xsd:date(?value)) = 2000
)
}
limit 10
错误:
Virtuoso 22007 Error DT001: Function year needs a datetime, date or time as argument 1, not an arg of type DB_NULL (204)
使用子
SELECT
s 似乎有效,但不适用于PREFIX dbpedia0: <http://dbpedia.org/ontology/>
SELECT ?body ?value
WHERE
{
FILTER ( year(xsd:date(?value)) = 2000 )
{
SELECT ?body ?value
WHERE
{
?body a dbpedia0:Person .
?body dbpedia0:birthDate ?value .
FILTER ( datatype(?value) = xsd:date )
}
}
}
limit 10
错误:
Virtuoso 22003 Error SR586: Incomplete RDF box as argument 1 for xqf_str_parse().
只有一个
LIMIT
内子SELECT
这个对我有用:PREFIX dbpedia0: <http://dbpedia.org/ontology/>
SELECT ?body ?value
WHERE
{
FILTER ( year(xsd:date(?value)) = 2000 )
{
SELECT ?body ?value
WHERE
{
?body a dbpedia0:Person .
?body dbpedia0:birthDate ?value .
FILTER ( datatype(?value) = xsd:date )
}
LIMIT 10
}
}
LIMIT 10
我不知道这里的 Virtuoso 出了什么问题。
关于sparql - 按天和月过滤 SPARQL 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39795902/