按天和月筛选SPARQL结果
我目前正在使用该网站启动一些基本请求,如下所示:按天和月筛选SPARQL结果,sparql,rdf,dbpedia,Sparql,Rdf,Dbpedia,我目前正在使用该网站启动一些基本请求,如下所示: PREFIX dbpedia0: <http://dbpedia.org/ontology/> SELECT ?body ?value WHERE { ?body a dbpedia0:Person. ?body dbpedia0:birthDate ?value. } ORDER BY ?value 前缀dbpedia0: 选择“主体”值,其中{ ?主体a:0:人。 ?body dbpedia0:生日?值。 } 按价值排序 我想
PREFIX dbpedia0: <http://dbpedia.org/ontology/>
SELECT ?body ?value WHERE {
?body a dbpedia0:Person.
?body dbpedia0:birthDate ?value.
}
ORDER BY ?value
前缀dbpedia0:
选择“主体”值,其中{
?主体a:0:人。
?body dbpedia0:生日?值。
}
按价值排序
我想找到一种过滤结果的方法,以便只选择在日期X
monthY
出生的人(无论出生年份如何)。我一直在尝试采用以下多种方法:
1) 基本筛选:筛选(xsd:date(?value)=“2000-01-01”^^xsd:date)
但我现在不知道该如何准确地说出我不在乎这一年的事实
2) 使用MONTH()
和DAY()
函数,这些函数将产生表示月份和日期的整数值。。。但是这些似乎不起作用,因为我的日期类型被认为是无效的输入参数
3) 将日期转换为字符串变量。然后测试此字符串变量(对应于月和日)的结束字符是否与所需的月和日匹配。这类似于:FILTER(强度(CONVERT(CHAR,value),“01-01”)=true)
显然,上面列出的方法都不能正常工作。。。哈哈。
请不要因为我的请求语法不好而责怪我,因为我刚刚开始使用SPARQL命令
我将非常感谢任何帮助从上或其他在那里 您会得到一个错误,因为(正如我在评论中所说)并非所有的文本都是或可以是CAST
to,typexsd:date
。一个过滤器可以工作
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
另一次尝试使用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
使用sub-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
只有在子菜单中有一个限制
,选择它对我有效:
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
前缀dbpedia0:
选择“主体”值
哪里
{
过滤器(年份(xsd:date(?value))=2000)
{
选择“主体”值
哪里
{
?主体a:0:人。
?body dbpedia0:生日?值。
过滤器(数据类型(?值)=xsd:date)
}
限制10
}
}
限制10
我不知道这里的Virtuoso出了什么问题。为什么要添加标签MYSQL和SQL?为什么您要谈论“我才刚开始使用SQL”命令?SPARQL!=SQLAnd格式化问题也会有帮助,请注意DBpedia数据是非常异构的,尤其是日期文本是xsd:date、xsd:dateTime、xsd:gYear等。这使得从SPARQL规范强制转换和筛选非常困难,函数year()
需要一个dateTime参数:
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().
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