Xquery и Zorba: Установка параметров сериализации изнутри документа Xquery
-
26-10-2019 - |
Вопрос
Согласно этому:
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";
Черт!
Я думаю, что Зорба не использует 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>
)
Это похоже на версию Zorba 1.4.0, которая предлагала общую функцию ser:serialize()
в модуле сериализации. В целом, это не только специфично для приложения, но и специфично для версии, так что может быть полезно узнать версию Zorba, которую вы используете.
РЕДАКТИРОВАТЬ: Если вы используете утилиту командной строки, вы можете использовать опцию --serialization-parameter, -z
Чтобы установить параметры сериализации:
zorba -z omit-xml-declaration=yes -f -q my_xquery.xq