<xsl:transform version="2.0" 
               xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
               xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!--* This just reads in the appropriate input documents
      * and selects the elements to be processed by the
      * override.xsl stylesheet. 
      *
      * Make the overriding schema document (Dnew, the
      * one containing the xsd:override element) the
      * main input.
      *
      * Make sure the override element in Dnew points
      * correctly to the document to be overridden.
      *-->
  <!--* Invocation with Saxon:
      *
      * saxon -xsl:run_override.xsl
      *       -s:D1.xsd
      *-->
  
  <xsl:import href="override.xsl"/>
  
  <xsl:param name="nth" as="xs:integer" select="1"/>
  
  <xsl:output indent="yes"/>
  
  <xsl:template match="/"> 
      <!--*
    <xsl:message>Hi, mom, looking for <xsl:value-of select="$nth"/> override element.</xsl:message>
    *-->
    <xsl:variable name="overrideElement" 
                  as="element(xs:override)"
                  select="/xs:schema/xs:override[$nth]"/>
      <!--*
    <xsl:message>Override element is <xsl:copy-of select="$overrideElement"/></xsl:message>
    *-->
    <xsl:variable name="overriddenSchema" 
                  as="element(xs:schema)"
                  select="document(/xs:schema
                          /xs:override[$nth]
                          /@schemaLocation)
                          /xs:schema"/>
      <!--*
    <xsl:message>Overridden schema document is </xsl:message>
    <xsl:message><xsl:copy-of select="$overriddenSchema"/></xsl:message>
    *-->
    
    <xsl:call-template name="perform-override">
      <xsl:with-param name="overriddenSchema"
                      select="$overriddenSchema"/>
      <xsl:with-param name="overrideElement"
                      select="$overrideElement"/>
    </xsl:call-template>
  </xsl:template>
  
</xsl:transform>