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

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

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

File size: 20.0 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3    Description: Java 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/sld2optxslt.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
57    <xsl:comment>Root Node  ==================================================================</xsl:comment>
58    <xsl:text>
59    </xsl:text>
60    <xsl:element name="xsl:template">
61        <xsl:attribute name="match">/</xsl:attribute>
62        <xsl:element name="svg">
63        <xsl:namespace name="">http://www.w3.org/2000/svg</xsl:namespace>
64        <xsl:attribute name="width">{$width}</xsl:attribute>
65        <xsl:attribute name="height">{$height}</xsl:attribute>
66            <xsl:element name="g">
67                <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>
68                <xsl:variable name="style-string">
69                    <xsl:for-each select="sld:FeatureTypeStyle/sld:Rule//sld:Fill/sld:CssParameter">
70                        <xsl:value-of select="concat(@name,':',ogc:Literal/text(),';')"/>
71                    </xsl:for-each>
72                    <xsl:for-each select="sld:FeatureTypeStyle/sld:Rule//sld:Stroke/sld:CssParameter">
73                        <xsl:choose>
74                            <xsl:when test="@name='stroke-width'">
75                                <xsl:value-of select="concat(@name,':','{',ogc:Literal/text(),' div $scaleX}',';')"/>
76                            </xsl:when>
77                            <xsl:otherwise>
78                                <xsl:value-of select="concat(@name,':',ogc:Literal/text(),';')"/>   
79                            </xsl:otherwise>
80                        </xsl:choose>
81                    </xsl:for-each>                   
82                </xsl:variable>
83                <xsl:attribute name="style" select="$style-string"/>
84                <xsl:element name="xsl:apply-templates">
85                    <xsl:attribute name="select" select="concat('//',$feartureTypeName,'/',$geometryPropertyName)"/>
86                </xsl:element>
87            </xsl:element>
88        </xsl:element>
89    </xsl:element>
90    <xsl:comment>Layer  ==================================================================</xsl:comment>
91    <xsl:text>
92    </xsl:text>
93                <xsl:element name="xsl:template">
94                    <xsl:attribute name="match" select="concat($feartureTypeName,'/',$geometryPropertyName)"/>
95                            <xsl:element name="xsl:call-template">
96                                <xsl:choose>
97                                    <xsl:when
98                                        test="sld:FeatureTypeStyle/sld:Rule/sld:PolygonSymbolizer">
99                                        <xsl:attribute name="name">Polygon</xsl:attribute>
100                                    </xsl:when>
101                                    <xsl:when
102                                        test="sld:FeatureTypeStyle/sld:Rule/sld:LineSymbolizer">
103                                        <xsl:attribute name="name">Line</xsl:attribute>
104                                    </xsl:when>
105                                    <xsl:when
106                                        test="sld:FeatureTypeStyle/sld:Rule/sld:PointSymbolizer">
107                                        <xsl:attribute name="name">Point</xsl:attribute>
108                                    </xsl:when>
109                                </xsl:choose>
110                            </xsl:element>
111                </xsl:element>
112    <xsl:comment>Polygon ==================================================================</xsl:comment>
113    <xsl:text>
114    </xsl:text>
115                <xsl:element name="xsl:template">
116                    <xsl:attribute name="name">Polygon</xsl:attribute>
117                    <xsl:element name="xsl:variable">
118                        <xsl:attribute name="name">id</xsl:attribute>
119                        <xsl:attribute name="select">../@gml:id</xsl:attribute>
120                    </xsl:element>
121                    <xsl:element name="xsl:variable">
122                        <xsl:attribute name="name">d</xsl:attribute>
123                        <xsl:element name="xsl:choose">
124                            <xsl:element name="xsl:when">
125                                <xsl:attribute name="test">.//gml:posList</xsl:attribute>
126                                <xsl:element name="xsl:apply-templates">
127                                    <xsl:attribute name="mode">Path</xsl:attribute>
128                                    <xsl:attribute name="select">.//gml:posList</xsl:attribute>
129                                </xsl:element>
130                            </xsl:element>
131                            <xsl:element name="xsl:otherwise">
132                                <xsl:element name="xsl:apply-templates">
133                                    <xsl:attribute name="mode">Path</xsl:attribute>
134                                    <xsl:attribute name="select">.//gml:coordinates</xsl:attribute>
135                                </xsl:element>
136                            </xsl:element>
137                        </xsl:element>
138                    </xsl:element>
139                    <xsl:element name="path" namespace="http://www.w3.org/2000/svg">
140                        <xsl:attribute name="id">{$id}</xsl:attribute>
141                        <xsl:attribute name="d">{$d}</xsl:attribute>
142                        <xsl:attribute name="onmouseover">showTooltip(evt)</xsl:attribute>
143                        <xsl:attribute name="onmouseout">hideTooltip(evt)</xsl:attribute>
144                    </xsl:element>
145                </xsl:element>
146    <xsl:comment>Line ==================================================================</xsl:comment>
147    <xsl:text>
148    </xsl:text>
149                <xsl:element name="xsl:template">
150                    <xsl:attribute name="name">Line</xsl:attribute>
151                    <xsl:element name="xsl:variable">
152                        <xsl:attribute name="name">id</xsl:attribute>
153                        <xsl:attribute name="select">../@gml:id</xsl:attribute>
154                    </xsl:element>
155                    <xsl:element name="xsl:variable">
156                        <xsl:attribute name="name">d</xsl:attribute>
157                        <xsl:element name="xsl:choose">
158                            <xsl:element name="xsl:when">
159                                <xsl:attribute name="test">.//gml:posList</xsl:attribute>
160                                <xsl:element name="xsl:apply-templates">
161                                    <xsl:attribute name="mode">Path</xsl:attribute>
162                                    <xsl:attribute name="select">.//gml:posList</xsl:attribute>
163                                </xsl:element>
164                            </xsl:element>
165                            <xsl:element name="xsl:otherwise">
166                                <xsl:element name="xsl:apply-templates">
167                                    <xsl:attribute name="mode">Path</xsl:attribute>
168                                    <xsl:attribute name="select">.//gml:coordinates</xsl:attribute>
169                                </xsl:element>
170                            </xsl:element>
171                        </xsl:element>
172                    </xsl:element>
173                    <xsl:element name="path" namespace="http://www.w3.org/2000/svg">
174                        <xsl:attribute name="id">{$id}</xsl:attribute>
175                        <xsl:attribute name="d">{$d}</xsl:attribute>
176                        <xsl:attribute name="onmouseover">showTooltip(evt)</xsl:attribute>
177                        <xsl:attribute name="onmouseout">hideTooltip(evt)</xsl:attribute>
178                    </xsl:element>
179                </xsl:element>
180    <xsl:comment>Point ==================================================================</xsl:comment>
181    <xsl:text>
182    </xsl:text>
183                <xsl:element name="xsl:template">
184                    <xsl:attribute name="name">Point</xsl:attribute>
185                    <xsl:comment>TODO - Implement Optimized Point geometry types.</xsl:comment>
186                </xsl:element>
187    <xsl:comment>Variable Definitions ==================================================================</xsl:comment>
188    <xsl:text>
189    </xsl:text>
190                <xsl:element name="xsl:variable">
191                    <xsl:attribute name="name">boundingBox</xsl:attribute>
192                    <xsl:element name="xsl:value-of">
193                        <xsl:attribute name="select">string($bbox)</xsl:attribute>
194                    </xsl:element>
195                </xsl:element>
196    <xsl:comment>==================================================================</xsl:comment>
197    <xsl:text>
198    </xsl:text>
199                <xsl:element name="xsl:variable">
200                    <xsl:attribute name="name">sumY</xsl:attribute>
201                    <xsl:element name="xsl:value-of">
202                        <xsl:attribute name="select">Extfun:getSumY(string($boundingBox), string(@decimal), string(@cs), string(@ts))</xsl:attribute>
203                    </xsl:element>
204                </xsl:element>
205    <xsl:comment>==================================================================</xsl:comment>
206    <xsl:text>
207    </xsl:text>
208                <xsl:element name="xsl:variable">
209                    <xsl:attribute name="name">scaleX</xsl:attribute>
210                    <xsl:element name="xsl:value-of">
211                        <xsl:attribute name="select">Extfun:getScaleX(string($width), string($boundingBox), string(@decimal), string(@cs), string(@ts))</xsl:attribute>
212                    </xsl:element>
213                </xsl:element>
214    <xsl:comment>==================================================================</xsl:comment>
215    <xsl:text>
216    </xsl:text>
217                <xsl:element name="xsl:variable">
218                    <xsl:attribute name="name">scaleY</xsl:attribute>
219                    <xsl:element name="xsl:value-of">
220                        <xsl:attribute name="select">Extfun:getScaleY(string($width), string($boundingBox), string(@decimal), string(@cs), string(@ts))</xsl:attribute>
221                    </xsl:element>
222                </xsl:element>
223    <xsl:comment>==================================================================</xsl:comment>
224    <xsl:text>
225    </xsl:text>
226                <xsl:element name="xsl:variable">
227                    <xsl:attribute name="name">x1</xsl:attribute>
228                    <xsl:element name="xsl:value-of">
229                        <xsl:attribute name="select">Extfun:getX1(string($boundingBox), string(@decimal), string(@cs), string(@ts))</xsl:attribute>
230                    </xsl:element>
231                </xsl:element>
232    <xsl:comment>==================================================================</xsl:comment>
233    <xsl:text>
234    </xsl:text>
235                <xsl:element name="xsl:variable">
236                    <xsl:attribute name="name">y1</xsl:attribute>
237                    <xsl:element name="xsl:value-of">
238                        <xsl:attribute name="select">Extfun:getY1(string($boundingBox), string(@decimal), string(@cs), string(@ts))</xsl:attribute>
239                    </xsl:element>
240                </xsl:element>
241    <xsl:comment>==================================================================</xsl:comment>
242    <xsl:text>
243    </xsl:text>
244                <xsl:element name="xsl:variable">
245                    <xsl:attribute name="name">y2</xsl:attribute>
246                    <xsl:element name="xsl:value-of">
247                        <xsl:attribute name="select">Extfun:getY2(string($boundingBox), string(@decimal), string(@cs),  string(@ts))</xsl:attribute>
248                    </xsl:element>
249                </xsl:element>
250    <xsl:comment>==================================================================</xsl:comment>
251    <xsl:text>
252    </xsl:text>
253                <xsl:element name="xsl:template">
254                    <xsl:attribute name="match">gml:pos</xsl:attribute>
255                    <xsl:attribute name="mode">PointX</xsl:attribute>
256                    <xsl:element name="xsl:value-of">
257                        <xsl:attribute name="select"
258                            >Extfun:getPointX(string($scaleX), string($x1), string(text()), string(@decimal), ' ')</xsl:attribute>
259                    </xsl:element>
260                </xsl:element>
261    <xsl:comment>==================================================================</xsl:comment>
262    <xsl:text>
263    </xsl:text>
264                <xsl:element name="xsl:template">
265                    <xsl:attribute name="match">gml:pos</xsl:attribute>
266                    <xsl:attribute name="mode">PointY</xsl:attribute>
267                    <xsl:element name="xsl:value-of">
268                        <xsl:attribute name="select">Extfun:getPointY(string($sumY), string($scaleY), string($y1), string(text()), string(@decimal), ' ')</xsl:attribute>
269                    </xsl:element>
270                </xsl:element>
271    <xsl:comment>==================================================================</xsl:comment>
272    <xsl:text>
273    </xsl:text>
274                <xsl:element name="xsl:template">
275                    <xsl:attribute name="match">gml:posList</xsl:attribute>
276                    <xsl:attribute name="mode">Path</xsl:attribute>
277                    <xsl:comment>TODO</xsl:comment>
278                </xsl:element>
279    <xsl:comment>==================================================================</xsl:comment>
280    <xsl:text>
281    </xsl:text>
282                <xsl:element name="xsl:template">
283                    <xsl:attribute name="match">gml:coordinates</xsl:attribute>
284                    <xsl:attribute name="mode">PointX</xsl:attribute>
285                    <xsl:element name="xsl:value-of">
286                        <xsl:attribute name="select">Extfun:getPointX(string($scaleX), string($x1), string(text()), string(@decimal), string(@cs))</xsl:attribute>
287                    </xsl:element>
288                </xsl:element>
289    <xsl:comment>==================================================================</xsl:comment>
290    <xsl:text>
291    </xsl:text>
292                <xsl:element name="xsl:template">
293                    <xsl:attribute name="match">gml:coordinates</xsl:attribute>
294                    <xsl:attribute name="mode">PointY</xsl:attribute>
295                    <xsl:element name="xsl:value-of">
296                        <xsl:attribute name="select">Extfun:getPointY(string($sumY), string($scaleY), string($y1), string(text()), string(@decimal), string(@cs))</xsl:attribute>
297                    </xsl:element>
298                </xsl:element>
299    <xsl:comment>==================================================================</xsl:comment>
300    <xsl:text>
301    </xsl:text>
302                <xsl:element name="xsl:template">
303                    <xsl:attribute name="match">gml:coordinates</xsl:attribute>
304                    <xsl:attribute name="mode">Path</xsl:attribute>
305                    <xsl:element name="xsl:variable">
306                        <xsl:attribute name="name">svg-path</xsl:attribute>
307                    </xsl:element>
308                    <xsl:element name="xsl:variable">
309                        <xsl:attribute name="name">svg-prefix</xsl:attribute>
310                        <xsl:attribute name="select">substring-before(string(text()),' ')</xsl:attribute>
311                    </xsl:element>
312                    <xsl:element name="xsl:variable">
313                        <xsl:attribute name="name">svg-suffix</xsl:attribute>
314                        <xsl:attribute name="select">substring-after(string(text()),' ')</xsl:attribute>
315                    </xsl:element>
316                    <xsl:element name="xsl:choose">
317                        <xsl:element name="xsl:when">
318                            <xsl:attribute name="test">string-length($svg-suffix) &gt; 0</xsl:attribute>
319                            <xsl:element name="xsl:value-of">
320                                <xsl:attribute name="select">concat('M',$svg-prefix,' L',$svg-suffix)</xsl:attribute>
321                            </xsl:element>
322                        </xsl:element>
323                        <xsl:element name="xsl:otherwise">
324                            <xsl:element name="xsl:value-of">
325                                <xsl:attribute name="select">''</xsl:attribute>
326                            </xsl:element>
327                        </xsl:element>
328                    </xsl:element>
329                </xsl:element>
330            </xsl:element>
331            </xsl:result-document>
332        </xsl:for-each>
333    </xsl:template>
334</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.