Listing 1 Sample SVG file with graphical and business properties
<?xml version="1.0"?>
<svg width="800" height="440">
<g id="ball">

<g style="visibility:hidden" desc="ObjectProperty">
<text>
<tspan desc="weight">33.0 ounce
<tspan desc="material">rubber
<tspan desc="price">$0.50
</text>
</g>
</g>
</svg>

Listing 2 Example of a desired SVG file
<!-- floorplan.svg -->
<svg>
<defs>
<g id="power_def">
<rect width="10" height="8" style="fill:red"/>
</g>
<g id="phone_def">
<rect width="10" height="8" style="fill:blue"/>
</g>
<g id="ethernet_def">
<rect width="10" height="8" style="fill:green"/>
</g>
</defs>
<image src="/floorplan.jpg"/>
<g id="drawingCanvas"> <!--Start of drawing canvas -->
<g id="power1" transform="translate(410 212)"> <!--element 1-->
<use xlink:href="#power_def"/> <!--reuse of defs -->
<g style="visibility:hidden;" desc="objectProperty">
<text>
<tspan desc="number">2
</text>
</g>
</g>
<g id="phone1" transform="translate(430 212)"> <!‹element 2-->
<use xlink:href="#phone_def"/>
<g style="visibility:hidden;" desc="objectProperty">
<text>
<tspan desc="number">1</tspan>
<tspan desc="phone_number">904-555-1212</tspan>
</text>
</g>
</g>
<g id="ethernet1" transform="translate(450 212)">
<!-- element 3-->
<use xlink:href="#ethernet_def"/>
<g style="visibility:hidden;" desc="objectProperty">
<text>
<tspan desc="number">1
<tspan desc="ip_address">192.168.1.5
</text>
</g>
</g>
<g id="path_to_closet"> <!-- element 4-->
<path d="M450,212H50V100H-100V100"/>
</g>
</g>
</svg>

Listing 3 XSL file for the floor plan example
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<xsl:template match="/">
<execXML>
<xsl:for-each select="/svg/g/g">
<execProc>
<xsl:variable name="argStr">
<xsl:for-each select="@*">
<xsl:value-of select="name(.)"/>
<xsl:text>=
<xsl:value-of select="."/>
<xsl:text>&amp;
</xsl:for-each>
<xsl:for-each select="*">
<xsl:if test="name(.)='use'">
<xsl:text>requestName=updateUse
<xsl:for-each select="@*">
<xsl:value-of select="name(.)"/>
<xsl:text>=
<xsl:value-of select="."/>
<xsl:text>&amp;
</xsl:for-each>
</xsl:if>
<xsl:if test="name(.)='path'">
<xsl:text>requestName=updatePath
<xsl:for-each select="@*"> <xsl:value-of select="name(.)"/>
<xsl:text>=
<xsl:value-of select="."/>
<xsl:text>&amp;
</xsl:for-each>
</xsl:if>
<xsl:if test="./@desc='objectProperty'">
<xsl:for-each select="./text/tspan">
<xsl:value-of select="@desc"/>
<xsl:text>=
<xsl:value-of select="."/>
<xsl:text>&amp;
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="$argStr"/>
</execProc>
</xsl:for-each>
</execXML>
</xsl:template>
</xsl:stylesheet>

Listing 4 Output exec-XML file
<?xml version="1.0"?>
<execXML>
<execProc>
requestName=updateUse&id=power1&transform=translate(410,212)
&href=#power_def&number=2
</execProc>
<execProc>
...
</execProc>
<execProc>
requestName=updatePath&id=path_to_closet&d=M450,
212H50V100H-100V100
</execProc>
</execXML>

Listing 5 Simple tag-based SVG XML template file
<!-- floorplanTemplate.svg Example 1-->
<svg>
<defs> <!--definitions of graphic elements that will be
reused -->
...
</defs>
<g id="drawingCanvas">
<!‹RLF-TAG BGN Loop loop1 -->
{{gElements}}
<!‹RLF-TAG END Loop loop1 -->
</g>
</svg>

Listing 6 DDS file for Listing 5
<!‹section 2 of dds.xml -->
<dataset>
<name>getMarkers
<maindataset>
<request>
<javaclass>com.ai.db.DBRequestExecutor1
<datasource>MyDataBase
<stmt> select layerid from layers where user_id=
{userid}
</request>
</maindataset>
<loopdata_request>
<name>loop1
<request>
<javaclass>com.ai.db.DBRequestExecutor1
<datasource>MyDataBase
<stmt> select gelements from marker where layer_id =
{layerid}
</stmt>
</request>
</loopdata_request>
</dataset>
Listing 7 Complex tag-based SVG XML template file
<!-- floorplan.svg Example 2 -->
<svg>
<defs> <!--definitions of graphic elements that will be reused-->
...
</defs>
<g id="drawingCanvas">
<!--RLF_TAG BGN_LOOP loop1 -->
<g id="{{floor_id}}" transform="{{transform}}">
<!--RLF_TAG BGN_IF svg_type=path if1-->
<path d="{{path_string}}"/>
<!--RLF_TAG END_IF svg_type=path if1 -->
<!--RLF_TAG BGN_IF svg_type=use if2-->
<use xlink:href="{{use_id}}"/>
<!--RLF_TAG END_IF svg_type=use if2 -->
<g style="visibility:hidden;" desc="objectProperty">
<text>
<!--RLF_TAG BGN_LOOP svg_text -->
<tspan desc="{{name}}">{{value}}
<!--RLF_TAG END_LOOP svg_text -->
</text>
</g>
<!--RLF_TAG END_LOOP loop1 -->
</g>
</g>
</svg>

Listing 8 Retrieved data transformed via JSP to SVG XML
<!-- floorplan.svg -->
<%@ page import="com.ai.htmlgen.*" %>
<%@ page import="com.ai.application.utils.*" %>
<%
IFormHandler svgData = (IFormHandler)request.getAttribute("Aspire.formHandler");
if (svgData == null)
{
// Report no data found and return
}
%>
<svg>
<defs> <!--definitions of graphic elements that will be
reused-->
...
</defs>
<g id="drawingCanvas">
<% IControlHandler3 floorDef = (IControlHandler3)
svgData.getControlHandler("svg_def_floor_handler");
if (floorDef.isDataAvailable() == true)
{
while(floorDef.gotoNextRow() == true)
{
%>
<g id="<%= floorDef.getValue("floor_id") %>"
transform="<%= floorDef.getValue("transform") %>">
<% if(floorDef.getValue("svg_type").equals("use"))
{%>
<use xlink:href="#<%=floorDef.getValue("use_id") %>"/>
<% }
else if(floorDef.getValue
("svg_type").equals("path"))
{ %>
<path d="<%= floorDef.getValue("path_string") %>"/>
<% } %>
<g style="visibility:hidden;" desc=
"objectProperty">
<text>
<tspan desc="number">
<%= floorDef.getValue("objectText") %></tspan>
</text>
</g>
</g>
<% }//end while %>
</g>
<% } //end if floorDef has data %>
</svg>
Listing 9 Aspire-infosets: internal representation of data extracted from database
<!‹Illustration of middle-tier XML output format for
example 1-->
<dataset>
<image_id>8829</ image_id>
<user_id>22</user_id>
<loop name="loop1">
<row>
<gelements><g id="power1"><use>...</use></g></gelements>
</row>
<row>
<gelements><g id="phone1"><use>...</use></g></gelements>
</row>
<row>
<gelements><g id="ethernet1"><use>...</use></g></gelements>
</row>
</loop>
</dataset>

Listing 10 DTS file for Listing 5
<!--section 3 of dts.xml -->
<target_dataset>
<source_dataset>
getMarkers
</source_dataset>
<transform>
<javaclass>com.ai.xml.TagTransform</javaclass>
<templatefile>floorplanTemplate.svg</templatefile>
</transform>
</target_dataset>