Может ли <p:filter>
в XProc принимать последовательность документов в качестве входных данных?Когда я передаю Calabash следующее:
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step"
version="1.0">
<p:input port="source" sequence="true">
<p:inline>
<doc>
<content>Hello world!</content>
</doc>
</p:inline>
<p:inline>
<doc>
<content>Goodbye world!</content>
</doc>
</p:inline>
</p:input>
<p:output port="result" sequence="true"/>
<p:filter select="//content">
<p:input port="source" sequence="true"/>
</p:filter>
</p:declare-step>
, возникает следующая ошибка:
err: XD0006: на порту «источника» появляются 2 документа.Если последовательность не указана или имеет значение false, то это динамическая ошибка, если только на объявленном порту не появится ровно один документ.
@sequence
- это , исо значением "true".Если я удаляю второй встроенный документ из ввода, обработка успешно завершается.И если я оставлю два ввода, но заменим <p:filter>
чем-то другим, принимающим последовательность, например <p:count>
, он также успешно завершится.
Я запутался, потому что в сообщении об ошибке не говорится, что <p:filter>
не может принять последовательность;он говорит мне указать последовательность, и я сделал это.А поскольку фильтрацию XPath можно применить к функции XPath collection()
, неясно (ну, мне), почему не должно быть возможности, по крайней мере в принципе, фильтровать последовательность документов в XProc.
Я также не уверен, как читать спецификацию, которая говорит о <p:filter>
, что:
Этот шаг ведет себя так же, как p: input с выражением select, за исключением того, что selectВыражение вычисляется динамически.
Поскольку <p:input>
может принимать последовательность, если говорят, что <p:filter>
ведет себя так же, за исключением фильтрации, это может означать, что <p:filter>
также должно бытьмогу принять последовательность.
Я думаю, что варианты:
<p:filter>
принимает несколько входов, но я не указал это правильно. <p:filter>
не принимает многократные вводы, и либо сообщение об ошибке и спецификация вводят в заблуждение, либо я не смог правильно их понять.
Я счастлив (хорошо, желаю) признать себя виновным в ошибке пользователя в любом из них.случай, но я был бы благодарендля пояснения.
И да, я могу обойти эту проблему, используя <p:wrap-sequence>
для формирования нескольких входов в одно дерево XML, но мой вопрос о том, как работает <p:filter>
, а не о том, какполучить конкретный результат результата.В моем реальном коде чтение и передача моих реальных входных документов занимает 1,5 секунды и 4,5 секунды, если я добавлю шаг их обтекания, и я бы хотел сэкономить 3 секунды, особенно потому, что обертка была бы эфемерной работой.вокруг, так как я все равно собираюсь извлекать контент и заканчивать несколькими документами после шага фильтрации.