Sparql Spinrdf sp:现在函数没有返回任何内容

Sparql Spinrdf sp:现在函数没有返回任何内容,sparql,semantic-web,rules,Sparql,Semantic Web,Rules,SPIN是一种表示广泛业务规则的方法 这是spin(spinrdf)的官方单行描述。 Spin使用户能够在本体中用sparqls表示他们的规则 我需要做这些描述,因为没有spinrdf标记 我已经用了一周左右的时间写了一些规则。现在我正在编写一些函数来简化规则中的SPARQL。我编写了一个简单的日期比较函数compareDates。使用以下sparql调用函数时,没有错误,并给出了预期结果 SELECT ?result WHERE { BIND(:compareDates("2015-03-0

SPIN是一种表示广泛业务规则的方法

这是spin(
spinrdf
)的官方单行描述。 Spin使用户能够在本体中用sparqls表示他们的规则

我需要做这些描述,因为没有spinrdf标记

我已经用了一周左右的时间写了一些规则。现在我正在编写一些函数来简化规则中的SPARQL。我编写了一个简单的日期比较函数
compareDates
。使用以下sparql调用函数时,没有错误,并给出了预期结果

SELECT ?result
WHERE {
 BIND(:compareDates("2015-03-03"^^xsd:date, "2015-06-09"^^xsd:date) as ?result)
}
我想使用spin附带的
sp:now
函数。当我使用以下sparql时,我没有输出

SELECT ?result
WHERE {
 BIND(:compareDates("2015-03-03"^^xsd:date, sp:now()) as ?result)
}
然后我尝试了以下方法,但没有成功:

SELECT ?result
WHERE {
 BIND(sp:now() as ?now)
 BIND(:compareDates("2015-03-03"^^xsd:date, ?now) as ?result)
}
然后我决定看看sp:now返回什么,我运行了下面的sparql,结果为null。这使我得出结论,我将无法运行此函数

SELECT ?now
WHERE {
 BIND(sp:now() as ?now)
}
我想使用这个函数或类似的函数,但我不明白这个问题。如有任何评论,我们将不胜感激

更新1

如下面的屏幕截图所示,该函数不包含任何正文!这将是一个问题,但是,如果它不起作用,为什么它被放在相关的本体中呢


经过一些研究,我找到了两种选择现在使用datetime的方法。事实上,存在一个sparql实现
now()
函数

此sparql将返回以下内容:

[now]
2015-03-24T22:12:29.183+02:00
在spin本体中有一种替代方法
afn:now()
位于
spl:miscsfunctions
类下。此函数将给出相同的结果

顺便说一下,我一直使用
xsd:date
作为函数参数,但现在两个函数选项都返回
xsd:dateTime
文本。 将它们转换为xsd:date是另一回事。 存在一些cast函数,但它们只转换类型,而不修剪xsd:dateTime的小时部分,这会导致比较失败。 因此,我们提出了以下sparql,它使用间接方法将
xsd:dateTime
转换为
xsd:date

SELECT ?nowDateTime ?nowDate 
WHERE {
 BIND(now() as ?nowDateTime). 
 BIND(spif:cast(spif:dateFormat(?nowDateTime, "yyyy-MM-dd"), xsd:date) as ?nowDate).
}
成功地转换了文件。 这可能是一种不成熟的方式来转换到最新的文字类型,但这就是我解决问题的方法。
非常感谢您的建议。

还请注意,如果您不需要查询中的值,您可以
选择(now()as?nowDateTime).
。您不必使用
bind
。谢谢您的建议!这对我很有用。
SELECT ?nowDateTime ?nowDate 
WHERE {
 BIND(now() as ?nowDateTime). 
 BIND(spif:cast(spif:dateFormat(?nowDateTime, "yyyy-MM-dd"), xsd:date) as ?nowDate).
}