воскресенье, октября 21, 2007

светлое будущее, наконец, наступило!

помните, с чего началась вся эта эпопея с xml, xsl, xhtml и прочими иксами?

сначала был html, представляющий из себя кашу из данных, оформления и поведения.
потом появились такие технологии как css и javascript, которые позволяли отделить от данных оформление и поведение, но в данных всё-равно оставалось много мусора - семантически незначимых конструкций, а представлять данные требовалось так как их может воспринять браузер - ограничиваясь весьма жёсткими рамками html.

тогда появился xml - формат не накладывающий ограничений на структуру данных. в нём можно использовать свои тэги, вкладывать так как считаешь правильным и многое другое.
естественно, браузеру всё-таки надо было объяснить как эти данные следует отображать. css был недостаточно функционален для отображения произвольных данных, поэтому был разработан xsl, который весьма прохладно был воспринят создателями браузеров. тем не менее, его младшему брату xslt повезло больше: ввиду того, что он не требует переписывать весь браузерный движок, а выступает в качестве посредника, трансформирующего исходный xml в html уже понятный браузеру, его поддержка довольно быстро появилась в ИЕ, мозилле и сафари - основной троице браузерных движков. последней, сравнительно недавно, к ним подключилась и опера (девятая версия).

что мы получили в итоге? получили мы возможность на запрос клиента отдавать только данные в удобной нам форме. если браузер не знает что эти данные означают - он качает xslt и трансформирует их в xhtml. если он не знает как они должны выглядеть - качает css и показывает. если же он не знает как они должны себя вести - качает javascript. xslt, css и javascript качаются один раз и оседают в кэше. при каждом запросе передаётся только экстакт данных в формате xml.

более-менее продвинутый читатель, наверно, уже заметил, что формирование xml ничем принципиально не отличается от формирования html. отчасти это так. если мы формируем документ-ориентированный xml, то придётся вручную вставлять данные в нужные места. но, если наша цель - формирование xml ориентированного на данные, то его формирование можно возложить на автоматику, которая преобразует родные для языка программирования объекты в неродное xml дерево.

чтобы не быть голословным, предлагаю реализацию на php:
function native2xml( $var, $name='root' ){
$xml= '';
if( is_object( $var ) || is_array( $var ) ):
foreach( $var as $n => $v )
$xml.= native2xml( $v, $n );
else:
$xml= htmlspecialchars( $var, ENT_NOQUOTES, 'UTF-8' );
endif;
if( is_numeric( $name ) ) $name= 'item';
return '<'.$name.'>'.$xml.'';
}


просто передайте этой функции дерево объектов и получите на выходе xml-строку.

тут вы можете скачать рабочий пример, демонстрирующий вывод формы и локализацию основанную на xslt (приглядитесь, в xml пересылаются английские фразы, но отображаются они в браузере на русском языке).

из минусов такого подхода:
1. мы ограничиваемся исключительно языком xslt, о недостатках которого я уже писал.
2. для поисковиков и устаревших браузеров нужно производить эти трансформации на сервере.

есть ещё два варианта "объяснения" браузеру как работать с данными:
1. javascript - трансформирование с его помощью - редкостный изврат.
2. OWL - очень мощная технология, но на данный момент никем не поддерживаемая. есть подозрение, что её ждёт та же учесть, что и XSL (-_-)

1 комментарий:

Анонимный комментирует...

[url=http://www.pi7.ru/zdorove/1842-umstvennaya-deyatelnost-ne-spasaet-ot-slaboumiya.html ]Роберт Паттинсон вывел в свет любимую блондинку [/url]
Прошу помощи. Предстоит аборт..он у меня первый, беременности никогда не было! Мне 22. Аборт буду делать на сроке 1,5 месяца. Очень страшно, тк никаких операций в жизни у меня не было и наркоза боюсь..Бывают так как смертельные случаи.
Собираюсь делать операционный аборт, тк говорят что таблетка больше опасно-большая доза гармонов+в первую очередь все точно еще приходится делать выскабливание.
Аборт я буду делать даром в роддоме, говорят там профессионалы.
В приватную идти боюсь. Может порекомендуете, куда можно пойти,чтобы без последствий? Я из Москвы.
По поводу такого, что это грех и т.п. прошу не писать.