Subject: Re: SVG charts and graphs from XML input From: "Steve Muench" <smuench@xxxxxxxxxxxxx> Date: Sat, 4 Mar 2000 18:02:53 -0800 |
This is by no means a bullet-proof, one-size-fits all charting stylesheet, but it *was* my first foray into SVG from XSLT. Given XML results of an Oracle XSQL Page like: <xsql:query xmlns:xsql="urn:oracle-xsql connection="demo"> select ename, sal from dept </xsql:query> Which under the covers produces a dynamic XML doc like: <?xml version = '1.0'?> <ROWSET> <ROW num="1"> <ENAME>CLARK</ENAME> <SAL>2450</SAL> </ROW> <ROW num="2"> <ENAME>KING</ENAME> <SAL>3900</SAL> </ROW> <ROW num="3"> <ENAME>MILLER</ENAME> <SAL>1300</SAL> </ROW> </ROWSET> The following "salchart.xsl" XSLT stylesheet renders a dynamic bar chart with "cool colors" for the employees in the department. You may have to modify the namespace of the Java extension functions to get it to work in XT or Saxon or other XSLT engines. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:Color="http://www.oracle.com/XSL/Transform/java/java.awt.Color" xmlns:Integer="http://www.oracle.com/XSL/Transform/java/java.lang.Integer" exclude-result-prefixes="Color Integer"> <xsl:output standalone="yes" doctype-system="svg-19990812.dtd" media-type="image/svg"/> <xsl:template match="/"> <svg xml:space="preserve" width="1000" height="1000"> <desc>Salary Chart</desc> <g style="stroke:#000000;stroke-width:1;font-family:Arial;font-size:16"> <xsl:for-each select="ROWSET/ROW"> <xsl:call-template name="drawBar"> <xsl:with-param name="rowIndex" select="position()"/> <xsl:with-param name="ename" select="ENAME"/> <xsl:with-param name="sal" select="number(SAL)"/> </xsl:call-template> </xsl:for-each> </g> </svg> </xsl:template> <xsl:template name="drawBar"> <xsl:param name="rowIndex" select="number(0)"/> <xsl:param name="ename"/> <xsl:param name="sal" select="number(0)"/> <xsl:variable name="xOffset" select="number(100)"/> <xsl:variable name="yOffset" select="number(20)"/> <xsl:variable name="barHeight" select="number(25)"/> <xsl:variable name="gap" select="number(10)"/> <xsl:variable name="x" select="$xOffset"/> <xsl:variable name="y" select="$yOffset + $rowIndex * ($barHeight + $gap)"/> <xsl:variable name="barWidth" select="$sal div number(10)"/> <rect x="{$x}" y="{$y}" height="{$barHeight}" width="{$barWidth}"> <xsl:attribute name="style"> <xsl:text>fill:#</xsl:text> <xsl:call-template name="getCoolColorStr"> <xsl:with-param name="colorIndex" select="$rowIndex"/> <xsl:with-param name="totalColors" select="number(14)"/> </xsl:call-template> <xsl:text> </xsl:text> </xsl:attribute> </rect> <xsl:variable name="fontHeight" select="number(18)"/> <text x="20" y="{$y + $fontHeight}"> <xsl:value-of select="$ename"/> </text> <xsl:variable name="x2" select="$xOffset + $barWidth + 10"/> <text x="{$x2}" y="{$y + $fontHeight}"> <xsl:value-of select="$sal"/> </text> </xsl:template> <xsl:template name="getCoolColorStr"> <xsl:param name="colorIndex"/> <xsl:param name="totalColors"/> <xsl:variable name="SATURATION" select="number(0.6)"/> <xsl:variable name="BRIGHTNESS" select="number(0.9)"/> <xsl:variable name="hue" select="$colorIndex div $totalColors"/> <xsl:variable name="c" select="Color:getHSBColor($hue, $SATURATION, $BRIGHTNESS)"/> <xsl:variable name="r" select="Color:getRed($c)"/> <xsl:variable name="g" select="Color:getGreen($c)"/> <xsl:variable name="b" select="Color:getBlue($c)"/> <xsl:variable name="rs" select="Integer:toHexString($r)"/> <xsl:variable name="gs" select="Integer:toHexString($g)"/> <xsl:variable name="bs" select="Integer:toHexString($b)"/> <xsl:if test="$r < 16">0</xsl:if><xsl:value-of select="$rs"/> <xsl:if test="$g < 16">0</xsl:if><xsl:value-of select="$gs"/> <xsl:if test="$b < 16">0</xsl:if><xsl:value-of select="$bs"/> </xsl:template> </xsl:stylesheet> __________________________________________________________ Steve Muench, Lead XML Evangelist / Consulting Product Mgr Oracle Corp, Business Components for Java Development Team http://technet.oracle.com/tech/xml ----- Original Message ----- From: "Jon Smirl" <jonsmirl@xxxxxxxxxxxx> To: "XSLList" <xsl-list@xxxxxxxxxxxxxxxx> Sent: Saturday, March 04, 2000 5:29 PM Subject: SVG charts and graphs from XML input | Has anyone tried writing a stylesheet to generate SVG charts and graphs from | XML input? | | This might make a good class assignment; plus I'd like to see the results. | The SVGViewer at IBM alphaworks can be used to check the images. | | Jon Smirl | jonsmirl@xxxxxxxxxxxx | | | | XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list | XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
SVG charts and graphs from XML inpu, Jon Smirl | Thread | RE: SVG charts and graphs from XML , Pawson, David |
Re: XSLT vs Omnimark, Paul Tchistopolskii | Date | Re: Live Stock Market, Niclas Hedhman |
Month |