Kralidis,Tom [Ontario] wrote:
-----Original Message-----
From: discuss-boun...@lists.osgeo.org
[mailto:discuss-boun...@lists.osgeo.org] On Behalf Of "René
A. Enguehard"
Sent: Wednesday, 10 June 2009 13:59
To: discuss@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>
This worked perfectly. Thanks.
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?
I'm designing with GML 3.x in mind, but it doesn't make much difference
since all I'm really using is gml:Point and gml:pos, which have been
available for a long time.
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>
I've tried the above but it causes two problems: substitutionGroup on
xs:element is apparently not valid (or at least that's the exception
that SAX throws at me) and gml:AbstractFeatureType doesn't resolve
anyway. Is there something wrong with how I did my xmlns:gml or my
import? I have never worked with XSDs before so I really don't know very
much about this issue.
You might want to consult the OGC Public Forum
(http://feature.opengeospatial.org/forumbb/) as well.
..Tom
_______________________________________________
Discuss mailing list
Discuss@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/discuss
Thanks a lot for your help! I'll keep working at it and post any results
I get on here.
René
_______________________________________________
Discuss mailing list
Discuss@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/discuss