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 и далее.