XQuery и Zorba: настройка параметров сериализации внутри документа XQuery - PullRequest
2 голосов
/ 16 февраля 2012

В соответствии с этим:

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

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 16 февраля 2012

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

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

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).) в интерфейсе командной строки для вывода этой строки.

1 голос
/ 16 февраля 2012

Это новый официальный синтаксис 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"
0 голосов
/ 16 февраля 2012

Я думаю, что zorba не использует 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
0 голосов
/ 16 февраля 2012

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

declare option omit-xml-declaration "yes";

НТН!

...