xsl:fork¶
Результатом инструкции xsl:fork
является последовательность, сформированная путем объединения результатов оценки каждой из содержащихся в ней инструкций в порядке убывания.
Доступно в XSLT 3.0. Начиная с версии Saxon 9.8, доступна во всех редакциях. Реализована в Saxon-PE и Saxon-EE начиная с Saxon 9.7.
- Категория: инструкция
- Содержимое: (
xsl:fallback
*, ( (xsl:sequence
,xsl:fallback
* )* | (xsl:for-each-group
,xsl:fallback
* ) ) ) - Допустимые родительские элементы: любой элемент XSLT, модель содержимого которого - sequence-constructor; любой литеральный элемент результата
- Элемент не имеет атрибутов
Заметки по реализации Saxon¶
Эта инструкция бессмысленна, когда не используется потоковая передача, но она по-прежнему поддерживается.
Полностью реализована с версии Saxon 9.7. Потоковая передача xsl:for-each-group
, как дочернего элемента xsl:fork
, с атрибутом group-by
была введена в релизах сопровождения 9.7 и полностью поддерживается в Saxon 9.8.
В Saxon 9.6 инструкция была реализована с ограничениями: в частности, содержимое xsl:fork
должно состоять из последовательности инструкций xsl:sequence
и не может включать элементы xsl:for-each-group
.
Реализация xsl:fork
в Saxon 9.6 в потоковом режиме фактически не использует несколько потоков: скорее, события, о которых уведомляет парсер XML (такие как startElement и endElement), сообщаются каждому участку xsl:fork
по очереди. Каждое звено накапливает свой результат во временном дереве, хранящемся в памяти, и эти временные деревья объединяются по завершении. Инструкция наиболее эффективна, когда каждое звено состоит из вызова xsl:result-document
; в этом случае вывод может быть немедленно сериализован, не оставляя временных данных в памяти.