Подтвердить что ты не робот

Обновление XSLT 1.0 до XSLT 2.0

Что связано с обновлением с XSLT 1.0 до 2.0?
1 - Каковы возможные причины для обновления?
2 - Каковы возможные причины НЕ обновлять?
3 - И, наконец, каковы шаги по обновлению?

Я надеюсь получить резюме - короткую версию:)

4b9b3361

Ответ 1

Что связано с обновлением с 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 в новых проектах.

Ответ 2

Ответ Dimitre очень всеобъемлющий и 100% точный (как всегда), но есть один момент, который я бы добавил. При обновлении до 2.0 процессора у вас есть выбор: оставить атрибут версии равным "1.0" и работать в "режиме обратной совместимости" или изменить атрибут версии до "2.0". Люди часто спрашивают, какой подход рекомендуется.

Мой совет: если у вас есть хороший набор тестов для ваших таблиц стилей, выполните погружение: установите версию = "2.0", запустите тесты, и если возникнут какие-либо проблемы, исправьте их. Обычно проблемы будут кодом, который никогда не был правильным в первую очередь и работал только случайно. Но если у вас нет хорошего набора тестов и вы обеспокоены надежностью своей рабочей нагрузки, то оставить версию = "1.0" - подход с более низким уровнем риска: процессор будет эмулировать все причуды XSLT 1.0, такие как xsl: значение - игнорирование всех, кроме первого элемента, и странные правила для сравнения чисел со строками.