Значение атрибута version в теге xsl: stylesheet - PullRequest
1 голос
/ 02 апреля 2012

В ответ на сообщение, которое я сделал на днях, Димитр, конечно же, правильно указал, что я дал ответ XSLT 2 на вопрос XSLT 1.

Однако он также упрекнул меня за публикациюответ, который не был проверен.Я на самом деле проверил его, и хотя атрибут версии был установлен на «1.0», и я использовал функцию замены XSLT 2, каждая работала с ошибками или предупреждениями.

Так что возник вопрос - что делает атрибут версиизначит, если он не ограничивает язык конкретной версией?

Я пытался прочитать спецификацию w3, но у меня начали кровоточить глаза.

FWIW: я использую Oxygen and Saxon 9.3 EE

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

Во-первых, спецификация 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, процессор сделает все возможное, чтобы игнорировать их или выполнить резервные инструкции.

0 голосов
/ 03 апреля 2012

Я также использую oXygen для разработки XSLT 1.0 и 2.0. Если я попытаюсь использовать функцию XSLT 2.0 в таблице стилей с номером версии 1.0, oXygen предупредит меня.

Проверьте настройки oXygen и убедитесь, что вы проверяете XSLT 1.0 с процессором 1.0:

enter image description here

Обратите внимание, что я проверяю 1.0 с Xalan.

Кроме того, я всегда проверяю свои ответы 1.0 с процессором 1.0; обычно с саксами 6.5.5 и ксаланами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...