XSLT та можливі альтернативи [закрито]


15

Я переглянув XSLT для перетворення одного XML-файлу в інший (HTML тощо). Тепер, коли я бачу, що XSLT є корисними (будучи стандартизованим і використовуваним інструментом), я з кількох причин неохоче.

  • Процесори XSLT здаються дуже величезними / голодними
  • XML - це погана позначка для програмування, і ось у чому полягає XSLT.

Тут не хочеться тролювати XSLT, хоча я просто хочу вказати на те, що мені не подобається, щоб дати вам уявлення про те, що я очікую від альтернативи.

Маючи певний фон Lisp, мені цікаво, чи існують кращі способи перетворень структури дерев, заснованих на деякому ліпі. Я бачив посилання на DSSSL, на жаль, більшість посилань про DSSSL мертві, тому його вже складно бачити якийсь код, який це ілюструє. Чи все ще використовується DSSSL? Я пам’ятаю, що один раз встановив openjade під час перевірки речей із док-книжок.

Повідомлення в блозі Джеффа Етвуда, начебто, натякає на використання Рубі замість XSLT.

Чи є якісь розумні способи зробити XML-перетворення, схожі на XSLT, на мові програмування, що не є XML? Я був би відкритий для введення даних

  • Корисні бібліотеки для мов скриптів, що полегшують перетворення XML
  • особливо (але не виключно) мов трансформації, що нагадує лісп, або Ruby тощо.

Я знайшов кілька речей:


Я використовую HXT та Haskell досить часто, це дуже приємно
Daniel Gratzer

5
Чесно кажучи, не Джефф Етвуд виступає за Рубі, він цитує Мартіна Фаулера, який віддає перевагу Рубі. Оригінальний пост Фоулера знаходиться тут: martinfowler.com/bliki/MovingAwayFromXslt.html І це було написано 10 років тому в 2003 році - я думаю, що XSLT 2.0 вийшов у 2007 році та з багатьма вдосконаленнями, а XPath 2.0 у 2010 році
FrustratedWithFormsDesigner

Відповіді:


18

Важко оцінити технології, коли ти не маєш глибокого досвіду їх використання, але, звичайно, саме тоді ти повинен приймати свої рішення, тому на цю дилему немає простої відповіді.

Ви цитуєте дві проблеми: продуктивність та зручність використання. Я спробую звернутися до обох нижче.

По-перше, продуктивність. Продуктивність, звичайно, залежить не тільки від мови, але й від реалізації, а також від досвідченості користувачів. Різні процесори XSLT можуть сильно відрізнятися по продуктивності, і той самий процесор може сильно відрізнятися залежно від способу його використання (наприклад, Saxon, наприклад, люди, які мають проблеми з продуктивністю, дуже часто виявляються, що використовують його разом з DOM, що є поганою комбінацією , а продуктивність може збільшитися в десятки разів, якщо ви замість цього використовуєте вроджену модель дерева Saxon). Тож перша порада - не сприймайте чужі результати, заміряйте це; а друга порада - переконатися, що людина, яка проводить вимірювання, має достатньо досвіду, щоб не робити дурних помилок. Легше сказати, ніж зробити.

Грубо ви можете розділити завдання перетворення на дві категорії: прості та складні. Для простого перетворення, при хорошому XSLT-процесорі час витрачається на розбір і серіалізацію, і час обробки XSLT навряд чи потрапляє у зображення. Оскільки будь-яка інша технологія понесе ті самі витрати на розбір та серіалізацію, вибір технології перетворення не призведе до великої різниці (за винятком, можливо, кодування дуже низького рівня з використанням потокової передачі, але не багато людей можуть дозволити собі програмування час та навички, необхідні для цього). Для складних перетворень на великих документах ви починаєте отримувати ті самі проблеми, що і для програмування SQL: для досягнення хорошої продуктивності потрібна хороша взаємодія між навичками та знаннями програміста та можливостями оптимізатора. Як і у SQL, це ' З такою мовою високого рівня дуже просто написати кілька простих заяв, в результаті яких процесору доведеться виконати дуже велику кількість роботи. Але також як і у SQL, програмісти, які знають, що вони роблять, будуть робити набагато краще, ніж новачки.

По-друге, зручність використання. Синтаксис XSLT на основі XML дуже невдалий для першої зустрічі з мовою. Але є вагомі причини та реальні переваги для цього таким чином: є аргумент "шаблон", що багато коду складається з XML, який потрібно записати в результатний документ, а найкращий спосіб записати XML - це у XML. І є аргумент "рефлексія"; у великих складних системах дуже часто зустрічаються таблиці стилів, які генерують таблиці стилів. Тоді є аргумент "інструменти"; якщо ви перебуваєте в магазині XML, у вас, ймовірно, є багато інструментів XML, таких як редактори, спрямовані на синтаксис, і це добре, щоб мати можливість використовувати ті самі інструменти для обробки ваших програм та ваших даних. Недоліки виявляються досить косметичними порівняно: s кількість натискань клавіш, що беруть участь у редагуванні (легко виправляється за допомогою хорошого інструмента редагування), і є багатослівність коду (зменшення його читабельності). Багатослівність значно зменшується в XSLT 2.0 завдяки впровадженню таких функцій, як регулярні вирази та функції таблиць стилів: багато таблиць стилів зменшуються до половини або третини за розміром, коли вони повністю використовують перевагу XSLT 2.0.

Ваша згадка про DSSSL залишає мене з кривою посмішкою. Я ніколи не використовував DSSSL, але розповіді, які я чув, що це було непотрібно, оскільки його синтаксис був прихованим та не пов'язаним із синтаксисом даних (SGML). Використання синтаксису XML для XSLT було сильно мотивоване досвідом роботи з DSSSL.

Є люди, які люблять XSLT, і є люди, які ненавидять його. Не дивно, що ті, хто її багато використовує, як правило, потрапляють до першої категорії. Ті, хто це не любить, - це, як правило, ті, хто не навчився "думати XSLT". Ви можете стверджувати, що мова програмування не повинна впливати на те, як ви думаєте, але це робить: писання мовою, заснованою на правилах, вимагає іншого мислення, ніж письмово необхідною мовою. Перша реакція багатьох програмістів полягає в тому, що вони менше контролюють (описують проблему, а не кажуть комп'ютеру, що робити крок за кроком). Це дуже схоже на реакцію, яку ви бачили, коли люди вперше знайомилися з SQL. У наші дні люди вивчають SQL раніше у своїй кар’єрі, тому не потрібно меншої перебудови розумової діяльності.

Зрештою, ви повинні вибрати технологію, засновану на об'єктивних вимірюваних критеріях, а не на реакціях любові / ненависті. Зробити ці вимірювання важко. Але є багато людей, які використовують XSLT дуже інтенсивно і дуже успішно, тому немає сумнівів, що це можна зробити.


2
Більш поширений термін "мова, заснована на правилах", - це декларативна мова.
Даніель Гратцер

@Michael Kay - Добре кажучи. Я особисто люблю XSLT і використовую його з C #. Крім того, я використовую його з XSL-FO для створення PDF-документів. XSLT є потужним, дуже потужним, що дозволяє мені швидко перетворювати велику кількість даних у HTML, XSL-FO, XML або Text.
PhillyNJ

3

Без додаткової інформації про контекст відповісти важко.

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

Процесори XSLT здаються дуже величезними / голодними

Чи є у вас важкі дані для цього? Чи реалізували ви рішення за допомогою XSLT і виявили, що XSLT - це вузьке місце, яке унеможливлює доставку товару, виконуючи всі нефункціональні вимоги, що стосуються продуктивності?

Без статистичних даних та профілювання ви не можете обґрунтовано стверджувати, що дане рішення не спрацює. Чи достатньо розумними є нефункціональні вимоги? Ви б хотіли витрачати, скажімо, десять днів роботи розробників, щоб отримати кілька сотень мілісекунд, замінивши XSLT на іншу альтернативу? Чи варто це?

XML - це погана позначка для програмування, і ось у чому полягає XSLT.

Отже, ви хочете перетворити один XML в інший, але не хочете використовувати XSLT, оскільки "XML - це погана нотація"?

Якщо факт, що ви використовуєте XML як якусь мову програмування, так сильно вас дратує, бачите це не як програмування, а скоріше купу правил трансформації.

Вам навіть не потрібно писати XSLT вручну. Є багато редакторів ETL, за допомогою яких можна графічно відобразити один XML в антотер: програмування не потрібно. Деякі з них використовують XSLT як вихід.


У мене виникли проблеми з ресурсами на аркушах на основі XSLT, вони були створені за допомогою графічного інструменту, але він перестав працювати з більшими файлами.
wirrbel

1
то, мабуть, є проблеми з вашими XSLT fileне XSLT Transformationsсамими
Малахій

Зараз я не засуджую XML, адже я думаю, що він підходить для представлення даних (особливо для розмітки). Оскільки "мова програмування" - а XSLT - мова програмування, специфічна для домену - це незручно. <xsl: як би там не було> Теги, метамовні мови (наприклад, xpath, $ notation тощо) в атрибутах запиту, все, що не відображається в XML, вкладається в цитати атрибутів. Для отримання враження про представлення XML-s-виразів: blog.getprismatic.com/blog/2013/1/22/… у таких місцях XML та і proglang можуть здатися непристойними
wirrbel

1

Якщо ви використовуєте XSLT для генерації XML на основі необробленого XSLT та деяких параметрів, які ви передаєте в двигун XSLT, то використання шаблонного XML-підходу набагато простіше зрозуміти та підтримувати.

Я працював над проектом, де вуса використовувались для заміни XSLT, і результат був набагато простішим базовим XML-файлами, який кожен міг редагувати та коригувати, а не тим, що робота над проектом передається одній-двом сміливим душам, які сиділи б у цілій тиші з намистами поту, що виливається ...

Підхід до шаблону не підходить для використання, коли базовий XML також є власними правильними даними та що XSLT використовується для надання альтернативного подання або витягу з вихідного XML.


Ви не проти пояснити, що це робить, і чому ви рекомендуєте це відповісти на поставлене запитання? "Відповіді лише на посилання" не дуже вітаються на біржі стеків
gnat

1
переглянув відповідь на зразок ваших відгуків
Майкл Шоу

0

XML не є мовою програмування

XML - це спосіб передачі / транспортування даних.
що інструкція XSLT - це використовувати Xpath для запиту даних певним чином та розміщення їх в іншому об'єкті / документі транспортування даних.

І / АБО

XSLT може перетворити ваш XML в HTML, що є ще одним способом відображення / транспортування даних, що містяться в XML-документі.

якщо ви хочете змінити XML або створити XML-документ, тоді ви можете використовувати будь-яку кількість мов: C #, VB, Ruby тощо.

зазвичай, коли ви використовуєте файл XSLT для трансформації XML-документа, у вас все ще є оригінальний документ XML, ви фактично не змінюєте оригінальний документ, ви дійсно створюєте новий.


1
У Вікіпедії сказано: "XSLT - це повна система Тьюрінга, це означає, що вона може визначати будь-які обчислення, які можуть бути виконані комп'ютером." Я ніколи не говорив, що XML сама по собі була мовою програмування.
wirrbel

Ви сказали, що "XML - це погані позначення для програмування" на мовах програмування, якими я користувався, ви можете легко перетягувати дані з XML-файлів. XSLT отримує перевагу на тому, що зможе зробити багато обчислень і виплюнути ці дані на інший об'єкт / документ для транспортування даних. це як SQL до SQL Server, він може робити багато речей, але це здебільшого задній, а не передній. SQL, як XSLT, запитує Дані певним чином, але ви ніколи не хочете надавати результати цього запиту як звіт, ви хочете надіслати інформацію будівельнику звітів
Малахій

2
XSLT не запитує дані, XPATH робить запит. Хіба XSLT не є декларативною мовою, яка визначає інструкції щодо розбору xml?
PhillyNJ

XSLT визначає правила перетворення на основі шаблонів, для яких може використовувати Xpath. Тобто ви можете мати такі програми програмування високого рівня, як xsl:for-each xsl:apply-templates, наприклад , xsl:if xsl:call-template xsl:value-ofвизначення правил трансформації.
wirrbel

1
@PhilVallone Я згоден. Я там помилявся. wirrbel, я не збираюся сперечатися з вами про те, що таке XSLT / XSL, а що ні, якщо ви хочете перетворити свій XML-документ в інший XML-документ, який ви хочете використовувати XSLT / XSL.
Малачі

0

Я працював над декількома системами обробки XML, які поєднують бібліотеки XSLT з Java або C ++ для частин, у яких XSLT не так добре. Є бібліотеки, які отримують дуже гарну продуктивність XSLT навіть у XML-файлах 20 Мб, проте XSLT має деякі обмеження у контексті, змінних та дійсно складних рядкових моделях. У кожній системі, над якою я працював, було виконано декілька речей у Java / C ++, тому що контекст був важливим або допоміг якийсь складний вираз виразів. Моє вирішення полягає в тому, що XSLT плюс деякий додатковий код на обраній вами мові - це хороший спосіб перетворити XML.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.