Ответ 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 в новых проектах.