Обновление XSLT 1.0 до XSLT 2.0
что участвует в обновлении с XSLT 1.0 до 2.0?
1 - Каковы возможные причины для модернизации?
2-Каковы возможные причины отказа от модернизации?
3-и, наконец,каковы шаги по обновлению?
Я надеюсь на резюме-краткая версия:)
2 ответа:
что участвует в обновлении с 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 -- the
xsl:function
инструкция.переменные диапазона в выражениях XPath (
for
предложения).гораздо лучше и мощнее обработка строк -- XPath 2.0 поддерживает регулярные выражения в своем
tokenize()
,matches()
иreplace()
функции.гораздо лучше и мощнее обработка строк -- XSLT 2.0 поддержка регулярных выражений -- the
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-и, наконец,каковы шаги по обновлению?
изменить на
xsl:stylesheet
илиxsl:transform
элемент"1.0"
до"2.0"
.удалить все
xxx:node-set()
функции.удалите любую лань.
будет готов к сюрпризу, что
xsl:value-of
теперь выводит не только первый, но все элементы последовательности.попробуйте использовать новый
xsl:sequence
инструкция как можно больше-использовать его, чтобы заменитьxsl:copy-of
инструкции; используйте его вместоxsl:value-of
в любое время, когда тип вывода не является строковым или текстовым узлом.много теста.
когда тестирование подтвердило, что код работает как ожидается, что вы начнете рефакторинг (если сочтете это необходимым). Рекомендуется объявлять типы для любых переменных, параметров, шаблонов и функций. Это может выявить новые, скрытые ошибки и их исправление повышает качество вашего кода.
дополнительно, решите, какие именованные шаблоны переписать как
xsl:function
.решите, если вам все еще нужно некоторые функции расширения, которые используются в старой версии, или вы можете переписать их легко использовать новые, мощные возможности обработки.
заключительные замечания: не все вышеперечисленные шаги необходимы, и можно остановить и объявить миграцию успешной при нулевых результатах тестирования ошибок. Гораздо чище начать использовать все функции XSLT 2.0 / XPath 2.0 в новая проектов.
ответ Дмитрия очень полный и на 100% точный (как всегда), но есть один момент, который я бы добавил. При обновлении до процессора 2.0 у вас есть выбор: оставить атрибут version равным "1.0" и работать в "режиме обратной совместимости" или изменить атрибут version на "2.0". Люди часто спрашивают, какой подход рекомендуется.
мой совет, если у вас есть хороший набор тестов для ваших таблиц стилей, сделайте решительный шаг: установите version="2.0", запустите тесты, и если есть какие-то проблемы, исправить их. Как правило, проблем будет код, который никогда не был совершенно прав, в первую очередь, и работал только случайно. Но если у вас нет хорошего набора тестов и вы обеспокоены надежностью своей рабочей нагрузки, то оставить version="1.0"-это подход с меньшим риском: процессор будет эмулировать все причуды XSLT 1.0, такие как xsl:value-игнорирование всех, кроме первого элемента, и странные правила для сравнения чисел со строками.