XQuery 3.0和撒克逊地图

时间:2012-01-28 16:12:14

标签: maps xquery saxon

我想在Saxon(http://www.saxonica.com/documentation/expressions/xpath30maps.xml)中尝试地图功能,但我无法通过查询编译。也许我错过了一些参数或者我使用了错误的命名空间,但我找不到正确的答案。这是我的查询代码:

xquery version "3.0";

(: i have also tried http://www.w3.org/2005/xpath-functions/map, no difference :)
import module namespace map = "http://ns.saxonica.com/map";

map:get(map { 1 := 'aaa'}, 1)

从命令行调用:

"c:\Program Files\Saxonica\SaxonEE9.4N\bin\Query.exe" -s:play.xml -q:play2.xq" -qversion:3.0

命令以错误结束无法找到名称空间“http://ns.saxonica.com/map”的模块 当我省略模块命名空间映射声明时,错误是前缀映射尚未声明,所以我认为它必须是。

3 个答案:

答案 0 :(得分:3)

Michael Kay刚刚发布了一篇新的博客文章,其中详细介绍了Saxon Map的实现: http://dev.saxonica.com/blog/mike/2012/01/#000188

答案 1 :(得分:2)

您应该使用declare namespace代替import module namespace来访问内置函数。据我了解,模块导入仅适用于用户提供的模块。

档案map.xq

declare namespace map="http://www.w3.org/2005/xpath-functions/map";
map:get(map { 1 := 'aaa'}, 1)

工作得很好:

> "C:\Program Files\Saxonica\SaxonEE9.4N\bin\Query.exe" -qversion:3.0 map.xq
<?xml version="1.0" encoding="UTF-8"?>aaa

我也尝试使用Saxon-EE 9.4.0.2J(Java版本),效果相同。

答案 2 :(得分:0)

Dunno如果这有帮助,但BaseX XQuery处理器还提供了Michael Kay的地图提案的实现(仍由W3最终确定):http://docs.basex.org/wiki/Map_Module