输出端口是否具有默认回退值?

时间:2014-07-01 13:53:15

标签: xproc

(这是Source port with default fallback value?

的对应物

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

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

是否可以在XProc中获得此行为?

与输入端口的默认值的区别在于,<p:output>元素的内容用作输出端口的默认,而不是默认输出

2 个答案:

答案 0 :(得分:0)

我认为使用标准XProc无法做到这一点。虽然您可以在input declarations上提供默认连接,但输出端口的情况会有所不同。简而言之,对于输出声明,没有默认连接(在某种意义上你可以从外部覆盖它)。可能令人困惑的是p:output的规范确实允许在复合步骤的声明中的输出连接(并且只允许复合步骤,而不是原子步骤) - 但这些不作为默认连接。相反,他们说输出端口上出现的数据来自何处(通常是包含步骤的输出端口,但它也可以是静态文档或外部文档)。您也无法覆盖这些输出连接,因为这样您可能会更改管道的依赖关系图。

你可以考虑一下&#34;连接&#34;在XProc中(由p:documentp:pipep:inlinep:datap:empty表示)作为从中读取数据的来源,而不是写入数据的位置至。类似地,一个步骤是一个黑盒子,它从某个地方读取数据并将结果从中倾泻出来。在这个模型中,该步骤并不真正关心其结果发生了什么或它们最终存储的位置 - 这是与该步骤相关的其他步骤的责任,或者在顶级管道的情况下,XProc处理器的责任

如果您确实需要默认输出连接,可能的解决方法可能是使用p:store等步骤并将可选选项(您可以覆盖的值)添加到顶级管道,但我不确定&# 39,你所追求的是什么。

答案 1 :(得分:0)

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

<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