XQuery:将日期时间与毫秒进行比较

XQuery: comparing datetimes with milliseconds

我在 Python 中有一个验证模块,它在 XML 文档上执行 XQuery,以检查 <End> 次之后是否有任何 <Start> 次,并且 return 他们的数量。查询如下:

    for $d at $count in ./ty:Detections/Detection
        where $d/Start > $d/End
        return $count

现在这适用于所有情况,除非将毫秒附加到结束时间但而不是开始时间,例如:

        <Start>2009-02-23T02:53:14Z</Start>
        <End>2009-02-23T02:53:14.226Z</End>

这总是 return 正确,即使显然 14 小于 14.22。 如果我在此处的 <Start> 时间中添加一个小数位,它可以工作——但是有没有更好的解决方案?

据推测,StartEnd 元素没有有效的架构绑定。在那种情况下,查询正在执行 xs:untypedAtomic 比较,它有效地比较字符串值,其中 "Z" 比较大于 ".".

您想要的是 xs:dateTime 比较,因此您应该在将元素值转换为该类型后比较它们。因此查询应该如下所示:

    for $d at $count in ./ty:Detections/Detection
    where xs:dateTime($d/Start) > xs:dateTime($d/End)
    return $count