[xsl] what's the best way to validate input parameters to a stylesheet?

Subject: [xsl] what's the best way to validate input parameters to a stylesheet?
From: "Chris Papademetrious christopher.papademetrious@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 19 Mar 2021 21:57:38 -0000
Hello! I've got a stylesheet that takes two string parameters:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="2.0">

  <xsl:param name="from.att" as="xs:string"/>
  <xsl:param name="to.att"   as="xs:string"/>

Both parameters are expected to be strings in the form of

@attributename=value

At first I tried adding a check at the top level of the stylesheet:

<xsl:if test="not(matches($from.att, '^@\w+=\w+$') and matches($to.att,
'^@\w+=\w+$'))">
  <xsl:message terminate="yes">Input parameters must be in the form
'@attributename=value'.</xsl:message>
</xsl:if>

but <xsl:if> isn't allowed at the top level of a stylesheet.

So for now I'm doing this in a "dummy" root element template that doesn't do
anything:

  <!-- this doesn't actually do anything other than validate our input
parameters -->
  <xsl:template match="/" priority="20">
    <xsl:choose>
      <xsl:when test="matches($from.att, '^@\w+=\w+$') and matches($to.att,
'^@\w+=\w+$')">
        <xsl:next-match/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:message>Input parameters must be in the form
'@attributename=value'.</xsl:message>
        <xsl:copy-of select="."/>
      </xsl:otherwise>
   </xsl:choose>
  </xsl:template>

but I feel like there's probably a better way. Is there?

-----
Chris Papademetrious
Tech Writer, Implementation Group
(610) 628-9718 home office
(570) 460-6078 cell

Current Thread