XQuery 3.0 и карты на саксонском языке

Я хотел бы поэкспериментировать с функциями карты в 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". Когда я пропускаю объявление карты пространства имен модулей, ошибка заключается в том, что карта префиксов не была объявлена, поэтому я предполагаю, что она должна быть.


person j_maly    schedule 28.01.2012    source источник
comment
Я вижу, что функция карт реализована только в Saxon 9.4. Вы убедились, что версия Saxon, которую вы используете, действительно 9.4?   -  person Dimitre Novatchev    schedule 28.01.2012
comment
Если у вас действительно Saxon 9.4, взгляните на этот пример кода: saxonica. com/documentation/extensions/map.xml . Хотя это XSLT, вы можете легко преобразовать его в эквивалентный код XQuery.   -  person Dimitre Novatchev    schedule 28.01.2012


Ответы (3)


Майкл Кей только что опубликовал новую запись в блоге с подробностями о реализации Saxon Map: http://dev.saxonica.com/blog/mike/2012/01/#000188

person Hannes Bauer    schedule 29.01.2012

Вы должны использовать 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) с тем же эффектом.

person Leo Wörteler    schedule 29.01.2012

Не знаю, поможет ли это, но BaseX XQuery Processor также предлагает реализацию предложения карты Майкла Кея (еще предстоит доработать W3): http://docs.basex.org/wiki/Map_Module

person Hannes Bauer    schedule 28.01.2012