The reason the quotation template never gets called is because you do not tell XSLT to continue processing within the template matching p. All your do is output an element, and so the XSLT processor will not continue doing any template matching for any descendants of the p element. What you need to do is add this line into the template (within the span element) so that XSLT can continue and match the quotation element.
<xsl:apply-templates />
In fact, you also have a problem with this line
<xsl:value-of select="//p"/>
This will actually return all the text under the first p element in document, not necessarily the one you are on. You could change it to this:
<xsl:value-of select="."/>
But this will include any text within the nest quotation element. However, you don't actually need this xsl:value-of here at all in this case, because XSLT has the concept of built-in templates, which will output the text of any text nodes it finds, and so just doing xsl:apply-templates will handle this.
Try this XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates select="//text"/>
</xsl:template>
<xsl:template match="p">
<span id="paragraph"><xsl:apply-templates /></span>
</xsl:template>
<xsl:template match="quotation">
<span id="quotation"><xsl:apply-templates /></span>
</xsl:template>
</xsl:stylesheet>