Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: j_malyОтветов: 3

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

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

mapssaxonxquery

Ответы

Ответ 1 · рейтинг 3 · Hannes Bauer

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

Ответ 2 · рейтинг 2 · Leo Wörteler

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

Ответ 3 · Hannes Bauer

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы