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) является решением вашей проблемы. Мне не совсем понятно, из описания вас, что происходит. Вы подразумеваете, что пытаетесь записать что-то на диск и затем прочитать это на следующем шаге? Вы должны хранить вещи в конвейере, чтобы обеспечить возможность подключения выходов к последующим входам.