Почему я выбрал бы XSLT или XQuery вместо другого для генерации HTML-документов? - PullRequest
2 голосов
/ 15 декабря 2009

Я искал альтернативы использованию XslCompiledTransform от Microsoft, и все, казалось, указывало в первую очередь на Saxon, а во-вторых, на XQSharp. Когда я начал изучать документацию по Saxon, я увидел, что XQuery может сделать эквивалент моих XSLT, которые не настолько кратки, как разметка XQuery.

Какие преимущества предлагают XSLT по сравнению с XQuery, чтобы заслужить гораздо более подробный синтаксис?

Будет ли создана шаблонная функциональность?

Ответы [ 4 ]

5 голосов
/ 15 декабря 2009

В общем, много совпадений; оба основаны на базовой реализации XPath. Что касается использования XSLT или XQuery, доказательство в пудинге: XSLT лучше при преобразованиях , а XQuery лучше при запросах .

Итак, используйте XQuery для:

  • меньше, менее сложные вещи
  • высокоструктурированные данные (XQuery очень строго типизирован и может жаловаться)
  • данные из базы данных
  • извлечение небольшой информации

И наоборот, используйте XSLT для:

  • копирование документа только с постепенными изменениями
  • большие, более сложные вещи
  • слабо (или плохо) структурированные данные
2 голосов
/ 15 декабря 2009

Самая большая причина отойти от XslCompiledTransform заключается в том, что это всего лишь процессор XSLT 1.0.

Большинство функций XSLT 2.0 и XQuery 1.0 частично совпадают, и по большей части это схожие языки с разным синтаксисом (немного похожими на C # и VB).

XSLT намного более многословен, но его шаблонные функции добавляют множество функций, которые могут быть довольно громоздкими для репликации в XQuery, особенно внося небольшие изменения в деревья узлов. Основными функциями, которые особенно громоздки в XQuery, являются такие вещи, как <xsl:template match="..." /> и <xsl:copy>...</xsl:copy>.

XQuery имеет гораздо более чистый синтаксис (IMHO), если функции шаблонов не нужны, и я считаю, что он намного лучше для более сложных вычислений и извлечения данных из больших документов.

XQuery часто рассматривается как язык базы данных. Хотя многие базы данных используют его таким образом, это не единственное использование для него. Некоторые реализации языка в базах данных очень ограничены. Другой комментатор утверждает, что XQuery «очень строго типизирован». Если вы не используете функцию статической типизации, XQuery не более строго типизирован, чем XSLT. Хотя некоторые реализации базы данных вынуждают вас использовать функции статической типизации, большинство других реализаций отходит от этого.

Он также утверждает, что XQuery не очень хорош для "больших, более сложных вещей". Я бы поспорил с точностью до наоборот. Краткость и изящество синтаксиса значительно упрощают написание сложных функций и вычислений в XQuery. Я написал raytracer в XQuery, который кажется действительно вполне естественным; Я думаю, что было бы намного сложнее (конечно, более многословно) написать что-то столь сложное в вычислительном отношении в XSLT.

В итоге:

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

XQuery более естественен для создания нового XML-документа из различных источников или для изменения структуры документа.

Обратите внимание, что перекрытие довольно велико, и часто нет "правильного" выбора, но если вы сделаете неправильный выбор, вы будете склонны работать против зерна.

2 голосов
/ 15 декабря 2009

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

XQuery предназначен для извлечения информации из одного или нескольких XML-документов и объединения результата в новый XML-документ.

И XQuery, и XSLT сильно зависят от XPath. Если ваши выходные данные основаны на одном входном XML-документе и ** одном выходном XML-документе, эти два элемента в значительной степени можно взаимозаменять.

Синтаксис FLWR в XQuery достаточно интуитивен, если у вас есть фон SQL, IMO XSLT является более мощным языком при работе с ситуациями один вход / один выход, особенно если вывод не будет XML.

Лично я нахожу синтаксис на основе xml и декларативную природу XSLT немного трудным для чтения и поддержки.

Это действительно сводится к выбору, хотя использование XQuery для «простого» форматирования немного необычно. Если ваш ввод основан на более чем одном документе xml, вы в значительной степени застряли с XQuery, если ваш вывод не основан на xml, вы в значительной степени застряли с XSLT.

1 голос
/ 15 декабря 2009

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

XSLT фактически полагается на функциональность XQuery, взгляните на учебные пособия на www.w3schools.com ; при правильном использовании они обе являются очень мощными технологиями.

...