Функции расширения
Прежде чем описывать использование функций расширения, вспомним, как мы вызывали в преобразованиях обычные функции, например, функцию concat
:
Атрибут select
содержит XPath-выражение concat('para', 'bellum')
, которое с точки зрения синтаксиса XPath является вызовом функции и соответствует продукции FunctionCall
:
[XP16] FunctionCall ::= FunctionName
'(' ( Argument ( ',' Argument ) * ) ? ')'
Аргументами функции являются выражения, а имя может быть любым корректным XML-именем (за исключением node
, comment
, processing-instruction
и text
, которые используются для проверки типа узла):
[XP17] Argument ::= Expr
[XP35] FunctionName ::= QName - NodeType
В плане синтаксиса функции расширения ничем не отличаются от стандартных функций: они отвечают тем же самым грамматическим правилам. Единственное различие состоит в том, что функции стандартных библиотек XPath и XSLT принадлежат нулевому пространству имен, в то время как пространство имен функций расширения должно обязательным образом быть ненулевым. Иными словами, вызовы функций, имеющие вид имя(аргумент, аргумент, ...)
, будут считаться вызовами функций базовых библиотек, а вызовы вида префикс:имя(аргумент, аргумент, ...)
будут считаться вызовами функций расширения.