问题描述
我用一些 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
);但这有一个问题,即您总是必须对其进行规范化,这绝非易事。