Parameterizing Schemas
Saxon provides an extension to the standard XSD syntax that allows a schema to be parameterized. This is only useful if XSD 1.1 is enabled. The facility allows a parameter to be declared in a top-level annotation in the schema document, for example:
<xs:annotation> <xs:appinfo> <saxon:param name="accepted-currencies" as="xs:string" select="'USD', 'GBP, 'EUR'" xmlns:saxon="http://saxon.sf.net/"/> </xs:appinfo> </xs:annotation>This declaration allows the variable $currency to appear in any XPath
         expression appearing in the remainder of the same schema document. Typically it will be
         used in an assertion or in an expression controlling conditional type assignment, for
         example:
As with stylesheet parameters in XSLT, the as attribute defines the required
         type of the value (defaulting to item()*), and the select
         attribute supplies a default value. The expression determining the default value is
         evaluated during schema processing (that is, at "compile time"). The name of the parameter
         is a QName following the XSLT convention that no prefix means no namespace. The supplied
         value is converted to the required type using the function conversion rules, and validation
         fails if this is not possible.
It is important to supply a sensible default value since it will not always be possible to
         supply a value for the parameter. For example, if the variable is used in the
            assertion facet of a simple type, then a cast expression initiated from
         XSLT or XQuery will always use the default value for the parameter.
The scope of the declared variable is all XPath expressions appearing after the
            saxon:param element within the same schema document. All parameters within
         a schema must have distinct names. It is not at present possible to use one parameter
         across multiple schema documents (as a workaround, all types using the variable should
         appear in the same schema document).
On the Validate command line the parameters can be supplied in the form
            keyword=value, for example currency=EUR; more complex values
         can be supplied as XPath expressions, for example
            ?accepted-currencies=('USD','GBP','EUR') or
            +lookup-table=lookup-doc.xml.
Using the s9api interface from Java, parameter values can be supplied using the
            setParameter() method on the SchemaValidator object.
Using the Saxon.Api interface on .NET, parameter values can be supplied using the
            SetParameter() method on the SchemaValidator object.
It is not currently possible to supply parameter values when using the JAXP interfaces to
         run a validation episode, or when invoking validation using the standard mechanisms in XSLT
         or XQuery. In this situation the default value will always be used. In the absence of the
            select attribute the default value is an empty sequence (whether or not
         this is a legal value according to the required type).
An extension function saxon:validate() is available to allow parameterized validation to be invoked from
         XSLT or XQuery. The first argument is the document or element node to be validated; the
         second argument is a map giving validation options, and the third argument is a set of
         values for any validation parameters, also supplied as a map (the keys will be of type
            xs:QName). If the second and/or third arguments are omitted, the effect is
         the same as if empty maps were supplied for these arguments.