序言中的持续时间比较

问题描述

我用一些 xsd:duration 数据类型制作了一个 OWL 本体。然后我使用 Thea 将其转换为 prolog 事实。

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

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

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'

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

解决方法

这种表示并不容易。为什么不做一些更传统的事情?

理想情况下,您可以在内部将持续时间表示为秒(浮点数)(取决于您认为需要的粒度)。然后比较或计算是微不足道的。您可以使用日期/时间库将其转换为人类可读的格式。

或者,您可以使用 YYYY-MM-DDTHH:MM:SS 之类的内容。这比较正确(因此,0001-12-30T00:00:00 小于 0002-00-00T00:00:00);但这有一个问题,即您总是必须对其进行规范化,这绝非易事。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...