从Cocoa的NSXML XQuery中的dateTime减去持续时间

时间:2011-04-22 16:08:42

标签: cocoa xquery nsxml

我有以下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/ 但是在Cocoa的NSXML中,它返回XQuery错误“操作符的无效类型。”

我对Cocoa的XQuery实现有什么不明白的地方吗?

2 个答案:

答案 0 :(得分:3)

您应该使用xs:dayTimeDurationxs:yearMonthDuration来定义substracting operators

作为证据,这个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

测试了Saxon,Altova,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 :(得分:1)

这个功能似乎是一个XPath 2.0。也许你的处理器不支持这个?

执行查询here表明它确实是正确的。所以,使用zorba它可以工作......