Transaction 请求

发送反馈


请求参数

Transaction 操作支持通过 POST 请求实现添加要素、更新要素、替换要素以及删除要素功能,请求体采用 XML 格式,主要节点要素介绍如下:

表1 Transaction 操作请求体节点元素

请求参数 是否必需 描述
<Transaction>

执行事务请求时的根元素。

一个 Transaction 元素可包含 0 个或多个用于添加、更新、替换、删除要素的 Insert、Update、Replace 或 Delete 元素。当 Transaction 元素中不包含 Insert、Update、Replace 或 Delete 元素时,Transaction 操作无意义。WFS 服务会按照 Transaction 事物请求中,Insert、Update、Replace 和 Delete 元素出现的先后顺序依次对其进行处理。

Transaction 元素还可包含 0 个或多个用于描述供应商特定操作的 Native 元素。

<Insert>

添加新要素操作时必选。

Insert 元素用于向 WFS 服务的数据存储中添加新要素。默认情况下,使用 GML 语言去表达新添加要素的初始状态,并且新添加要素的初始状态应该使用 DescribeFeatureType 操作描述的 GML schema 去验证。一个 Transaction 请求可以包含多个 Insert 元素,每个 Insert 元素可以添加一个要素。

<Update>

更新要素操作时必选。

用 typeName 属性指定需要更新的要素类型。Update 元素可以包含一个或多个 Property 元素,该元素用于指定需要更新的要素的属性(ValueReference 元素)和属性值(Value 元素)。 一个 Transaction 请求可以包含多个 Update 元素,以实现多个相同或不同类型的要素更新。

Update 元素中可以包含一个或多个 Filter 元素,用于指定待更新要素。

<Replace>

替换要素操作时必选。

Replace 操作和 Update 操作不同,Update 操作用于更新要素的个别属性,而 Replace 操作是用指定要素完全替换目标要素,替换后两个要素的属性值一致。

Replace 元素中可以包含一个或多个 Filter 元素,用于指定会被替换的要素。

<Delete>

删除要素操作时必选。

用 typeName 属性指定需要删除的要素类型。

Delete 元素中可以包含一个或多个 Filter 元素,用于指定待删除要素。

<Native>

添加新要素操作时必选。

Native 元素只包含供应商特定的命令或操作,允许访问特殊 WFS 或数据存储的供应商特定能力。

目前 SuperMap iServer 不支持该参数。

请求示例

本示例中对 WFS 服务 data-world/wfs200 进行了4次 Transaction 操作。先添加了两个新要素(为了介绍方便,假定两个要素分别为 A、B),然后更新了 A 要素,接着用更新后的 A 要素替换 B 要素,最后删除了属性值相同的 A 和 B 要素。即对 http://localhost:8090/iserver/services/data-World/wfs200 ,执行 POST 请求,分别传输以下请求体:

  1. 添加要素

执行 POST 请求,在 World:Capitals 图层中创建了 A 和 B 两个要素。A 要素的 CAPITAL 字段值为 testCapital ,COUNTRY 字段值为 testCountry B 要素的 CAPITAL 字段值为 testCapital2 ,COUNTRY 字段值为 testCountry2。 对应请求体如下:

<wfs:Transaction version="2.0.0" service="WFS"

    xmlns="http://www.someserver.example.com/myns" xmlns:wfs="http://www.opengis.net/wfs/2.0"

    xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:gml="http://www.opengis.net/gml/3.2"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.someserver.example.com/myns ./SampleSchema.xsd

                       http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd

                       http://www.opengis.net/gml/3.2

                       http://schemas.opengis.net/gml/3.2.1/gml.xsd">

    <wfs:Insert>

        <World:Capitals xmlns:World="https://www.supermap.com.cn/World">

            <World:CAPITAL>testCapital</World:CAPITAL>

            <World:COUNTRY>testCountry</World:COUNTRY>

            <World:the_geom>

                <gml:Point srsName="EPSG:4326">

                    <gml:coordinates>143.09,35.57</gml:coordinates>

                </gml:Point>

            </World:the_geom>

        </World:Capitals>

    </wfs:Insert>

    <wfs:Insert>

        <World:Capitals xmlns:World="https://www.supermap.com.cn/World">

            <World:CAPITAL>testCapital2</World:CAPITAL>

            <World:COUNTRY>testCountry2</World:COUNTRY>

            <World:the_geom>

                <gml:Point srsName="EPSG:4326">

                    <gml:coordinates>143.09,35.57</gml:coordinates>

                </gml:Point>

            </World:the_geom>

        </World:Capitals>

    </wfs:Insert>

</wfs:Transaction>

添加要素成功后,响应参见:响应示例

  1. 更新要素

执行 POST 请求,将 A 要素的 CAPITAL 字段值改为 otherCapital。对应请求体如下:

<?xml version="1.0" ?>

<wfs:Transaction version="2.0.0" service="WFS"

    xmlns:World="http://www.someserver.example.com/myns" xmlns:fes="http://www.opengis.net/fes/2.0"

    xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">

    <wfs:Update typeName="World:Capitals">

        <wfs:Property>

            <wfs:ValueReference>World/Capitals/CAPITAL</wfs:ValueReference>

            <wfs:Value>otherCapital</wfs:Value>

        </wfs:Property>

        <fes:Filter>

            <fes:PropertyIsEqualTo>

                <fes:ValueReference>World/Capitals/COUNTRY</fes:ValueReference>

                <fes:Literal>testCountry</fes:Literal>

            </fes:PropertyIsEqualTo>

        </fes:Filter>

    </wfs:Update>

</wfs:Transaction>

更新要素成功后,响应参见:响应示例

注:wfs:Transaction 根节点中定义的命名空间应与 typeName 中的值对应,如 命名空间为 xmlns:World="http://www.someserver.example.com/myns",typeName 的值为 World:Capitals。

  1. 替换要素

执行 POST 请求,用更新后的 A 要素替换 B 要素,替换后 A 和 B 两个要素的属性值相同, CAPITAL 字段值为 otherCapital,COUNTRY 字段值为 testCountry。对应请求体如下:

<?xml version="1.0" ?>

<wfs:Transaction

   version="2.0.0"

   service="WFS"

   xmlns:World="http://www.someserver.example.com/myns"

   xmlns:fes="http://www.opengis.net/fes/2.0"

   xmlns:wfs="http://www.opengis.net/wfs/2.0"

   xmlns:gml="http://www.opengis.net/gml/3.2"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">

   <wfs:Replace>

        <World:Capitals xmlns:World="https://www.supermap.com.cn/World">

                <World:CAPITAL>otherCapital</World:CAPITAL>

                <World:COUNTRY>testCountry</World:COUNTRY>

                <World:the_geom>

                    <gml:Point srsName="EPSG:4326">

                        <gml:coordinates>143.0901,35.5701</gml:coordinates>

                    </gml:Point>

                </World:the_geom>       

        </World:Capitals>

        <fes:Filter>

            <fes:PropertyIsEqualTo>

                <fes:ValueReference>World/Capitals/COUNTRY</fes:ValueReference>

                <fes:Literal>testCountry2</fes:Literal>

            </fes:PropertyIsEqualTo>

      </fes:Filter>

    </wfs:Replace>

</wfs:Transaction>

替换要素成功后,响应参见:响应示例

  1. 删除要素

执行 POST 请求,将 World:Capitals 图层中 CAPITAL 字段值为 otherCapital 的要素删除,即删除 A 和 B 两个元素。对应请求体如下:

<?xml version="1.0" ?>

<wfs:Transaction

   version="2.0.0"

   service="WFS"

   xmlns:World="https://www.supermap.com.cn/World"

   xmlns:fes="http://www.opengis.net/fes/2.0"

   xmlns:wfs="http://www.opengis.net/wfs/2.0"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">

   <wfs:Delete typeName="World:Capitals">

     <fes:Filter>

         <fes:PropertyIsEqualTo>

            <fes:ValueReference>World/Capitals/CAPITAL</fes:ValueReference>

            <fes:Literal>otherCapital</fes:Literal>

         </fes:PropertyIsEqualTo>

      </fes:Filter>

   </wfs:Delete>

</wfs:Transaction>

删除要素成功后,响应参见:响应示例

注:wfs:Transaction 根节点中定义的命名空间应与 typeName 中的值对应,如 命名空间为 xmlns:World="https://www.supermap.com.cn/World",typeName 的值为 World:Capitals。