[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] GML to svg


Subject: RE: [xsl] GML to svg
From: "Xia Li" <xli@xxxxxxxxxxxxx>
Date: Fri, 21 May 2004 17:08:59 -0700

Hi,

	I suggest you do the transformation by the following steps.

	1. create variable "viewBoxValue" to hold the value for "viewBox" attribute
of svg
		<xsl:variable name="viewBoxValue">
			<xsl:value-of select="getBox(*/gml:boundedBy/gml:Box/gml:coordinates)"/>
		</xsl:variable>

	2. create main template such as follows,

	<xsl:template match="/">
		<xsl:element name="svg">
			<xsl:attribute name="viewBox">
				<xsl:value-of select="$viewBoxValue"/>
			</xsl:attribute>
			<!-- apply template to each GML geometry property -->
			<xsl:apply-templates select="//pre1:cityMember/gml:centerLineOf" />
		</xsl:element>
	</xsl:template>

	3. create a template that transforms the GML centerLineOf property to SVG
path element.

		<xsl:template match="pre1:cityMember/gml:centerLineOf">
			<xsl:element name="path">
				<xsl:attribute
name="style">stroke-width:fill:none;stroke:rgb(69,34,118);</xsl:attribute>

				<xsl:attribute name='d'>
					<xsl:value-of select="convertCoordToPathCoord(./gml:coordinates)" />
				</xsl:attribute>
			</xsl:element>
		</xsl:template>

		The function convertToPathCoord(./gml:coordinates) converts the GML
coordiates contained in the gml:coordinates element into SVG path
coordinates, for example, given the GML coordinates "0 50,70 60,100 50", it
should return "M0,50 L70,60 L100, 50"

		You can implement this function and getBox() with Java or use XSLT 2.0
tokeniz function.

		Pleas also note you should declare the related namespaces in XSLT root
element as follows,

		<xsl:transform xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
			xmlns:xlink='http://www.w3.org/1999/xlink'
			xmlns:pre1='http://www.opengis.net/examples'
			xmlns:gml='http://www.opengis.net/gml'>


		Hope this helps.

		Lisa


-----Original Message-----
From: sarra hamdi [mailto:hacker249@xxxxxxxxx]
Sent: Friday, May 21, 2004 8:36 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] GML to svg



Hello,
I have a valid GML file descriped follow, it was validated by xmlspy. I want
to transform it to SVG format using xslt but I m newbie in xsl language.
follow the xsl file that I writed but it cant give me a the same result
described in the output svg file.
from this can any one see this files to help me to write the xslt file
correspind to my gml file to give me the same result of the svg file
described in follow.
thanks advanced.

------------------------------------------------
the gml file
------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<!-- File: cambridge.xml -->
<CityModel xmlns="http://www.opengis.net/examples"
          xmlns:gml="http://www.opengis.net/gml"
          xmlns:xlink="http://www.w3.org/1999/xlink"
           xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
          xsi:schemaLocation="http://www.opengis.net/examples
/u/pkg/gml4j/test/schemas/City.xsd">

  <gml:name>Cambridge</gml:name>
  <gml:boundedBy>
    <gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
      <gml:coordinates>0.0 0.0,100.0 100.0</gml:coordinates>
    </gml:Box>
  </gml:boundedBy>

<cityMember>
    <River>
      <gml:description>The river that runs through
Cambridge.</gml:description>
     <gml:name>Cam</gml:name>
      <gml:centerLineOf>
        <gml:LineString
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
         <gml:coordinates>0 50,70 60,100 50</gml:coordinates>
        </gml:LineString>
      </gml:centerLineOf>
    </River>
  </cityMember>

  <cityMember>
    <Road>
      <gml:name>M11</gml:name>
       <linearGeometry>
          <gml:LineString
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
           <gml:coordinates>0 5.0,20.6 10.7,80.5 60.9</gml:coordinates>
          </gml:LineString>
        </linearGeometry>
      <classification>motorway</classification>
      <number>11</number>
    </Road>
  </cityMember>

  <cityMember xlink:type="simple" xlink:title="Trinity Lane"
    xlink:href="http://www.foo.net/cgi-bin/wfs?FeatureID=C10239"
    gml:remoteSchema="city.xsd#xpointer(//complexType[@name='RoadType'])"/>
  <cityMember>
    <Mountain>
      <gml:description>World's highest mountain is in
Nepal!</gml:description>
      <gml:name>Everest</gml:name>
      <elevation>8850</elevation>
    </Mountain>
  </cityMember>
  <dateCreated>2000-11</dateCreated>
</CityModel>


------------------------------------------------
the xsl file
------------------------------------------------<?xml version="1.0"?>
<!DOCTYPE xsl:stylesheet SYSTEM "C:\Documents and
Settings\ines\Bureau\exemple3\Untitled2.dtd">
><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://www.w3.org/TR/xlink"
xmlns:gml="http://www.opengis.net/gml"
xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
xmlns:mur="murmur" extension-element-prefixes="mur">
	<xsl:output method="xml"
doctype-system="D:\mesrecherchesmastere\svg\DTD\svg10.dtd"
doctype-public="-//W3C//DTD SVG 20000303 Stylable//EN"/>
	<xsl:variable name="boxCoord" select="//gml:Box/gml:coordinates/."/>
	     <xsl:template
match="//gml:centerLineOf/gml:LineString/gml:coordinates">
		<xsl:variable name="clist" select="."/>
		<xsl:variable name="tclist" select="normalize-space($clist)"/>
		<xsl:template match="/">
			<xsl:variable name="boxCoord"></xsl:variable>
			<xsl:template match="/">
		<svg xml:space="preserve" viewBox="{$boxCoord}">
			<xsl:apply-templates/>
		</svg>
	</xsl:template>
	</xsl:template>
	</xsl:template>
</xsl:stylesheet>
--------------------------------------------------
the wanted output svg file
-----------------------------------------------------

><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg SYSTEM "C:\Documents and
Settings\Administrateur\Bureau\Untitled2.dtd">
<svg width="50cm" height="20cm" viewBox="0 0 800 40"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xlink="http://www.w3.org/TR/xlink" xml:space="preserve"
xmlns="http://www.w3.org/2000/svg">

	<g transform="rotate(-100)">
		<g stroke="green">
			<line x1="50" y1="0" x2="60" y2="70" stroke-width="2"/>
			<line x1="60" y1="70" x2="50" y2="100" stroke-width="2"/>
		</g>
		<text x="0" y="0" font-size="10" font-family="Verdana" fill="blue">River
</text>
		<g stroke="red">
			<g transform="rotate(20)">
						</g>
			<line x1="5.0" y1="0.0" x2="10.7" y2="20.6" stroke-width="5"/>
			<line x1="10.7" y1="20.6" x2="60.9" y2="80.5" stroke-width="5"/>
			<line x1="60.9" y1="80.5" x2="100" y2="90" stroke-width="5"/>
		</g>
	</g>
	<text x="0" y="2" font-size="10" font-family="Verdana" fill="blue">
Road
</text>
	<text x="0" y="-70" font-size="10" font-family="Verdana" fill="blue">
River
</text>
	<path style="stroke:$colorc;fill:$remplir" d=""/>
	<path style="stroke:$colorc;fill:$remplir" d=""/>





____________________________________________________________
Find what you are looking for with the Lycos Yellow Pages
http://r.lycos.com/r/yp_emailfooter/http://yellowpages.lycos.com/default.asp
?SRC=lycos10


Current Thread
  • [xsl] GML to svg
    • sarra hamdi - Fri, 21 May 2004 11:36:14 -0400
      • Xia Li - Fri, 21 May 2004 17:08:59 -0700 <=
      • <Possible follow-ups>
      • bry - Fri, 21 May 2004 22:24:14 CET
Keywords