Spinrdf sp:现在函数没有返回任何东西

时间:2015-03-24 19:27:58

标签: sparql semantic-web rules

  

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

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

sp:now Function form in topBraid Composer

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).
}

哪个转换成功。 这可能是转换为日期文字类型的过早方法,但这是我解决问题的方法。 任何建议都表示赞赏。