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 | |
Пример 2¶
См. далее примеры в спецификации W3C; все эти примеры работают с Saxon 9.5 и далее.