如何在SPARQL中增加日期?

如何在SPARQL中增加日期?,sparql,virtuoso,Sparql,Virtuoso,如何在SPARQL中增加数字,尤其是日期?具体地说,我有一个过滤器,只为今天出生的人过滤: FILTER(STRLEN(STR(?born))>6&&(SUBSTR(STR(?born),6)=SUBSTR(STR(bif:curdate(“”)),6))。 如何扩展此过滤器,以便我在接下来的两天内也能找到出生的人 (我可以接受/忽略或纠正使用私人功能) 更新 由于建议的解决方案在DBpedia上不起作用,我使用Virtuoso私有函数实现了它,但除了使用UNION,我不知道如何更改过滤器或找到

如何在SPARQL中增加数字,尤其是日期?具体地说,我有一个过滤器,只为今天出生的人过滤:
FILTER(STRLEN(STR(?born))>6&&(SUBSTR(STR(?born),6)=SUBSTR(STR(bif:curdate(“”)),6))
。 如何扩展此过滤器,以便我在接下来的两天内也能找到出生的人

(我可以接受/忽略或纠正使用私人功能)

更新

由于建议的解决方案在DBpedia上不起作用,我使用Virtuoso私有函数实现了它,但除了使用
UNION
,我不知道如何更改过滤器或找到另一个优雅的解决方案,以便让人们在今天、明天和后天出生。目前,查询的这一部分如下所示:

BIND ((SUBSTR(STR(?born),6)=SUBSTR(STR(now()),6,5)) as ?tday)
BIND ((SUBSTR(STR(?born),6)=SUBSTR(STR(bif:dateadd("day", 1, now())),6,5)) as ?tday1)
BIND ((SUBSTR(STR(?born),6)=SUBSTR(STR(bif:dateadd("day", 2, now())),6,5)) as ?tday2)

FILTER (STRLEN(STR(?born)) > 6)
FILTER (?tday) .

?tday
替换为
?tday1
?tday2'
效果很好,但是结果中的三个日期如何?

如果端点支持持续时间算法,则可以在日期中添加持续时间。例如,在这里,我们可以在日期中添加两天的持续时间,并查看结束日期环绕到的正确行为下个月:

前缀xsd:
选择?开始?结束在哪里{
值?开始{“2005-02-28T00:00:00Z”^^xsd:dateTime}
值?持续时间{“P2DT0H0M0.000S”^^xsd:duration}
绑定((?开始+持续时间)为?结束)
}

如果您的端点支持持续时间算法,则可以将持续时间添加到日期中。例如,在这里,我们可以将持续时间添加到日期中的两天,并查看结束日期与下个月之间的正确行为:

前缀xsd:
选择?开始?结束在哪里{
值?开始{“2005-02-28T00:00:00Z”^^xsd:dateTime}
值?持续时间{“P2DT0H0M0.000S”^^xsd:duration}
绑定((?开始+持续时间)为?结束)
}

经过几次尝试,我找到了一个对我来说很好的解决方案。在这里,我选择了所有born today和接下来的7天:

values ?d {0 1 2 3 4 5 6 7}

BIND ((SUBSTR(STR(?born),6) as ?bornSTR))
BIND ((SUBSTR(STR(bif:dateadd("day", ?d, now())),6,5)) as ?day)

FILTER (STRLEN(STR(?born)) > 6 &&  STR(?bornSTR) = STR(?day))

经过几次尝试,我找到了一个对我来说很好的解决方案。在这里,我选择了所有born today和接下来的7天:

values ?d {0 1 2 3 4 5 6 7}

BIND ((SUBSTR(STR(?born),6) as ?bornSTR))
BIND ((SUBSTR(STR(bif:dateadd("day", ?d, now())),6,5)) as ?day)

FILTER (STRLEN(STR(?born)) > 6 &&  STR(?bornSTR) = STR(?day))

如果您的端点支持持续时间文字,您可能只需要在日期中添加两天的持续时间……您使用的是virtuoso吗?是的,virtuoso。如果我今天运行它,我希望得到04-17、-18、-19。但是,当我在29日运行它时,我当然希望得到04-29、04-30和05-01。我想在其他情况下使用
op:numeric add
,但是使用dat没有线索。日期和日期时间可以是xsd:duration。看看这个问题中的查询,它可以给你一些提示clue@William这与我在回答这个问题时使用的方法相同,但听起来virtuoso不做持续时间算术。如果您的端点支持持续时间文本,您可能只需要向日期…你在使用virtuoso吗?是的,virtuoso。如果我今天运行它,我想得到04-17,-18,-19。但是,当我在29日运行它时,我当然想要04-29,04-30和05-01。我想在其他情况下使用
op:numeric add
,但是有日期…没有线索。日期和日期时间可以是xsd:duration。看看这个问题中的查询,它可能是我给你一些clue@William这与我在回答这个问题时使用的方法相同,但听起来好像virtuoso不做持续时间算术。我使用的是DBpedia,它不适用于
xsd:duration
。我使用的是DBpedia,它不适用于
xsd:duration