xsl:stream¶
Используется для инициирования потоковой обработки исходного документа. (В более поздних проектах спецификации XSLT 3.0 инструкция переименована в xsl:source-document
, что доступно с версии Saxon 9.7.0.8, а xsl:stream
пока сохранен как синоним).
Доступно в XSLT 3.0. Начиная с Saxon 9.8, доступен во всех редакциях. Реализовано в Saxon-EE начиная с Saxon 9.6.
- Категория: инструкция
- Содержимое: sequence-constructor
- Допустимые родительские элементы: любой элемент XSLT, модель содержимого которого - sequence-constructor; любой литеральный элемент результата
Атрибуты¶
href
- { uri }
- URI исходного документа. Он может быть записан как шаблон значения атрибута, если URI не известен статически.
streamable?
- boolean
- Разрешено с версии 9.7.0.8. Используется для специального запроса потоковой обработки. По умолчанию используется
yes
. use-accumulators?
- tokens
- Определяет набор аккумуляторов, которые применимы к данному документу.
validation?
"strict" | "lax" | "preserve" | "strip"
type?
- eqname
Заметки по реализации Saxon¶
В более поздних проектах спецификации XSLT 3.0 инструкция xsl:stream
заменяется инструкцией xsl:source-document
, которая доступна начиная с Saxon 9.7.0.8. Инструкция xsl:stream
сохраняется в качестве синонима.
Эта инструкция устарела и будет удалена после Saxon 9.8.
Подробности¶
Тело инструкции представляет собой конструктор последовательности, который оценивается с корневым узлом выбранного документа в качестве контекстного узла. Чтобы потоковая передача работала, эта инструкция должна быть написана как потоковый конструктор последовательности. Выражаясь очень неформально, это означает, что он должен делать выборки в документе только вниз, и ни одна инструкция или выражение не могут делать более одной выборки вниз. Примеры examples в спецификации W3C иллюстрируют некоторые из возможностей; все эти примеры работают с Saxon.
Инструкция может выполнять следующие действия:
- Вычислить совокупность, например, общее или среднее значение (см. пример ниже).
- Инициировать обработку документа с использованием правил шаблонов, вызывая
xsl:apply-templates
с использованием потокового режима. - Итерация содержимого документа с помощью
xsl:for-each
или (если необходимо "запомнить" информацию от одного элемента к другому) с помощьюxsl:iterate
. - Выполнить группировку содержимого документа с помощью
xsl:for-each-group
. Saxon имеет лишь ограниченную возможность выполнять потоковую группировку, но простые случаи должны работать. Необходимо использовать один из атрибутовgroup-adjacent
,group-starting-with
илиgroup-ending-with
, а также использовать новые переменные привязки XSLT 3.0 для current group и current-grouping-key, а не функции XSLT 2.0.
Примеры¶
Пример 1¶
Простой пример:
1 2 3 |
|
Пример 2¶
См. далее примеры в спецификации W3C; все эти примеры работают с Saxon 9.5 и далее.