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

xsl:source-document

Используется для инициирования потоковой или непотоковой обработки исходного документа.

Доступен в XSLT 3.0. Начиная с Saxon 9.8, доступен во всех редакциях. Реализована в Saxon-EE начиная с Saxon 9.7._

  • Категория: инструкция
  • Содержимое: sequence-constructor
  • Permitted parent elements: any XSLT element whose content model is sequence-constructor; any literal result element

Атрибуты

href
{ uri }
URI исходного документа. Он может быть записан как шаблон значения атрибута, если URI не известен статически.
streamable?
boolean
Используется для запроса потоковой обработки (по умолчанию no).
use-accumulators?
tokens
Определяет набор аккумуляторов, которые применимы к данному документу.
validation?
"strict" | "lax" | "preserve" | "strip"
Запрашивает строгую или нестрогую проверку содержимого документа на соответствие декларации элемента его верхнего уровня.
type?
eqname
Запрашивает проверку исходного документа на соответствие указанному типу XSD. Значение обычно представляет собой определяемый пользователем сложный тип, определенный в импортированной схеме.
saxon:line-numbering?
boolean
Используется для включения нумерации строк для читаемого документа. Подробнее см. в saxon:line-numbering.
saxon:strip-space?
"#all" | "#none" | "#ignorable" | "#default"
Используется для указания удаления пробелов: #all удаляет все пробелы в текстовых узлах; #none означает отсутствие удаления пробелов; #ignorable удаляет пробелы в элементах, объявленных как имеющие содержимое только для элементов; и #default следует правилам в объявлениях xsl:strip-space/xsl:preserve-space.

Заметки по реализации Saxon

Инструкция xsl:source-document (используется с атрибутом streamable="yes") заменяет инструкцию xsl:stream из ранних проектов спецификации XSLT 3.0. Впервые она стала доступна с версии Saxon 9.7.0.8, только в Saxon-EE (с включенным XSLT 3.0), и становится полностью доступной во всех редакциях Saxon начиная с версии 9.8 (но для потоковой передачи требуется Saxon-EE).

Если запрошена потоковая передача, а выражение не может быть оценено в потоковом режиме, выполнение завершается неудачей, если только не установлен параметр конфигурации Feature.STREAMING_FALLBACK, в этом случае оно выполняется в непотоковом режиме, после выдачи предупреждения.

Подробности

Тело инструкции представляет собой конструктор последовательности, который оценивается с корневым узлом выбранного документа в качестве контекстного узла. Чтобы потоковая передача работала, эта инструкция должна быть написана как потоковый конструктор последовательности. Выражаясь очень неформально, это означает, что он должен делать выборки в документе только вниз, и ни одна инструкция или выражение не могут делать более одной выборки вниз. Примеры examples в спецификации W3C иллюстрируют некоторые из возможностей; все эти примеры работают с Saxon.

Помимо использования в потоковой передаче, по сравнению с функциями doc и document, инструкция дает больше контроля, например, над проверкой схемы и использованием аккумуляторов.

Инструкция может выполнять следующие действия:

  • Вычислить агрегат, например, общее или среднее значение (см. пример ниже).
  • Инициировать обработку документа с использованием правил шаблонов, вызывая 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:source-document streamable="yes" href="transactions.xml">
    <out><xsl:value-of select="sum(*/transaction/value)"/></out>
</xsl:source-document>

Пример 2

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

Ссылки

См. также

Комментарии