Что связано с обновлением с XSLT 1.0 до 2.0?
1 - Каковы возможные причины для обновления?
2 - Каковы возможные причины НЕ обновлять?
3 - И, наконец, каковы шаги по обновлению?
Я надеюсь получить резюме - короткую версию:)
Что связано с обновлением с XSLT 1.0 до 2.0?
1 - Каковы возможные причины для обновления?
2 - Каковы возможные причины НЕ обновлять?
3 - И, наконец, каковы шаги по обновлению?
Я надеюсь получить резюме - короткую версию:)
Что связано с обновлением с XSLT 1.0 до 2.0?
1 - Каковы возможные причины для обновления?
Если вы программист XSLT, вы в значительной степени выиграете от более удобного и выразительного языка XSLT 2.0 + XPath 2.0 и новой XDM (модели данных XPath).
Вы можете посмотреть этот курс XSLT 2.0 Pluralsight, чтобы получить прочное и систематическое представление о силе XSLT 2.0.
У вас есть:
Сильная типизация и все доступные типы XSD.
Возможность определять собственные (схемы) типы.
Тип последовательности XPath 2.0, который не имеет аналога (просто отсутствует) в XPath 1.0.
Возможность определять и записывать функции в чистом XSLT - инструкции xsl:function
.
Переменные диапазона в выражениях XPath (предложение for
).
Гораздо лучше и более мощная обработка строк. XPath 2.0 поддерживает регулярные выражения в своих функциях tokenize()
, matches()
и replace()
.
Гораздо лучше и более мощная обработка строк - поддержка XSLT 2.0 для регулярных выражений - инструкции xsl:analyze-string
, xsl:matching-substring
и xsl:non-matching-substring
нового XSLT.
Более удобная, мощная и выразительная группировка: инструкция xsl:for-each-group
.
Много новых, очень мощных функций XPath 2.0, таких как функции по дате, времени и продолжительности, просто чтобы назвать несколько.
Новые операторы XPath intersect
, except
, is
, >>
, <<
, some
, every
, instance of
, castable as
,..., и др.
Общие операторы XPath >
, <
и т.д. теперь работают на любом упорядоченном типе значений (не только на числах, как в XPath 1.0).
Новые, более безопасные операторы сравнения значений: lt
, le
, eq
, gt
, ge
, ne
.
Оператор XPath 2.0 to
, позволяющий иметь xsl:for-each select="1 to $N"
Эти и многие другие улучшения/новые функции значительно повышают производительность любого XSLT-программиста, что позволяет завершить разработку XSLT 2.0 за небольшую часть времени, необходимого для разработки тех же модулей с XSLT 1.0.
Сильная типизация позволяет много ошибок быть пойманным во время компиляции и немедленно исправляться. Для меня эта сильная безопасность - самое большое преимущество использования XSLT 2.0.
2 - Каковы возможные причины НЕ обновлять?
Часто возможно, разумно и экономично оставлять существующие, устаревшие приложения XSLT 1.0 нетронутыми и продолжать использовать их с XSLT 1.0, в то же время разрабатывая только новые приложения с использованием XSLT 2.0.
Ваше руководство + любые другие нетехнические причины.
Имея много устаревших приложений XSLT 1.0, написанных в плохом стиле (например, используя функции DOE или расширения, которые теперь необходимо переписать и код будет реорганизован).
Отсутствует доступный процессор XSLT 2.0.
3 - И, наконец, каковы шаги по обновлению?
Измените атрибут version
элемента xsl:stylesheet
или xsl:transform
с "1.0"
на "2.0"
.
Удалите все xxx:node-set()
функции.
Удалите любой DOE.
Будьте готовы к удивлению, что xsl:value-of
теперь выводит не только первый, но и все элементы последовательности.
Постарайтесь использовать новую инструкцию xsl:sequence
как можно больше - используйте ее для замены любых инструкций xsl:copy-of
; используйте его вместо xsl:value-of
в любое время, когда тип вывода не является строкой или текстом node.
Протестируйте внимательно.
Когда тестирование проверит, что код работает так, как ожидается, запустите рефакторинг (если это будет сочтено необходимым). Рекомендуется объявлять типы для любых переменных, параметров, шаблонов и функций. Это может выявить новые, скрытые ошибки и их исправление, повышает качество вашего кода.
При необходимости выберите, какие именованные шаблоны переписывать как xsl:function
.
Решите, нужны ли вам дополнительные функции расширения, которые используются в старой версии, или вы можете легко переписать их, используя новые мощные возможности XSLT.
Заключительные замечания. Не все вышеуказанные шаги необходимы, и можно остановить и объявить успешную миграцию при нулевом тестировании ошибок. Гораздо чище начать использовать все возможности XSLT 2.0/XPath 2.0 в новых проектах.
Ответ Dimitre очень всеобъемлющий и 100% точный (как всегда), но есть один момент, который я бы добавил. При обновлении до 2.0 процессора у вас есть выбор: оставить атрибут версии равным "1.0" и работать в "режиме обратной совместимости" или изменить атрибут версии до "2.0". Люди часто спрашивают, какой подход рекомендуется.
Мой совет: если у вас есть хороший набор тестов для ваших таблиц стилей, выполните погружение: установите версию = "2.0", запустите тесты, и если возникнут какие-либо проблемы, исправьте их. Обычно проблемы будут кодом, который никогда не был правильным в первую очередь и работал только случайно. Но если у вас нет хорошего набора тестов и вы обеспокоены надежностью своей рабочей нагрузки, то оставить версию = "1.0" - подход с более низким уровнем риска: процессор будет эмулировать все причуды XSLT 1.0, такие как xsl: значение - игнорирование всех, кроме первого элемента, и странные правила для сравнения чисел со строками.