Перейти к содержанию

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
<xsl:stream href="transactions.xml">
    <out><xsl:value-of select="sum(*/transaction/value)"/></out>
</xsl:stream>

Пример 2

См. далее примеры в спецификации W3C; все эти примеры работают с Saxon 9.5 и далее.

Ссылки

См. также

Комментарии