具有默认回退值的输出端口

  • 本文关键字:输出 默认 回退 xproc
  • 更新时间 :
  • 英文 :


(这是具有默认回退值的源端口的对应物?)

我有一个XProc管道,我希望输出像这样工作:

  • 如果使用-oresult=foo.xml在命令行上提供URL,则管道的结果被写入该文档;
  • 如果没有提供URL,则将结果写入default.xml

有可能在XProc中获得这种行为吗?

与输入端口默认值的不同之处在于<p:output>元素的内容作为输出端口的默认,而不是默认输出

我认为这对于标准XProc来说是不可能的。虽然可以在输入声明中提供默认连接,但输出端口的情况不同。简而言之,对于输出声明,不存在默认连接(也就是说,您可以从外部覆盖它)。可能令人困惑的是,p:output的规范确实允许在复合步骤的声明中输出连接(并且只允许复合步骤,不允许原子步骤)—但是这些不充当默认连接。相反,它们表示出现在输出端口上的数据来自何处(通常是所包含步骤的输出端口,但也可以是静态文档或外部文档)。你也不能覆盖这些输出连接,因为那样你可能会改变管道的依赖关系图。

你可以把XProc中的"连接"(由p:document, p:pipe, p:inline, p:data, p:empty表示)看作是读取数据的源,而不是写入数据的位置。类似地,步骤是一个从某处读取数据并从中输出结果的黑匣子。在这个模型中,步骤并不真正关心它的结果发生了什么,或者它们最终存储在哪里——这是与该步骤相连的其他步骤的责任,或者在顶层管道的情况下,是XProc处理器的责任。

如果你真的需要默认的输出连接,一个可能的解决方案可能是使用步骤,如p:store和添加可选选项(其值你可以覆盖)的顶层管道,但我不确定这是你所追求的。

最后,我使用了一个被接受的答案所建议的选项,并使用了以下代码:

<p:option name="output-url" select="default.xml"/>
<p:store>
    <p:with-option name="href" select="$output-url"/>
</p:store>

注意,我删除了<p:output>,因为现在输出将由<p:store>步骤处理。在我的例子中,这是可以的,因为这个管道不会与其他管道组合在一起。

也不能再使用-oresult=foo.xml了。相反,必须使用选项output-url=foo.xml

最新更新