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

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

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

"XQuery не имеет стандартного способа установки параметров сериализации, если он доступен. В XQuery мы должны найти соответствующую документацию для процессора XQuery, чтобы узнать, какие параметры сериализации реализованы, если таковые имеются, и как именно их использовать. Если они доступны, они обычно может быть установлен в командной строке. Часто они также могут быть использованы внутри документа XQuery."

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

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

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

4 ответа

Решение

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

Единственный способ настроить сериализатор - использовать интерфейс командной строки (например, --omit-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>
)

а затем используйте метод сериализации текста (--serialize-text) в интерфейсе командной строки для вывода этой строки.

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

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) Zorba должна поддерживать спецификацию сериализации ( http://www.w3.org/TR/xslt-xquery-serialization/). В этом случае, если я не ошибаюсь, должно быть:

declare option omit-xml-declaration "yes";

НТН!

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

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

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

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

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

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

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

zorba -z omit-xml-declaration=yes -f -q my_xquery.xq
Другие вопросы по тегам