从日期时间中减去持续时间,单位为Cocoa';s NSXML XQuery

从日期时间中减去持续时间,单位为Cocoa';s NSXML XQuery,cocoa,xquery,nsxml,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解释器中运行良好: 但在Cocoa的NSXML中,它返回XQuery错误“运算符的类型无效” Cocoa的XQuery实现有什么我不

我有以下XQuery代码,从我对O'Reilly XQuery书的阅读来看,它应该可以工作:

let $now := current-dateTime()
let $month :=  xs:dayTimeDuration("P30D")
let $month_ago := $now - $month 
return $month_ago
它在这个实时XQuery解释器中运行良好: 但在Cocoa的NSXML中,它返回XQuery错误“运算符的类型无效”


Cocoa的XQuery实现有什么我不了解的吗?

您应该使用
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上测试

从中,这是运算符映射:


这个特性看起来是XPath2.0。也许你的处理器不支持这个


执行查询表明它确实是正确的。所以,和zorba一起工作

谢谢你的回答。我尝试将第二行替换为:
let$month:=xs:dayTimeDuration(“P30D”)
,但得到了相同的错误。有什么建议吗?谢谢你扩展了答案,但正如我所说,它在Cocoa中仍然不起作用。我使用的是Cocoa的NSXML,根据文档“包括对XQuery 1.0和XPath 2.0的支持”。所以,这可能是NSXML的XPath实现的问题?我用这些信息编辑了这个问题。
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)`