В то время я не был в Рабочей группе, но следующий обмен может пролить некоторый свет. В апреле 2001 года, во время разработки XSLT 1.1, я спросил WG:
Может ли кто-нибудь попытаться объяснить мне, почему возникает проблема с
средство «фрагмент дерева результатов как набор узлов», как определено в XSLT
1,1 WD? Я продолжаю слышать, что это не будет работать с системой типов XPath 2.0, но я не понимаю, почему.
Я вижу, что мы хотим изменить его, чтобы тип данных был "узел"
а не "набор узлов", но кроме этого, я не вижу, что
проблема.
Возможно ли, что кто-то задумал покончить с корневым узлом
временного дерева, и вместо этого значение переменной будет
последовательность узлов, которые в настоящее время моделируются как дочерние элементы этого
корень? Если да, то почему это изменение будет полезным?
Джеймс Кларк ответил:
Возможно ли, что кто-то задумал покончить с корневым узлом временного дерева и сделать вместо него значение переменной последовательностью
узлов, которые в настоящее время моделируются как дочерние элементы этого корня?
Да.
Если да, то почему это изменение будет полезным?
(a) Таким образом, инструкции могут возвращать узлы, не копируя их.
(b) Так что вы можете использовать инструкции, чтобы вернуть вещи, кроме
узлы.
Объяснение вещей больше, чем это потребовало бы от меня, чтобы объяснить, как я
надеюсь, что XPath, XSLT и XQuery все вместе. В этот
точка, позвольте мне просто сказать, что я думаю, что мы должны согласовать элемент
конструирование в XSLT и XQuery. Это естественно приведет к их
гораздо меньше пропасти между выражениями и инструкциями. я
думаю, что это будет так же неловко и неуместно для
xsl: переменная для автоматического копирования и переноса значения в корневом узле
производится путем создания экземпляра его содержимого, как это было бы для этого сделать
к значению, полученному путем оценки выражения, указанного в
выберите атрибут.
Я думаю, что РГ изобрела концепцию «фрагментов дерева результатов», потому что она хотела оставить опции открытыми на будущее. У них были идеи, как будет развиваться язык, и они думали, что создание xsl:variable
для создания полноценного узла с полной навигационной возможностью ограничит возможности для будущего.
Оглядываясь назад, я убежден, что это была ошибка, потому что на самом деле она не достигла этой цели. Когда мы упразднили RTF в версии 2.0, мы все же сочли необходимым по причинам обратной совместимости иметь причудливое правило, согласно которому xsl:variable
всегда создает узел документа, если атрибут «as» отсутствует.
Стоит отметить, что никто в РГ никогда не предполагал, что люди все еще будут использовать XSLT 1.0 двадцать лет спустя. На разработку версии 1.0 ушло около двух лет, и WG полностью ожидала, что в течение двух лет она будет полностью заменена более поздней версией. Поэтому они очень хотели наложить ограничения на язык, если оставляли открытыми опции для следующей версии.