Следующие тесты работали, как и ожидалось, в текущей версии BaseX, а также в XML Spy 2012:
let $doc :=
<dataroot>
<Customers>
<OrderDate>1996-07-04T00:00:00</OrderDate>
</Customers>
</dataroot>
return $doc/Customers
[xs:dateTime(./OrderDate/text()) gt xs:dateTime("1996-01-01T00:00:00")]
[xs:dateTime(./OrderDate/text()) lt xs:dateTime("1998-01-01T00:00:00")]
... где возвращаемое значение:
<Customers><OrderDate>1996-07-04T00:00:00</OrderDate></Customers>
... но тогда пример grtjn работает правильно и на BaseX, и не полагается на оптимизатор запросов, который замечает, что OrderDate/text()
не нужно дважды приводить в порядок, чтобы быть эффективным.Если ваш код не будет запущен в производство на движке Altova, я бы предложил использовать что-то с более поздней реализацией XQuery.