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

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

56 голосов
/ 22 февраля 2012

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

Надеюсь на резюме - короткая версия:)

Ответы [ 2 ]

108 голосов
/ 22 февраля 2012

Что входит в обновление с 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 - новые инструкции XSLT xsl:analyze-string, xsl:matching-substring и xsl:non-matching-substring.

  • Более удобная, мощная и выразительная группировка: инструкция 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 в любое время, когда тип вывода не является строковым или текстовым узлом.

  • Испытание экстенсивно.

  • Когда тестирование подтвердит, что код работает должным образом, начните рефакторинг (если это будет сочтено необходимым).Рекомендуется объявлять типы для любых переменных, параметров, шаблонов и функций.Это может выявить новые, скрытые ошибки, а их исправление повышает качество вашего кода.

  • При желании можно выбрать, какие именованные шаблоны следует переписать, как xsl:function.

  • Решите, нужны ли вам некоторые функции расширения, которые использовались в старой версии, или вы можете легко переписать их, используя новые мощные возможности XSLT.

Заключительные замечания : Не все вышеперечисленные шаги являются необходимыми, и можно остановить и объявить миграцию успешной при нулевых результатах тестирования ошибок.Намного понятнее начать использовать все функции XSLT 2.0 / XPath 2.0 в новых проектах.

27 голосов
/ 22 февраля 2012

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

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

...