我想在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”的模块 当我省略模块命名空间映射声明时,错误是前缀映射尚未声明,所以我认为它必须是。
答案 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