Вычитание продолжительности из dateTime в NSXML XQuery Какао - PullRequest
2 голосов
/ 22 апреля 2011

У меня есть следующий код XQuery, который из моего прочтения книги O'Reilly XQuery выглядит так, как будто он должен работать:

let $now := current-dateTime()
let $month :=  xs:dayTimeDuration("P30D")
let $month_ago := $now - $month 
return $month_ago

В этом интерпретаторе XQuery работает нормально: http://try.zorba -xquery.com / Но в NSXML Какао он возвращает ошибку XQuery «Недопустимый тип для оператора».

Что-то я не понимаю в реализации XQuery в Какао?

Ответы [ 2 ]

3 голосов
/ 22 апреля 2011

Вы должны использовать xs:dayTimeDuration или xs:yearMonthDuration, для которых определены операторы вычитания .

В качестве доказательства, этот XQuery:

let $now := current-dateTime()
let $month :=  xs:dayTimeDuration("P30D")
let $month_ago := $now - $month
return $month_ago

Вывод:

2011-03-23T14:32:47.156-03:00

Проверено на саксонской, альтовой, XQSharp.

от http://www.w3.org/TR/xpath20/#mapping, это отображение оператора:

Operator | Type(A)              | Type(B)              | Function  
A - B    | numeric              | numeric              | op:numeric-subtract(A, B)  
A - B    | xs:date              | xs:date              | op:subtract-dates(A, B)   
A - B    | xs:date              | xs:yearMonthDuration | op:subtract-yearMonthDuration-from-date(A, B)  
A - B    | xs:date              | xs:dayTimeDuration   | op:subtract-dayTimeDuration-from-date(A, B)  
A - B    | xs:time              | xs:time              | op:subtract-times(A, B)   
A - B    | xs:time              | xs:dayTimeDuration   | op:subtract-dayTimeDuration-from-time(A, B)     
A - B    | xs:dateTime          | xs:dateTime          | op:subtract-dateTimes(A, B)  
A - B    | xs:dateTime          | xs:yearMonthDuration | op:subtract-yearMonthDuration-from-dateTime(A, B)    
A - B    | xs:dateTime          | xs:dayTimeDuration   | op:subtract-dayTimeDuration-from-dateTime(A, B)    
A - B    | xs:yearMonthDuration | xs:yearMonthDuration | op:subtract-yearMonthDurations(A, B)`   
1 голос
/ 22 апреля 2011

Похоже, это XPath 2.0.Может быть, ваш процессор не поддерживает это?

Выполнение вашего запроса здесь показывает, что это действительно правильно.Итак, с zorba это работает ...

...