Порт вывода с резервным значением по умолчанию?

(Это аналог исходного порта с резервным значением по умолчанию?)

У меня есть трубопровод XProc, где я хотел бы, чтобы выход работал следующим образом:

  • если URL-адрес -oresult=foo.xml в командной строке с помощью -oresult=foo.xml, тогда результат конвейера записывается в этот документ;
  • если URL не указан, тогда результат должен быть записан в default.xml.

Возможно ли получить это поведение в XProc?

Разница с случаем значения по умолчанию для входного порта заключается в том, что содержимое элемента используется как источник по умолчанию выходного порта, а не выход по умолчанию.

2 ответа

Я не думаю, что это возможно со стандартным 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:store>
</p:option>

Обратите внимание, что я удалил потому что теперь выход будет обрабатываться с помощью шага . В моем случае это нормально, потому что этот конвейер не будет сочетаться с другими.

Кроме того, нельзя использовать -oresult=foo.xml. Вместо этого нужно использовать параметр output-url=foo.xml.

licensed under cc by-sa 3.0 with attribution.