[OSGeo-Discuss] XML to GML XSLT
Kralidis,Tom [Ontario]
Tom.Kralidis at ec.gc.ca
Wed Jun 10 11:30:12 PDT 2009
> -----Original Message-----
> From: discuss-bounces at lists.osgeo.org
> [mailto:discuss-bounces at lists.osgeo.org] On Behalf Of "René
> A. Enguehard"
> Sent: Wednesday, 10 June 2009 13:59
> To: discuss at lists.osgeo.org
> Subject: [OSGeo-Discuss] XML to GML XSLT
>
> Hi all,
>
> I've been working on getting an XML document to transform
> into a GML document. Currently I'm running into two issues:
>
> 1. How do we define the XSD rules for a string node with an
> attribute?
> ie: <point dimension="2">12.12, 34.34</point>
> Currently all I have found relates to simple text nodes
> or simple attribute nodes, but not mixed ones.
>
You could declare something like:
<xs:element name="foo" type="fooType">
<xs:complexType name="fooType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="age"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
..which would look like this when instantiated:
<foo age="123">bar</foo>
> 2. How do we get XSD to "play nice" with the gml: prefix? I
> want to use gml:Point and gml:pos but the XSD file doesn't validate.
>
> Some sample XML:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <user xmlns:gml="http://www.opengis.net/gml">
> <name>test</name>
> <gml:Point>
> <gml:pos dimension="2">-97.7452090, 30.2687350</gml:pos>
> </gml:Point>
> </user>
>
> The XSD file for the code (so far):
>
> <?xml version="1.0" encoding="utf-8"?>
> <xsd:schema
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:gml="http://www.opengis.net/gml">
> <xsd:import namespace="http://www.opengis.net/gml"/>
> <xsd:element name="user" type="userType" />
>
> <xsd:complexType name="userType">
> <xsd:sequence>
> <xsd:element name="name" type="xsd:string" />
> <xsd:element name="gml:Point" type="gml:Point" />
> <---- ???
> </xsd:sequence>
> </xsd:complexType>
>
What version of GML are you designing against?
Have you considered doing your .xsd as a GML application schema, where you would extend as follows:
<xs:element name="Meeting" substitutionGroup="gml:_Feature">
<xs:complexType>
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureType">
<xs:sequence>
<xs:element name="year" type="xs:integer"/>
<xs:element name="venue" type="xs:string"/>
<xs:element name="website" type="xs:anyURI"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
By extending gml:AbstractFeatureType, you inherit gml:location (among other things), from which you can express various geometry types. So the above would then instantiate as:
<Meeting>
<gml:description>This was where the first meeting was held</gml:description>
<gml:name>St. Paul</gml:name>
<gml:location>
<gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:coord>
<gml:pos-93.093055556 44.944444444</gml:pos>
</gml:coord>
</gml:Point>
</gml:location>
<year>2003</year>
<venue>University of Minnesota, St. Paul Campus</venue>
<website>http://www.mapserver.org</website>
</Meeting>
You might want to consult the OGC Public Forum (http://feature.opengeospatial.org/forumbb/) as well.
..Tom
More information about the Discuss
mailing list