XPointer. After some fairly elaborate footwork (which is discussed in detail in the next section), the XSLT sends both the URI and the XPointer to another JSP appli- cation. That other JSP, xpn.jsp, returns the data referenced by the XPointers. The data consists of elements that contain Biblical verses. Eventually, that data ends up in dreams.xsl that converts verses to paragraphs. For example, with Tomcat running and all the files in the right places, this URL (shown broken over two lines) http://localhost:8080/xmlp/xx.jsp? xmlUri=helloXLink/dreams.xml&xslUri=helloXLink//dreams.xsl results in the screenshot shown in Figure 2-7. The Code of linkTransform.xsl This XSLT can be classified as advanced: it goes beyond what we have so far cov- ered and can be skipped on first reading. We dont discuss all of it but we do address two details that concern calling xpn.jsp and sending parameters to it. First, we introduce the XPath document() function. Its main use is to include another XML document for processing. So, for instance, if you have an XML doc- ument additionalData.xml and you want to store its XPath tree in a variable in your XSLT program, you would say <xsl:variable name=moreData select=document(additionalData.xml) /> 69 Well-Formed Documents and Namespaces Figure 2-7. XLink processed with XSLT (Josephs Dreams)