2012-01-28 33 views
0

我想尝试撒克逊地图功能(http://www.saxonica.com/documentation/expressions/xpath30maps.xml),但我无法获得查询编译。也许我缺少一些参数,或者我使用错误的命名空间,但我找不到正确的答案。这是我的查询代码:XQuery 3.0和撒克逊地图

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

我看到的地图功能在撒克逊9.4只实现。你是否证实你使用的撒克逊版本确实是9.4? – 2012-01-28 16:43:56

+0

如果你确实有Saxon 9.4,那么看看这个代码示例:http://www.saxonica.com/documentation/extensions/map.xml。虽然它是XSLT,但您可以轻松将其转换为等效的XQuery代码。 – 2012-01-28 16:47:51

回答

1

您应该使用的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 

我尝试了与撒克逊-EE 9.4.0.2J(Java版本)也有同样的效果。