<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:r="http://nwalsh.com/xmlns/extreme2006/recipes/"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:saxon="http://saxon.sf.net/"
                version="2.0">

  <xsl:import-schema namespace="http://nwalsh.com/xmlns/extreme2006/recipes/" schema-location="recipes.xsd"/>

  <xsl:output method="text"/>

  <xsl:strip-space elements="r:*"/>
  <xsl:preserve-space elements="r:name r:source r:p"/>

  <xsl:template match="/">
    <xsl:if test="not(element(*, r:RecipeList))">
      <xsl:message terminate="yes">
	<xsl:text>Document element must match element(*, r:RecipeList).</xsl:text>
      </xsl:message>
    </xsl:if>

    <xsl:apply-templates select="*"/>
  </xsl:template>

  <xsl:template match="r:recipeList">
    <xsl:apply-templates select=".//*"/>
    <xsl:text>&#10;</xsl:text>
    <xsl:apply-templates select=".//*" mode="beverage"/>
  </xsl:template>

  <xsl:template match="schema-element(r:recipe)" priority="1000">
    <xsl:value-of select="local-name(.)"/>
    <xsl:text> is substitutable for r:recipe.</xsl:text>
    <xsl:text>&#10;</xsl:text>
  </xsl:template>

  <xsl:template match="*"/>

  <xsl:template match="schema-element(r:beverage)" mode="beverage" priority="1000">
    <xsl:value-of select="local-name(.)"/>
    <xsl:text> is substitutable for r:beverage.</xsl:text>
    <xsl:text>&#10;</xsl:text>
  </xsl:template>

  <xsl:template match="*" mode="beverage"/>
</xsl:stylesheet>