source: proto/gml2svg/Java/gml2svg/res/sld2OptXsltC.xslt @ 1730

Last change on this file since 1730 was 1730, checked in by ksherdy, 8 years ago

Consolidated SAX and XSLT gml2svg source into a single directory 'gml2svg'.

File size: 15.3 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3    Description: C/C++ Version. Generates a set of optimized GML2SVG XSLT stylesheets with explicit parameter data type conversion required for use with the Intel XSLT extension function mechanism.
4    Usage: java -cp . -jar /data/home/ksherdy/Development/Eclipse/Workspace/gml2svgJ/lib/saxon9.jar -s:/data/home/ksherdy/Development/Eclipse/Workspace/XSLTJ/res/StyleConfigurationOpt.xml -xsl:/data/home/ksherdy/Development/Eclipse/Workspace/XSLTJ/res/sld2OptXsltC.xslt
5-->
6<xsl:stylesheet xmlns="http://www.w3.org/2000/svg" xmlns:fs="http://www.galdosinc.com/fps"
7    xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml"
8    xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
9    version="2.0">
10    <xsl:output indent="yes" method="xml" encoding="UTF-8" omit-xml-declaration="no"/>
11    <xsl:template match="/">
12        <xsl:for-each select="fs:StyleConfiguration/fs:StyleDefinition">
13            <xsl:variable name="feartureTypeName"
14                select="sld:FeatureTypeStyle/sld:FeatureTypeName/text()"/>
15            <xsl:variable name="geometryPropertyName"
16            select="sld:FeatureTypeStyle/sld:Rule//sld:Geometry/ogc:PropertyName/text()"/>
17            <xsl:variable name="name" select="sld:Name/text()"/>
18            <xsl:result-document href="{$name}.xslt" encoding="UTF-8">
19            <xsl:element name="xsl:transform" namespace="http://www.w3.org/1999/XSL/Transform">
20                <xsl:attribute name="version">2.0</xsl:attribute>
21                <xsl:attribute name="exclude-result-prefixes">van gml ogc sld xsi xsl Extfun</xsl:attribute>
22                <xsl:namespace name="">http://www.w3.org/2000/svg</xsl:namespace>
23                <xsl:namespace name="van">http://www.galdosinc.com/vancouver</xsl:namespace>
24                <xsl:namespace name="gml">http://www.opengis.net/gml</xsl:namespace>
25                <xsl:namespace name="ogc">http://www.opengis.net/ogc</xsl:namespace>
26                <xsl:namespace name="sld">http://www.opengis.net/sld</xsl:namespace>
27                <xsl:namespace name="xsi">http://www.w3.org/2001/XMLSchema-instance</xsl:namespace>
28                <xsl:namespace name="xsl">http://www.w3.org/1999/XSL/Transform</xsl:namespace>
29                <xsl:namespace name="Extfun">/org.opengis.gml.StyleExt</xsl:namespace>
30
31                <!-- output -->
32                <xsl:element name="xsl:output">
33                    <xsl:attribute name="indent">no</xsl:attribute>
34                    <xsl:attribute name="method">xml</xsl:attribute>
35                    <xsl:attribute name="encoding">UTF-8</xsl:attribute>
36                    <xsl:attribute name="omit-xml-declaration">yes</xsl:attribute>
37                </xsl:element>
38
39                <!-- strip space -->
40                <xsl:element name="strip-space">
41                    <xsl:attribute name="elements">*</xsl:attribute>
42                 </xsl:element>
43
44                <!-- params -->
45                <xsl:element name="xsl:param">
46                    <xsl:attribute name="name">height</xsl:attribute>
47                    <xsl:attribute name="select">800</xsl:attribute>
48                </xsl:element>
49                <xsl:element name="xsl:param">
50                    <xsl:attribute name="name">width</xsl:attribute>
51                    <xsl:attribute name="select">800</xsl:attribute>
52                </xsl:element>
53                <xsl:element name="xsl:param">
54                    <xsl:attribute name="name">bbox</xsl:attribute>
55                </xsl:element>
56                <xsl:element name="xsl:param">
57                    <xsl:attribute name="name">x1</xsl:attribute>
58                </xsl:element>
59                <xsl:element name="xsl:param">
60                    <xsl:attribute name="name">y1</xsl:attribute>
61                </xsl:element>
62                <xsl:element name="xsl:param">
63                    <xsl:attribute name="name">x2</xsl:attribute>
64                </xsl:element>
65                <xsl:element name="xsl:param">
66                    <xsl:attribute name="name">y2</xsl:attribute>
67                </xsl:element>               
68
69    <xsl:comment>Root Node  ==================================================================</xsl:comment>
70    <xsl:text>
71    </xsl:text>
72    <xsl:element name="xsl:template">
73        <xsl:attribute name="match">/</xsl:attribute>
74        <xsl:element name="svg">
75        <xsl:namespace name="">http://www.w3.org/2000/svg</xsl:namespace>
76        <xsl:attribute name="width">{$width}</xsl:attribute>
77        <xsl:attribute name="height">{$height}</xsl:attribute>
78            <xsl:element name="g">
79                <xsl:attribute name="transform">scale({format-number($scaleX,"#.#################")},{format-number(-1 * $scaleY,"#.#################")}) translate({format-number(-1*$x1,"######.000000")},{format-number(-1*$y2,"######.000000")})</xsl:attribute>
80                <xsl:variable name="style-string">
81                    <xsl:for-each select="sld:FeatureTypeStyle/sld:Rule//sld:Fill/sld:CssParameter">
82                        <xsl:value-of select="concat(@name,':',ogc:Literal/text(),';')"/>
83                    </xsl:for-each>
84                    <xsl:for-each select="sld:FeatureTypeStyle/sld:Rule//sld:Stroke/sld:CssParameter">
85                        <xsl:choose>
86                            <xsl:when test="@name='stroke-width'">
87                                <xsl:value-of select="concat(@name,':','{',ogc:Literal/text(),' div $scaleX}',';')"/>
88                            </xsl:when>
89                            <xsl:otherwise>
90                                <xsl:value-of select="concat(@name,':',ogc:Literal/text(),';')"/>   
91                            </xsl:otherwise>
92                        </xsl:choose>
93                    </xsl:for-each>                   
94                </xsl:variable>
95                <xsl:attribute name="style" select="$style-string"/>
96                <xsl:element name="xsl:apply-templates">
97                    <xsl:attribute name="select" select="concat('//',$feartureTypeName,'/',$geometryPropertyName)"/>
98                </xsl:element>
99            </xsl:element>
100        </xsl:element>
101    </xsl:element>
102    <xsl:comment>Layer  ==================================================================</xsl:comment>
103    <xsl:text>
104    </xsl:text>
105                <xsl:element name="xsl:template">
106                    <xsl:attribute name="match" select="concat($feartureTypeName,'/',$geometryPropertyName)"/>
107                            <xsl:element name="xsl:call-template">
108                                <xsl:choose>
109                                    <xsl:when
110                                        test="sld:FeatureTypeStyle/sld:Rule/sld:PolygonSymbolizer">
111                                        <xsl:attribute name="name">Polygon</xsl:attribute>
112                                    </xsl:when>
113                                    <xsl:when
114                                        test="sld:FeatureTypeStyle/sld:Rule/sld:LineSymbolizer">
115                                        <xsl:attribute name="name">Line</xsl:attribute>
116                                    </xsl:when>
117                                    <xsl:when
118                                        test="sld:FeatureTypeStyle/sld:Rule/sld:PointSymbolizer">
119                                        <xsl:attribute name="name">Point</xsl:attribute>
120                                    </xsl:when>
121                                </xsl:choose>
122                            </xsl:element>
123                </xsl:element>
124    <xsl:comment>Polygon ==================================================================</xsl:comment>
125    <xsl:text>
126    </xsl:text>
127                <xsl:element name="xsl:template">
128                    <xsl:attribute name="name">Polygon</xsl:attribute>
129                    <xsl:element name="xsl:variable">
130                        <xsl:attribute name="name">id</xsl:attribute>
131                        <xsl:attribute name="select">../@gml:id</xsl:attribute>
132                    </xsl:element>
133                    <xsl:element name="xsl:variable">
134                        <xsl:attribute name="name">d</xsl:attribute>
135                        <xsl:element name="xsl:choose">
136                            <xsl:element name="xsl:when">
137                                <xsl:attribute name="test">.//gml:posList</xsl:attribute>
138                                <xsl:element name="xsl:apply-templates">
139                                    <xsl:attribute name="mode">Path</xsl:attribute>
140                                    <xsl:attribute name="select">.//gml:posList</xsl:attribute>
141                                </xsl:element>
142                            </xsl:element>
143                            <xsl:element name="xsl:otherwise">
144                                <xsl:element name="xsl:apply-templates">
145                                    <xsl:attribute name="mode">Path</xsl:attribute>
146                                    <xsl:attribute name="select">.//gml:coordinates</xsl:attribute>
147                                </xsl:element>
148                            </xsl:element>
149                        </xsl:element>
150                    </xsl:element>
151                    <xsl:element name="path" namespace="http://www.w3.org/2000/svg">
152                        <xsl:attribute name="id">{$id}</xsl:attribute>
153                        <xsl:attribute name="d">{$d}</xsl:attribute>
154                        <xsl:attribute name="onmouseover">showTooltip(evt)</xsl:attribute>
155                        <xsl:attribute name="onmouseout">hideTooltip(evt)</xsl:attribute>
156                    </xsl:element>
157                </xsl:element>
158    <xsl:comment>Line ==================================================================</xsl:comment>
159    <xsl:text>
160    </xsl:text>
161                <xsl:element name="xsl:template">
162                    <xsl:attribute name="name">Line</xsl:attribute>
163                    <xsl:element name="xsl:variable">
164                        <xsl:attribute name="name">id</xsl:attribute>
165                        <xsl:attribute name="select">../@gml:id</xsl:attribute>
166                    </xsl:element>
167                    <xsl:element name="xsl:variable">
168                        <xsl:attribute name="name">d</xsl:attribute>
169                        <xsl:element name="xsl:choose">
170                            <xsl:element name="xsl:when">
171                                <xsl:attribute name="test">.//gml:posList</xsl:attribute>
172                                <xsl:element name="xsl:apply-templates">
173                                    <xsl:attribute name="mode">Path</xsl:attribute>
174                                    <xsl:attribute name="select">.//gml:posList</xsl:attribute>
175                                </xsl:element>
176                            </xsl:element>
177                            <xsl:element name="xsl:otherwise">
178                                <xsl:element name="xsl:apply-templates">
179                                    <xsl:attribute name="mode">Path</xsl:attribute>
180                                    <xsl:attribute name="select">.//gml:coordinates</xsl:attribute>
181                                </xsl:element>
182                            </xsl:element>
183                        </xsl:element>
184                    </xsl:element>
185                    <xsl:element name="path" namespace="http://www.w3.org/2000/svg">
186                        <xsl:attribute name="id">{$id}</xsl:attribute>
187                        <xsl:attribute name="d">{$d}</xsl:attribute>
188                        <xsl:attribute name="onmouseover">showTooltip(evt)</xsl:attribute>
189                        <xsl:attribute name="onmouseout">hideTooltip(evt)</xsl:attribute>
190                    </xsl:element>
191                </xsl:element>
192    <xsl:comment>Point ==================================================================</xsl:comment>
193    <xsl:text>
194    </xsl:text>
195                <xsl:element name="xsl:template">
196                    <xsl:attribute name="name">Point</xsl:attribute>
197                    <xsl:comment>TODO - Implement Optimized Point geometry types.</xsl:comment>
198                </xsl:element>
199    <xsl:comment>Variable Definitions ==================================================================</xsl:comment>
200    <xsl:text>
201    </xsl:text>
202                <xsl:element name="xsl:variable">
203                    <xsl:attribute name="name">boundingBox</xsl:attribute>
204                    <xsl:element name="xsl:value-of">
205                        <xsl:attribute name="select">string($bbox)</xsl:attribute>
206                    </xsl:element>
207                </xsl:element>
208    <xsl:comment>==================================================================</xsl:comment>
209    <xsl:text>
210    </xsl:text>
211                <xsl:element name="xsl:variable">
212                    <xsl:attribute name="name">scaleX</xsl:attribute>
213                    <xsl:element name="xsl:value-of">
214                        <xsl:attribute name="select">$width div ($x2 - $x1)</xsl:attribute>
215                    </xsl:element>
216                </xsl:element>
217    <xsl:comment>==================================================================</xsl:comment>
218    <xsl:text>
219    </xsl:text>
220                <xsl:element name="xsl:variable">
221                    <xsl:attribute name="name">scaleY</xsl:attribute>
222                    <xsl:element name="xsl:value-of">
223                        <xsl:attribute name="select">$height div ($y2 - $y1)</xsl:attribute>
224                    </xsl:element>
225                </xsl:element>
226    <xsl:comment>==================================================================</xsl:comment>
227    <xsl:text>
228    </xsl:text>
229                <xsl:element name="xsl:template">
230                    <xsl:attribute name="match">gml:coordinates</xsl:attribute>
231                    <xsl:attribute name="mode">Path</xsl:attribute>
232                    <xsl:element name="xsl:variable">
233                        <xsl:attribute name="name">svg-path</xsl:attribute>
234                    </xsl:element>
235                    <xsl:element name="xsl:variable">
236                        <xsl:attribute name="name">svg-prefix</xsl:attribute>
237                        <xsl:attribute name="select">substring-before(string(text()),' ')</xsl:attribute>
238                    </xsl:element>
239                    <xsl:element name="xsl:variable">
240                        <xsl:attribute name="name">svg-suffix</xsl:attribute>
241                        <xsl:attribute name="select">substring-after(string(text()),' ')</xsl:attribute>
242                    </xsl:element>
243                    <xsl:element name="xsl:choose">
244                        <xsl:element name="xsl:when">
245                            <xsl:attribute name="test">string-length($svg-suffix) &gt; 0</xsl:attribute>
246                            <xsl:element name="xsl:value-of">
247                                <xsl:attribute name="select">concat('M',$svg-prefix,' L',$svg-suffix)</xsl:attribute>
248                            </xsl:element>
249                        </xsl:element>
250                        <xsl:element name="xsl:otherwise">
251                            <xsl:element name="xsl:value-of">
252                                <xsl:attribute name="select">''</xsl:attribute>
253                            </xsl:element>
254                        </xsl:element>
255                    </xsl:element>
256                </xsl:element>
257            </xsl:element>
258            </xsl:result-document>
259        </xsl:for-each>
260    </xsl:template>
261</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.