Xquery и Zorba: Установка параметров сериализации изнутри документа Xquery

StackOverflow https://stackoverflow.com/questions/9312593

Вопрос

Согласно этому:

http://www.xmlplease.com/xquery-xhtml

"Xquery не имеет стандартного способа настройки параметров сериализации, если таковые имеются. Обычно можно устанавливать в командной строке. Часто они также могут использоваться изнутри документа Xquery ».

В саксонском вы можете написать что -то вроде

declare option saxon:output "omit-xml-declaration=yes";

Но нет упоминания о том, как это сделать в Zorba Xquery. Вы можете помочь? Спасибо.

Это было полезно?

Решение

Zorba еще не реализует опции XQuery 3.0 для сериализации.

Единственный способ настройки сериализатора-это использование интерфейса командной строки (например, AMIT-XML-декларация) или языка хоста (например, API C ++).

XQuery_t lQuery = aZorba->compileQuery("for $i in (1 to 3) return <a> { $i } </a>");

Zorba_SerializerOptions lSerOptions;
lSerOptions.omit_xml_declaration = ZORBA_OMIT_XML_DECLARATION_YES;

lQuery->execute(std::cout, &lSerOptions);

В качестве альтернативы, вы можете явно сериализировать результат на строку

fn:serialize($result,
  <output:serialization-parameters>
    <output:indent value="yes"/>
    <output:method value="xml"/>
    <output:omit-xml-declaration value="yes"/>
  </output:serialization-parameters>
)

и затем используйте метод сериализации текста (--сериального текста) в интерфейсе командной строки, чтобы вывести эту строку.

Другие советы

Это новый официальный синтаксис Xquery 3.0, который уже поддерживается некоторыми реализациями Xquery (так что я думаю, что он скоро будет реализован в Зорбе?):

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:omit-xml-declaration "yes";
"your query"

Согласно документам ( http://www.zorba-xquery.com/html/documentation/2.1.0/zorba/indexpage#w3cspecs ) Зорба должен поддерживать спецификацию сериализации ( http://www.w3.org/tr/xslt-xquery-serialization/#serparam ) В этом случае это должно, если я не ошибаюсь, быть:

declare option omit-xml-declaration "yes";

Черт!

Я думаю, что Зорба не использует optionS для установки параметров сериализации. Вместо этого вам придется установить эти параметры в качестве параметров функции сериализации, которую вы используете.

Например, для сериализации некоторого XML на файл с помощью Zorba 2.x, вы используете file:write() функция Эта функция принимает три параметра:

  • файл для написания,
  • Контент для написания,
  • и параметры сериализации:

РЕДАКТИРОВАТЬ: Я думаю, это было бы так:

file:write (
    '/tmp/test.xml', 
    $content, 
    <serialization-parameters>
        <omit-xml-declaration>yes</omit-xml-declaration>
    </serialization-parameters> 
)

Это похоже на версию Zorba 1.4.0, которая предлагала общую функцию ser:serialize() в модуле сериализации. В целом, это не только специфично для приложения, но и специфично для версии, так что может быть полезно узнать версию Zorba, которую вы используете.

РЕДАКТИРОВАТЬ: Если вы используете утилиту командной строки, вы можете использовать опцию --serialization-parameter, -z Чтобы установить параметры сериализации:

zorba -z omit-xml-declaration=yes -f -q my_xquery.xq
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top