SPIN是一种表示各种业务规则的方法。
这是spin(spinrdf
)的官方一行描述。
Spin使用户能够在本体中使用sparqls来表示他们的规则。
我需要进行这些描述,因为没有spinrdf标记。
我一直用旋转一周来写一些规则。现在我正在编写一些函数来简化我的规则中的sparqls。我有一个简单的日期比较函数compareDates
。当我使用以下sparql调用该函数时,没有错误并给出了预期的结果。
SELECT ?result
WHERE {
BIND(:compareDates("2015-03-03"^^xsd:date, "2015-06-09"^^xsd:date) as ?result)
}
我想使用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
如下面的屏幕截图所示,该功能不包含任何正文!这可能是问题,但是,如果它不起作用,为什么它被放在相关的本体中。
答案 0 :(得分:1)
经过一些研究后,我找到了两种现在具有日期时间的替代方法。事实上,存在now()
函数记录here的sparql实现。
SELECT ?now
WHERE {
BIND(now() as ?now).
}
此sparql将返回以下内容:
[now]
2015-03-24T22:12:29.183+02:00
在旋转本体中存在另一种方法;位于afn:now()
级下的spl:MiscFunctions
。此功能将产生相同的结果。
顺便说一句,我一直使用xsd:date
作为我的函数参数,但现在两个函数替代都返回xsd:dateTime
文字。
将这些转换为xsd:date
是另一回事。
存在一些强制转换函数,但它们仅转换类型但不修剪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).
}
哪个转换成功。 这可能是转换为日期文字类型的过早方法,但这是我解决问题的方法。 任何建议都表示赞赏。