[mapserver-users] [TinyOWS] Inserting feature and XML schema validation

Тимур Галиаскарович Суфиев t.sufiev at acti.ru
Wed Nov 7 08:13:10 PST 2012


Hi!

This isn't the first question here about inserting features in TinyOWS, but I haven't found solution to my problem in archives.

The working environment is OpenLayers 2.13dev + TinyOWS from github + PostGIS 2.0 + PostgreSQL 9.2

Relevant js-code is:

    var POINT = 1;
    var save_objs_strategy = new OpenLayers.Strategy.Save(
    { "saves_what": "cities" });
    var cities = new OpenLayers.Layer.Vector(
    'Города', {
        strategies: [new OpenLayers.Strategy.BBOX(), 
             save_objs_strategy],
        protocol: new OpenLayers.Protocol.WFS(
        {
            version: "1.1.0",
            url: "http://localhost/mapserver/tinyows",
            featureType: "cities",
            featureNS: "http://www.tinyows.org",
            geometryName: "geom",
            outputFormat: "JSON",
            schema: "http://localhost/mapserver/tinyows?service=wfs&request=DescribeFeatureType&version=1.1.0&typename=tows:cities"
        })
    }
    );

    var draw = new OpenLayers.Control.DrawFeature(
    cities, OpenLayers.Handler.Point,
    {
            title: "Создание объектов",
            displayClass: "olControlDrawFeaturePoint"
    }
    );
    draw.events.on(
    {
        "featureadded": function(e) {
        var attrs = e.feature.attributes;
        attrs.pop_hk = 99;
        attrs.city_name = "Новый город";
        attrs.type_id = POINT;
        save_objs_strategy.save();
        }
    });

Adding a vector point feature (city) somewhere on the map creates the following XML request to tinyows:



<wfs:Transaction xmlns:wfs="http://www.opengis.net/wfs" service="WFS" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs   http://schemas.opengis.net/wfs/1.1.0/wfs.xsd http://www.tinyows.org   http://localhost/mapserver/tinyows?service=wfs&request=DescribeFeatureType&version=1.1.0&typename=tows:cities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


<wfs:Insert>


<feature:cities xmlns:feature="http://www.tinyows.org">


<feature:geom>


<gml:Point xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">


<gml:pos>37.962548828124 55.22265625</gml:pos>
</gml:Point>
</feature:geom>

<feature:pop_hk>99</feature:pop_hk>

<feature:city_name>Новый город</feature:city_name>

<feature:type_id>1</feature:type_id>
</feature:cities>
</wfs:Insert>
</wfs:Transaction>
The request fails with the following string in tinyows.log:

[Wed Nov  7 19:55:01 2012] [ERROR] Element '{http://www.tinyows.org}cities': This element is not expected. Expected is one of ( {http://www.opengis.net/gml}_Feature, {http://www.opengis.net/gml}FeatureCollection, {http://www.opengis.net/gml}MultiPointCoverage, {http://www.opengis.net/gml}MultiCurveCoverage, {http://www.opengis.net/gml}MultiSurfaceCoverage, {http://www.opengis.net/gml}MultiSolidCoverage, {http://www.opengis.net/gml}GridCoverage, {http://www.opengis.net/gml}RectifiedGridCoverage, {http://www.opengis.net/gml}Observation, {http://www.opengis.net/gml}DirectedObservation ).

This seems a little bit cryptic to me because the "schema" parameter in js-code (http://localhost/mapserver/tinyows?service=wfs&request=DescribeFeatureType&version=1.1.0&typename=tows:cities) returns the following xsd:

<xs:schema targetNamespace="http://www.tinyows.org/" elementFormDefault="qualified" version="1.1"><xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/><xs:element name="cities" type="tows:citiesType" substitutionGroup="gml:_Feature"/><xs:complexType name="citiesType"><xs:complexContent><xs:extension base="gml:AbstractFeatureType"><xs:sequence><xs:element name="pop_hk" type="int" nillable="true" minOccurs="0" maxOccurs="1"/><xs:element name="city_name" nillable="false" minOccurs="1" maxOccurs="1"><xs:simpleType><xs:restriction base="string"><xs:maxLength value="100"/></xs:restriction></xs:simpleType></xs:element><xs:element name="geom" type="gml:PointPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/><xs:element name="type_id" type="int" nillable="true" minOccurs="0" maxOccurs="1"/></xs:sequence></xs:extension></xs:complexContent></xs:complexType></xs:schema>

and this xsd should make tinyows use element '{http://www.tinyows.org}cities' like '{http://www.opengis.net/gml}_Feature'

Where am I wrong and what should be changed in my setup?

Best regards,
Timur Sufiev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20121107/92bf9ddc/attachment.html>


More information about the mapserver-users mailing list