如何用python在Sparql中执行算术运算?

2024-06-07 15:09:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个公共域计算器,其代码在:https://github.com/okfn/pdcalc/blob/master/pd/map.rdf

由于sparql 1.0遇到了一个问题,代码当前无法正确确定作品的公共域状态:似乎无法对日期执行算术运算,这意味着计算器无法确定作品是否在作者去世70年后出版。 不幸的是,标准python的rdf库还没有实现对sparql1.1的支持 因此,我想知道是否有人对如何克服这个限制有任何建议,或者是否知道任何一个python库可以更好地支持sparql?在

期待你的回馈!在


Tags: 代码httpsgithubmastercommap状态rdf
2条回答

虽然SPARQL 1.0中的日期不能进行算术运算,但如果实现遵循规范,则至少应该能够比较日期:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT *
WHERE
{
  # Your Triple Patterns here
  FILTER( ?date > "2011-11-20T00:00:00Z"^^xsd:dateTime)
}

现在这仍然不能解决你的问题,你需要把作者的死亡日期加上70。您可能需要做的是计算客户机代码中的这一部分并将其注入SPARQL查询中。因此,这意味着您可能需要执行两个查询—一个用于获取信息,另一个用于计算是否为公共工作。Tbh您可能只需要在客户端代码中计算第二部分,以保存额外的查询。在

虽然在有一个很好的兼容sparql1.1的python库之前,这并不理想,但这正是您要坚持的。在

默认情况下,即使是sparql1.1也不支持日期上的算术运算。请参阅SPARQL operator mapping部分:算术运算只在数值数据类型上定义。在

可能有一些sparql1.1实现为此提供了一个扩展,但是我现在还没有发现任何一个sparql1.1内置了这个功能,当然在Python中也没有。在

最好的办法是与您选择的SPARQL引擎的开发人员取得联系,缠着他们实现这样的扩展,或者当然也可以自己动手。在

作为一种解决方法,大多数SPARQL引擎(甚至1.0)都支持日期上的比较操作,因此您可以执行排序和比较之类的操作,但是您必须对查询结果执行一些自定义的后处理。在

Update我刚刚意识到我忽略了一个相当重要的东西:sparql1.1当然支持year()month()等函数,这些函数将日期时间值的年和月组成部分返回为整数,您可以想象使用它对日期进行迂回运算。在

相关问题 更多 >

    热门问题