XML File (jamming.xml)
The following is a brief excerpt from the first chapter of Synchronized Jamming. The structure of the book is a mixture of common elements of fiction, literal HTML code, and musical annotation.
<?xml version="1.0"?> <?xml:stylesheet type="text/xsl" href="jamming.xsl"?> <novel copyright="2001" isbn="555000000X"> <title>Synchronized Jamming</title> <author>Kari Hensien</author> <chapter number="1"> <title>The Bleeding Edge</title> <epigraph><text>Any sufficiently advanced technology is indistinguishable from noise.</text><author>Canopy Rose</author><source>The Fusion Manifesto</source></epigraph> <para>Politics. Technology. Rock'n'roll. All you needed to know about the underground band known as Canopy Rose was right there in the first couple grafs of their so-called "Fusion Manifesto":</para> <markup_code><![CDATA[ <html> <head><title>Fused</title></head> <body> <p>Listen. You know as well as we do...</p> <p>... the sound of one hand jammin':</p> ]]></markup_code> <chord duration="4.5" units="seconds" voice="steel" vibrato="on"> <note>A</note> <note>C</note> </chord> <markup_code><![CDATA[ <p>Welcome to the block party. Welcome to the revolution.</p> </body> </html> ]]></markup_code> </chapter> </novel>
XSLT File (jamming.xsl)
This is the final version of the file.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:import href="chord.xsl"/>
<xsl:include href="markup_code.xsl"/>
<xsl:template match="novel">
<html>
<head>
<title>Excerpt:
"<xsl:value-of select="title"/>,"
by
<xsl:value-of select="author"/>
</title>
<style>
* {font-family: Arial,Helvetica,Univers,sans-serif}
pre {font-family: Courier New,Courier,monospace}
</style>
</head>
<body>
<h2>Excerpt:<br/>
<em><xsl:value-of select="title"/></em></h2>
<h3>by <xsl:value-of select="author"/></h3>
<h6>Copyright <xsl:value-of select="@copyright"/>
by <xsl:value-of select="author"/></h6>
<h6>Scootney Publishing / ISBN
<xsl:value-of select="@isbn"/></h6>
<hr size="2" width="75%" align="left"/>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="novel/title">
</xsl:template>
<xsl:template match="novel/author">
</xsl:template>
<xsl:template match="chapter">
<div style="width:75%">
<h2>Chapter <xsl:value-of select="@number"/>:<br/>
<xsl:value-of select="title"/></h2>
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="chapter/title">
</xsl:template>
<xsl:template match="epigraph">
<div style="width:50%; float:right; margin:5; padding:5;
background-color:silver; border-style:double; border-left-width:0;
border-right-width:0">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="epigraph/text">
<div>
<em><value-of select="."/></em>
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="epigraph/author">
-- <xsl-value-of select="."/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="epigraph/source">
(<em><xsl:value-of select="."/></em>)
</xsl:template>
<xsl:template match="para">
<p><xsl:apply-imports/></p>
</xsl:template>
<xsl:template match="chord">
<div style="border-style:double; width:50%">
<xsl:apply-imports/>
</div>
</xsl:template>
</xsl:stylesheet>
Imported XSLT File (chord.xsl)
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40"> <xsl:template match="chord"> <div style="width:75%; margin-left:20; padding:10"> <table border="0"> <tr> <th style="background-color: yellow"> <xsl:attribute name="colspan"><xsl:value-of select="count(note)"/></xsl:attribute> Chord Notes </th> </tr> <tr> <xsl:for-each select="note"> <td><b><xsl:value-of select="."/></b></td> </xsl:for-each> </tr> <tr> <td style="background-color: yellow"> <xsl:attribute name="colspan"><xsl:value-of select="count(note)"/></xsl:attribute> Duration: <xsl:value-of select="@duration"/><xsl:text> </xsl:text> <xsl:value-of select="@units"/> </td> </tr> <tr> <td style="background-color: yellow"> <xsl:attribute name="colspan"><xsl:value-of select="count(note)"/></xsl:attribute> Voice: <xsl:value-of select="@voice"/> </td> </tr> <tr> <td style="background-color: yellow"> <xsl:attribute name="colspan"><xsl:value-of select="count(note)"/></xsl:attribute> Vibrato: <xsl:value-of select="@vibrato"/> </td> </tr> </table> </div> </xsl:template> </xsl:stylesheet>
Included XSLT File (markup_code.xsl)
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40"> <xsl:template match="markup_code"> <div style="width:75%; margin-left:20; padding:10"> <pre><xsl:value-of select="."/></pre> </div> </xsl:template> </xsl:stylesheet>
Formatted Output
