XSLT хороший выбор для веб-фреймворка? - PullRequest
9 голосов
/ 18 мая 2010

Я всегда считал данные XML (и SGML до этого) форматом дьявола. Я из старой школы баз данных и плоских файлов. Тем не менее мы разрабатываем коммерчески доступный веб-продукт, основа которого основана на переводе / преобразовании данных XML в цепочки.

Поскольку мы проводим собеседования на должности, а также общаемся с потенциальными клиентами, им нравится концепция того, что он будет делать, но они устали от поддержки долгосрочной XSLT . Один человек даже назвал это пресловутым «мертвым». Мёртв, как COBOL, Unix и C, или мёртв, как Apple Business BASIC ?

Во всяком случае, мне любопытно, если создание веб-фреймворка на XSLT действительно недостаточно (странно) для компаний. Существуют ли присущие XSLT проблемы реализации , которые делают это предприятие чем-то, что стоит пересмотреть?

Ответы [ 7 ]

6 голосов
/ 19 мая 2010

Популярность существующих систем управления веб-контентом на основе XSLT, таких как Umbraco и Symphony (SharePoint уже упоминал здесь), является хорошим доказательством пригодности XSLT для веб-сайтов. основа.

Если что, XSLT включен. Приятно видеть, что признанные XML-компании по-прежнему применяют его в цифрах, например, MarkLogic добавили возможности XSLT в свой продукт баз данных XML некоторое время назад.

Рекомендация W3C XSLT-3.0 была опубликована в июне 2017 года, демонстрируя постоянный интерес и инвестиции в будущее XSLT.

Существуют также некоторые полезные новые открытые стандартные расширения для XSLT (и XQuery), такие как проект EXPath , библиотеки функций которого включают обширные функции HTTP и Zip.

[Update] С запуском Saxon-CE (теперь с открытым исходным кодом) обработка XSLT 2.0 теперь может выполняться как на стороне сервера, так и на стороне клиента. Он также потенциально предоставляет возможности 2.0 для платформ, ранее ограниченных XSLT 1.0.

Расширения языка в Saxon-CE означают, что XSLT-шаблоны теперь могут быть привязаны к пользовательским событиям с использованием простых XPath и «режимов событий», а также при необходимости значительно улучшена совместимость JavaScript.

3 голосов
/ 18 мая 2010

Я использовал внутреннюю среду, которая использовала XSLT для создания всего своего HTML (и ужасающе RTF и других форматов тоже), и у меня остались некоторые довольно твердые мнения по этому вопросу.

XSLT - отличный язык для преобразования одного формата XML в другой, где оба четко определены.

Если ваши исходные данные представляют собой XML, то это удобно для преобразования их в фрагменты XHTML, но когда вы начинаете отклоняться на территорию шаблонизатора, все начинает становиться немного грязным.

Как и во всем, это всего лишь инструмент, и если вы используете его для того, что у него хорошо получается, он будет работать хорошо, если вы используете его при каждой возможности, вы, вероятно, злоупотребляете им, и если вы используете его для генерации RTF-файлов, то вы ' повторное преступление против природы.

3 голосов
/ 18 мая 2010

Интересно, что SharePoint 2010 полностью использует XSLT. У XSLT есть ноги ... не бойся.

2 голосов
/ 18 мая 2010

XSLT - это набор правил для преобразования дерева в другое дерево. Чтобы использовать его эффективно, вы должны думать об этом таким образом.

Некоторые преимущества XSLT для меня:

  1. Каждый HTML-кодер, на которого я могу положиться, может писать XSLT-преобразования (я могу легко перенести HTML-кодирование на аутсорсинг), но немногие из них могут легко справиться с элементами управления ASP.Net, шаблонами Mako, Django, JSP, Шаблоны Smarty и другие движки одновременно.
  2. При правильном использовании XSLT самодостаточен. Я могу предоставить кодировщику HTML входной XML, договориться о процессоре XSLT и разработать преобразования XSLT отдельно от самого приложения.
  3. Среда XSLT находится в «песочнице», HTML-кодер почти не может сам открыть дыру в безопасности.
  4. XSLT не связан с XML: вы можете написать свой собственный адаптер для доставки данных в XSLT и зарегистрировать свой собственный обработчик вывода. Это не вариант для решений, основанных на libxslt (php, python).

Но это значит, что вы не должны нарушать гибкость. Я видел среды, в которых сложные экземпляры с большим количеством побочных эффектов в поведении передавались саксонскому преобразованию, а входное дерево использовалось только для запуска процесса. Не было никакой возможности разрабатывать отдельно от сложного сервера приложений, и вам пришлось развернуть таблицу стилей в течение 5 минут, чтобы проверить правильность вывода.

UPD : Мои лучшие практики:

Главное, как я уже сказал, это разделить XSLT-преобразование. Для преобразования должно хватить libxslt + exslt, msxsl + собственные расширения и т. Д. Если в XSLT отсутствуют некоторые мощные инструменты, я предпочитаю сделать это в коде вызова и перейти к преобразованию в дереве ввода.

Приложение должно создавать XML (или дерево) предсказуемой (документированной) структуры. Для каждой интересующей меня страницы:

  1. Я генерирую XML (или пишу его вручную, если его еще не легко получить);
  2. подготовить полученный HTML-код, который я собираюсь получить в виде отдельного статического файла;
  3. определить XSLT-преобразование (на нескольких страницах это может быть одно и то же).

Затем я помещаю все в VCS и создаю пакетный файл для применения к каждому XML соответствующего XSL, чтобы в результате перезаписывались статические файлы HTML.

Теперь запуск svn diff html-folder (или аналогичный) покажет мне, если какое-либо преобразование нарушило HTML, и где именно. Я делаю изменения в XSL и снова запускаю пакет. Как только HTML-код совпадает, я фиксирую.

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

Страницы приложения, где я использую XSLT, обычно принимают параметр GET, такой как showinput = 1, чтобы возвращать пустое дерево ввода без примененного преобразования, чтобы я мог сохранить его и добавить в VCS в качестве другого особого случая.

Что касается кеширования, то когда мне это нужно, я обычно кеширую готовую HTML-страницу. Часто меняющиеся части страниц загружаются клиентскими скриптами.

2 голосов
/ 18 мая 2010

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

Я никогда не слышал жалобо проблемах с SAXON как реализацией XSLT.

Возможно, стоит рассмотреть SXML, SXSLT, SXPath и так далее.

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

В XML есть то, что некоторые люди называют дефектами проектирования.

1 голос
/ 18 мая 2010

Если вы обеспокоены тем, что ваши клиенты не хотят / не хотят поддерживать XSLT (даже несмотря на то, что XSLT является стандартом и широко распространенной технологией для преобразования XML), нужно ли вам специально привязывать свой продукт к XSLT для задач преобразования XML? Если возможно (и безболезненно) абстрагировать соответствующие части XML-перевода / преобразования в вашей среде (т. Е. XML в & rarr; XML out), возможно, вы могли бы позволить различным реализациям выполнять одни и те же задачи; не только XSLT, но и XQuery, Java (SAX + DOM), что угодно ...

Такой дизайн может быть даже полезен, если вы когда-нибудь решите отказаться от «дьявольского формата» и принять что-то еще; -)

РЕДАКТИРОВАТЬ: в стороне, но вы знаете о XProc ?

1 голос
/ 18 мая 2010

Ничего особенного в этом нет ...

Но в зависимости от того, что вы делаете, это может не дать вам достаточно хуков, чтобы делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...