Применение XSLT

12 3
Segey
На сайте с 23.08.2005
Offline
404
1929

Недавно спрашивал про то какой шаблонизатор использовать, теперь дошел до практики. Вот только непонятно пара моментов:

1. XSLT - это метод преобразования XML в HTML. В файла преобразования описываются параметры вывода... Вот только я несовсем понимаю, нужен ли теперь CSS вообще? И как на php будет выглядеть обработчик, что ему делать впринципе надо?

2. Причем тут БД? Т.е. если информация лежит в дереве XML, а в XSLT лежат правила... то нужно делать каждый раз запрос в БД, строить дерево и потом применять (как-то) шаблон?

3. Несовсем пока понимаю заницу между один из языков описания структуры XML документа и часть спецификации XSL, задающая язык преобразований XML-документов

Это нужно применять совместо или отдельно? Т.е. что-то одно использовать?

Brexit - уже совсем рядом. (https://about-this-model.blogspot.com/2019/03/brexit.html)
Николай В.
На сайте с 07.09.2006
Offline
62
#1

XSLT - это метод преобразования XML в другой XML или, как частный случай, в HTML и XHTML (с последним сложнее). Еще можно в Plain Text преобразовать. CSS же отвечает за оформление полученной структуры, т.е. схема такая

XML (данные) + XSLT (правило преобразования, в просторечье "шаблон") = HTML-документ (структура страницы)

HTML-документ + CSS (правила визуального (и не только) оформления) = Картинка в браузере

При реализации XSLT-шаблонизатора на PHP подход, как мне кажется, и как я делаю, такой:

1. Данные берутся из БД и из них строится XML-структура. Этот шаг можно опустить и хранить данные напрямую в XML, но для меня подобный вариант недостаточно гибок и удобен.

2. XML скрещивается с XSLT-шаблоном посредством XSLT-процессора.

3. Полученный HTML и заранее подготовленный CSS отдается пользователю.

Да, это может показаться несколько громоздким и сначала непонятно зачем строить XML, если можно скормить данные напрямую другим шаблонизаторам, но прелесть в том, что посредством XSLT-преобразований из одного XML можно построить все, что угодно и веб-страничку, и excel-файл, и rtf c pdf, а также XML любой другой структуры (тот же YML от Яндекс.Маркета).

Еще я бы посоветовал приобрести книгу-справочник по XML и XSLT, т.к. там много тонкостей и сложностей. В интернете можно почитать

http://www.zvon.org

http://www.raleigh.ru/

F
На сайте с 22.12.2005
Offline
48
#2

А можно в файле .xsl разместить css-определения, например, как в Яндекс.XML?

Наслаждение жизнью - это искусство
Segey
На сайте с 23.08.2005
Offline
404
#3

Николай В.,

Спасибо, у меня есть справочник по XML большой и книга.

Николай В.:
посредством XSLT-процессора.

А что это? У меня задача облегчить построение страницы...

Вот еще вопросы возникли:

1. Скрипт построения дерева XML он универсален или например для раздела с фото и статьями это два разных скрипта?

2. Сам процессор тоже универсален? Т.е. я могу его "учить" постепенно новому и он будет развиваться? Т.е. это некий скрипт, который имеет базы шаблонов?

3. Если как вы сказали прелесть в разных выходных данных, то имеет ли это смысл только для web? У меня на выходе всегда html и другого не нужно, остальны варианты скорее для прайсов, презентаций и т.п... Разве только Exel еще интересно, а вот pdf это спорно...

То имеет ли это все смысл?

Николай В.
На сайте с 07.09.2006
Offline
62
#4

XSLT-процессор - библиотека классов, которой вы кормите XML и XSLT, а она отдает результат или ошибку. Поищите по запросу "Sablotron".

1. Смотря, как напишите. У меня это отдельный метод в классах модулей (статьи, фото, каталог и т.д.) + функция, облегчающая организацию нодов (я в нее отдаю массив с названием нода, агрументами и значениями, а на выходе получаю XML-код узла).

2. Процессор написан до вас. Зависит от вашего выбора и платформы. Ничему учить его нельзя, XSLT-спецификации уже четко определены.

3. Хм. Вам решать. Мне этот подход кажется оправданным и достаточно гибким. Для моих задач. Но тот же Smarty или {вставки} гораздо проще, как мне кажется, а тут еще один язык учить или XSLT-верстальщика нанимать.

Да, еще один момент. XSLT - единственный стандратизированный шаблонизатор.

Segey
На сайте с 23.08.2005
Offline
404
#5
Николай В.:
Да, еще один момент. XSLT - единственный стандратизированный шаблонизатор.

Это даже радует, хуть что-то стндартное :)

Т.е. по сути дела у вас один скрипт, который генерирует деревья, набор шаблонов и XSLT процессор?

А написание разных скриптов на вывод - совершенствование генератора деревьев?

А как быть с простомы инклудами футера и хеадера? Или они вставляются в шаблон так же, а в процессор скармливается только шаблон формата данных и сами данные? Или они есть в самом генераторе страниц т.е. единственном скрипте и подключаются по мере необходимости?

XSLT-процессор - библиотека классов, которой вы кормите XML и XSLT

Может быть наборот или я неправильно понял?

организацию нодов

А что такое ноды?

Ёжик В Тумане
На сайте с 26.07.2006
Offline
16
#6
Segey:
:

1. XSLT - это метод преобразования XML в HTML. В файла преобразования описываются параметры вывода... Вот только я несовсем понимаю, нужен ли теперь CSS вообще?

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

Ушел в себя, забыл про форум.
Вернусь ли? Не знаю... Если нужен, пишите в аську...
Oniks
На сайте с 22.08.2005
Offline
176
#7
Segey:
А как быть с простомы инклудами футера и хеадера? Или они вставляются в шаблон так же, а в процессор скармливается только шаблон формата данных и сами данные? Или они есть в самом генераторе страниц т.е. единственном скрипте и подключаются по мере необходимости?

Есть конструктор <xsl:include>

Segey:
Может быть наборот или я неправильно понял?
XSLT процессор - это инструмент преобразования XML по правилам, указанным в XSL-файле.
Segey:
А что такое ноды?
Я так понимаю, имелись ввиду Node, т.е. - узлы DOM-модели документа...
Профессиональные услуги фотографа в Москве и области (http://www.oniks-photo.ru/) покупаю стать и ссылки с сайтов про охоту
Oniks
На сайте с 22.08.2005
Offline
176
#8
Segey:
1. Скрипт построения дерева XML он универсален или например для раздела с фото и статьями это два разных скрипта?

У меня этим занимается функция класса БД - на входе она получает SQL-запрос и выдает ответ БД в виде XML.

Segey:
2. Сам процессор тоже универсален? Т.е. я могу его "учить" постепенно новому и он будет развиваться? Т.е. это некий скрипт, который имеет базы шаблонов?
"Учить" наврядли, а вот обновленный процессор поставить можно.
Segey:
У меня на выходе всегда html и другого не нужно...
То имеет ли это все смысл?
Это уже особенность проекта. XSLT хорош своей универсальностью, если вы делаете пакетный продукт, то это будет большим плюсом.
Николай В.
На сайте с 07.09.2006
Offline
62
#9
Т.е. по сути дела у вас один скрипт, который генерирует деревья, набор шаблонов и XSLT процессор?

В несколько упрощенном виде - так, т.к. на практике появляются различные отклонения от стройной структуры, в основном в силу необходимости решать задачи быстро.

А как быть с простомы инклудами футера и хеадера? Или они вставляются в шаблон так же, а в процессор скармливается только шаблон формата данных и сами данные? Или они есть в самом генераторе страниц т.е. единственном скрипте и подключаются по мере необходимости?

Вам, наверное, стоит посмотреть простейшие примеры готовых xml и xsl-шаблонов.

Вот:

XML

Шаблон

Результат

Может быть наборот или я неправильно понял?

Вроде все правильно написал. Я использую библиотеки Sablotron и expat, которые находятся на http://www.gingerall.com. В сети полно мануалов по установке, а многие хостеры их поддерживают по умолчанию (я создавал тему в разделе "Хостинг" о Sablotron и кто-то выдал целый список подходящих хостинг-компаний).

Нод (node) - это узел дерева.

Segey
На сайте с 23.08.2005
Offline
404
#10
Oniks:
XSLT хорош своей универсальностью, если вы делаете пакетный продукт, то это будет большим плюсом.

Только для себя, но для разных проектов.

Одно пока непонятно, выходит что под php Sablotron это единственный вариант и он идет как модуль преобразований xslt т.е. сам процессор?

p.s. Спасибо аз прример, все встало на места :) !

Вот только одно смущает, каждый раз дерево генерировать не очень интересно... Если только хранить все целиком т.е. в одном файле, как-то нумеровать данные аналогично записям и выводить куски, думаю есть такая конструкция?

p.s.s. Тяжело дается что-то понимае что лучше, все совсем подругому и БД уплывает куда-то далеко и как мнек ажется теряет акутальность :(

Выходит что XML это универсальная БД, а XSL это язык для написания шаблонов, который позволяет с ней работать и решать различные задачи, аналогично php или perl только с той оговоркой, что заточен он под работу с деревом и обладает только необходимыми для вывода методами (алгоритмами?) работы точнее конструкциями...

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий