2

我有以下 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 错误“Invalid type for operator”。

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

4

2 回答 2

3

您应该使用xs:dayTimeDurationorxs: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

在 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)`   
于 2011-04-22T16:28:20.030 回答
1

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

在这里执行您的查询表明它确实是正确的。因此,使用 zorba 它可以工作...

于 2011-04-22T16:37:20.137 回答