xProc - приостановить конвейер и продолжить его при наступлении определенного события

Я довольно новичок в xProc и xPath, но меня попросили решить следующую проблему:

Шаг 2 получает данные через вторичный порт с шага 1. Шаг 2 содержит p:for-each, который сохраняет документ в папку для каждого элемента, который передает для каждого. (Часть А)

Эти документы (скажем, я получил 6 документов для каждого) лежат в одном каталоге и фильтруются p:directory-list и в конечном итоге хранятся в одном документе, содержащем полный путь каждого документа, созданного для каждого. (Часть Б)

Все идет нормально.

Проблема в том, что часть А кажется слишком медленной. Часть B уже пытается прочитать данные, сохраненные на шаге A, пока каталог еще пуст. То есть у меня проблема с производительностью / синхронизацией.

И теперь возникает вопрос: возможно ли позволить конвейеру ждать и продолжать его, как только происходит определенное событие?

Это то, что я себе представляю: шаг B ждет столько времени, сколько необходимо, пока каталог, в котором хранятся данные на шаге A, больше не будет пустым. Я читал кое-что оdbxml:breakpoint, но, к сожалению, я не смог найти больше информации, чем название и краткое описание того, что он делает:

Установите точку останова, необязательно, на основе условия, которое приведет к приостановке работы конвейера в точке останова, что, возможно, потребует вмешательства пользователя для продолжения и / или выдачи сообщения.

Было бы здорово, если бы вы знали об этом больше и могли бы привести пример того, как он используется. Также было бы полезно, если вы знаете обходной путь или другой способ решения этой проблемы.

ОБНОВИТЬ:

После поисков в Google пол вечности я обнаружил, что SMIL, временные таблицы, кажется, делают свое дело. У кого-нибудь есть опыт совместного использования XML / xProc и SMIL?

1 ответ

В конце 2009 года я предложил концепцию "оркестровки XProc со SMIL" http://broadcast.oreilly.com/2009/09/xproc-and-smil-orchestrating-p.html в сообщении в блоге на O' Сеть Рейли.

Тем не менее, я не уверен, что это (XProc + Time) является решением вашей проблемы. Мне не совсем понятно, из описания вас, что происходит. Вы подразумеваете, что пытаетесь записать что-то на диск и затем прочитать это на следующем шаге? Вы должны хранить вещи в конвейере, чтобы обеспечить возможность подключения выходов к последующим входам.

Другие вопросы по тегам