Шаблоны значений атрибутов нельзя использовать для объявлений пространства имен. Помните, что XSLT - это XML, и объявление пространства имен xmlns:x="..."
должно быть понято синтаксическим анализатором XML и процессором XSLT.
В XSLT 2.0 вы можете динамически создавать узел пространства имен, используя инструкцию xsl:namespace
:
<xsl:namespace name="s" select="$service-uri"/>
Если вы в 1.0, это сложнее. Вы можете сделать это, создав узел элемента в соответствующем пространстве имен:
<xsl:variable name="dummy">
<xsl:element name="s:dummy" namespace="{$service-uri}"/>
</xsl:variable>
и затем копирование соответствующего узла пространства имен в новый элемент:
<xsl:copy-of select="exslt:node-set($dummy/*/namespace::s)"/>