Работа с legacy-xsl-кодом Евгения Фирсова
ПЕРВЫЙ ЭТАП - ПОНИМАНИЕ
Написание документации Не скатываемся в простое перечисление вызовов, шаблонов, переменных. Описываем логику, а не алгоритм (отвечаем на вопрос «зачем», а не «как»). Пишем не для себя, а для «того парня», который ничего о внутреннем устройстве проекта не знает.
Написание документации Комментировать код – рано: –собираем документацию воедино –не создаём лишние ревизии
XSL Document- oriented text XMLSchema Document- oriented text DocBook Пусть код описывает себя сам. Написание документации
XSLDoc от Jeni Tennison (
Статистическое исследование кода Коммерческие продукты с функциональностью рефакторинга: –Microsoft Visual Studio –IntelliJ IDEA –Eclipse –oXigen рефакторинг с использованием шаблонов автоматическое создание шаблонов переименование шаблонов и переменных
Статистическое исследование кода Скриптовые языки, поддерживающие regexp: open(InFile, "get_regexp.xsl") || die; while ($line = ) { if ($line =~ / /) { $match = $1; $mode = $3 ne "" ? "with mode $3" : ""; print "we apply template $match $mode\n"; } close (InFile);
Статистическое исследование кода Скриптовые языки, поддерживающие DOM: xfile.setProperty "SelectionNamespaces", "xmlns:xsl=' set templates = xfile.selectNodes("//xsl:template") for each template in templates line = "" if template.getAttribute("match") > "" then line = "we apply template " & template.getAttribute("match") end if if template.getAttribute("mode") > "" then line = line & " with mode " & template.getAttribute("mode") end if WScript.Echo line next
Статистическое исследование кода XSL. XML/XSLXSL Statistic text
Взлом «чёрных ящиков» Коммерческие отладчики. XMLSpy Debugger слежение за контекстом вычисление XPATH- выражений пошаговое выполнение XPATH-точки слежения и останова список вызванных шаблонов, включая встроенные
Взлом «чёрных ящиков» xsltproc --verbose xsltCompilePattern : parsing 'page' xsltCompilePattern : parsed page, default priority added pattern : 'page' priority Found AVT href: {url} xsltCompilePattern : parsing 'test' xsltCompilePattern : parsed test, default priority added pattern : 'test' priority parsed 3 templates Resolving attribute sets references Registered 0 modules Creating sub-dictionary from stylesheet for transformation reusing transformation dict for output Registering global variables Registering global variables from xsltproc_test.xsl xsltProcessOneNode: applying template '/' for / xsltApplyOneTemplate: copy node html xsltApplyTemplates: select page xsltApplyTemplates: list of 1 nodes xsltProcessOneNode: applying template 'page' for page xsltApplyOneTemplate: copy node head xsltApplyOneTemplate: copy node title
Взлом «чёрных ящиков» Текстовые маркеры. … *** … … …
Взлом «чёрных ящиков» Восстановление исходного XML-документа по вызываемым шаблонам.
Восстановление исходного XML-документа по вызываемым шаблонам. Взлом «чёрных ящиков»
Плагины к FireFox: –Web Developer –Live HTTP headers –FireBug
ВТОРОЙ ЭТАП – ИЗМЕНЕНИЕ/REFACTORING
Не жадничать… С каких частей проекта стоит начинать refactoring? с наиболее значимых в бизнес-плане частей; с наиболее сложных по реализации частей; с наиболее уязвимых частей.
Не жадничать… xsltproc --profile numbermatchnamemodeCallsTot 100us Avg 0/188 1page177 2test362 3 nolink341 4title
Не жадничать… XMLSpy Profiler. количество вызовов время работы с и без учёта времени выполнения вложенных инструкций время выполнения XPATH-выражений
Не играть с тенью… Пусть лучше работает плохо, чем не работает никак. Пусть медленно, но с меньшим количеством ошибок. –Не называть точных сроков.
Разделять и властвовать… XForms – изменение функциональности.
Разделять и властвовать… DocBook – расширение функциональности.
Отделять ресурсы от кода… css; javascript, в той части, которая не зависит от xsl-кода; тексты, относящиеся к интерфейсу: –многоязычность; –удалённое редактирование; –«быстрые» изменения.
Оптимизировать xsl-код… Зачем? удобно быстро продолжение в следующей серии…
Евгения Фирсова icq: