xslt: сначала ждали, теперь догоняем. Кому это выгодно и...
DESCRIPTION
Сергей Антонинко, системный архитектор, Юмисофт, www.umi-cms.ruTRANSCRIPT
Как совершается выбор?
Технология XSLT
Нужна шаблонизация, которая
• Четко разграничивает обязанности
• Позволяет повторное использование
• Позволяет сменить технологию
• Сейчас (или скоро) в мейнстриме
• Не затухнет через год
• Совместимость
Популярные варианты?
• Smarty
• Native PHP + MVC
• Собственные шаблоны (“TPL”)
• XSLT
• …
Недостатки TPL
• Индивидуальность
• Недостаточная гибкость
• В конце концов «eval()» => смешение логик
• Привязанность к решению
• Улучшение шаблонизатора => проблемы с совместимостью
Недостатки TPL
/%([A-zА-Яа-я0-9]+\s+[A-zА-Яа-я0-9_]+\([A-zА-Яа-я \/\._\-\(\)0-9%:<>,!@\|'&=;\?\+#]*\))%/mu
/%([A-z?-?А-я \/\._\-\(\)0-9%:<>,!@\|'&=;\?\+#]*)%/m
Недостатки Smarty
• Толкает к смешению логик
• Зависимость от бизнес-логики
• Легко сломать
• Сложно поддерживать
• Сложно расширять
Кратко
XML — недавно исполнилось 10 лет XML уже внедрен почти везде XSLT — стандарт утвержден в 1999
году
Западный опыт
• XML — стандарт де-факто
• XSLT — стандарт де-факто
– .NET– Зарубежные коробочные CMS (CeBIT
2008)– Чистые XML-XSLT фреймворки
• UTF-8 стандарт де-факто
Наш опыт
• Специфичная технология
• Множество мифов
– Миф о сложности– Миф о недостатке кадров
• Повсеместное использование альтернатив
– TPL– Smarty– ...
XSLT
• Полная абстракция данных от представления
• Независимость представления и бизнес-логики
• Гибкость
• Наглядность
• Структурированность
• Предпосылки к мультиязычности
• Настоящая кроссплатформенность
Пример “наглядности”
<items>
<item id="22896" link="/" name="Добро пожаловать" />
<item id="16520" link="/downloads/" name="Скачать" />
<items>
<item id="22997" link="/downloads/manual/" name="PHP Manual" />
</items>
<item id="16521" link="/about/" name="Компания" />
</item>
Естественное разделение представления и бизнес-логики
XML
back-end
XSLT
HTML WAP XML?
XML
XML
Децентрализованность
• Связь intranet-internet сайтов
• Mash-up'ы
– Google Picasa– wordpress– Новости– Ozon (http://shop.lyxsus.ru/)
• Связь компонент, на разных платформах
AJAX
• XML уже готов
• Возможность повторного использования шаблонов (?)
«Вкусности» XSLT
• Условия
• Циклы
• Расширения (exslt)
• DTD
• Тестирование по XSD-схемам
• Возможности повторного использования
История web-разработки
• Развитие рынка web-разработки в СНГ
• Переход от HTML, JS
• Бесплатный PHP и др.
• Массовость используемых технологий
Нетехнические факторы
• Примеры неэффективного использования
• Инертность
• Опыт клиентского использоваия
• Миф о сложности
• Необходимость перехода
• Склонность к изобретанию велосипедов
• Недоверие к новым технологиям
• «Невыгодность»
Недостатки
• Декларативный язык
– Обучение– Переход
• Стриктовость
• Скорость
Обучение
• С чистого листа
• С бекграундом верстальщика
• С бекграундом программиста
Задача
Вывести меню, Подсветить четные пункты
Без if, for-each, call-template
<items>
<item link="/" name="Добро пожаловать" />
<item link="/downloads/" name="Скачать" />
<items>
<item link="/downloads/manual/" name="PHP Manual" />
</items>
<item link="/about/" name="Компания" />
</item>
Пример
<xsl:template match="items"><ul class="menu"><xsl:apply-templates select="item" /></ul></xsl:template>
<xsl:template match="item"><li><a href="{@link}"><xsl:value-of select="@name"/></a><xsl:apply-templates select="items" /></li></xsl:template>
<xsl:template match="item[position() div 2 = 1]"><li class="odd"><a href="{@link}"><xsl:value-of select="@name"/></a><xsl:apply-templates select="items" /></li></xsl:template>
Streams
© ООО "Юмисофт", 2007
schema://path/
URI XML Document
UDF()
Stream wrapper class
Класс-обертка реализует интерфейс для работы с пользовательскими схемами
Адрес URIЛогика обработки URI определяется пользователем в зависимости от schema
На входе URI на выходе готовый XML Document, который является результатом document()
Запрос по пользовательской схеме
“Взять сторонний XML-документ и применить к нему шаблоны”
<xsl:template match=“/”><xsl:apply-templates
select=“document(‘my://some/ud/path’)” /></xsl:template>
Связывание XML и XSLT
© ООО "Юмисофт", 2008
MAPPING
XML XSL
Жесткое связывание
XML XSL
XML XSL
XML XSL
Динамическое связывание
1 1