在可可的NSXML XQuery与日期时间减去持续时间
问题描述:
我有以下XQuery代码,它从我的O'Reilly的书XQuery的阅读似乎像它应该工作:在可可的NSXML 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错误“操作符的类型无效”。
有什么我不明白可可的XQuery实现吗?
答
您应该使用xs:dayTimeDuration
或xs: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
在测试了撒克逊,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)`
答
此功能是XPath 2.0它似乎。也许你的处理器不支持这个?
执行您的查询here表明它确实是正确的。所以,与zorba它的作品...
+0
我正在使用Cocoa的NSXML,它根据文档“包括对XQuery 1.0和XPath 2.0的支持”。所以也许这是NSXML的XPath实现的问题?我用这个信息编辑了这个问题。 – 2011-04-22 17:07:44
感谢您的答案。我尝试更换第二行: 'let $ month:= xs:dayTimeDuration(“P30D”)' 并且得到相同的错误。有什么建议么? – 2011-04-22 17:03:47
谢谢你扩大答案,但正如我所说,它仍然不可以在可可。 – 2011-04-22 18:00:43