Есть ли веские причины использовать, изучать или рекомендовать XSLT? [закрыто]


28

Я разработчик за последние 8 лет. Мы использовали XSLT прежде всего для преобразования XML в HTML. Мы также использовали его для преобразования XML в XML.

Но у нас есть замена для всего сейчас. HTML может быть удобно создан через языки программирования, такие как ASP.Net. XML можно читать и манипулировать на любых стандартных языках высокого уровня. Поскольку программирование в XSLT немного сложно, любой предпочел бы работать на последних языках программирования.

Теперь мой вопрос: станет ли XSLT значительным выбором в будущем, не учитывая факт сохранения уже разработанного XSLT? Могу ли я порекомендовать новым программистам изучать XSLT?


3
Релавент чтения: вредный.кат-
Джош К

12
Для меня XSLT - ужасно загадочный язык программирования, отрицая, что он является языком программирования. Это связано с чисто функциональными языками программирования, но сделано гораздо менее читабельным, гораздо менее понятным, гораздо менее практичным. Поскольку это отрицательный язык программирования, ПОЛЬЗОВАТЕЛИ, например, DocBook (сложная часть программного обеспечения, написанного на языке XSLT), сталкиваются с проблемой интеграции различных интерпретаторов, контролеров, библиотек и т. Д., Чтобы заставить <expletive Удалено> работать.
Steve314

8
Ты имеешь в виду <expletive deleted="true" />?
MSalters

6
@ Steve314 Я люблю XSLT, вы можете делать забавные вещи, такие как динамический SQL -> динамический XML -> динамический XSLT -> динамический HTML + JavaScript: P
Darknight

5
@MSalters - вы пропустили объявление xml, корневой элемент, пространства имен, DTD, либо схему XML, либо схему Relax NG (или обе), выражение XMLPath, указывающее, откуда было удалено выражение, .. .
Steve314

Ответы:


29

Есть несколько важных случаев, когда XSLT может быть хорошим выбором:

  • Программное обеспечение ETL ( Extract, Transform, Load ) может в некоторых случаях использовать XSLT. Например, это может быть хорошим выбором, когда извлеченные данные и данные для загрузки находятся в формате XML, и когда преобразование может быть изменено без необходимости перекомпиляции приложения.

  • Некоторые приложения, которые хранят данные в XML, используют XSLT для представления этих данных в удобочитаемом формате¹. Например, Windows Live Messenger хранит трассировку сообщений в виде XML, но когда вы открываете историю в самом WLM, она показывает симпатичную таблицу, которая на самом деле представляет собой HTML, созданный с помощью XSLT.

  • Некоторые ориентированные на разработчиков или ориентированные на данные веб-сайты могут захотеть предоставить доступ к XML, если предполагается использовать страницы веб-сайта программным способом2. Как-то лучше, чем использовать HTML-парсеры, тем более что HTML-код можно изменить в любой момент.

  • XSLT при использовании на веб-сайтах допускает строгое разделение между HTML и code-behind, что позволяет нанять разработчика для code-behind и другого разработчика для HTML / CSS. Смотрите пункт 1 в моем ответе на другой вопрос .

Будет ли XSLT значительным выбором в будущем? Что ж, сегодня это не очень важный выбор, и я сомневаюсь, что использование XSLT со временем увеличится. Я игнорирую причину этого, но многие разработчики не любят XML и ненавидят XSLT.

Можете ли вы порекомендовать новых программистов для изучения XSLT? Конечно! Не только XSLT может использоваться в некоторых обстоятельствах, когда другие подходы будут более сложными, но и XSLT имеет очень специфический подход, которого нет в других языках.


¹ Под этим я подразумеваю, что XML на самом деле не читается человеком: если вы попросите человека, который не работает в ИТ, прочитать XML, он будет в ужасе.
² Я знаю, что есть веб-сервисы. Но иногда проще и проще на каждой странице создать динамический объект, затем сериализовать его в XML, а затем либо преобразовать его в HTML через XSLT, либо позволить боту напрямую обращаться к XML.


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


12

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

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

В любом случае, вы можете изучать XSLT за считанные дни, а может и недели. Это не повредит вам, чтобы получить опыт из первых рук. Просто дай ему шанс. По крайней мере, стоит приложить усилия, чтобы сохранить этот тип паттерна (преобразования на основе правил) в вашей голове для последующего использования. Одно это оправдывает изучение XSLT.


8

Хм, интересно, используют ли высокоуровневые API, которые создают HTML из кода, какой-либо XSLT "под капотом" ...

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


3
Это XSL / FO, сиамский близнец XSL / T. Они были разлучены при рождении.

8

Да.

Давайте рассмотрим хороший пример: отчеты о тестировании модулей в непрерывной интеграции. Большинство программ модульного тестирования и покрытия кода просто выводят тонны нечитаемого XML. Но с помощью нескольких простых XSLT вы можете создать дюжину полезных отчетов из одних и тех же данных. И другие люди могут повторно использовать эти отчеты.

Теперь вы можете написать их на любом языке, который инструмент CI использует для плагинов, но если вы не знаете этот язык (скажем, вы являетесь разработчиком .NET и используете Jenkins), вам не нужно его изучать. Просто используйте плагин, который уже применяет XSLT к файлу XML, и напишите несколько полезных XSLT.


6

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

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


6

XSLT не читается человеком. Мета-информация (теги) занимает слишком много места над реальной информацией (текст, запросы xpath). Хороший код должен выглядеть как документация, а в XSLT это не совсем так. Это довольно хороший формат сохранения для картографических инструментов.

Хороший язык преобразования должен позволять предварительно просматривать результат преобразования и просматривать поток преобразования (IF, ELSE, FOR, WHILE) одновременно. это важно для ремонтопригодности. Относительно этого аспекта Velocity или GenearateXY лучше, чем XSLT. GenerateXY даже немного лучше, поскольку он разделяет предварительный просмотр и поток, в то время как с Velocity вам, к сожалению, придется нарушать отступ предварительного просмотра, чтобы обеспечить читаемый поток.

Единственный хороший момент в XSLT - то, что он заботится о модульности, используя и даже злоупотребляя элементами «xsl: template». Проблема в том, что это хорошо для языка обработки данных (Java, C, ...), но очень вторично для языка представления.


4

Верно

Что-то, вероятно, заменит XSLT однажды, так как это немного громоздко для изучения и использования. Тем не менее, в настоящее время нет доступного языка шаблонов / преобразований, который был бы настолько гибким и «чистым» в своей реализации.

XSL-T может использоваться для нескольких различных целей:

  • Вы можете «создавать» контент в формате HTML из данных, используя шаблон
  • Вы можете конвертировать из одного формата XML в другой
  • Вы можете манипулировать XML в другом формате, возможно, показать подмножество

По сути, все это одно и то же - преобразование одного файла данных XML в другой. Теперь давайте посмотрим на некоторые другие инструменты, которые мы могли бы использовать вместо XSLT.

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

Следующим является ASP.Net. Мы помещаем наш макет в нашу страницу asp и вставляем некоторый код для динамических частей. Другой альтернативой является отказ от части макета и генерация всего, скажем, базы данных и использования C # для создания желаемого результата.

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

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

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

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


4

Самым большим недостатком XSLT является невозможность (в любой реальной реализации) минимизировать объем документа, который необходимо хранить в памяти за один раз для эффективной обработки. Вместо этого весь документ читается в некоторой форме представления DOM, и обработка выполняется против этого. Если документ очень большой, то требования к памяти тоже. Тем не менее, многие таблицы стилей явно нуждаются только в текущем теге и нескольких других, например, в предках тега, в любой момент времени и, следовательно, могут обрабатываться с минимальным объемом памяти и эффективной потоковой передачей.

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


3

На самом деле, я думаю, что для представления данных более эффективно использовать XSL, чем другой язык. Например, вы можете представить XML как PDF, используя XSL-FO, и вы можете контролировать каждый дюйм, но если вы работаете, например, с RDLC (.NET), вы увидите, что очень сложно представить именно то, что вы хотите.

Даже эволюция / исправление довольно просты, так как в XSL каждый элемент имеет свой собственный шаблон. Я думаю, что расширение XSL более важно, как XSLT и XSL-FO. Вот почему этот язык все еще будет использоваться в будущем (но я очень надеюсь, что он будет более стабильным и менее сложным).


2

Я работаю в компании Data Integration, и мы используем XSLT с нашими проприетарными инструментами как отличное решение, включающее XML в HTML / XML / Ascii.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.