Во-первых, спецификация XSLT говорит о том, как процессор XSLT интерпретирует атрибут версии, но не ограничивает то, что с ним делают другие части программного обеспечения, кроме процессора XSLT. Например, IDE (например, XML Spy) может посмотреть на атрибут версии и использовать его, чтобы решить, запускать ли процессор XSLT 1.0 или XSLT 2.0. После запуска процессора XSLT 1.0 или 2.0 его поведение контролируется соответствующей спецификацией.
Что процессор XSLT 1.0 делает с атрибутом version, определяется спецификацией XSLT 1.0; что делает процессор 2.0, определяется спецификацией XSLT 2.0.
Спецификация XSLT 1.0 гласит, что если версия НЕ 1.0, процессор работает в режиме прямой совместимости. Это в основном означает, что он делает все возможное, чтобы игнорировать конструкции, которые не определены в спецификации 1.0. Так что, если ваша таблица стилей говорит version = "2.0", и вы запускаете ее с процессором 1.0, то новый атрибут 2.0, такой как xsl: sort / @ collation, будет игнорироваться. Неопознанная инструкция вызывает сбой только в том случае, если она действительно выполняется, и если у нее нет дочерней инструкции xsl: fallback, обеспечивающей аварийное поведение для процессоров 1.0. Принцип проектирования заключается в том, что использование конструкций 2.0 не должно вызывать сбой процессора 1.0; везде, где это возможно, он должен запускаться с каким-то резервным поведением.
Спецификация XSLT 2.0 (которая управляет поведением процессора 2.0) различает версии <2.0, версия = 2.0 и версия> 2.0. Когда версия <2.0, процессор работает в «режиме обратной совместимости». Это не означает, что конструкции 2.0 отклоняются; скорее это означает, что конструкции 1.0 выполняются с семантикой, максимально приближенной к тем, которые определены в спецификации 1.0. Например, вся арифметика выполняется в виде двойной плавающей запятой, даже если операнды являются десятичными. Когда версия> 2.0, процессор работает в режиме прямой совместимости, который очень похож на режим прямой совместимости в спецификации 1.0: это означает, что если вы используете конструкции XSLT 3.0, процессор сделает все возможное, чтобы игнорировать их или выполнить резервные инструкции.