Концептуально xsl:apply-templates
- это карта с полиморфной функцией, выраженной для всех объявленных вами правил.xsl:function
объявляет «обычную» функцию, которую вы можете использовать в любой другой инструкции или декларации, принимающей выражения XPath.xsl:call-template
Инструкция «вызывает» определенный именованный шаблон (вы можете думать об этом как о функции в некотором роде).
Поскольку в этом есть различия в том, как контекст оценки задействован в каждом из них: xsl:apply-templates
определить новый список контекста, из которого берется узел контекста, а также положение близости;xsl:function
не определен узел контекста (полагаться на него - ошибка);xsl:call-template
не меняет контекст оценки.
Другим очевидным отличием является их связь с выходными данными: и xsl:apply-templates
, и xsl:call-template
, поскольку инструкции XSLT выводят свою построенную последовательность;xsl:function
как часть выражения XPath - нет.