За последние 24 часа нас посетили 20690 программистов и 1333 робота. Сейчас ищут 686 программистов ...

xstyle - xslt с человеческим лицом

Тема в разделе "Решения, алгоритмы", создана пользователем tenshi, 24 авг 2010.

  1. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    всем хорош xslt да только многословен он уж слишком.

    xstyle использует processing instruction чтобы ввести набор макросов для различных конструкций xslt.

    например, когда вам нужно вывести значение переменной, в xslt приходится писать так: <xsl:value-of select=" $var " />
    в xstyle для этого достаточно написать <?val $var ?>
    (есть вариант с <?: $var ?>, но на него варнинги сыпятся ._.)

    бывает нужно просто вставить пробел в вывод и тогда приходилось писать: <xsl:text> </xsl:text>
    теперь же для этого есть короткая запись: <?space?>

    можно делать инклуды <?include included-file.xs ?> причём все подключаемые таким образом файлы будут вкомпилированны в текущий. подключать можно не только xs, но и xsl файлы, ведь xstyle - это обратно совместимое расширение xslt, то есть внутри xs-файлов можно использовать как xstyle, так и xslt конструкции.

    это были простые тэги, но есть и составные: открывающие заканчиваются минусом, а закрывающие точкой.
    например, аналогом такой конструкции: <xsl:if test=" @count &gt; 5 "> ого, сколько! </xsl:if>
    будет такая: <?if- @count > 5 ?> ого, сколько! <?if.?>
    или даже такая: <?if @count > 5 \ 'ого, сколько!' ?>
    во многих конструкциях бэкслэш используется в качестве разделителя параметров, поэтому в внутри значений он быть не может.
    кстати. обратите внимание, что спецсимволы xml не надо экранировать, так что условия со сравнениями выглядят гораздо читабельнее ;-)

    <xsl:template match="p"> записывается как <?match- p ?>
    <xsl:template match="p" mode="copy"> как <?match- p \ copy ?>
    <xsl:template mode="copy"> как <?match- \ copy ?>
    <xsl:template> как <?match- ?>

    полный набор синтаксиса можно найти в тестах (как видно не всё ещё реализовано, но это мелочи ;-)).

    сам компилятор написан на xslt, так что проблем с переносом его на другие платформы быть не должно.

    для php написан класс XStyle, который автоматически при необходимости перекомпилирует .xs файлы в .xsl и кладёт их рядом с ними.
    использовать её просто:

    $xstyle= new XStyle( 'templates/thing.xs' );
    $res= $xstyle->process( $doc );
    echo $res->saveHTML();

    $doc и $res - экземпляры DOMDocument

    скачать, поиграться и сравнить производительность с другими популярными шаблонизаторами можно тут (php,smarty): http://mojura.110mb.com/test/xslt-vs-sm ... smarty.zip
     
  2. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    tenshi
    это ты к чему вообще?
     
  3. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    типа новый шаблонизатор и всё такое
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    бред VS говнокод
    не для этого xslt придумали.
     
  5. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    а для чего же?
     
  6. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    всмысле не для php. и поэтому никаких vs
    бред потому что
     
  7. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    и что же мешает использовать xslt в php?
     
  8. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    так как ты написал обычно мешает здравый смысл...
     
  9. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    странно, а мне он что-то не мешает .-.
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    значит отсутствует
     
  11. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    сколько спеси у тебя за последнюю пару лет появилось.. наверно измуряющая работа над очень нагруженными проектами даёт о себе знать? %-)
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Тигра ты чтоли это? врятли.
    Два человека говорят что в общем случае это маразм. Обёртка над xslt маразм ещё чаще.
     
  13. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    я знаю еще одного, кто бы так сказал, но он ушел ;)
     
  14. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    нет. думай дальше

    а в чём маразм - не говорят. партизаны
     
  15. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Да, молчим, ибо влом писать обыденные вещи..
    Для начала:
    это (<xsl:template match="p">) можно вообще не писать, не то, что писать это (<?match- p ?>) да еще потом парсить. Это всё бред, потому что для начала это (<xsl:template match="p">) можно генерировать автомато. Если ты это не генерируешь автоматом, то скорее всего есть лучшее решение задачи.
     
  16. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    и каким образом ты будешь генерировать это автоматом? напишешь искусственный интеллект, который сам будет писать шаблоны? х)
     
  17. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Вообще вы извращенцы что бы XSLT использовать с PHP.

    XSLT есть смысл использовать когда у вас XML based база данных типа Senda. Вот там да, круто очень. Отправил запрос на базу, а она отдаст сразу XML документ с XSLT трансформациями, CSS и прочими фишками XML. Вот там это совсем другая скорость и абсолютно корректное применение и будет гораздо лучше чем пропускать через PHP.

    З.Ы. Я 2 месяца вёл спец. курс для нашего гос. архива по XML технологиям, делали обработки на базе их документов. Вот где я познал истинный зэн XML'а. А мешать его части в PHP для шаблонизации глупо - не тот эффект.
     
  18. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    спасибо жабажабру...
    tenshi
    никто больше не юзал xslt кого я знаю. и когда я впервые с ним столкнулся, почти сразу пришёл к текущему мнению =)
    а в чём "немаразм"? в чём эффективность
     
  19. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    Psih, и что же там глупого? у меня вот например пхп-структура из массивов перегоняется простенькой функцией в хмл и этот хмл в большинстве случаев и отдаётся клиенту для последующего наложения им хслт. в случае поисковиков, рсс-ридеров и мобильных браузеров - это делает сервер. вот umi.cms построена на использовании xml и что-то как-то там особо не жалуются, а даже наоборот.


    Mr.M.I.T., ты наверно не в тех кругах водишься. плавая в болоте каждая лягушка уверена, что крылья - это бесполезная роскошь. эффективность? да хотябы в том, что хслт получается быстрее смарти и его клонов, даже с учётом времени на формирование dom. или в том, что в нём шаблоны выбираются в зависимости от данных (что даёт большую модульность и реюзинг), в то время как в смарти и его клонах данные выбираются в зависимости от шаблона (что превращает шаблон в эдакий контроллер).
     
  20. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    согласен

    а на кой лягушке крылья? ИМХО, совершенно бесполезная штука.
    всё равно что знание ассемблера для пользы программирования на пхп.

    тссс.... (шепотом) там нельзя жаловаться...

    смарти ближе к сердцу пхп разработчика, даже не смотря на всю его монструозность и бесполезность... :(
     
  21. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    для справки: птицы произошли от рептилий

    пхпшники большие велосипедисты х) вместо использования стандартных проверенных быстрых гибких средств они с завидным упорством хватаются за свои кривые велосипеды.
     
  22. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    tenshi
    Нормальные PHP'ники знаю что шаблонизатор есть только один - PHP! Всё остальное это уже надстройки - какими бы они небыли.

    XLST в данном случае тоже надстройка - он вообще из другой области пришёл. XSLT предназначен для работы с XML данными, XML базами, вкупе с XPath и XQuery. Советую w3schools раздел по XML проштудировать от корки до корки и осознать всю охуенность XML и понять, что подвязывать XSLT как шаблонизатор к PHP на все случаи жизни как минимум кощунство! Это случай из пушки по блохам - XSLT слишком крут что бы его привязывать к PHP :D
     
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Psih
    ну нравится ему красивое название XSLT! ну таких пол хабра
     
  24. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    Psih, а ещё они знают, что код нужно организовывать исключительно процедурками, а всякие оопы - это надстройки.

    наличие возможностей стыковать шаблонизатор с различными хмл-технологиями заставляет их все использовать? пхп настолько убог, что недостоин работать с хмл?

    вот тебе задача: сделать на сайте поддержку atom, rss2 и rss1. как ты её будешь реализовывать?
     
  25. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    Mr.M.I.T., не суди всех по себе