<xsl:template name="child-query"> <xsl:with-param name="parent" select="`Daddy' "/> <xsl:value-of select="concat(`But, why',$parent,'?')"/> <xsl:apply-templates select="reasonable_response"/> <xsl:call-template name="child-query"> <xsl:with-param name="parent" select="$parent"/> </xsl:call-template> </xsl:template> <!-- Parents not recognizing tail recursion may risk blowing their stack. -->
This chapter covers recipes for using XSLT as an XML query language. Querying XML means extracting information from one or more XML documents to answer questions about facts and relationships occurring in and among these documents. By analogy, querying an XML document involves asking the same types of questions of XML using XSLT that one might ask of a relational database using SQL.
The “official” query language for XML promulgated by the W3C is not XSLT, but XQuery (http://www.w3.org/TR/xquery/). XSLT and XQuery have many similarities, but also some striking differences. For example, XSLT and XQuery both rely on XPath. However, an XSLT script is always in XML syntax, while an XQuery script has both a human-friendly and XML syntax (http://www.w3.org/TR/xqueryx).
When the idea for an XML query language distinct from XSLT was proposed, it was controversial. Many members of the XML community thought there would be too much overlap between the two. Indeed, any query formulated in XQuery could also be implemented in XSLT. In many cases, the XSLT solution is as ...