序言中的持续时间比较

Duration comparison in prolog

我用一些 xsd:duration 数据类型创建了一个 OWL ontology。然后我使用 Thea 将其转换为序言事实。

我有以下 xsd:duration 结构 PnYnMnDTnHnMnS。我如何编写序言规则来比较两个持续时间,以确定哪个持续时间更大?

当我从序言事实中检索数据时,它具有以下形式:

literal(type('http://www.w3.org/2001/XMLSchema#duration', Value))

我设法使用以下方法提取价值:

extractDuration(Literal, Result):-arg(1,Literal,Out1),arg(2,Out1,Result).

这导致(例如):

'P5D', 'PT10H', or 'P3DT15H32M'

仍然不知道如何比较它们。

这种表现并不容易。为什么不是更传统的东西?

理想情况下,您可以在内部 将持续时间表示为秒(浮点数)(取决于您认为需要的粒度)。那么比较或计算就很简单了。您可以使用 date/time 库将其转换为人类可读的格式。

或者,您可以使用 YYYY-MM-DDTHH:MM:SS 之类的东西。这比较正确(因此,0001-12-30T00:00:00 小于 0002-00-00T00:00:00);但这有一个问题,你总是必须对其进行规范化,这一点都不简单。