The last few days, I’ve been busy adding WFS 2.0 support to deegree 3 WFS. Current nightly builds already contain a lot of WFS 2.0-related functionality. Our first goal is to reach the following conformance classes from ISO 19142 (WFS 2.0) and ISO 19143 (Filter Encoding 2.0) in the next couple of days:
In order to achieve this conformance class, a WFS implementation must provide GetCapabilities, DescribeFeatureType, ListStoredQueries, DescribeStoredQueries and GetFeature operation with the stored query GetFeatureById. Besides providing valid output, such as service only has to support querying by feature identifier.
This class adds the the GetPropertyValue operation and the requirement for so-called ad hoc queries to the Simple WFS class. Ad hoc queries are based on Filter Encoding expressions. A Basic WFS has to support the Minimum Spatial Filter conformance class from ISO 19143 (Filter Encoding 2.0), i.e. BBOX queries. However, deegree implements a lot more filter conformance classes that enable quite powerful retrieval options (see below).
The supported operations can be executed using KVP-encoded requests.
The supported operations can be executed using XML-encoded requests.
This class implies that all Filter Encoding 2.0 comparison operators are implemented: PropertyIsEqualTo, PropertyIsNotEqualTo, PropertyIsLessThan, PropertyIsGreaterThan, PropertyIsLessThanOrEqualTo, PropertyIsGreaterThanOrEqualTo, PropertyIsLike, PropertyIsNull, PropertyIsNil and PropertyIsBetween. The logical operators (And, Or and Not) have to be provided as well.
This class requires that the BBOX spatial operator and one or more of the other spatial operators is implemented. deegree implements all spatial operators defined in Filter Encoding 2.0: Equals, Disjoint, Touches, Within, Overlaps, Crosses, Intersects, Contains, DWithin, Beyond, BBOX.
Implements sorting of the resources in a query response.
Server has to implement the minimum required set of XPath capabilities. Additionally, deegree implements support for arbitrary XPath 1.0 expressions — although complexer ones must be evaluated in memory as they cannot be mapped to the storage backend.