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