xslt-перетворення на боці клієнта.

Я прихильник xml. Мені дуже подобається підхід до проектування веб-додатків при якому бізнесс-логіка відокремлена від представлення посередництвам xml/xslt. Я не прихильник винаходу велосипедів (шаблонізаторів типу Smarty), і взагалі, прикручування рогів і педалей до лопати.

Днями задався метою з'ясувати яких успіхів досягли розробники браузерів на ниві client side xslt-перетворення. Оскільки виконувати перетворення на сервері не цікаво - жруться рессурси, витрачається канал (що особливо важливо для користувачів слабеньких каналів і потужних комп'ютерів). Та й взагалі, перетворення на боці клієнта на мій погляд просто правильніше. Завдання відображення документа - є завдання браузера. Ось нехай він цим і займається.

За еталон правильності виконання перетворення було взято результат роботи програми xsltproc.

Ось що я отримав:

Чомусь при зазначенні методу xsl:output method = «xml» ні Opera, ні Firefox вперто не хочуть виконувати перетворення. Точніше вони його якось навіне виконують, але не правильно відображають - на екран вивалюється просто тест без всякого форматування.

Якщо вказано xsl:output method = «html» (за замовчуванням), перетворення виконується, але вивід програми xsltproc стає чисто html-им - < br >, < hr >, nowrap. Не знаю, як подивитися результат перетворення Оперного і Фаєрфоксовського движку. (може у них все і здорово...) Відображається все і в тому і іншому браузері коректно, що обнадіює.

JavaScript и xslt.

Тут виявилося все кілька цікаво. У мене на сайті розміщено певну кількість банерів усім відомих банерних мереж, а також пару кнопок і лічильників. Код показу банерів є банальним document.write ('< a href ='some.site'> < img src ='path/to/banner'> </a >'); (Так, тег < img > звичайно не має/> - люди гроші заробляють, їм колись страви стандарти.:) ). Я виніс всю цю нісенітницю в окремі файли і де потрібно було просто робив вставки < script src = «banner1.js» > </script >. xsltproc переганяв таку верстку у валідний xhtml/strict. Opera такий код просто ігнорувала. Firefox спочатку спотикався при спробі обробки першого банера, потім просто падав - document.write просто перезаписував всю DOM-модель і відповідно на екран виводився тільки перший банер. При спробі повторного перезапису DOM-моделі у фаєрфокса мабуть просто відстрілювало вежу.

У результаті я переписав код показу банерів на нормальний, через DOM-модель і все стало відображатися нормально.

P.S.

Через деякий час після постановки цих експерементів дізнався, що є виявляється XSL 2.0, в який додано xsl:output method=«xhtml». (Цей метод висновку розуміє поки тільки Опера. Результат роботи нічим не відрізняється від method = «html». Хоча може бути я просто на дуже простому прикладі тестував. Firefox не розуміє його взагалі.) Забавно, але цей стандарт ще практично не реалізований ні в якому вигляді. Є імплементація на java. Але gnom'вівськи libxml/libxslt (які використовує PHP-інтерпретатор) ще не підтягнулися.