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

Reply via email to