xslt: сначала ждали, теперь догоняем. Кому это выгодно и...

Post on 22-Jun-2015

1.830 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Сергей Антонинко, системный архитектор, Юмисофт, www.umi-cms.ru

TRANSCRIPT

Как совершается выбор?

Технология 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>

Технология XSLT

Антонинко СергейUmisoft

Е-mail: sa@umisoft.ru

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

top related