Kaynağa Gözat

added base wsdl for wfs; fixed bug in ogc:Filter arg from POST

Piotr Labudda 9 yıl önce
ebeveyn
işleme
4ecd308e1c

+ 62 - 0
SE/schema/wsdl/wfs-responses.wsdl

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<wsdl:definitions
+   targetNamespace="http://www.opengis.net/wfs/responses/2.0"
+   xmlns:wfs-util="http://www.opengis.net/wfs-util/2.0"
+   xmlns:wfs="http://www.opengis.net/wfs/2.0"
+   xmlns:ows="http://www.opengis.net/ows/1.1"
+   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+   <wsdl:documentation xmlns:dc="http://purl.org/dc/elements/1.1/">
+      <dc:date>2008-08-31</dc:date>
+      <dc:description>
+         This WSDL document defines the response messages and types
+         for the WFS.
+      </dc:description>
+   </wsdl:documentation>
+   <wsdl:types>
+      <xsd:schema targetNamespace="http://www.opengis.net/wfs/2.0"
+         xmlns:wfs="http://www.opengis.net/wfs/2.0"
+         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+         elementFormDefault="qualified" version="1.1.0">
+         <xsd:include schemaLocation="./wfs.xsd"/>
+         <xsd:import namespace="http://www.opengis.net/wfs-util/2.0" schemaLocation="./wfs-util.xsd"/>
+         <xsd:import namespace="http://www.opengis.net/ows/1.1" schemaLocation="http://schemas.opengis.net/ows/1.1.0/owsExceptionReport.xsd"/>
+      </xsd:schema>
+   </wsdl:types>
+   <wsdl:message name="ServiceExceptionReport">
+      <wsdl:part element="ows:ExceptionReport" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="GetCapabilitiesResponse">
+      <wsdl:part element="wfs:WFS_Capabilities" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="DescribeFeatureTypeResponse">
+      <wsdl:part element="wfs-util:DescribeFeatureTypeResponse" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="GetPropertyValueResponse">
+      <wsdl:part element="wfs:ValueCollection" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="GetFeatureResponse">
+      <wsdl:part element="wfs:FeatureCollection" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="GetFeatureWithLockResponse">
+      <wsdl:part element="wfs:FeatureCollection" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="LockFeatureResponse">
+      <wsdl:part element="wfs:LockFeatureResponse" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="TransactionResponse">
+      <wsdl:part element="wfs:TransactionResponse" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="ListStoredQueriesResponse">
+      <wsdl:part element="wfs:ListStoredQueriesResponse" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="DescribeStoredQueriesResponse">
+      <wsdl:part element="wfs:DescribeStoredQueriesResponse" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="CreateStoredQueryResponse">
+      <wsdl:part element="wfs:CreateStoredQueryResponse" name="Body"/>
+   </wsdl:message>
+   <wsdl:message name="DropStoredQueryResponse">
+      <wsdl:part element="wfs:DropStoredQueryResponse" name="Body"/>
+   </wsdl:message>
+</wsdl:definitions>

+ 27 - 0
SE/schema/wsdl/wfs-util.xsd

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xsd:schema
+   targetNamespace="http://www.opengis.net/wfs-util/2.0"
+   xmlns:util="http://www.opengis.net/wfs-util/2.0"
+   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+   elementFormDefault="qualified">
+   <xsd:annotation>
+      <xsd:documentation>
+         This file defines the type of the DescribeFeatureType response,
+         because WSDL requires that types be explicitly defined in the
+         types section, perhaps thru imports.
+
+         WFS is an OGC Standard.
+         Copyright (c) 2010, 2014 Open Geospatial Consortium.
+         To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ .
+      </xsd:documentation>
+   </xsd:annotation>
+   <xsd:import namespace="http://www.w3.org/2001/XMLSchema"
+               schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"/>
+   <xsd:complexType name="DescribeFeatureTypeResponseType">
+      <xsd:sequence>
+         <xsd:element ref="xsd:schema"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:element name="DescribeFeatureTypeResponse"
+                type="util:DescribeFeatureTypeResponseType"/>
+</xsd:schema>

+ 135 - 0
SE/schema/wsdl/wfs-xml-interfaces.wsdl

@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<wsdl:definitions
+   targetNamespace="http://www.opengis.net/wfs/requests/2.0"
+   xmlns:wfs="http://www.opengis.net/wfs/2.0"
+   xmlns:ows="http://www.opengis.net/ows/1.1"
+   xmlns:wfs-req="http://www.opengis.net/wfs/requests/2.0"
+   xmlns:wfs-resp="http://www.opengis.net/wfs/responses/2.0"
+   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+   <wsdl:documentation xmlns:dc="http://purl.org/dc/elements/1.1/">
+      <dc:identifier>urn:opengis:spec:wfs:wsdl-1.1:interfaces:2.0.2</dc:identifier>
+      <dc:date>2008-08-31</dc:date>
+      <dc:description>
+         This is the the normative abstract service interface definition
+         for the  OpenGIS Web Feature Service, v2.0.2. The WSDL 1.1 syntax is 
+         used to describe the interface signatures and message structures.
+      </dc:description>
+   </wsdl:documentation>
+   <wsdl:import namespace="http://www.opengis.net/wfs/responses/2.0"
+                location="./wfs-responses.wsdl"/>
+   <wsdl:types>
+      <wsdl:documentation>
+         Convenience schema that defines all common WFS message elements.
+      </wsdl:documentation>
+      <xsd:schema targetNamespace="http://www.opengis.net/wfs/2.0"
+         xmlns:wfs="http://www.opengis.net/wfs/2.0"
+         xmlns:gml="http://www.opengis.net/gml/3.2"
+         xmlns:ogc="http://www.opengis.net/ogc/1.1"
+         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+         elementFormDefault="qualified" version="1.1.0">
+         <xsd:include schemaLocation="../wfs.xsd"/>
+      </xsd:schema>
+   </wsdl:types>
+   <wsdl:message name="GetCapabilitiesRequest">
+      <wsdl:part name="Body" element="wfs:GetCapabilities"/>
+   </wsdl:message>
+   <wsdl:message name="DescribeFeatureTypeRequest">
+      <wsdl:part name="Body" element="wfs:DescribeFeatureType"/>
+   </wsdl:message>
+   <wsdl:message name="GetPropertyValueRequest">
+      <wsdl:part name="Body" element="wfs:GetPropertyValue"/>
+   </wsdl:message>
+   <wsdl:message name="GetFeatureRequest">
+      <wsdl:part name="Body" element="wfs:GetFeature"/>
+   </wsdl:message>
+   <wsdl:message name="GetFeatureWithLockRequest">
+      <wsdl:part name="Body" element="wfs:GetFeatureWithLock"/>
+   </wsdl:message>
+   <wsdl:message name="LockFeatureRequest">
+      <wsdl:part name="Body" element="wfs:LockFeature"/>
+   </wsdl:message>
+   <wsdl:message name="TransactionRequest">
+      <wsdl:part name="Body" element="wfs:Transaction"/>
+   </wsdl:message>
+   <wsdl:message name="ListStoredQueriesRequest">
+      <wsdl:part name="Body" element="wfs:ListStoredQueries"/>
+   </wsdl:message>
+   <wsdl:message name="DescribeStoredQueriesRequest">
+      <wsdl:part name="Body" element="wfs:DescribeStoredQueries"/>
+   </wsdl:message>
+   <wsdl:message name="CreateStoredQueryRequest">
+      <wsdl:part name="Body" element="wfs:CreateStoredQuery"/>
+   </wsdl:message>
+   <wsdl:message name="DropStoredQueryRequest">
+      <wsdl:part name="Body" element="wfs:DropStoredQuery"/>
+   </wsdl:message>
+   <wsdl:portType name="wfs">
+      <wsdl:operation name="wfs.getCapabilities">
+         <wsdl:input message="wfs-req:GetCapabilitiesRequest"/>
+         <wsdl:output message="wfs-resp:GetCapabilitiesResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.describeFeatureType">
+         <wsdl:input message="wfs-req:DescribeFeatureTypeRequest"/>
+         <wsdl:output message="wfs-resp:DescribeFeatureTypeResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.getPropertyValue">
+         <wsdl:input message="wfs-req:GetPropertyValueRequest"/>
+         <wsdl:output message="wfs-resp:GetPropertyValueResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.getFeature">
+         <wsdl:input message="wfs-req:GetFeatureRequest"/>
+         <wsdl:output message="wfs-resp:GetFeatureResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.getFeatureWithLock">
+         <wsdl:input message="wfs-req:GetFeatureWithLockRequest"/>
+         <wsdl:output message="wfs-resp:GetFeatureWithLockResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.lockFeature">
+         <wsdl:input message="wfs-req:LockFeatureRequest"/>
+         <wsdl:output message="wfs-resp:LockFeatureResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.transaction">
+         <wsdl:input message="wfs-req:TransactionRequest"/>
+         <wsdl:output message="wfs-resp:TransactionResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.listStoredQueries">
+         <wsdl:input message="wfs-req:ListStoredQueriesRequest"/>
+         <wsdl:output message="wfs-resp:ListStoredQueriesResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.describeStoredQueries">
+         <wsdl:input message="wfs-req:DescribeStoredQueriesRequest"/>
+         <wsdl:output message="wfs-resp:DescribeStoredQueriesResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.createStoredQuery">
+         <wsdl:input message="wfs-req:CreateStoredQueryRequest"/>
+         <wsdl:output message="wfs-resp:CreateStoredQueryResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.dropStoredQuery">
+         <wsdl:input message="wfs-req:DropStoredQueryRequest"/>
+         <wsdl:output message="wfs-resp:DropStoredQueryResponse"/>
+         <wsdl:fault name="ServiceExceptionReport"
+            message="wfs-resp:ServiceExceptionReport"/>
+      </wsdl:operation>
+   </wsdl:portType>
+</wsdl:definitions>

+ 786 - 0
SE/schema/wsdl/wfs.xsd

@@ -0,0 +1,786 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+   targetNamespace="http://www.opengis.net/wfs/2.0"
+   xmlns:wfs="http://www.opengis.net/wfs/2.0"
+   xmlns:fes="http://www.opengis.net/fes/2.0"
+   xmlns:ows="http://www.opengis.net/ows/1.1"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:xml="http://www.w3.org/XML/1998/namespace"
+   elementFormDefault="qualified" version="2.0.2">
+   <xsd:annotation>
+      <xsd:documentation>This XML Schema Document includes and imports, 
+      directly or indirectly, all the XML Schemas defined by the 
+      Web Feature Service (WFS) Implementation Specification.
+
+      WFS is an OGC Standard.
+      Copyright (c) 2010, 2014 Open Geospatial Consortium.
+      To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ .     
+      </xsd:documentation>
+   </xsd:annotation>
+   <!-- ==============================================================
+        Includes and Imports
+        ============================================================== -->
+   <xsd:import namespace="http://www.w3.org/XML/1998/namespace"
+      schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+   <xsd:import namespace="http://www.w3.org/1999/xlink"
+      schemaLocation="http://www.w3.org/1999/xlink.xsd"/>
+   <xsd:import namespace="http://www.opengis.net/ows/1.1"
+      schemaLocation="http://schemas.opengis.net/ows/1.1.0/owsAll.xsd"/>
+   <xsd:import namespace="http://www.opengis.net/fes/2.0"
+      schemaLocation="http://schemas.opengis.net/filter/2.0/filterAll.xsd"/>
+   <!-- ================================================================== -->
+   <!-- =   BASE REQUEST TYPE                                            = -->
+   <!-- ================================================================== -->
+   <xsd:complexType name="BaseRequestType" abstract="true">
+      <xsd:attribute name="service"
+                     type="xsd:string" use="required" fixed="WFS"/>
+      <xsd:attribute name="version" type="wfs:VersionStringType"
+         use="required"/>
+      <xsd:attribute name="handle" type="xsd:string"/>
+   </xsd:complexType>
+   <xsd:simpleType name="VersionStringType">
+      <xsd:restriction base="xsd:string">
+         <xsd:pattern value="2\.0\.\d+"/>
+      </xsd:restriction>
+   </xsd:simpleType>
+   <!-- ================================================================== -->
+   <!-- =   STANDARD QUERY PARAMETERS                                    = -->
+   <!-- ================================================================== -->
+   <xsd:attributeGroup name="StandardPresentationParameters">
+      <xsd:attribute name="startIndex"
+                     type="xsd:nonNegativeInteger" default="0"/>
+      <xsd:attribute name="count" type="xsd:nonNegativeInteger"/>
+      <xsd:attribute name="resultType" type="wfs:ResultTypeType"
+         default="results"/>
+      <xsd:attribute name="outputFormat" type="xsd:string"
+         default="application/gml+xml; version=3.2"/>
+   </xsd:attributeGroup>
+   <xsd:simpleType name="ResultTypeType">
+      <xsd:restriction base="xsd:string">
+         <xsd:enumeration value="results"/>
+         <xsd:enumeration value="hits"/>
+      </xsd:restriction>
+   </xsd:simpleType>
+   <!-- ================================================================== -->
+   <!-- =   RESOLVE PARAMETERS                                           = -->
+   <!-- ================================================================== -->
+   <xsd:attributeGroup name="StandardResolveParameters">
+      <xsd:attribute name="resolve" type="wfs:ResolveValueType" default="none"/>
+      <xsd:attribute name="resolveDepth" type="wfs:positiveIntegerWithStar"
+         default="*"/>
+      <xsd:attribute name="resolveTimeout" type="xsd:positiveInteger"
+         default="300"/>
+   </xsd:attributeGroup>
+   <xsd:simpleType name="ResolveValueType">
+      <xsd:restriction base="xsd:string">
+         <xsd:enumeration value="local"/>
+         <xsd:enumeration value="remote"/>
+         <xsd:enumeration value="all"/>
+         <xsd:enumeration value="none"/>
+      </xsd:restriction>
+   </xsd:simpleType>
+   <xsd:simpleType name="positiveIntegerWithStar">
+      <xsd:union memberTypes="xsd:positiveInteger wfs:StarStringType"/>
+   </xsd:simpleType>
+   <xsd:simpleType name="StarStringType">
+      <xsd:restriction base="xsd:string">
+         <xsd:enumeration value="*"/>
+      </xsd:restriction>
+   </xsd:simpleType>
+   <!-- ================================================================== -->
+   <!-- =   STANDARD FEATURE INPUT PARAMETERS                            = -->
+   <!-- ================================================================== -->
+   <xsd:attributeGroup name="StandardInputParameters">
+      <xsd:attribute name="inputFormat" type="xsd:string"
+         default="application/gml+xml; version=3.2"/>
+      <xsd:attribute name="srsName" type="xsd:anyURI"/>
+   </xsd:attributeGroup>
+   <!-- ================================================================== -->
+   <!-- =   RESPONSE METADATA                                            = -->
+   <!-- ================================================================== -->
+   <xsd:attributeGroup name="StandardResponseParameters">
+      <xsd:attribute name="timeStamp" type="xsd:dateTime" use="required"/>
+      <xsd:attribute name="numberMatched" type="wfs:nonNegativeIntegerOrUnknown"
+         use="required"/>
+      <xsd:attribute name="numberReturned" type="xsd:nonNegativeInteger"
+         use="required"/>
+      <xsd:attribute name="next" type="xsd:anyURI"/>
+      <xsd:attribute name="previous" type="xsd:anyURI"/>
+   </xsd:attributeGroup>
+   <xsd:simpleType name="nonNegativeIntegerOrUnknown">
+      <xsd:union>
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:string">
+               <xsd:enumeration value="unknown"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:nonNegativeInteger"/>
+         </xsd:simpleType>
+      </xsd:union>
+   </xsd:simpleType>
+   <!-- ================================================================== -->
+   <!-- =   COMMON FEATURE METADATA ELEMENTS                             = -->
+   <!-- ================================================================== -->
+   <xsd:element name="Title">
+      <xsd:complexType>
+         <xsd:simpleContent>
+            <xsd:extension base="xsd:string">
+               <xsd:attribute ref="xml:lang" default="en"/>
+            </xsd:extension>
+         </xsd:simpleContent>
+      </xsd:complexType>
+   </xsd:element>
+   <xsd:element name="Abstract">
+      <xsd:complexType>
+         <xsd:simpleContent>
+            <xsd:extension base="xsd:string">
+               <xsd:attribute ref="xml:lang" default="en"/>
+            </xsd:extension>
+         </xsd:simpleContent>
+      </xsd:complexType>
+   </xsd:element>
+   <!-- ================================================================== -->
+   <!-- =   QUERY ELEMENTS                                               = -->
+   <!-- ================================================================== -->
+   <!-- === ADHOC QUERY ================================================== -->
+   <xsd:element name="Query" type="wfs:QueryType"
+      substitutionGroup="fes:AbstractAdhocQueryExpression"/>
+   <xsd:complexType name="QueryType">
+      <xsd:complexContent>
+         <xsd:extension base="fes:AbstractAdhocQueryExpressionType">
+            <xsd:attribute name="srsName" type="xsd:anyURI"/>
+            <xsd:attribute name="featureVersion" type="xsd:string"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <!-- === STORED QUERY ================================================= -->
+   <xsd:element name="StoredQuery" type="wfs:StoredQueryType"
+      substitutionGroup="fes:AbstractQueryExpression"/>
+   <xsd:complexType name="StoredQueryType">
+      <xsd:complexContent>
+         <xsd:extension base="fes:AbstractQueryExpressionType">
+            <xsd:sequence>
+               <xsd:element name="Parameter" type="wfs:ParameterType"
+                  minOccurs="0" maxOccurs="unbounded"/>
+            </xsd:sequence>
+            <xsd:attribute name="id" type="xsd:anyURI" use="required"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <xsd:complexType name="ParameterType" mixed="true">
+      <xsd:sequence>
+         <xsd:any namespace="##other" processContents="lax" minOccurs="0"
+            maxOccurs="1"/>
+      </xsd:sequence>
+      <xsd:attribute name="name" type="xsd:string" use="required"/>
+   </xsd:complexType>
+   <!-- ================================================================== -->
+   <!-- =   GETCAPABILITIES Request and Response                         = -->
+   <!-- ================================================================== -->
+   <!-- REQUEST -->
+   <xsd:element name="GetCapabilities" type="wfs:GetCapabilitiesType"/>
+   <xsd:complexType name="GetCapabilitiesType">
+      <xsd:complexContent>
+         <xsd:extension base="ows:GetCapabilitiesType">
+            <xsd:attribute name="service" type="ows:ServiceType" use="required"
+               fixed="WFS"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <!-- RESPONSE -->
+   <xsd:element name="WFS_Capabilities" type="wfs:WFS_CapabilitiesType"/>
+   <xsd:complexType name="WFS_CapabilitiesType">
+      <xsd:complexContent>
+         <xsd:extension base="ows:CapabilitiesBaseType">
+            <xsd:sequence>
+               <xsd:element name="WSDL" minOccurs="0">
+                  <xsd:complexType>
+                     <xsd:complexContent>
+                        <xsd:restriction base="xsd:anyType">
+                           <xsd:attributeGroup ref="xlink:simpleAttrs"/>
+                        </xsd:restriction>
+                     </xsd:complexContent>
+                  </xsd:complexType>
+               </xsd:element>
+               <xsd:element ref="wfs:FeatureTypeList" minOccurs="0"/>
+               <xsd:element ref="fes:Filter_Capabilities" minOccurs="0"/>
+            </xsd:sequence>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <xsd:element name="FeatureTypeList" type="wfs:FeatureTypeListType"/>
+   <xsd:complexType name="FeatureTypeListType">
+      <xsd:sequence>
+         <xsd:element name="FeatureType" type="wfs:FeatureTypeType"
+            maxOccurs="unbounded"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:complexType name="FeatureTypeType">
+      <xsd:sequence>
+         <xsd:element name="Name" type="xsd:QName"/>
+         <xsd:element ref="wfs:Title" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element ref="wfs:Abstract" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element ref="ows:Keywords" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:choice>
+            <xsd:sequence>
+               <xsd:element name="DefaultCRS" type="xsd:anyURI"/>
+               <xsd:element name="OtherCRS" type="xsd:anyURI" minOccurs="0"
+                  maxOccurs="unbounded"/>
+            </xsd:sequence>
+            <xsd:element name="NoCRS">
+               <xsd:complexType/>
+            </xsd:element>
+         </xsd:choice>
+         <xsd:element name="OutputFormats" type="wfs:OutputFormatListType"
+            minOccurs="0"/>
+         <xsd:element ref="ows:WGS84BoundingBox" minOccurs="0"
+            maxOccurs="unbounded"/>
+         <xsd:element name="MetadataURL" type="wfs:MetadataURLType"
+            minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="ExtendedDescription"
+            type="wfs:ExtendedDescriptionType" minOccurs="0"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:complexType name="OutputFormatListType">
+      <xsd:sequence maxOccurs="unbounded">
+         <xsd:element name="Format" type="xsd:string"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:complexType name="MetadataURLType">
+      <xsd:attributeGroup ref="xlink:simpleAttrs"/>
+      <xsd:attribute name="about" type="xsd:anyURI"/>
+   </xsd:complexType>
+   <xsd:complexType name="ExtendedDescriptionType">
+      <xsd:sequence>
+         <xsd:element ref="wfs:Element" maxOccurs="unbounded"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:element name="Element" type="wfs:ElementType"/>
+   <xsd:complexType name="ElementType">
+      <xsd:sequence>
+         <xsd:element ref="ows:Metadata"/>
+         <xsd:element ref="wfs:ValueList"/>
+      </xsd:sequence>
+      <xsd:attribute name="name" type="xsd:string" use="required"/>
+      <xsd:attribute name="type" type="xsd:QName" use="required"/>
+   </xsd:complexType>
+   <xsd:element name="ValueList" type="wfs:ValueListType"/>
+   <xsd:complexType name="ValueListType">
+      <xsd:sequence maxOccurs="unbounded">
+         <xsd:element ref="wfs:Value"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:element name="Value" type="xsd:anyType"/>
+   <!-- ================================================================== -->
+   <!-- =   DESCRIBEFEATURETYPE Request and Response                     = -->
+   <!-- ================================================================== -->
+   <!-- REQUEST -->
+   <xsd:element name="DescribeFeatureType" type="wfs:DescribeFeatureTypeType"/>
+   <xsd:complexType name="DescribeFeatureTypeType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:BaseRequestType">
+            <xsd:sequence>
+               <xsd:element name="TypeName" type="xsd:QName" minOccurs="0"
+                  maxOccurs="unbounded"/>
+            </xsd:sequence>
+            <xsd:attribute name="outputFormat" type="xsd:string"
+               default="application/gml+xml; version=3.2"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <!-- RESPONSE -->
+   <!-- ================================================================== -->
+   <!-- For the outputFormat value of 'application/gml+xml; version=3.2'   -->
+   <!-- a WFS shall generate a valid XML-Schema/GML3 application schema    -->
+   <!-- that describes that requested feature type(s).                     -->
+   <!-- ================================================================== -->
+   <!-- ================================================================== -->
+   <!-- =   GETPROPERTYVALUE Request and Response                        = -->
+   <!-- ================================================================== -->
+   <!-- REQUEST -->
+   <xsd:element name="GetPropertyValue" type="wfs:GetPropertyValueType"/>
+   <xsd:complexType name="GetPropertyValueType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:BaseRequestType">
+            <xsd:sequence>
+               <xsd:element ref="fes:AbstractQueryExpression"/>
+            </xsd:sequence>
+            <xsd:attribute name="valueReference" type="xsd:string"
+               use="required"/>
+            <xsd:attribute name="resolvePath" type="xsd:string"/>
+            <xsd:attributeGroup ref="wfs:StandardPresentationParameters"/>
+            <xsd:attributeGroup ref="wfs:StandardResolveParameters"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <!-- RESPONSE -->
+   <xsd:element name="ValueCollection" type="wfs:ValueCollectionType"/>
+   <xsd:complexType name="ValueCollectionType">
+      <xsd:sequence>
+         <xsd:element ref="wfs:member" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element ref="wfs:additionalValues" minOccurs="0"/>
+         <xsd:element ref="wfs:truncatedResponse" minOccurs="0"/>
+      </xsd:sequence>
+      <xsd:attributeGroup ref="wfs:StandardResponseParameters"/>
+   </xsd:complexType>
+   <xsd:element name="member" type="wfs:MemberPropertyType"/>
+   <xsd:complexType name="MemberPropertyType" mixed="true">
+      <xsd:choice minOccurs="0">
+         <xsd:any processContents="lax" namespace="##other"/>
+         <xsd:element ref="wfs:Tuple"/>
+         <xsd:element ref="wfs:SimpleFeatureCollection"/>
+      </xsd:choice>
+      <xsd:attribute name="state" type="wfs:StateValueType"/>
+      <xsd:attributeGroup ref="xlink:simpleAttrs"/>
+   </xsd:complexType>
+   <xsd:element name="Tuple" type="wfs:TupleType"/>
+   <xsd:complexType name="TupleType">
+      <xsd:sequence>
+         <xsd:element ref="wfs:member" minOccurs="2" maxOccurs="unbounded"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:element name="additionalValues">
+      <xsd:complexType>
+         <xsd:choice>
+            <xsd:element ref="wfs:ValueCollection"/>
+            <xsd:element ref="wfs:SimpleFeatureCollection"/>
+         </xsd:choice>
+      </xsd:complexType>
+   </xsd:element>
+   <xsd:element name="truncatedResponse">
+      <xsd:complexType>
+         <xsd:sequence>
+            <xsd:element ref="ows:ExceptionReport"/>
+         </xsd:sequence>
+      </xsd:complexType>
+   </xsd:element>
+   <xsd:simpleType name="StateValueType">
+      <xsd:union>
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:string">
+               <xsd:enumeration value="valid"/>
+               <xsd:enumeration value="superseded"/>
+               <xsd:enumeration value="retired"/>
+               <xsd:enumeration value="future"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+         <xsd:simpleType>
+            <xsd:restriction base="xsd:string">
+               <xsd:pattern value="other:\w{2,}"/>
+            </xsd:restriction>
+         </xsd:simpleType>
+      </xsd:union>
+   </xsd:simpleType>
+   <!-- ================================================================== -->
+   <!-- =   GETFEATURE Request & Response                                = -->
+   <!-- ================================================================== -->
+   <xsd:element name="GetFeature" type="wfs:GetFeatureType"/>
+   <xsd:complexType name="GetFeatureType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:BaseRequestType">
+            <xsd:sequence>
+               <xsd:element ref="fes:AbstractQueryExpression"
+                  maxOccurs="unbounded"/>
+            </xsd:sequence>
+            <xsd:attributeGroup ref="wfs:StandardPresentationParameters"/>
+            <xsd:attributeGroup ref="wfs:StandardResolveParameters"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <!-- === GETFEATUREWITHLOCK REQUEST =================================== -->
+   <xsd:element name="GetFeatureWithLock" type="wfs:GetFeatureWithLockType"/>
+   <xsd:complexType name="GetFeatureWithLockType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:GetFeatureType">
+            <xsd:attribute name="expiry" type="xsd:positiveInteger"
+               default="300"/>
+            <xsd:attribute name="lockAction" type="wfs:AllSomeType"
+               default="ALL"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <!-- === PROPERTYNAME (Projection clause) ============================= -->
+   <xsd:element name="PropertyName"
+      substitutionGroup="fes:AbstractProjectionClause">
+      <xsd:complexType>
+         <xsd:simpleContent>
+            <xsd:extension base="xsd:QName">
+               <xsd:attributeGroup ref="wfs:StandardResolveParameters"/>
+               <xsd:attribute name="resolvePath" type="xsd:string"/>
+            </xsd:extension>
+         </xsd:simpleContent>
+      </xsd:complexType>
+   </xsd:element>
+   <!-- === GETFEATURE & GETFEATUREWITHLOCK RESPONSE ===================== -->
+   <xsd:element name="FeatureCollection" type="wfs:FeatureCollectionType"
+      substitutionGroup="wfs:SimpleFeatureCollection"/>
+   <xsd:complexType name="FeatureCollectionType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:SimpleFeatureCollectionType">
+            <xsd:sequence>
+               <xsd:element ref="wfs:additionalObjects" minOccurs="0"/>
+               <xsd:element ref="wfs:truncatedResponse" minOccurs="0"/>
+            </xsd:sequence>
+            <xsd:attributeGroup ref="wfs:StandardResponseParameters"/>
+            <xsd:attribute name="lockId" type="xsd:string"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <xsd:element name="additionalObjects">
+      <xsd:complexType>
+         <xsd:choice>
+            <xsd:element ref="wfs:ValueCollection"/>
+            <xsd:element ref="wfs:SimpleFeatureCollection"/>
+         </xsd:choice>
+      </xsd:complexType>
+   </xsd:element>
+   <xsd:element name="SimpleFeatureCollection"
+                type="wfs:SimpleFeatureCollectionType"/>
+   <xsd:complexType name="SimpleFeatureCollectionType">
+      <xsd:sequence>
+         <xsd:element ref="wfs:boundedBy" minOccurs="0"/>
+         <xsd:element ref="wfs:member" minOccurs="0" maxOccurs="unbounded"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:element name="boundedBy" type="wfs:EnvelopePropertyType"/>
+   <xsd:complexType name="EnvelopePropertyType">
+      <xsd:sequence>
+         <xsd:any namespace="##other"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <!-- ================================================================== -->
+   <!-- =   LIST STORED QUERIES                                          = -->
+   <!-- ================================================================== -->
+   <!-- REQUEST -->
+   <xsd:element name="ListStoredQueries" type="wfs:ListStoredQueriesType"/>
+   <xsd:complexType name="ListStoredQueriesType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:BaseRequestType"/>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <!-- RESPONSE -->
+   <xsd:element name="ListStoredQueriesResponse"
+      type="wfs:ListStoredQueriesResponseType"/>
+   <xsd:complexType name="ListStoredQueriesResponseType">
+      <xsd:sequence>
+         <xsd:element name="StoredQuery" type="wfs:StoredQueryListItemType"
+            minOccurs="0" maxOccurs="unbounded"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:complexType name="StoredQueryListItemType">
+      <xsd:sequence>
+         <xsd:element ref="wfs:Title" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="ReturnFeatureType" type="xsd:QName"
+            minOccurs="0" maxOccurs="unbounded"/>
+      </xsd:sequence>
+      <xsd:attribute name="id" type="xsd:anyURI" use="required"/>
+   </xsd:complexType>
+   <!-- ================================================================== -->
+   <!-- =   DESCRIBE STORED QUERIES                                      = -->
+   <!-- ================================================================== -->
+   <!-- REQUEST -->
+   <xsd:element name="DescribeStoredQueries"
+      type="wfs:DescribeStoredQueriesType"/>
+   <xsd:complexType name="DescribeStoredQueriesType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:BaseRequestType">
+            <xsd:sequence>
+               <xsd:element name="StoredQueryId" type="xsd:anyURI" minOccurs="0"
+                  maxOccurs="unbounded"/>
+            </xsd:sequence>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <!-- RESPONSE -->
+   <xsd:element name="DescribeStoredQueriesResponse"
+      type="wfs:DescribeStoredQueriesResponseType"/>
+   <xsd:complexType name="DescribeStoredQueriesResponseType">
+      <xsd:sequence>
+         <xsd:element name="StoredQueryDescription"
+                      type="wfs:StoredQueryDescriptionType"
+                      minOccurs="0" maxOccurs="unbounded"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:complexType name="StoredQueryDescriptionType">
+      <xsd:sequence>
+         <xsd:element ref="wfs:Title" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element ref="wfs:Abstract" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element ref="ows:Metadata" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="Parameter"
+                      type="wfs:ParameterExpressionType"
+                      minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element name="QueryExpressionText"
+                      type="wfs:QueryExpressionTextType"
+                      minOccurs="1" maxOccurs="unbounded"/>
+      </xsd:sequence>
+      <xsd:attribute name="id" type="xsd:anyURI" use="required"/>
+   </xsd:complexType>
+   <!-- ================================================================== -->
+   <!-- =   CREATE STORED QUERIES                                        = -->
+   <!-- ================================================================== -->
+   <!-- REQUEST -->
+   <xsd:element name="CreateStoredQuery" type="wfs:CreateStoredQueryType"/>
+   <xsd:complexType name="CreateStoredQueryType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:BaseRequestType">
+            <xsd:sequence>
+               <xsd:element name="StoredQueryDefinition"
+                  type="wfs:StoredQueryDescriptionType" minOccurs="0"
+                  maxOccurs="unbounded"/>
+            </xsd:sequence>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <xsd:complexType name="ParameterExpressionType">
+      <xsd:sequence>
+         <xsd:element ref="wfs:Title" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element ref="wfs:Abstract" minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:element ref="ows:Metadata" minOccurs="0" maxOccurs="unbounded"/>
+      </xsd:sequence>
+      <xsd:attribute name="name" type="xsd:string" use="required"/>
+      <xsd:attribute name="type" type="xsd:QName" use="required"/>
+   </xsd:complexType>
+   <xsd:complexType name="QueryExpressionTextType" mixed="true">
+      <xsd:choice>
+         <xsd:any namespace="##other" processContents="skip"
+                  minOccurs="0" maxOccurs="unbounded"/>
+         <xsd:any namespace="##targetNamespace" processContents="skip"
+                  minOccurs="0" maxOccurs="unbounded"/>
+      </xsd:choice>
+      <xsd:attribute name="returnFeatureTypes"
+                     type="wfs:ReturnFeatureTypesListType" use="required"/>
+      <xsd:attribute name="language" type="xsd:anyURI" use="required"/>
+      <xsd:attribute name="isPrivate" type="xsd:boolean" default="false"/>
+   </xsd:complexType>
+   <xsd:simpleType name="ReturnFeatureTypesListType">
+      <xsd:list itemType="xsd:QName"/>
+   </xsd:simpleType>
+   <!-- RESPONSE -->
+   <xsd:element name="CreateStoredQueryResponse"
+      type="wfs:CreateStoredQueryResponseType"/>
+   <xsd:complexType name="ExecutionStatusType">
+      <xsd:attribute name="status" type="xsd:string" fixed="OK"/>
+   </xsd:complexType>
+   <xsd:complexType name="CreateStoredQueryResponseType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:ExecutionStatusType"/>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <!-- ================================================================== -->
+   <!-- =   DROP STORED QUERIES                                          = -->
+   <!-- ================================================================== -->
+   <!-- REQUEST -->
+   <xsd:element name="DropStoredQuery">
+      <xsd:complexType>
+         <xsd:complexContent>
+            <xsd:extension base="wfs:BaseRequestType">
+               <xsd:attribute name="id" type="xsd:anyURI" use="required"/>
+            </xsd:extension>
+         </xsd:complexContent>
+      </xsd:complexType>
+   </xsd:element>
+   <!-- RESPONSE -->
+   <xsd:element name="DropStoredQueryResponse" type="wfs:ExecutionStatusType"/>
+   <!-- ================================================================== -->
+   <!-- =   LOCKFEATURE Request and Response                             = -->
+   <!-- ================================================================== -->
+   <!-- REQUEST -->
+   <xsd:element name="LockFeature" type="wfs:LockFeatureType"/>
+   <xsd:complexType name="LockFeatureType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:BaseRequestType">
+            <xsd:sequence>
+               <xsd:element ref="fes:AbstractQueryExpression"
+                  minOccurs="0" maxOccurs="unbounded"/>
+            </xsd:sequence>
+            <xsd:attribute name="lockId" type="xsd:string"/>
+            <xsd:attribute name="expiry" type="xsd:positiveInteger"
+               default="300"/>
+            <xsd:attribute name="lockAction" type="wfs:AllSomeType"
+               default="ALL"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <xsd:simpleType name="AllSomeType">
+      <xsd:restriction base="xsd:string">
+         <xsd:enumeration value="ALL"/>
+         <xsd:enumeration value="SOME"/>
+      </xsd:restriction>
+   </xsd:simpleType>
+   <!-- RESPONSE -->
+   <xsd:element name="LockFeatureResponse" type="wfs:LockFeatureResponseType"/>
+   <xsd:complexType name="LockFeatureResponseType">
+      <xsd:sequence>
+         <xsd:element name="FeaturesLocked" type="wfs:FeaturesLockedType"
+            minOccurs="0"/>
+         <xsd:element name="FeaturesNotLocked" type="wfs:FeaturesNotLockedType"
+            minOccurs="0"/>
+      </xsd:sequence>
+      <xsd:attribute name="lockId" type="xsd:string"/>
+   </xsd:complexType>
+   <xsd:complexType name="FeaturesLockedType">
+      <xsd:sequence maxOccurs="unbounded">
+         <xsd:element ref="fes:ResourceId"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:complexType name="FeaturesNotLockedType">
+      <xsd:sequence maxOccurs="unbounded">
+         <xsd:element ref="fes:ResourceId"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <!-- ================================================================== -->
+   <!-- =   TRANSACTION Request and Response                             = -->
+   <!-- ================================================================== -->
+   <!-- REQUEST -->
+   <xsd:element name="Transaction" type="wfs:TransactionType"/>
+   <xsd:complexType name="TransactionType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:BaseRequestType">
+            <xsd:sequence>
+               <xsd:sequence minOccurs="0" maxOccurs="unbounded">
+                  <xsd:element ref="wfs:AbstractTransactionAction"/>
+               </xsd:sequence>
+            </xsd:sequence>
+            <xsd:attribute name="lockId" type="xsd:string"/>
+            <xsd:attribute name="releaseAction" type="wfs:AllSomeType"
+               default="ALL"/>
+            <xsd:attribute name="srsName" type="xsd:anyURI"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <xsd:element name="AbstractTransactionAction"
+      type="wfs:AbstractTransactionActionType" abstract="true"/>
+   <xsd:complexType name="AbstractTransactionActionType" abstract="true">
+      <xsd:attribute name="handle" type="xsd:string"/>
+   </xsd:complexType>
+   <xsd:element name="Insert" type="wfs:InsertType"
+      substitutionGroup="wfs:AbstractTransactionAction"/>
+   <xsd:complexType name="InsertType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:AbstractTransactionActionType">
+            <xsd:sequence>
+               <xsd:any namespace="##other" maxOccurs="unbounded"/>
+            </xsd:sequence>
+            <xsd:attributeGroup ref="wfs:StandardInputParameters"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <xsd:element name="Update" type="wfs:UpdateType"
+      substitutionGroup="wfs:AbstractTransactionAction"/>
+   <xsd:complexType name="UpdateType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:AbstractTransactionActionType">
+            <xsd:sequence>
+               <xsd:element ref="wfs:Property" maxOccurs="unbounded"/>
+               <xsd:element ref="fes:Filter" minOccurs="0"/>
+            </xsd:sequence>
+            <xsd:attribute name="typeName" type="xsd:QName" use="required"/>
+            <xsd:attributeGroup ref="wfs:StandardInputParameters"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <xsd:element name="Property" type="wfs:PropertyType"/>
+   <xsd:complexType name="PropertyType">
+      <xsd:sequence>
+         <xsd:element name="ValueReference">
+            <xsd:complexType>
+               <xsd:simpleContent>
+                  <xsd:extension base="xsd:string">
+                     <xsd:attribute name="action" type="wfs:UpdateActionType"
+                        default="replace"/>
+                  </xsd:extension>
+               </xsd:simpleContent>
+            </xsd:complexType>
+         </xsd:element>
+         <xsd:element name="Value" minOccurs="0"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:simpleType name="UpdateActionType">
+      <xsd:restriction base="xsd:string">
+         <xsd:enumeration value="replace"/>
+         <xsd:enumeration value="insertBefore"/>
+         <xsd:enumeration value="insertAfter"/>
+         <xsd:enumeration value="remove"/>
+      </xsd:restriction>
+   </xsd:simpleType>
+   <xsd:element name="Replace" type="wfs:ReplaceType"
+      substitutionGroup="wfs:AbstractTransactionAction"/>
+   <xsd:complexType name="ReplaceType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:AbstractTransactionActionType">
+            <xsd:sequence>
+               <xsd:any namespace="##other"/>
+               <xsd:element ref="fes:Filter"/>
+            </xsd:sequence>
+            <xsd:attributeGroup ref="wfs:StandardInputParameters"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <xsd:element name="Delete" type="wfs:DeleteType"
+      substitutionGroup="wfs:AbstractTransactionAction"/>
+   <xsd:complexType name="DeleteType">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:AbstractTransactionActionType">
+            <xsd:sequence>
+               <xsd:element ref="fes:Filter"/>
+            </xsd:sequence>
+            <xsd:attribute name="typeName" type="xsd:QName" use="required"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <xsd:element name="Native" type="wfs:NativeType"
+      substitutionGroup="wfs:AbstractTransactionAction"/>
+   <xsd:complexType name="NativeType" mixed="true">
+      <xsd:complexContent>
+         <xsd:extension base="wfs:AbstractTransactionActionType">
+            <xsd:sequence>
+               <xsd:any processContents="lax" namespace="##other" minOccurs="0"/>
+            </xsd:sequence>
+            <xsd:attribute name="vendorId" type="xsd:string" use="required"/>
+            <xsd:attribute name="safeToIgnore" type="xsd:boolean" use="required"/>
+         </xsd:extension>
+      </xsd:complexContent>
+   </xsd:complexType>
+   <!-- REPONSE -->
+   <xsd:element name="TransactionResponse" type="wfs:TransactionResponseType"/>
+   <xsd:complexType name="TransactionResponseType">
+      <xsd:sequence>
+         <xsd:element name="TransactionSummary"
+            type="wfs:TransactionSummaryType"/>
+         <xsd:element name="InsertResults" type="wfs:ActionResultsType"
+            minOccurs="0"/>
+         <xsd:element name="UpdateResults" type="wfs:ActionResultsType"
+            minOccurs="0"/>
+         <xsd:element name="ReplaceResults" type="wfs:ActionResultsType"
+            minOccurs="0"/>
+      </xsd:sequence>
+      <xsd:attribute name="version" type="wfs:VersionStringType"
+         use="required"/>
+   </xsd:complexType>
+   <xsd:complexType name="TransactionSummaryType">
+      <xsd:sequence>
+         <xsd:element name="totalInserted" type="xsd:nonNegativeInteger"
+            minOccurs="0"/>
+         <xsd:element name="totalUpdated" type="xsd:nonNegativeInteger"
+            minOccurs="0"/>
+         <xsd:element name="totalReplaced" type="xsd:nonNegativeInteger"
+            minOccurs="0"/>
+         <xsd:element name="totalDeleted" type="xsd:nonNegativeInteger"
+            minOccurs="0"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:complexType name="ActionResultsType">
+      <xsd:sequence>
+         <xsd:element name="Feature" type="wfs:CreatedOrModifiedFeatureType"
+            maxOccurs="unbounded"/>
+      </xsd:sequence>
+   </xsd:complexType>
+   <xsd:complexType name="CreatedOrModifiedFeatureType">
+      <xsd:sequence maxOccurs="unbounded">
+         <xsd:element ref="fes:ResourceId"/>
+      </xsd:sequence>
+      <xsd:attribute name="handle" type="xsd:string"/>
+   </xsd:complexType>
+   <xsd:complexType name="EmptyType"/>
+</xsd:schema>

+ 46 - 76
SE/se-lib/Api/WfsData.php

@@ -6,46 +6,68 @@ Lib::loadClass('Api_WfsException');
 Lib::loadClass('Api_WfsDataServer');
 Lib::loadClass('UserAcl');
 Lib::loadClass('Api_WfsLogger');
+Lib::loadClass('Api_WsdlServer');
 
 class Api_WfsData extends ApiRouteBase {// TODO: extends Api_WfsBase which extends ApiBase
 
 	public $_apiUser;
 	public $_apiBaseUri;
-	public $_idFiltrProces;
-	public $_dataSourceName;
-	public $_tblName;
-	public $_tblSchema;
 
 	public function execute($request) {
-
 		$wfsLogger = new Api_WfsLogger();
 		$this->setLogger($wfsLogger);
 		$this->reqDBG($request);
 
-		if (empty($request->segments)) {
-			//$this->mainWpsAction($request);// show list of posible data source
-			throw new HttpException("Bad Request", 400);
-		} else {
-			$pathPart = array_shift($request->segments);
+		// /wfs-data.php/default_db/?...                    : $request->segments = ['default_db']
+		// /wfs-data.php/filtr_proces_5040/default_db/?...  : $request->segments = ['filtr_proces_5040', 'default_db']
+		// /wfs-data.php?...                                : $request->segments = []
+		// /wfs-data.php/filtr_proces_5040/?...             : $request->segments = ['filtr_proces_5040']
+		// /wfs-data.php/wsdl                               : $request->segments = ['wsdl']
+
+		$serverClass = 'Api_WfsDataServer';
+		if (!empty($request->segments) && 'wsdl' == $request->segments[0]) {
+			$serverClass = 'Api_WsdlServer';
+		}
+
+		$idFiltrProces = null;
+		foreach ($request->segments as $pathPart) {
 			if ('filtr_proces_' == substr($pathPart, 0, 13)) {
-				$this->_idFiltrProces = (int)substr($pathPart, 13);
-				if (!$this->_idFiltrProces) throw new Api_WfsException("Wrong filtr process number");
+				$idFiltrProces = (int)substr($pathPart, 13);
+				if (!$idFiltrProces) throw new Api_WfsException("Wrong filtr process number");
 				$this->DBG("filtr procesu({$idProcesFiltr})", __LINE__, __FUNCTION__, __CLASS__);
-
-				$pathPart = array_shift($request->segments);
 			}
-			$this->_dataSourceName = $pathPart;
-			$this->DBG("dataSourceAction({$this->_dataSourceName}) ...", __LINE__);
-			try {
-				$this->dataSourceAction($request);
-			} catch (Api_WfsException $e) {
-				$e->sendResponseXml();
-			} catch (Exception $e) {
-				$wfsException = new Api_WfsException($e->getMessage(), $e->getCode(), $e);
-				$wfsException->sendResponseXml();
+			// if ('default_db' == $pathPart) continue;// skip 'default_db'
+			// throw new Api_WfsException("Not implemented '{$pathPart}'", 501);// skip all - wsdl work on segments
+		}
+
+		try {
+			$this->DBG("Api_WfsData->execute() START", __LINE__);
+			//$userAcl = User::getAcl();
+			IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">user (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_apiUser);echo'</pre>';}
+			$userAcl = new UserAcl($this->_apiUser->getID(), $use_cache = true);
+			$userAcl->fetchGroups();
+			if ($idFiltrProces) {
+				if (!$userAcl->canExecuteProcesInit($idFiltrProces)) {
+					throw new Api_WfsException("Access Denied for given process");
+				}
+				$userAcl->fetchProcesPerms($idFiltrProces, true);
+			} else {
+				$userAcl->fetchAllPerms(true);
 			}
-			$this->DBG("dataSourceAction() END", __LINE__);
+			IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$userAcl (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($userAcl);echo'</pre>';}
+
+			$this->DBG("usr:" . $this->_apiUser->getID(), __LINE__, __FUNCTION__, __CLASS__);
+			$wfsServer = new $serverClass($userAcl);
+			$wfsServer->setBaseUri($this->_apiBaseUri);
+			$wfsServer->run($request);
+			exit;// TODO:? return $document;
+		} catch (Api_WfsException $e) {
+			$e->sendResponseXml();
+		} catch (Exception $e) {
+			$wfsException = new Api_WfsException($e->getMessage(), $e->getCode(), $e);
+			$wfsException->sendResponseXml();
 		}
+		$this->DBG("Api_WfsData->execute() END", __LINE__);
 
 		exit;
 		// return document tree - array of arrays
@@ -54,58 +76,6 @@ class Api_WfsData extends ApiRouteBase {// TODO: extends Api_WfsBase which exten
 	public function wfsServerAction($request) {
 	}
 
-	public function dataSourceAction($request) {
-		$document = '';
-		//$userAcl = User::getAcl();
-		IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">user (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_apiUser);echo'</pre>';}
-		$userAcl = new UserAcl($this->_apiUser->getID(), $use_cache = true);
-		$userAcl->fetchGroups();
-		if ($this->_idFiltrProces) {
-			if (!$userAcl->canExecuteProcesInit($this->_idFiltrProces)) {
-				throw new Api_WfsException("Access Denied for given process");
-			}
-			$userAcl->fetchProcesPerms($this->_idFiltrProces, true);
-		} else {
-			$userAcl->fetchAllPerms(true);
-		}
-		IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$userAcl (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($userAcl);echo'</pre>';}
-
-		$this->DBG("usr:" . $this->_apiUser->getID(), __LINE__, __FUNCTION__, __CLASS__);
-		$wfsServer = new Api_WfsDataServer($userAcl);
-		$wfsServer->setBaseUri($this->_apiBaseUri);
-
-		if ('WFS' != V::get('SERVICE', '', $request->query) and ('WFS' != V::get('service', '', $request->query)))  {
-			throw new Api_WfsException("Only WFS Service is allowed");
-		}
-		$req = V::get('REQUEST', '', $request->query);
-		if (!empty($req)) {
-			$methodName = "{$req}Action";
-			if (!method_exists($wfsServer, $methodName)) {
-				throw new Api_WfsException("Not Implemented " . htmlspecialchars($req), 501);
-			}
-			$this->DBG("WfsServer->{$methodName}() ...", __LINE__);
-			$document = $wfsServer->$methodName($urlQuery);
-		}
-		else {
-			$this->DBG("WfsServer->parseXMLRequest() ...", __LINE__);
-			$document = $wfsServer->parseXMLRequest();
-
-			header('Content-type: application/xml');
-			echo '<?xml version="1.0" encoding="UTF-8"?>';
-			echo $document; exit;// TODO: return $document;
-		}
-		IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$document (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($document);echo'</pre>';}
-
-		if ('raw' == V::get('outputFormat', '', $request->query)) {
-			header('Content-type: text/plain; charset=utf-8');
-			echo $document;
-		} else {
-			header('Content-type: application/xml');
-			echo $document;
-		}
-		exit;// TODO: return $document;
-	}
-
 	public function mainWpsAction($request) {
 		return array('TODO:'=>'TODO: Show main WPS GetCapabilities');
 	}

+ 37 - 4
SE/se-lib/Api/WfsDataServer.php

@@ -7,6 +7,39 @@ Lib::loadClass('Api_WfsNs');
 
 class Api_WfsDataServer extends Api_WfsServerBase {
 
+	public function run($request) {
+		$document = '';
+		if ('WFS' != V::get('SERVICE', '', $request->query) && ('WFS' != V::get('service', '', $request->query))) {
+			throw new Api_WfsException("Only WFS Service is allowed");
+		}
+		$req = V::get('REQUEST', '', $request->query);
+		if (!empty($req)) {
+			$methodName = "{$req}Action";
+			if (!method_exists($this, $methodName)) {
+				throw new Api_WfsException("Not Implemented " . htmlspecialchars($req), 501);
+			}
+			$this->DBG("WfsServer->{$methodName}() ...", __LINE__);
+			$document = $this->$methodName($urlQuery);
+		}
+		else {
+			$this->DBG("WfsServer->parseXMLRequest() ...", __LINE__);
+			$document = $this->parseXMLRequest();
+
+			header('Content-type: application/xml');
+			echo '<?xml version="1.0" encoding="UTF-8"?>';
+			echo $document; exit;// TODO: return $document;
+		}
+		IF(V::get('DBG','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$document (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($document);echo'</pre>';}
+
+		if ('raw' == V::get('outputFormat', '', $request->query)) {
+			header('Content-type: text/plain; charset=utf-8');
+			echo $document;
+		} else {
+			header('Content-type: application/xml');
+			echo $document;
+		}
+	}
+
 	public function parseXMLRequest() {
 		$data = array();
 		$reqContent = Request::getRequestBody();
@@ -88,7 +121,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
 			}
 		}
 
-		if($DBG){echo "ogcFilter(" . strlen($args['ogc:Filter']) . "): {$args['ogc:Filter']}\n";}
+		if($DBG){echo "ogcFilter(" . strlen($args['ogc:filter']) . "): {$args['ogc:filter']}\n";}
 		$searchParams = array();
 		$searchParams['limit'] = $args['limit'];
 		$searchParams['limitstart'] = $args['offset'];
@@ -98,7 +131,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
 			$searchParams['order_by'] = $acl->getPrimaryKeyField();
 			$searchParams['order_dir'] = 'DESC';
 		}
-		if (strlen($args['ogc:Filter']) > 0) $searchParams['ogc:Filter'] = $args['ogc:Filter'];
+		if (strlen($args['ogc:filter']) > 0) $searchParams['ogc:Filter'] = $args['ogc:filter'];
 		if (!empty($args['filterFields'])) $searchParams['cols'] = $args['filterFields'];// propertyName
 		if (!empty($args['primaryKey'])) $searchParams['primaryKey'] = $args['primaryKey'];// featureID
 		if (!empty($args['bbox'])) $searchParams['f_the_geom'] = "BBOX:{$args['bbox']}";
@@ -150,7 +183,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
 			}
 		}
 
-		if($DBG){echo "ogcFilter(" . strlen($args['ogc:Filter']) . "): {$args['ogc:Filter']}\n";}
+		if($DBG){echo "ogcFilter(" . strlen($args['ogc:filter']) . "): {$args['ogc:filter']}\n";}
 		$searchParams = array();
 		$searchParams['limit'] = $args['limit'];
 		$searchParams['limitstart'] = $args['offset'];
@@ -160,7 +193,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
 			$searchParams['order_by'] = $acl->getPrimaryKeyField();
 			$searchParams['order_dir'] = 'DESC';
 		}
-		if (strlen($args['ogc:Filter']) > 0) $searchParams['ogc:Filter'] = $args['ogc:Filter'];
+		if (strlen($args['ogc:filter']) > 0) $searchParams['ogc:Filter'] = $args['ogc:filter'];
 		if (!empty($args['filterFields'])) $searchParams['cols'] = $args['filterFields'];// PropertyName
 		if (!empty($args['primaryKey'])) $searchParams['primaryKey'] = $args['primaryKey'];// featureID
 		if (!empty($args['bbox'])) $searchParams['f_the_geom'] = "BBOX:{$args['bbox']}";

+ 487 - 0
SE/se-lib/Api/WsdlServer.php

@@ -0,0 +1,487 @@
+<?php
+
+// https://biuro.biall-net.pl/dev-pl/se-master/wfs-data.php/wsdl
+// https://biuro.biall-net.pl/dev-pl/se-master/wfs-data.php/wsdl/wfs-http-bindings.wsdl
+
+/*
+  Types - a container for data type definitions using some type system (such as XSD).
+  Message - an abstract, typed definition of the data being communicated.
+  Operation - an abstract description of an action supported by the service.
+  Port Type -an abstract set of operations supported by one or more endpoints.
+  Binding - a concrete protocol and data format specification for a particular port type.
+  Port - a single endpoint defined as a combination of a binding and a network address.
+  Service - a collection of related endpoints.
+ */
+class Api_WsdlServer extends Api_WfsServerBase {
+
+  public function run($request) {
+    $DBG = false;
+    IF($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$request (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($request);echo'</pre>';}
+
+    // /wfs-data.php/wsdl                               : $request->segments = ['wsdl']
+    // /wfs-data.php/wsdl/wfs-http-bindings.wsdl        : $request->segments = ['wsdl', 'wfs-http-bindings.wsdl']
+    if (empty($request->segments)) throw new Exception("Bad request", 400);
+    $countSegments = count($request->segments);
+    if ('wsdl' != $request->segments[0]) throw new Exception("Bad request", 400);
+    if (1 == $countSegments) {
+      if (empty($request->query)) return $this->wsdlAction();
+      else throw new Exception("TODO: wsdl query: [".json_encode($request->query)."]");
+    }
+
+    if (2 == $countSegments && 'wfs-http-bindings.wsdl' == $request->segments[1]) return $this->wsdlHttpBindingsAction();
+
+    throw new Exception("TODO: \$segments({$countSegments}): [".implode(", ", $request->segments)."]");
+  }
+
+  public function wsdlWfsResponseAction() {
+    $wsdlUri = Request::getHostUri() . "/wfs-data.php?wsdl";
+		$wsdlServiceName = "WFS-" . Request::getHostUri();// WFS-www.myservice.com
+		$serviceUrlBase = Request::getPathUri() . "wfs-data.php/wsdl";
+    $staticWsdlUrlBase = Request::getPathUri() . "schema/wsdl";
+		$soapBinding = false;
+		$httpBinding = true;
+		$kvpBinding = false;
+		echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
+?>
+<TODO>wfs-responses.wsdl</TODO>
+<?php
+  }
+
+  public function wsdlXmlInterfacesAction() {
+    $wsdlUri = Request::getHostUri() . "/wfs-data.php?wsdl";
+		$wsdlServiceName = "WFS-" . Request::getHostUri();// WFS-www.myservice.com
+		$serviceUrlBase = Request::getPathUri() . "wfs-data.php/wsdl";
+		$staticWsdlUrlBase = Request::getPathUri() . "schema/wsdl";
+		$soapBinding = false;
+		$httpBinding = true;
+		$kvpBinding = false;
+		echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
+?>
+<wsdl:definitions
+  targetNamespace="http://www.opengis.net/wfs/requests/2.0"
+  xmlns:wfs="http://www.opengis.net/wfs/2.0"
+  xmlns:ows="http://www.opengis.net/ows/1.1"
+  xmlns:wfs-req="http://www.opengis.net/wfs/requests/2.0"
+  xmlns:wfs-resp="http://www.opengis.net/wfs/responses/2.0"
+  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <wsdl:documentation xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <dc:identifier>urn:opengis:spec:wfs:wsdl-1.1:interfaces:2.0.2</dc:identifier>
+  <?php if(0) : ?><dc:date>2008-08-31</dc:date><?php endif; ?>
+  <dc:description>
+    This is the the normative abstract service interface definition
+    for the  OpenGIS Web Feature Service, v2.0.2. The WSDL 1.1 syntax is
+    used to describe the interface signatures and message structures.
+  </dc:description>
+  </wsdl:documentation>
+  <wsdl:import namespace="http://www.opengis.net/wfs/responses/2.0" location="<?= $staticWsdlUrlBase; ?>/wfs-responses.wsdl"/>
+  <wsdl:types>
+    <wsdl:documentation>
+      Convenience schema that defines all common WFS message elements.
+    </wsdl:documentation>
+    <xsd:schema targetNamespace="http://www.opengis.net/wfs/2.0"
+      xmlns:wfs="http://www.opengis.net/wfs/2.0"
+      xmlns:gml="http://www.opengis.net/gml/3.2"
+      xmlns:ogc="http://www.opengis.net/ogc/1.1"
+      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+      elementFormDefault="qualified" version="1.1.0">
+      <xsd:include schemaLocation="<?= $staticWsdlUrlBase; ?>/wfs.xsd"/>
+    </xsd:schema>
+  </wsdl:types>
+
+  <wsdl:message name="GetCapabilitiesRequest">
+    <wsdl:part name="Body" element="wfs:GetCapabilities"/>
+  </wsdl:message>
+  <wsdl:message name="DescribeFeatureTypeRequest">
+    <wsdl:part name="Body" element="wfs:DescribeFeatureType"/>
+  </wsdl:message>
+  <wsdl:message name="GetPropertyValueRequest">
+    <wsdl:part name="Body" element="wfs:GetPropertyValue"/>
+  </wsdl:message>
+  <wsdl:message name="GetFeatureRequest">
+    <wsdl:part name="Body" element="wfs:GetFeature"/>
+  </wsdl:message>
+  <wsdl:message name="GetFeatureWithLockRequest">
+    <wsdl:part name="Body" element="wfs:GetFeatureWithLock"/>
+  </wsdl:message>
+  <wsdl:message name="LockFeatureRequest">
+    <wsdl:part name="Body" element="wfs:LockFeature"/>
+  </wsdl:message>
+  <wsdl:message name="TransactionRequest">
+    <wsdl:part name="Body" element="wfs:Transaction"/>
+  </wsdl:message>
+  <wsdl:message name="ListStoredQueriesRequest">
+    <wsdl:part name="Body" element="wfs:ListStoredQueries"/>
+  </wsdl:message>
+  <wsdl:message name="DescribeStoredQueriesRequest">
+    <wsdl:part name="Body" element="wfs:DescribeStoredQueries"/>
+  </wsdl:message>
+  <wsdl:message name="CreateStoredQueryRequest">
+    <wsdl:part name="Body" element="wfs:CreateStoredQuery"/>
+  </wsdl:message>
+  <wsdl:message name="DropStoredQueryRequest">
+    <wsdl:part name="Body" element="wfs:DropStoredQuery"/>
+  </wsdl:message>
+
+  <wsdl:portType name="wfs">
+    <wsdl:operation name="wfs.getCapabilities">
+      <wsdl:input message="wfs-req:GetCapabilitiesRequest"/>
+      <wsdl:output message="wfs-resp:GetCapabilitiesResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+    <wsdl:operation name="wfs.describeFeatureType">
+      <wsdl:input message="wfs-req:DescribeFeatureTypeRequest"/>
+      <wsdl:output message="wfs-resp:DescribeFeatureTypeResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+    <wsdl:operation name="wfs.getPropertyValue">
+      <wsdl:input message="wfs-req:GetPropertyValueRequest"/>
+      <wsdl:output message="wfs-resp:GetPropertyValueResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+    <wsdl:operation name="wfs.getFeature">
+      <wsdl:input message="wfs-req:GetFeatureRequest"/>
+      <wsdl:output message="wfs-resp:GetFeatureResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+    <wsdl:operation name="wfs.getFeatureWithLock">
+      <wsdl:input message="wfs-req:GetFeatureWithLockRequest"/>
+      <wsdl:output message="wfs-resp:GetFeatureWithLockResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+    <wsdl:operation name="wfs.lockFeature">
+      <wsdl:input message="wfs-req:LockFeatureRequest"/>
+      <wsdl:output message="wfs-resp:LockFeatureResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+    <wsdl:operation name="wfs.transaction">
+      <wsdl:input message="wfs-req:TransactionRequest"/>
+      <wsdl:output message="wfs-resp:TransactionResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+    <wsdl:operation name="wfs.listStoredQueries">
+      <wsdl:input message="wfs-req:ListStoredQueriesRequest"/>
+      <wsdl:output message="wfs-resp:ListStoredQueriesResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+    <wsdl:operation name="wfs.describeStoredQueries">
+      <wsdl:input message="wfs-req:DescribeStoredQueriesRequest"/>
+      <wsdl:output message="wfs-resp:DescribeStoredQueriesResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+    <wsdl:operation name="wfs.createStoredQuery">
+      <wsdl:input message="wfs-req:CreateStoredQueryRequest"/>
+      <wsdl:output message="wfs-resp:CreateStoredQueryResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+    <wsdl:operation name="wfs.dropStoredQuery">
+      <wsdl:input message="wfs-req:DropStoredQueryRequest"/>
+      <wsdl:output message="wfs-resp:DropStoredQueryResponse"/>
+      <wsdl:fault name="ServiceExceptionReport" message="wfs-resp:ServiceExceptionReport"/>
+    </wsdl:operation>
+  </wsdl:portType>
+</wsdl:definitions>
+<?php
+  }
+
+  public function wsdlHttpBindingsAction() {
+    $wsdlUri = Request::getHostUri() . "/wfs-data.php?wsdl";
+		$wsdlServiceName = "WFS-" . Request::getHostUri();// WFS-www.myservice.com
+		$serviceUrlBase = Request::getPathUri() . "wfs-data.php/wsdl";
+    $staticWsdlUrlBase = Request::getPathUri() . "schema/wsdl";
+    $wfsServerUriBase = Request::getPathUri() . "wfs-data.php?version=1.0.0&service=WFS";
+		echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
+?>
+<wsdl:definitions
+   targetNamespace="http://www.opengis.net/wfs/http/2.0"
+   xmlns:wfs-req="http://www.opengis.net/wfs/requests/2.0"
+   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+   xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+   xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/">
+   <wsdl:documentation xmlns:dc="http://purl.org/dc/elements/1.1/">
+      <dc:description>
+         HTTP/1.1 protocol bindings for WFS interfaces.
+      </dc:description>
+      <?php if(0) : ?><dc:date>2008-08-31</dc:date><?php endif; ?>
+   </wsdl:documentation>
+   <wsdl:import namespace="http://www.opengis.net/wfs/requests/2.0" location="<?= $staticWsdlUrlBase; ?>/wfs-xml-interfaces.wsdl"/>
+   <wsdl:binding name="wfs-POST" type="wfs-req:wfs">
+      <wsdl:documentation>
+         wfs interface bound to the HTTP/1.1 POST method.
+      </wsdl:documentation>
+      <http:binding verb="POST"/>
+      <wsdl:operation name="wfs.getCapabilities">
+         <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=getCapabilities"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.describeFeatureType">
+         <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=DescribeFeatureType"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.getPropertyValue">
+        <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=getPropertyValue"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.getFeature">
+         <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=getFeature"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.getFeatureWithLock">
+         <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=getFeatureWithLock"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.lockFeature">
+         <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=lockFeature"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.transaction">
+         <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=transaction"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.listStoredQueries">
+         <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=listStoredQueries"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.describeStoredQueries">
+         <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=describeStoredQueries"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.createStoredQuery">
+         <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=createStoredQuery"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+      <wsdl:operation name="wfs.dropStoredQuery">
+         <http:operation location="<?= $wfsServerUriBase; ?>&REQUEST=dropStoredQuery"/>
+         <wsdl:input>
+            <mime:mimeXml/>
+         </wsdl:input>
+         <wsdl:output>
+            <mime:mimeXml/>
+         </wsdl:output>
+         <wsdl:fault name="ServiceExceptionReport">
+            <soap:fault use="literal" name="ServiceExceptionReport"/>
+         </wsdl:fault>
+      </wsdl:operation>
+   </wsdl:binding>
+</wsdl:definitions>
+<?php
+  }
+
+  public function wsdlAction() {// wsdl endpoints(ports)
+		$wsdlUri = Request::getHostUri() . "/wfs-data.php?wsdl";
+		$wsdlServiceName = "WFS-" . Request::getHostUri();// WFS-www.myservice.com
+		$serviceUrlBase = Request::getPathUri() . "wfs-data.php/wsdl";
+    $staticWsdlUrlBase = Request::getPathUri() . "schema/wsdl";
+		$soapBinding = false;
+		$httpBinding = true;
+		$kvpBinding = false;
+		echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
+?>
+<wsdl:definitions
+	targetNamespace="http://www.myservice.com/wfs/2.0"
+	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+	xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+	xmlns:wfs-http="http://www.opengis.net/wfs/http/2.0"
+	xmlns:wfs-http-kvp="http://www.opengis.net/wfs/http/kvp/2.0"
+	xmlns:wfs-soap="http://www.opengis.net/wfs/soap/2.0"
+	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+<?php if (false) : ?>
+	<wsdl:documentation xmlns:dc="http://purl.org/dc/elements/1.1/">
+		<dc:date>2008-08-31</dc:date>
+		<dc:description>
+			This WSDL document defines the service-specific properties
+			of a MyService WFS implementation; it specifies available
+			endpoints and alternative bindings.
+		</dc:description>
+	</wsdl:documentation>
+<?php endif; ?>
+<?php if ($soapBinding) : ?>
+	<wsdl:import namespace="http://www.opengis.net/wfs/soap/2.0" location="<?= $serviceUrlBase; ?>/wfs-soap-bindings.wsdl"/>
+<?php endif; ?>
+<?php if ($httpBinding) : ?>
+	<wsdl:import namespace="http://www.opengis.net/wfs/http/2.0" location="<?= $serviceUrlBase; ?>/wfs-http-bindings.wsdl"/>
+<?php endif; ?>
+<?php if ($kvpBinding) : ?>
+	<wsdl:import namespace="http://www.opengis.net/wfs/http/kvp/2.0" location="<?= $serviceUrlBase; ?>/wfs-kvp-bindings.wsdl"/>
+<?php endif; ?>
+	<wsdl:service name="<?= $wsdlServiceName; ?>">
+<?php if (false) : ?>
+		<wsdl:documentation>
+			A WFS-2.0 implementation. Includes alternative SOAP bindings
+			for the WFS interfaces.
+		</wsdl:documentation>
+<?php endif; ?>
+<?php if ($soapBinding) : ?>
+		<wsdl:port name="wfs-SOAP-Port" binding="wfs-soap:wfs-SOAP">
+			<soap:address location="<?= $serviceUrlBase; ?>/wfs-soap/services/WFSSOAP"/>
+		</wsdl:port>
+<?php endif; ?>
+<?php if ($httpBinding) : ?>
+		<wsdl:port name="wfs-POST-Port" binding="wfs-http:wfs-POST">
+			<http:address location="<?= $serviceUrlBase; ?>"/>
+		</wsdl:port>
+<?php endif; ?>
+<?php if ($kvpBinding) : ?>
+		<wsdl:port name="wfs-GET-Port" binding="wfs-http-kvp:wfs-GET">
+			<http:address location="<?= $serviceUrlBase; ?>"/>
+		</wsdl:port>
+<?php endif; ?>
+	</wsdl:service>
+</wsdl:definitions>
+<?php
+		exit;
+
+// example from oxygen site
+?>
+<description xmlns="http://www.w3.org/ns/wsdl"
+						 xmlns:tns="http://www.tmsws.com/wsdl20sample"
+						 xmlns:whttp="http://schemas.xmlsoap.org/wsdl/http/"
+						 xmlns:wsoap="http://schemas.xmlsoap.org/wsdl/soap/"
+						 xmlns:gml="http://www.opengis.net/gml"
+						 targetNamespace="<?= $wsdlUri; ?>">
+	<documentation>
+		Test WSDL 2.0
+	</documentation>
+
+	<types>
+		<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+							 xmlns="http://www.tmsws.com/wsdl20sample"
+							 targetNamespace="<?= $wsdlUri; ?>">
+			<xs:element name="request">
+				<xs:complexType>
+					<xs:sequence>
+						<xs:element name="ID" type="xs:integer"/>
+						<xs:element name="NAME" type="xs:string"/>
+					</xs:sequence>
+				</xs:complexType>
+			</xs:element>
+			<xs:element name="response">
+				<xs:complexType>
+					<xs:sequence>
+						<xs:element name="ID" type="xs:integer"/>
+						<xs:element name="DATA" type="gml:featureMember"/>
+					</xs:sequence>
+				</xs:complexType>
+			</xs:element>
+		</xs:schema>
+	</types>
+
+	<!-- Abstract interfaces -->
+	<interface name="Interface1">
+		<fault name="Error1" element="tns:response"/>
+		<operation name="Get" pattern="http://www.w3.org/ns/wsdl/in-out">
+			<input messageLabel="In" element="tns:request"/>
+			<output messageLabel="Out" element="tns:response"/>
+		</operation>
+	</interface>
+
+<!-- Concrete Binding Over HTTP -->
+   <binding name="HttpBinding" interface="tns:Interface1"
+            type="http://www.w3.org/ns/wsdl/http">
+      <operation ref="tns:Get" whttp:method="GET"/>
+   </binding>
+
+<!-- Concrete Binding with SOAP-->
+   <binding name="SoapBinding" interface="tns:Interface1"
+            type="http://www.w3.org/ns/wsdl/soap"
+            wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"
+            wsoap:mepDefault="http://www.w3.org/2003/05/soap/mep/request-response">
+      <operation ref="tns:Get" />
+   </binding>
+
+<!-- Web Service offering endpoints for both bindings-->
+   <service name="Service1" interface="tns:Interface1">
+      <endpoint name="HttpEndpoint"
+                binding="tns:HttpBinding"
+                address="http://www.example.com/rest/"/>
+      <endpoint name="SoapEndpoint"
+                binding="tns:SoapBinding"
+                address="http://www.example.com/soap/"/>
+   </service>
+</description>
+<?php
+		exit;
+	}
+
+}

+ 1 - 1
SE/se-lib/Data_Source.php

@@ -567,7 +567,7 @@ class Data_Source {
 		}
 
 		if (!$sql_where) $sql_where = "1=1";
-		if(V::get('DBG_DS', 0, $_GET) > 1){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">sql_where (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql_where);echo'</pre>'."\n\n";}
+		if(V::get('DBG_DS', 0, $_GET) > 1){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">sql_where (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql_where);echo"\n".'params: ';print_r($params);echo'</pre>'."\n\n";}
 		return $sql_where;
 	}