Serialization XQuery和Zorba:从XQuery文档内部设置序列化参数

Serialization XQuery和Zorba:从XQuery文档内部设置序列化参数,serialization,parameters,xquery,options,zorba,Serialization,Parameters,Xquery,Options,Zorba,据此: “XQuery没有设置序列化参数的标准方法(如果可用)。在XQuery中,我们必须查找XQuery处理器的适当文档,以了解实现了哪些序列化参数(如果有的话),以及如何准确地使用它们。如果可用,它们通常可以在命令行中设置。通常,它们也可以从XQuery文档内部使用。” 在撒克逊,你可以写一些类似的东西 declare option saxon:output "omit-xml-declaration=yes"; 但是在Zorba XQuery中没有提到如何实现这一点。您能帮忙吗?谢谢。

据此:

“XQuery没有设置序列化参数的标准方法(如果可用)。在XQuery中,我们必须查找XQuery处理器的适当文档,以了解实现了哪些序列化参数(如果有的话),以及如何准确地使用它们。如果可用,它们通常可以在命令行中设置。通常,它们也可以从XQuery文档内部使用。”

在撒克逊,你可以写一些类似的东西

declare option saxon:output "omit-xml-declaration=yes";
但是在Zorba XQuery中没有提到如何实现这一点。您能帮忙吗?谢谢。

根据文档(),Zorba应该支持序列化规范()。在这种情况下,如果我没有弄错的话,应该是:

declare option omit-xml-declaration "yes";

HTH!

这是新的官方XQuery 3.0语法,一些XQuery实现已经支持它(所以我想它很快就会在Zorba中实现了?)


我认为zorba没有使用
选项
s来设置序列化参数。相反,您必须将这些参数设置为您正在使用的序列化函数的参数

例如,要使用zorba 2.x将某些XML序列化为文件,可以使用函数。此函数包含三个参数:

zorba -z omit-xml-declaration=yes -f -q my_xquery.xq
  • 要写入的文件
  • 要写的内容,
  • 以及序列化参数:
编辑:我想应该是这样的:

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

Zorba还没有实现XQuery 3.0 prolog的序列化选项

<> P>配置串行化器的唯一方法是使用命令行接口(例如,省略XML声明)或宿主语言(例如C++ API)。
XQuery\u t lQuery=aZorba->compileQuery(“对于(1到3)中的$i,返回{$i}”);
Zorba_系列建议/建议;
lSerOptions.omit_xml_declaration=ZORBA_omit_xml_declaration_YES;
lQuery->execute(std::cout,&l选项);
或者,可以将结果显式序列化为字符串

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

然后使用命令行界面中的文本序列化方法(--serialize text)输出此字符串。

我得到以下错误:7,1:静态错误[err:XPST0081]:“忽略xml声明。”“:无法将命名空间前缀扩展到URI@david:是的,我担心答案中的选项名称缺少名称空间前缀。cgcg找到了正确的语法。@grtjin:…所以我最好还是保持这种方式;)我使用的是Zorba 2.1版。0@David:那么
file:write()
函数应该适合您。您可以为
fn:serialize
函数设置序列化参数。是的,这是正确的语法。您可以在此处进行测试:
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>
)