XSLT: есть ли способ наследовать стандартную функциональность?

Мне снова приходится собирать немного XSLT, чтобы превратить сгенерированный XML в (а не просто генерировать HTML).

на этот раз у меня снова сильное дежа-вю. мне снова приходится решать основные проблемы, например:

  • как преобразовать символы в действительные ссылки на объекты html
  • как сохранить возврат пробелов/каретки при преобразовании в html
  • как конвертировать в HTML, а не в xhtml
  • как преобразовать даты из формата xml в презентабельный формат
  • как разорвать строку с подстрокой

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

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

Есть ли в XSLT способ расти, расширяться и улучшать экосистему с помощью готового кода?


person Ian Boyd    schedule 01.05.2010    source источник
comment
Отличный вопрос (+1). Смотрите мой ответ для обширной, подробной информации. :)   -  person Dimitre Novatchev    schedule 01.05.2010
comment
Это все вещи, которые я решал много раз раньше. Но каждый раз, когда я возвращаюсь к XSLT, мне приходится начинать с нуля, каждый раз заново изобретая колесо. То же самое я чувствую и с другими языками программирования, если я не прикасался к ним какое-то время. И да, XSLT немного отличается от C/Java/Ruby/..., поэтому я думаю, что вполне естественно начать заново. Программирование — довольно сложная задача, и я бы (боюсь) бояться людей, которые возвращаются к языку через год и им не нужно ничего искать.   -  person topskip    schedule 01.05.2010
comment
@Димитрий, успокойся. Это случается со всеми, не нужно расстраиваться. кто-то понизил мой ответ (stackoverflow.com/questions/2669813/ ) и не указал причину. Ну и что? Какая разница? Возможно, этому человеку не понравился мой нос?   -  person topskip    schedule 01.05.2010
comment
@Patrick: Вы абсолютно правы! Иногда я забываю, что в SO действует закон больших чисел, и эксперты должны быть достаточно терпеливы... Что меня иногда огорчает, так это то, что невежество и ненависть побеждают - остается только верить, что это временно.   -  person Dimitre Novatchev    schedule 01.05.2010
comment
@Dimitre: (Это становится действительно не по теме, вы можете отметить меня, если хотите.) Так легко анонимно голосовать за / против (и ТАК очень анонимно), если людям придется встретиться в реальной жизни, прежде чем имея возможность голосовать за/против, то голосов против практически не будет, потому что тогда мы начинаем видеть человека, стоящего за постом.   -  person topskip    schedule 01.05.2010


Ответы (1)


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

Конечно, это не обязательно.

Если бы это был язык программирования

Да, XSLT является языком программирования.

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

Да, вы можете сделать это в XSLT.

я бы унаследовал от базового класса, который уже реализует уродливый шаблонный материал.

Да, в XSLT есть что-то очень похожее.

Есть ли в XSLT способ расти, расширяться и улучшать экосистему с помощью готового кода?

Даже в XSLT 1.0 есть мощные стандартные функции, поддерживающие повторное использование:

  1. <xsl:import>
  2. <xsl:include>
  3. <xsl:apply-templates>
  4. <xsl:call-template>
  5. <xsl:apply-imports>

В XSLT 2.0 добавлено несколько еще более мощных функций:

  1. <xsl:function>
  2. Параметры для <xsl:apply-imports>
  3. <xsl:next-match>

Долгое время существовало несколько библиотек XSLT:

  1. FXSL (1.x и 2.x) реализует функции высшего порядка в XSLT 1.0/2.0
  2. FunctX — библиотека полезных функций XSLT 2.0 и XQuery.

XPath 2.1 и XSLT 2.1 добавить функции высшего порядка в качестве стандарта. Функции становятся первоклассными типами данных.

person Dimitre Novatchev    schedule 01.05.2010