OGC 09-026r1 and ISO 19143:2010(E)Open Geospatial Consortium
Date: 2010-11-22
Reference number of this OpenGIS® Project Document: OGC 09-026r1 and ISO/DIS 19143
Version: 2.0.0
Category: OpenGIS® Implementation Standard
Editor: Peter Vretanos

OpenGIS Filter Encoding 2.0 Encoding Standard

Copyright © 2010 Open Geospatial Consortium
To obtain additional rights of use, visit http://www.opengeospatial.org/legal/.

Warning
This document is an approved OGC Standard developed by the OGC Membership. The document is available
for use on a Royalty Free basis. This document is also a joint OGC/ISO document (19143). Please see theISO cover page for additional information.
Recipients of this document are invited to submit, with their comments, notification of any relevant patentrights of which they are aware and to provide supporting documentation.

Document type:
OpenGIS® Implementation Standard
Document subtype: Encoding
Document stage:
Approved version 2.0.0
Document language: English

Copyright © 2010 Open Geospatial ConsortiumiOGC 09-026r1 and ISO 19143:2010(E)

INTERNATIONAL
STANDARD

ISO
19143
First edition
2010-10-15

Geographic information — Filter
encoding
Information géographique — Codage de filtresii

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)Contents

Page

Foreword ............................................................................................................................................................ iv
Introduction ......................................................................................................................................................... v
1

Scope ...................................................................................................................................................... 1

2

Conformance ......................................................................................................................................... 2

3

Normative references ............................................................................................................................ 3

4

Terms and definitions ........................................................................................................................... 3

5
5.1
5.2
5.3
5.4
5.5
5.6

Conventions ........................................................................................................................................... 6
Abbreviated terms ................................................................................................................................. 6
UML notation .......................................................................................................................................... 7
Use of examples .................................................................................................................................... 8
Namespaces ........................................................................................................................................... 8
KVP-encoded parameter lists .............................................................................................................. 8
XML Schema fragments ........................................................................................................................ 9

6
6.1
6.2
6.3

Query expressions ................................................................................................................................ 9
General ................................................................................................................................................... 9
Abstract query expressions ................................................................................................................. 9Ad hoc query expression.................................................................................................................... 10

7
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
7.10
7.11
7.12
7.13
7.14

Filter ...................................................................................................................................................... 13
General considerations....................................................................................................................... 13
Encoding .............................................................................................................................................. 14
Expressions ......................................................................................................................................... 14
Value references .................................................................................................................................. 15
Literals .................................................................................................................................................. 17
Functions ............................................................................................................................................. 18
Comparison operators ........................................................................................................................ 19
Spatial operators ................................................................................................................................. 22
Temporal operators ............................................................................................................................. 26
Logical operators ................................................................................................................................ 28
Object identifiers ................................................................................................................................. 30
Extensions ........................................................................................................................................... 31
Filter capabilities ................................................................................................................................. 33
Encoding .............................................................................................................................................. 35

8
8.1
8.2
8.3

Sorting .................................................................................................................................................. 42
General considerations....................................................................................................................... 42
Encoding .............................................................................................................................................. 42
Exceptions ........................................................................................................................................... 43

Annex A (normative) Conformance testing.................................................................................................... 44
Annex B (informative) Filter schema definitions ........................................................................................... 48
Annex C (informative) Examples ..................................................................................................................... 60
Annex D (informative) EBNF for XPath subset .............................................................................................. 80
Annex E (informative) Abstract model ............................................................................................................ 81
Bibliography ...................................................................................................................................................... 82

Copyright © 2010 Open Geospatial Consortiumiii

OGC 09-026r1 and ISO 19143:2010(E)Foreword
OGC Declarations
Attention is drawn to the possibility that some of the elements of this document may be the subject of patentrights. The Open Geospatial Consortium Inc. shall not be held responsible for identifying any or all such patentrights.
Recipients of this document are requested to submit, with their comments, notification of any relevant patentclaims or other intellectual property rights of which they may be aware that might be infringed by any
implementation of the standard set forth in this document, and to provide supporting documentation.
ISO Declarations
ISO (the International Organization for Standardization) is a worldwide federation of national standards bodies(ISO member bodies). The work of preparing International Standards is normally carried out through ISO
technical committees. Each member body interested in a subject for which a technical committee has been
established has the right to be represented on that committee. International organizations, governmental andnon-governmental, in liaison with ISO, also take part in the work. ISO collaborates closely with theInternational Electrotechnical Commission (IEC) on all matters of electrotechnical standardization.
International Standards are drafted in accordance with the rules given in the ISO/IEC Directives, Part 2.
The main task of technical committees is to prepare International Standards. Draft International Standards
adopted by the technical committees are circulated to the member bodies for voting. Publication as an
International Standard requires approval by at least 75 % of the member bodies casting a vote.
Attention is drawn to the possibility that some of the elements of this document may be the subject of patentrights. ISO shall not be held responsible for identifying any or all such patent rights.
ISO 19143 was prepared by Technical Committee ISO/TC 211, Geographic information/Geomatics, incollaboration with the Open Geospatial Consortium Inc. (OGC).

iv

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)Introduction
The Filter Encoding standard originated in the OGC.
A fundamental operation performed on a set of data or resources is that of querying in order to obtain a subsetof the data which contains certain desired information that satisfies some query criteria and which is also,
perhaps, sorted in some specified manner.
The term “projection clause” is used to describe an encoding for specifying which subset of resource
properties are presented in the response to a query.
The term “filter or selection clause” is used to describe an encoding of predicates which are typically used inquery operations to specify how data instances in a source dataset should be filtered to produce a result set.
Each data instance in the source set is evaluated using the filter expression. The overall filter expression
always evaluates to true or false. If the expression evaluates to true, the data instance satisfies the expression
and is marked as being in the result set. If the overall filter expression evaluates to false, the data instance is
not in the result set. Thus, the net effect of evaluating a filter expression is a set of data or resource identifiers
which satisfy the predicates in the expression.
The term “sorting clause” is used to describe an encoding for specifying how the data in a response is ordered
prior to being presented.
Such encodings are considered system neutral because using the numerous XML tools available today, XML
encoded projection, selection and sorting clauses can be easily validated, parsed and then transformed into
whatever target query language is required to retrieve or modify resources stored in some persistent object
store. For example an XML encoded query composed of a projection, selection and sorting clauses can betransformed into a SQL “SELECT … FROM … WHERE … ORDER BY …” statement to fetch data stored in a
SQL-based relational database. Similarly, the same XML encoded query expression can just as easily betransformed into an XQuery expression in order to retrieve data from XML document.
The XML and KVP encodings of projection, selection and sorting clauses described in this International
Standard are common components which can be used together or as individually by a number of web
services. Any service that requires the ability to query objects from a web-accessible repository can make useof the XML and KVP encodings of a query expression described in this International Standard. For example
the GetFeature operation, defined in ISO 19142, uses the elements derived from definitions in thisInternational Standard to encode query expressions.

Copyright © 2010 Open Geospatial Consortiumv

INTERNATIONAL STANDARD

ISO 19143:2010(E)Geographic information — Filter encoding

1

Scope

This International Standard describes an XML and KVP encoding of a system neutral syntax for expressing
projections, selection and sorting clauses collectively called a query expression.
These components are modular and intended to be used together or individually by other standards whichreference this International Standard.
EXAMPLE 1

ISO 19142 makes use of some or all of these components.

This International Standard defines an abstract component, named AbstractQueryExpression, from which
other specifications can subclass concrete query elements to implement query operations.
This International Standard also defines an additional abstract query component, named
AbstractAdhocQueryExpresison, which is derived from AbstractQueryExpression and from which otherspecifications can subclass concrete query elements which follow the following query pattern:
An abstract query element from which service specifications can subclass a concrete query element that
implements a query operation that allows a client to specify a list of resource types, an optional projection
clause, an optional selection clause, and an optional sorting clause to query a subset of resources thatsatisfy the selection clause.
This pattern is referred to as an ad hoc query pattern since the server is not aware of the query until it issubmitted for processing. This is in contrast to a stored query expression, which is stored and can be invokedby name or identifier.
This International Standard also describes an XML and KVP encoding of a system-neutral representation of a
select clause. The XML representation is easily validated, parsed and transformed into a server-specificlanguage required to retrieve or modify object instances stored in some persistent object store.
EXAMPLE 2
An XML encoded filter can be transformed into a WHERE clause for a SQL SELECT statement to fetch
data stored in a SQL-based relational database. Similarly, and XML encoded filter expression can be transformed into an
XPath or XPointer expression for fetching data from XML documents.

This International Standard defines the XML encoding for the following predicates.
a)

A standard set of logical predicates: and, or and not.

b)

A standard set of comparison predicates: equal to, not equal to, less than, less than or equal to, greater
than, greater than or equal to, like, is null and between.

c)

A standard set of spatial predicates: equal, disjoint, touches, within, overlaps, crosses, intersects,
contains, within a specified distance, beyond a specified distance and BBOX.

d)

A standard set of temporal predicates: after, before, begins, begun by, contains, during, ends, equals,
meets, met by, overlaps and overlapped by.

e)

A predicate to test whether the identifier of an object matches the specified value.

Copyright © 2010 Open Geospatial Consortium

1

OGC 09-026r1 and ISO 19143:2010(E)This International Standard defines the XML encoding of metadata that allows a service to declare which
conformance classes, predicates, operators, operands and functions it supports. This metadata is referred toas Filter Capabilities.

2

Conformance

Few usage scenarios require the full implementation of this International Standard to work. Therefore, service
providers may want to specify requirements for only the subset needed to fulfil their service. Or systemdevelopers may want to document which subset of this International Standard it is that that they have
implemented and conform to. These named conformance classes help in specifying such subsets.
This International Standard defines conformance classes based on the operations and behaviour that a filter
encoding service claims to implement. Table 1 indicates which behaviour shall be implemented for each of theconformance classes. The described behaviour shall be implemented for the corresponding conformanceclass, and the name of the paragraph of the actual detailed abstract test suite in Annex A.
Table 1 — FE conformance classes
Conformance class nameSubclause of
the abstract test
suite

Operation or behaviour

Query

Service that references this International Standard materializes a concrete query
element that is substitutable for fes:AbstractQueryElement.

A.1

Ad hoc Query

Service that references this International Standard materializes a concrete query
element that is substitutable for fes:AbstractAdhocQueryElement andmaterializes a concrete selection clause element that is substitutable forfes:AbstractSelectionClause and materializes a concrete projection clauseelement that is substitutable for fes:AbstractProjectionClause and materializes aconcrete sorting clause element that is substitutable forfes:AbstractSortingClause.

A.2

Functions

Implements functions that are in addition to the operators defined in thisInternational Standard.

A.3

Resource Identification

Implements the ResourceId operator with the rid parameter to allow predicates tobe written that allow a specific resource to be queried.

A.4

Minimum Standard Filter

Implements the comparison operators: PropertyIsEqualTo,
PropertyIsNotEqualTo, PropertyIsLessThan, PropertyIsGreaterThan,
PropertyIsLessThanOrEqualTo, PropertyIsGreaterThanOrEqualTo. Implements
the logical operators. Does not implement any additional functions.

A.5

Standard Filter

Implements all the comparison and logical operators and may implement one ormore additional functions.

A.6

Minimum Spatial Filter

Implements only the BBOX spatial operator.

A.7

Spatial Filter

Implements the BBOX spatial operator and one or more of the other spatial
operators.

A.8

Minimum Temporal Filter

Implements only the During temporal operator.

A.9

Temporal Filter

Implements the During temporal operator and one or more of the other temporal
operators.

A.10

Version navigation

Implements ResourceId operator with the parameters that allow versions ofresources to be queried (version, startTime, endTime).

A.11

Sorting

Implements sorting of the resources in a response.

A.12

Extended Operators

Implements additional operators not defined in this International Standard.

A.13

Minimum XPath

Implements the minimum required set of XPath capabilities.

A.14

Schema Element Function

Implements the schema-element() XPath function.

A.15

Other standards that include this International Standard shall declare what constitutes a “minimum” filter by
declaring the minimum set of conformance classes from Table 1 that shall be implemented.

2

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)3Normative references

The following referenced documents are indispensable for the application of this document. For dated
references, only the edition cited applies. For undated references, the latest edition of the referenced
document (including any amendments) applies.
ISO 19108:2002, Geographic information — Temporal schema
ISO 19125-1:2004, Geographic information — Simple feature access — Part 1: Common architecture
ISO 19136:2007, Geographic information — Geography Markup Language (GML)
IETF RFC 2396, Uniform Resource Identifiers (URN): Generic Syntax (August 1998)
OGC 06-121r3, OGC Web Services Common Specification, OGC® Implementation Specification(9 February 2009)
W3C XML, Extensible Markup Language (XML) 1.0 (Third edition), W3C Recommendation (4 February 2004)
W3C XML, Namespaces, Namespaces in XML, W3C Recommendation (14 January 1999)
W3C XML, Path Language, XML Path Language (XPath) 2.0, W3C Recommendation (23 January 2007)
W3C XML, Schema Part 1, XML Schema Part 1: Structures, W3C Recommendation (2 May 2001)
W3C XML, Schema Part 2, XML Schema Part 2: Datatypes, W3C Recommendation (2 May 2001)

4

Terms and definitions

For the purposes of this document, the following terms and definitions apply.
4.1
attribute〈XML〉 name-value pair contained in an element[ISO 19136:2007, definition 4.1.3]
NOTE

In this International Standard, an attribute is an XML attribute unless otherwise specified.

4.2
clientsoftware component that can invoke an operation from a server[ISO 19128:2005, definition 4.1]
4.3
coordinate
one of a sequence of n numbers designating the position of a point in n-dimensional space[ISO 19111:2007, definition 4.5]
4.4
coordinate reference systemcoordinate system that is related to an object by a datum[ISO 19111:2007, definition 4.8]

Copyright © 2010 Open Geospatial Consortium

3

OGC 09-026r1 and ISO 19143:2010(E)4.5
coordinate system
set of mathematical rules for specifying how coordinates are to be assigned to points[ISO 19111:2007, definition 4.10]
4.6
element〈XML〉 basic information item of an XML document containing child elements, attributes and character data
[ISO 19136:2007, definition 4.1.23]
4.7
featureabstraction of real world phenomena[ISO 19101:2002, definition 4.11]
NOTE
A feature can occur as a type or an instance. It is intended that the term “feature type” or “feature instance” beused when only one is meant.

4.8
feature identifier
identifier that uniquely designates a feature instance[ISO 19142:2010, definition 4.8]
4.9
feature reference
Uniform Resource Identifier that identifies a feature
4.10
filter capabilities XML
metadata, encoded in XML, that describes which predicates defined in this International Standard a system
implements
4.11
filter expression
predicate expression encoded using XML
4.12
filter expression processor
component of a system that processes a filter expression
4.13
functionrule that associates each element from a domain (source, or domain of the function) to a unique element inanother domain (target, co-domain, or range)[ISO 19107:2003, definition 4.41]
4.14
interface
named set of operations that characterize the behaviour of an entity[ISO 19119:2005, definition 4.2]

4

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)4.15
literal value
constant, explicitly specified value
NOTE

This contrasts with a value that is determined by resolving a chain of substitution (e.g. a variable).

4.16
join predicate
filter expression that includes one or more clauses that constrain properties from two different entity types
NOTE

In this International Standard, the entity types are resource types.

4.17
namespace〈XML〉 collection of names, identified by a URI reference which are used in XML documents as element
names and attribute names[W3C XML Namespaces]
4.18
operation
specification of a transformation or query that an object may be called to execute[ISO 19119:2005, definition 4.3]
4.19
predicate
set of computational operations applied to a data instance which evaluate to true or false
4.20
predicate expression
formal syntax for describing a predicate
4.21
property
facet or attribute of an object referenced by a name
4.22
requestinvocation of an operation by a client[ISO 19128:2005, definition 4.10]
4.23
resource
asset or means that fulfils a requirement[ISO 19115:2003, definition 4.10]
NOTE

In this International Standard, a resource is assumed to have identity.

4.24
response
result of an operation returned from a server to a client[ISO 19128:2005, definition 4.11]

Copyright © 2010 Open Geospatial Consortium

5OGC 09-026r1 and ISO 19143:2010(E)4.25
servicedistinct part of the functionality that is provided by an entity through interfaces[ISO 19119:2005, definition 4.1]
4.26
serverparticular instance of a service[ISO 19128:2005, definition 4.12]
4.27
tuple
ordered list of values[ISO 19136:2007, definition 4.1.63]
NOTE

In this International Standard, the ordered list is generally a finite sequence of resources.

4.28
Uniform Resource Identifier
URI
unique identifier for a resource, structured in conformance with IETF RFC 2396
[ISO 19136:2007, definition 4.1.65]
NOTE
The general syntax is <scheme>::<scheme-specified-part>. The hierarchical syntax with a namespace is<scheme>://<authority><path>?<query>.

5

Conventions

5.1

Abbreviated terms

BBOX

Bounding Box

CRS

Coordinate Reference System

EBNF

Extended Backus-Naur FormEPSG

European Petroleum Survey GroupGML

Geography Markup Language

HTTP

Hypertext Transfer Protocol

HTTPS

Secure Hypertext Transfer Protocol

IETF

Internet Engineering Task Force

KVP

Keyword-value Pair

OGC

Open Geospatial Consortium

SRS

Spatial Reference System

URI

Uniform Resource Identifier

URL

Uniform Resource Locator

6

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)

URN

Uniform Resource NameUTC

Coordinated Universal Time

W3C

World Wide Web Consortium

WFS

Web Feature Service

XML

Extensible Markup Language

5.2

UML notation

5.2.1 Figure 1 describes the Unified Modelling Language (UML) notations used in this International
Standard for UML class diagrams.
Association between classes
Association NameClass #1

role-1

Class #2

role-2

Association Cardinality
Class

0..*

Class

0..1

Class

Only one

1..*

Class

Zero or more

n

Class

One or more

Specific number

Optional (zero or one)

Aggregation between classes

Class Inheritance (subtyping of classes)

Aggregate Class

Superclass

Component Class
Subclass #1

Subclass #2

Subclass #n...............

Figure 1 — UML notation in class diagrams
5.2.2

In these class diagrams, the following stereotypes of UML classes are used:a)<<DataType>> is a descriptor of a set of values that lack identity (independent existence and thepossibility of side effects). A DataType is a class with no operations, whose primary purpose is to hold theinformation.

b)<<Enumeration>> is a data type whose instances form a list of alternative literal values. Enumerationmeans a short list of well-understood potential values within a class.

c)<<CodeList>> is a flexible enumeration for expressing a long list of potential alternative values. If the list
alternatives are completely known, an enumeration shall be used; if the only likely alternatives are known,a code list shall be used.

d)<<Interface>> is a definition of a set of operations that is supported by objects having this interface. An
Interface class cannot contain any attributes.

Copyright © 2010 Open Geospatial Consortium

7

OGC 09-026r1 and ISO 19143:2010(E)e)<<Type>> is a stereotyped class used for specification of a domain of instances (objects), together withthe operations applicable to the objects. A Type class may have attributes and associations.

f)<<Union>> is a list of alternate attributes where only one of those attributes may be present at any time.

See also ISO/TS 19103:2005, 6.8.2 and D.8.3.
5.2.3

In this International Standard, the following standard data types are used:a)CharacterString is a sequence of characters;b)LocalisedCharacterString is a CharacterString associated with a locale;c)Boolean is a value specifying TRUE or FALSE;d)

URI is an identifier of a resource that provides more information;e)Integer is an integer number.

5.3

Use of examples

This International Standard makes use of XML examples. They are meant to illustrate the various aspects offilters discussed in this International Standard. While every effort has been made to ensure that the examples
are well formed and valid, this goal may be sacrificed for the sake of clarity. For instance, many examples areformatted in a specific way to highlight a particular aspect that would render the example invalid from theperspective of an XML validation tool. Furthermore, most examples reference fictitious servers and data.
Thus, this International Standard does not assert that any XML encoded example, copied from thisInternational Standard, would necessarily execute correctly or validate using a particular XML validation tool.

5.4

Namespaces

Namespaces (a specified in W3C XML Namespaces) are used to discriminate XML vocabularies from one
another. The following namespaces are normatively used in this International Standard:a)(http://www.opengis.net/fes/2.0): for the Filter vocabulary;b)(http://www.opengis.net/gml/3.2): for the GML vocabulary.

5.5

KVP-encoded parameter lists

This International Standard defines both XML and KVP encodings for query and filter expressions. Several of
the parameters in the KVP-encoding consist of lists of values (see Table 2) and possibly lists of lists of values.
This subclause defines how to encode lists of values as the value of a parameter.
Parameters consisting of lists shall use the comma (“,”) as the delimiter between items in the list. In addition,
multiple lists may be specified as the value of a parameter by enclosing each list in parentheses; “(“, ”)”.
EXAMPLE 1

This example shows a list of items.

PARAMETER=item1,item2,item3,item4a%2Citem4bThis list consists of four values: item1, item2, item3 and the value “item4a,item4b”.
NOTE
In this example, the embedded comma in the last item has been encoded as per IETF RFC 2396 in order todistinguish it from the commas used in the list of delimit list entries.
EXAMPLE 2

This example shows multiple lists of items assigned to a single parameter.

PARAMETER=(item11,item12,item13)(item21,item22,item23)

8

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)5.6

XML Schema fragments

This International Standard makes use of XML Schema (as given in W3C XML Schema Part 1 and W3C XML
Schema Part 2) fragments to define the XML encoding of the components of a filter expression. These XML
Schema fragments are collected into a set of consolidated schema files in Annex B.

6

Query expressions

6.1

GeneralA query expression (see Figure 2) is an action that performs a search over some set of resources and returns
a subset of those resources. Other standards that reference this International Standard shall assert what a
resource is.
EXAMPLEA WFS would assert that a resource is a feature.
QueryExpression+ handle [0..1] : CharacterString

AdhocQueryExpression+ types [1..*] : Type {ordered}+ projection [0..1] : Any+ selection [0..1] : Any+ sorting [0..1] : AnyType+ name : TypeName+ alias [0..1] : LocalName<<Union>>
TypeName+ ofType : ScopedName+ ofKind : ScopedName

Figure 2 — Query expressions

6.2

Abstract query expressions

This International Standard defines the abstract element fes:AbstractQueryExpression as the head of a
substitution group of query expressions. The element fes:AbstractQueryExpression is defined by the following
XML Schema fragment:<xsd:element name="AbstractQueryExpression"
type="fes:AbstractQueryExpressionType" abstract="true"/><xsd:complexType name="AbstractQueryExpressionType" abstract="true"><xsd:attribute name="handle" type="xsd:string"/></xsd:complexType>The fes:AbstractQueryExpression element defines the handle attribute which can be used to assign userdefined identifier to the query expression for the purpose of error handling or correlating the response to aquery, from within a series of queries, with the source query expression.
International Standards that reference this International Standard shall declare the types(s) of resources thatcan be queried and shall derive query expressions from fes:AbstractQueryExpression.

Copyright © 2010 Open Geospatial Consortium

9

OGC 09-026r1 and ISO 19143:2010(E)6.3

Ad hoc query expression

6.3.1

General considerations

A fundamental type of query expression is the ad hoc query expression. It is ad hoc in the sense that thequery is not known before the time it is being executed as, for example, a stored query would be.
An ad hoc query expression is a query expression that contains the names of one or more resource types toquery, an optional projection clause enumerating the properties of the resource to present in the response, an
option selection clause that constraints the properties of those resources types in order to define a result set
and an optional sorting clause specifying the order in which the result set is presented.
This subclause defines the head of an substitution group called fes:AbstractAdhocQueryExpression fromwhich standards that reference this International Standard can derive concrete ad hoc query expressions.
6.3.2

XML encoding

The following XML Schema fragment define the abstract element fes:AbstractAdhocQueryExpression<xsd:element name="AbstractAdhocQueryExpression"
type="fes:AbstractAdhocQueryExpressionType"substitutionGroup="fes:AbstractQueryExpression"
abstract="true"/><xsd:complexType name="AbstractAdhocQueryExpressionType" abstract="true"><xsd:complexContent><xsd:extension base="fes:AbstractQueryExpressionType"><xsd:sequence><xsd:element ref="fes:AbstractProjectionClause"
minOccurs="0" maxOccurs="unbounded"/><xsd:element ref="fes:AbstractSelectionClause" minOccurs="0"/><xsd:element ref="fes:AbstractSortingClause" minOccurs="0"/></xsd:sequence><xsd:attribute name="typeNames"
type="fes:TypeNamesListType" use="required"/><xsd:attribute name="aliases"
type="fes:AliasesType"/></xsd:extension></xsd:complexContent></xsd:complexType><xsd:simpleType name="TypeNamesListType"><xsd:list itemType="fes:TypeNamesType"/></xsd:simpleType><xsd:simpleType name="TypeNamesType"><xsd:union memberTypes="fes:SchemaElement xsd:QName"/></xsd:simpleType><xsd:simpleType name="SchemaElement"><xsd:restriction base="xsd:string"><xsd:pattern value="schema\-element\(.+\)"/></xsd:restriction></xsd:simpleType><xsd:simpleType name="AliasesType"><xsd:list itemType="xsd:NCName"/></xsd:simpleType><xsd:element name="AbstractProjectionClause" abstract="true"/><xsd:complexType name="AbstractProjectionClauseType" abstract="true"/><xsd:element name="AbstractSelectionClause" abstract="true"/><xsd:complexType name="AbstractSelectionClauseType" abstract="true"/><xsd:element name="AbstractSortingClause" abstract="true"/><xsd:complexType name="AbstractSortingClauseType" abstract="true"/>

6.3.3

KVP-encoding

Table 2 defines the KVP-encoding for an ad hoc query expression.

10

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)Table 2 — KVP-encoding for ad hoc query expression
URL Component

O/Ma

Description

TYPENAMES

Mb

A comma-separated list of resource types to query. Specifying more that one
name indicates that a join is being performed.

ALIASESO

A comma-separated list of aliases for the resource types listed as the value of
the TYPENAMES parameter.

O

If more that one feature type name is specified as the value of the TYPENAMES
keyword, a list of parameter lists shall be specified (see 5.5.). Each sublist shallcorrespond 1:1 with each feature type name listed as the value of the
TYPENAMES parameter.

FILTER(Mutually exclusive withRESOURCEID and BBOX)O

The value of the parameter shall be a filter expression encoded using thelanguage specified by the FILTER_LANGUAGE parameter.

FILTER_LANGUAGEO

Indicates the predicate language used to encode the filter expression that is thevalue of the FILTER parameter.

Projection clause
PROPERTYNAME

Selection clause

The default value urn:ogc:def:query Language:OGC-FES:Filter shall be used toindicate that the value of FILTER parameter is a string encoding the filter using
an XML fragment as defined in this International Standard.
RESOURCEID(Mutually exclusive with FILTER and
BBOX)

O

A comma-separated list of resource identifiers to retrieve from some data store.

BBOX(Mutually exclusive with FILTER and
RESOURCEID)O

A bounding rectangle, encoded as specified in OGC 06-131r3, indicating that all
resources which intersect that BBOX shall be retrieved from some data store.

O

The SORTBY parameter is used to specify a list of value references that should
be used to order (upon presentation) the set of resource instances that satisfy
the query. The value of the SORTBY parameter shall have the form
“PropertyName [ASC|DESC][,PropertyName [ASC|DESC],…]” where the letters
ASC are used to indicate an ascending sort and the letters DESC are used toindicate a descending sort. If neither ASC nor DESC are specified, the default
sort order shall be ascending. An example value might be: “SORTBY=Field1
DESC,Field2 DESC,Field3”. In this case the results are sorted by Field 1
descending, Field2 descending and Field3 ascending.

Sorting clause
SORTBYa

O = Optional, M = Mandatory.

bStandards that reference this International Standard may change the requirement for the TYPENAME parameter. In such cases,
the referencing standard shall document whether the TYPENAME parameter is mandatory, optional or mandatory in some cases andoptional in others.

6.3.3.1

Parameter discussion

6.3.3.1.1

typeNames parameter

The mandatory typeNames parameter shall be used within an ad hoc query expression to encode the namesof one or more correlated resource types to be queried. Individual resource type names shall be encoded as
QName (as given in W3C XML Schema Part 2).
NOTE

For the KVP-encoding of the typeNames parameter, see 5.5 for encoding lists of values.

International Standards that derive query expressions from fes:AbstractQueryExpression shall declare theresource type(s) that can be queried.

Copyright © 2010 Open Geospatial Consortium

11

OGC 09-026r1 and ISO 19143:2010(E)6.3.3.1.2

aliases parameter

The optional aliases parameter may be used within an ad hoc query expression to specify alternate names forthe resource type names specified as the value of the typeNames parameter. A resource type alias may be
used anywhere; the resource type name may be used within the context of the query expression.
The number of list elements in the value of the aliases parameter shall match the number of corresponding
resource type names in the value of the typeNames parameter and shall be correlated 1:1.
EXAMPLE 1< … typeNames=“ns1:ResourceType1, ns2:ResourceType2” aliases=“A B” …>This example encodes an ad hoc query expression fragment that queries the resource types ns1:ResourceType1 andns2:ResourceType2 which are aliased to A and B. Thus, the tokens A or B can be used within the filter expression of thequery expression as alternate names for the resource types ns1:ResourceType1 and ns2:ResourceType2.

Each alias specified in the value of aliases attribute shall be unique within the context of a single query
expression.
If the aliases attribute is used, an alias shall be specified for each resource type name listed as the value of
typeNames attribute.
Aliases are typically used in query expressions that perform a join operation to support self-joins. That is a joinof one resource type back to itself.
EXAMPLE 2

typeNames=“myns:ResType1 myns:ResType1” aliases=“a b”

In this example, the first resource type, myns:ResType1, is aliased to the name “a” and the second resource type,
myns:Feat1, is aliased to the name “b”. Thus properties from the first instance of myns:ResType1 can be referenced in arequest as “/a/myns:property_name” and properties from the second instance of myns:ResType2 can be referenced in arequest as “/b/myns:property_name” where the token “myns:property_name” is used as a place holder for the name of any
property of the resource type myns:ResType1.

6.3.3.1.3

Projection clause

A projection clause encodes a list of optional resource properties that shall be available in a query response.
For XML-encoded requests, specifications which implement the projection clause of an ad hoc query
expression shall define a concrete element derived from fes:AbstractAdhocProjectionClause.
For KVP-encoded requests, the PROPERTYNAME keyword shall be used to encode the projection clause.
The value of the PROPERTYNAME keyword shall be a comma-separated list of property names.
6.3.3.1.4

Selection clause

The selection clause defines a set of query predicates that shall be applied to a dataset in order to define asubset of data to be operated upon.
Services that implement this International Standard shall use the fes:Filter element, which is substitutable forfes:AbstractSelectionClause, to encode the selection clause of a query expression.
For XML-encoded requests, the selection clauses shall be encoded using the fes:Filter element.
For KVP-encoded requests, the select clause shall be encoded using the keywords FILTER,FILTER_LANGUAGE, RESOURCEID, BBOX (see Table 2). The parameters FILTER, RESOURCEID andBBOX are mutually exclusive. In the event that a selection clause specifies more than one of theseparameters, an OperationNotSupported (as given in OGC 06-121r3, Table 25) exception shall be raised.

12

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)6.3.3.1.5

Join queries

A join query finds tuples (i.e. pairs, triples, etc.) of resources, among a list of resource types, that satisfy a filter
expression which includes join predicates. If the filter expression is satisfied, that tuple of resources is
considered to be in the result set of the query expression.
A join query is encoded by:a)listing the resource types to join using the typeNames parameter (see 6.3.3.1.1);b)specifying join predicates in the selection clause that reference properties of the resource types listed as
the values of the typeNames parameter (see 6.3.3.1.1).

Services that implement join queries shall implement an inner join meaning that only resource tuples whichmatch the join conditions shall be returned in the result set.
6.3.3.1.6

schema-element() function

If the list of values for the typeNames parameters contains a single QName then the schema-element()
function can be used to trigger a sequence of queries on the specified resource type and any resource typewhose object elements are in the substitution group of the specified resource type.
EXAMPLE
typeNames=“schema-element(ns1:Vehicles)” might, along with ns1:Vehicle, query the resource types
ns1:Cars, ns1:Boats, etc …

The schema-element() function shall not be used if a join operation (see 6.3.3.1.5) is being performed.
6.3.3.1.7

Sorting clause

A sorting clause can be used to assert the order in which resources shall appear in response to an ad hoc
query expression.
For XML-encoded requests, standards that reference this International Standard shall use the fes:SortBy
element (see Clause 9), which is substitutable for fes:AbstractSortingClause, to encode the sorting clause ofan ad hoc query expression.
For KVP-encoded requests, the keyword SORTBY shall be used to encode a sorting clause (see Table 2).

7Filter

7.1

General considerations

A filter (see Figure 3) is used to identify a subset of resources from a collection of resources whose property
values satisfy a set of logically connected predicates. If the property values of a resource satisfy all thepredicates in a filter then that resource is considered to be part of the resulting subset.
This clause defines the XML encoding of a filter as a set of predicate expressions, contained within the root
element fes:Filter, encoded using the elements defined herein.

Copyright © 2010 Open Geospatial Consortium

13

OGC 09-026r1 and ISO 19143:2010(E)Filter+ filter : Operator

Operator

NonIdOperator

SpatialOperator

TemporalOperator

IdOperator

ComparisonOperator

LogicalOperator

ExtensionOperator

Figure 3 — Filter

7.2

Encoding

The root element of a filter expression, fes:Filter, is defined by the following XML Schema fragment:<xsd:element name="Filter"
type="fes:FilterType"substitutionGroup="fes:AbstractSelectionClause"/><xsd:complexType name="FilterType"><xsd:complexContent><xsd:extension base="fes:AbstractSelectionClauseType"><xsd:sequence><xsd:group ref="fes:FilterPredicates"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:group name="FilterPredicates"><xsd:choice><xsd:element ref="fes:comparisonOps"/><xsd:element ref="fes:spatialOps"/><xsd:element ref="fes:temporalOps"/><xsd:element ref="fes:logicOps"/><xsd:element ref="fes:extensionOps"/><xsd:element ref="fes:Function"/><xsd:element ref="fes:_Id" maxOccurs="unbounded"/></xsd:choice></xsd:group><xsd:element name="extensionOps"
type="fes:ExtensionOpsType"abstract="true"/><xsd:complexType name="ExtensionOpsType" abstract="true"/>

The elements contained within the fes:Filter element are discussed in detail in subsequent clauses.

7.3

Expressions

7.3.1

General considerations

An expression (see Figure 4) is a combination of one or more symbols that form part of a predicate. In thisInternational Standard, valid symbols shall be encoded using the XML elements defined in this International
Standard. Expressions are encoded by nesting these elements to form XML fragments that validate against
the schemas in Annex C.

14

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)Expression+expression {ordered}0..*

Literal

Function+ value : Any+ name : ScopedName

ValueReference

In XML this shall be an
Xpath expression as
specified in 7.3<<Type>>CharacterString(from ISO/TS 19103)

Figure 4 — Expression
7.3.2

Encoding

An expression can be formed using the following XML elements:•••

fes:ValueReference
fes:Literal
fes:Function

These elements all belong to the substitution group expression and can be used wherever an expression iscalled for. In addition, the XML fragments formed by combining these elements are themselves expressions
and can be used wherever an expression is called for.
The fes:expression element is an abstract element and its only purpose is to act as a placeholder for theelements and combinations of elements that can be used to form expressions.
The XML Schema fragment that defines the abstract fes:expression element is:<xsd:element name="expression" abstract="true"/>

7.4

Value references

7.4.1

General considerations

A value reference is a string that represents a value that is to be evaluated by a predicate. The string can, forexample, be the name of a property of a resource or a path expression that represents some value that is partof the property of a resource. At runtime, a predicate is evaluated by replacing the value reference by thevalue it refers to and then executing whatever test is encoded by the predicate.
7.4.2

Encoding

The following fragment defines the XML encoding for the fes:ValueReference element:<xsd:element name="ValueReference" type="xsd:string" substitutionGroup="fes:expression"/>Copyright © 2010 Open Geospatial Consortium

15

OGC 09-026r1 and ISO 19143:2010(E)7.4.3

Property names in GML

The fes:ValueReference element can used to specify the name of any property of an object whose value shallbe tested by a predicate in a filter expression. For services that implement this International Standard and use
GML (see ISO 19136), property names shall be encoded using XML elements as described in the Extensible
Markup Language (XML) 1.0 (see W3C XML) specification. In addition, GML property names may be qualified
with a namespace, in which case the name shall conform to the Namespaces in XML (as given in W3C XML
Namespaces) specification. The following definition is taken from Clauses 2 and 3 of W3C XML Namespaces:
Names and Tokens[4] NCName ::= (Letter | '_') (NCNameChar)*/* An XML Name, minus the ":" */[5] NCNameChar ::= Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender[6] QName ::= (Prefix ':')? LocalPart[7] Prefix ::= NCName[8] LocalPart ::= NCName

The definitions of the components Letter, Digit, CombiningChar and Extender are given in Annex B of
Namespaces in XML (W3C XML Namespaces).
EXAMPLE 1

Examples of valid property names are: age, temperature, _KHz, INWATERA_1M.WKB_GEOMEXAMPLE 2

Examples of invalid property names are: +Domain, 123_SomeName

7.4.4

XPath expressions

In cases where the data model of the service that implements this International Standard is represented as
XML, as is the case with ISO 19142 where GML (see ISO 19136) is used, value references can refer to partsof a complex property and shall be encoded using the XML Path Language (given in W3C XML Path
Language).
The XML Path Language (as given in W3C XML Path Language) specification is a language for addressing
parts of an XML document, or in the case of this International Standard, for referencing XML elements andattributes that represent the properties of an object encoded in XML.
This International Standard does not require that a filter expression processor support the full XPath language.
In order to keep the implementation entry cost as low as possible, services that implement this specification
and require the use of XPath, shall support a subset of the XPath language. The following set of rules defines
this subset of the XPath language.
a)

The abbreviated form of the child and attribute axis specifier (see W3C XML Path Language) shall besupported.

b)

The context node shall be the resource element, except in the case of a join operation, in which case thecontext node shall be the parent of the resource element.

c)Each step in the path may include an XPath predicate.

d)

At least the following predicate expression items shall be supported:16

1)

a positive non-zero integer may be used to indicate which child of the context node should beselected (i.e. an index). This allows ordered properties with repeatable values to be specificallyreferenced;2)

an equality predicate for the form “=value” may be used to indicate which child of the context node
should be selected based on its value. This allows properties with repeatable value to be specificallyreferenced by value;

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)3)

equality tests of the form “child=value” may be used to identify a specific object property by
constraining the child elements of the property. Equality tests can be logically combined using the“and” or “or” operators.
NOTE

Consider the following example:<Building><name>City hall</name><addresses><Address><city>Bonn</city><street>Oxfordstrasse</street><number>1</number></Address><Address><city>Bonn</city><street>Breitestrasse</street><number>5</number></Address></addresses></Building><Filter><PropertyIsEqualTo><ValueReference>addresses/Address/city</ValueReference><Literal>Bonn</Literal></PropertyIsEqualTo></Filter>In this example “City hall” has two address values. The following XPath expression can be used
to reference the number of the first Address value:
addresses/Address[street="Oxfordstrasse"]/numbere)

The last step of the XPath expression shall be a resource property or sub-component of a resource
property.

f)

The function schema-element() may be supported.

Other standards that reference this International Standard shall declare whether implementing the schemaelement() function is mandatory or optional.
EXAMPLE 1
The WFS standard (see ISO 19142) declares that implementing the schema-element() function is
optional and defines a conformance class to test whether a WFS implementation supports that method or not.

Other standards that reference this International Standard may extend this XPath subset as required.
EXAMPLE 2
The WFS standard (see ISO 19142) extends this subset by allowing the use of an accessor function
called wfs:valueOf().

Annex D defines the subset of the XPath grammar for the path expressions used in this International Standard.
It follows the EBNF (see ISO/IEC 14977) notation defined in the XPath 2.0 specification, Appendix A “XPathgrammar” (see http://www.w3.org/TR/xpath20/#nt-bnf).

7.5

Literals

7.5.1

General considerations

This subclause defines how the XML encoding of a filter expression defined in this International Standard
encodes literal values. A literal value is any part of a statement or expression which should be used asprovided.

Copyright © 2010 Open Geospatial Consortium

17

OGC 09-026r1 and ISO 19143:2010(E)7.5.2

Encoding

The following XML Schema fragment defines the fes:Literal element:<xsd:element name="Literal" type="fes:LiteralType"substitutionGroup="fes:expression"/><xsd:complexType name="LiteralType" mixed="true"><xsd:sequence><xsd:any minOccurs="0"/></xsd:sequence><xsd:attribute name="type" type="xsd:QName"/></xsd:complexType>The fes:Literal element is used to encode any explicitly stated value. If the literal value is a geometric value,
the value shall be encoded following the rules of GML (defined in ISO 19136).
Literals can, optionally, be typed using the type attribute. The value of the attribute type is the name of typefrom some type system.
EXAMPLEThe following XML fragment: <Literal type=“xs:date”>1963-10-13</Literal> encodes a date value. The
type of the value is xs:date as defined in (see W3C XML Schema Part 2).

7.6

Functions

7.6.1

General considerations

This section defines the encoding of single valued functions using the fes:Function element. A function is anamed procedure that performs a distinct computation. A function can accept zero or more arguments as
input and generates a single result.
Functions may be used to extend the filter syntax with additional operators that can be used in filter
expressions.
If a standard that references this International Standard extends the filter syntax using the fes:Function
element, any additional functions shall be documented in the referencing standard. An implementation of thereferencing standard shall, in its filter capabilities (see 7.14.6), declare these additional functions.
7.6.2

Encoding

The following XML Schema fragment declares the fes:Function element:<xsd:element name="Function" type="fes:FunctionType"substitutionGroup="fes:expression"/><xsd:complexType name="FunctionType"><xsd:sequence><xsd:element ref="fes:expression"
minOccurs="0" maxOccurs="unbounded"/></xsd:sequence><xsd:attribute name="name" type="xsd:string" use="required"/></xsd:complexType>A function is composed of the name of the function, encoded using the attribute “name”, and zero or morearguments contained within the fes:Function element. The arguments themselves are in-turn expressions(see 7.3) and shall appear in the order in which they are defined in the filter capabilities document (see 7.14.6).
Functions that can be used as filter operators and can thus be combined using logical operations (see 7.10)
shall return a boolean result.

18

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)

EXAMPLEThe following XML fragment uses a function to invoke an operator named “ClassifiedAs” to find roads
classified as major highways within some area of interest. The function accepts two arguments; the name of aclassification scheme, and the name of a node within that classification scheme.
<fes:Filter><fes:And><fes:Function name="ClassifiedAs"><fes:Literal>RoadTaxonomy</fes:Literal><fes:Literal>Major Highway</fes:Literal></fes:Function><fes:BBOX><fes:ValueReference>/RS1/geometry</fes:ValueReference><gml:Envelope srsName="urn:ogc:def:crs:EPSG::1234"><gml:lowerCorner>10 10</gml:lowerCorner><gml:upperCorner>20 20</gml:upperCorner></gml:Envelope></fes:BBOX></fes:And></fes:Filter>

7.7

Comparison operators

7.7.1

General considerations

A comparison operator (see Figure 5) is used to form expressions that evaluate the mathematical comparison
between two arguments. If the arguments satisfy the comparison then the expression evaluates to true.
Otherwise the expression evaluates to false.
A service that implements this International Standard shall, in its filter capabilities (see 7.14.3), declare which
comparison operators it supports.
ComparisonOperator<<Enumeration>>
MatchAction
+ any
+ all
+ one

BinaryComparisonOperator

BetweenComparisonOperator+ operatorType : BinaryComparisonName+ expression [2] : Expression {ordered}+ matchCase [0..1] : Boolean = #true+ matchAction [0..1] : MatchAction = #any

+ expression : Expression+ lowerBoundary : Expression+ upperBoundary : Expression<<CodeList>>
BinaryComparisonName+ PropertyIsEqualTo+ PropertyIsNotEqualTo+ PropertyIsLessThan+ PropertyIsGreaterThan+ PropertyIsLessThanOrEqualTo+ PropertyIsGreaterThanOrEqualTo

NilOperator+ expression : Expression

LikeOperator

NullOperator+ expression [2] : Expression {ordered}+ wildCard : Character+ singleChar : Character+ escapeChar : Character+ expression : Expression

Figure 5 — ComparisonOperator

Copyright © 2010 Open Geospatial Consortium

19

OGC 09-026r1 and ISO 19143:2010(E)7.7.2

Encoding

The following XML Schema fragment defines the XML encoding for comparison operators:<xsd:element name="comparisonOps"
type="fes:ComparisonOpsType"abstract="true"/><xsd:complexType name="ComparisonOpsType" abstract="true"/><xsd:element name="PropertyIsEqualTo"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsNotEqualTo"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsLessThan"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsGreaterThan"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsLessThanOrEqualTo"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsGreaterThanOrEqualTo"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsLike"
type="fes:PropertyIsLikeType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsNull"
type="fes:PropertyIsNullType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsNil"
type="fes:PropertyIsNilType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsBetween"
type="fes:PropertyIsBetweenType"substitutionGroup="fes:comparisonOps"/><xsd:complexType name="BinaryComparisonOpType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="2" maxOccurs="2"/></xsd:sequence><xsd:attribute name="matchCase" type="xsd:boolean"use="optional" default="true"/><xsd:attribute name="matchAction" type="fes:MatchActionType"use="optional" default="Any"/></xsd:extension></xsd:complexContent></xsd:complexType><xsd:simpleType name="MatchActionType"><xsd:restriction base="xsd:string"><xsd:enumeration value="All"/><xsd:enumeration value="Any"/><xsd:enumeration value="One"/></xsd:restriction></xsd:simpleType><xsd:complexType name="PropertyIsLikeType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="2" maxOccurs="2"/></xsd:sequence><xsd:attribute name="wildCard" type="xsd:string" use="required"/><xsd:attribute name="singleChar" type="xsd:string" use="required"/><xsd:attribute name="escapeChar" type="xsd:string" use="required"/></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="PropertyIsNullType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="0"/>20

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)</xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="PropertyIsNilType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="0"/></xsd:sequence><xsd:attribute name="nilReason" type="xsd:string"/></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="PropertyIsBetweenType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:expression"/><xsd:element name="LowerBoundary" type="fes:LowerBoundaryType"/><xsd:element name="UpperBoundary" type="fes:UpperBoundaryType"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="LowerBoundaryType"><xsd:choice><xsd:element ref="fes:expression"/></xsd:choice></xsd:complexType><xsd:complexType name="UpperBoundaryType"><xsd:sequence><xsd:element ref="fes:expression"/></xsd:sequence></xsd:complexType>

7.7.3
7.7.3.1

Prameter discussion
Binary comparisonsThis International Standard defines a standard set of comparison operators (=,<,>,>=,<=,<>): equal to, lessthan, greater than, less than or equal to, greater than or equal to and not equal to. These comparison
operators are encoded using the complex type BinaryComparisonOpType.
7.7.3.2

matchCase parameter

The matchCase attribute, which is of type Boolean, shall be used to specify how a filter expression processor
should perform string comparisons. A value of true means that string comparisons shall match case. This shallbe the default value. The value false means that string comparisons are performed caselessly.
7.7.3.3

matchAction parameter

The matchAction attribute can be used to specify how the comparison predicate shall be evaluated for acollection of values (e.g. in XML, properties having maxOccurs > 1) and not including some additional context
to identify a specific value from the collection to be tested. Possible values for the attribute are: All, Any orOne. A value of All means that all values in the collection shall satisfy the predicate. A value of Any meansthat any of the value in the collection can satisfy the predicate. Finally, a value of One means that only one ofthe values in the collection shall satisfy the predicate.
If the value of the matchAction attribute is One, additional context (e.g. XPath index) can be included toindicate which value in the collection should satisfy the predicate.

Copyright © 2010 Open Geospatial Consortium

21

OGC 09-026r1 and ISO 19143:2010(E)

EXAMPLEThe following example illustrates the use of the matchAction attribute. Consider the following XML
fragment, which is an instance of a GML (see ISO 19136) feature:<ex:Building gml:id="b123"><gml:name>175 Fifth Ave.</gml:name><gml:name>Flatiron</gml:name><gml:name>Acme Building</gml:name><!-- ... --></ex:Building>and consider the following filter expression:<fes:Filter><fes:PropertyIsEqualTo matchAction="..."><fes:ValueReference>gml:name</fes:ValueReference><fes:Literal>Flatiron</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>

If the value of the matchAction attribute is set to Any, this predicate will evaluate to true since there is at least
one gml:name value that satisfied the predicate. If the value of the matchAction attribute is All, this predicate
will evaluate to false since not all gml:name values are Flatiron. Finally, if the matchAction attribute is set to
One then the expression will evaluate to true since only one gml:name value is Flatiron.
If the value of the matchAction attribute is Any or All, the ValueReference XPath expression shall not include
an index predicate. If the matchAction attribute is One an XPath index predicate may be specified and thepredicate shall only evaluate to true if not only one value matches the predicate but the specific value
indicates by the index matches the value.
7.7.3.4

PropertyIsLike operator

The PropertyIsLike element is intended to encode a character string comparison operator with patternmatching. A combination of regular characters, the wildCard character, the singleChar character, and theescapeChar character define the pattern. The wildCard character matches zero or more characters. The
singleChar character matches exactly one character. The escapeChar character is used to escape themeaning of the wildCard, singleChar and escapeChar itself.
7.7.3.5

PropertyIsNull operator

The PropertyIsNull operator tests the specified property to see if it exists in the resource being evaluated. This
corresponds to checking whether the property exists in the real-world.
7.7.3.6

PropertyIsNil operator

The PropertyIsNil operator tests the content of the specified property and evaluates if it is nil. The operator
can also evaluate the nil reason using the nilReason parameter. The implied operator for evaluating the nil
reason is “equals”.
7.7.3.7

PropertyIsBetween operator

The PropertyIsBetween element is defined as a compact way of encoding a range check. The lower andupper boundary values are inclusive.

7.8

Spatial operators

7.8.1

General considerations

A spatial operator (see Figure 6) shall determine whether its geometric arguments satisfy the stated spatial
relationship. The operator shall evaluate to true if the spatial relationship is satisfied. Otherwise, the operator
shall evaluate to false.

22

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)SpatialOperator{operatorType<>#BBOX implies
operand1->notEmpty() andoperatorType=#BBOX implies
operand2.envelope->notEmpty()}

DistanceOperator

BinarySpatialOperator+ valueReference : ValueReference+ operatorType : DistanceOperatorName+ geometry : GM_Object+ distance : Measure+ operatorType : SpatialOperatorName+ operand1 [0..1] : ValueReference+ operand2 : SpatialDescription<<CodeList>>
DistanceOperatorName<<CodeList>>
SpatialOperatorName+ Beyond+ DWithin+ BBOX+ Equals+ Disjoint+ Intersects+ Touches+ Crosses+ Within+ Contains+ Overlaps<<Union>>SpatialDescription+ geometry : GM_Object+ envelope : GM_Envelope+ valueReference : ValueReference

Figure 6 — SpatialOperator
Table 3 maps the spatial operators described in this International Standard to the set of spatial operators
defined in ISO 19125-1.
Table 3 — Mapping of ISO 19143 spatial operators to ISO 19125-1 spatial operators
ISO 19143 spatial operator

ISO 19125-1 spatial operator

EqualsEquals

Disjoin

Disjoint

Touches

TouchesWithina

WithinOverlaps

Overlaps

Crosses

CrossesIntersects

Intersects

Containsa

Contains

DWithin

N/A

BeyondN/A

BBOX

equivalent to NOT Disjoint with gml:Envelopea(A Within B) implies that (B Contains A) (see ISO 19125-1:2004, 6.1.14.3)

A service that implements this International Standard shall, in its filter capabilities (see 7.14.4), declare which
spatial operators it supports.

Copyright © 2010 Open Geospatial Consortium

23

OGC 09-026r1 and ISO 19143:2010(E)7.8.2

Encoding

The following XML Schema fragment defines the XML encoding for spatial operators:<xsd:element name="spatialOps" type="fes:SpatialOpsType" abstract="true"/><xsd:complexType name="SpatialOpsType" abstract="true"/><xsd:element name="Equals"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Disjoint"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Touches"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Within"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Overlaps"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Crosses"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Intersects"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Contains"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="DWithin"
type="fes:DistanceBufferType"substitutionGroup="fes:spatialOps"/><xsd:element name="Beyond"type="fes:DistanceBufferType"substitutionGroup="fes:spatialOps"/><xsd:element name="BBOX"
type="fes:BBOXType"substitutionGroup="fes:spatialOps"/><xsd:complexType name="BinarySpatialOpType"><xsd:complexContent><xsd:extension base="fes:SpatialOpsType"><xsd:sequence><xsd:element ref="fes:ValueReference"/><xsd:choice><xsd:element ref="fes:expression"/><xsd:any namespace="##other"/></xsd:choice></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="BBOXType"><xsd:complexContent><xsd:extension base="fes:SpatialOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="0"/><xsd:any namespace="##other"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="DistanceBufferType"><xsd:complexContent><xsd:extension base="fes:SpatialOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="0"/><xsd:any namespace="##other"/><xsd:element name="Distance" type="fes:MeasureType"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="MeasureType"><xsd:simpleContent>

24

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<xsd:extension base="xsd:double"><xsd:attribute name="uom" type="fes:UomIdentifier" use="required"/></xsd:extension></xsd:simpleContent></xsd:complexType><xsd:simpleType name="UomIdentifier"><xsd:union memberTypes="fes:UomSymbol fes:UomURI"/></xsd:simpleType><xsd:simpleType name="UomSymbol"><xsd:restriction base="xsd:string"><xsd:pattern value="[^: \n\r\t]+"/></xsd:restriction></xsd:simpleType><xsd:simpleType name="UomURI"><xsd:restriction base="xsd:anyURI"><xsd:pattern value="([a-zA-Z][a-zA-Z0-9\-\+\.]*:|\.\./|\./|#).*"/></xsd:restriction></xsd:simpleType>Spatial operators shall be used to test whether the value of a geometric property, referenced using the nameof the property, and a literal geometric value or the value of another geometric property satisfy the spatial
relationship implied by the operator.
EXAMPLEThe fes:Overlaps operator evaluates whether the value of the specified geometric property and thespecified literal geometric value or value of another geometric property spatially overlap.

Literal geometric values shall be expressed using GML (as defined in ISO 19136).
NOTE
Although the canonical version of GML supported by this International Standard is GML 3.2 (see ISO 19136),
the filter schemas have been crafted in such a way as to allow valid filter expressions to be encoded that use otherversions of GML (see C.5, Example 11).

7.8.3

Operator semantics

7.8.3.1

Spatial operators

The semantics of the other operators Equals, Disjoint, Touches, Within, Overlaps, Crosses, Intersects, andContains are defined in ISO 19125-1:2004, 6.1.14.
7.8.3.2

BBOX operator

The fes:BBOX element is defined as a convenient and more compact way of encoding the very common
bounding box constraint based on the gml:Envelope geometry. It is equivalent to the spatial operation<fes:Not><fes:Disjoint> … </fes:Disjoint></fes:Not> meaning that the fes:BBOX operator shall identify all
geometries that spatially interact with the box. If the optional fes:PropertyName element is not specified, thecalling service shall apply the BBOX operator to all the spatial properties of the resource.
7.8.3.3

DWithin and Beyond operators

The spatial operators DWithin and Beyond shall test whether the value of a geometric property is within or
beyond a specified distance of the specified literal geometric value. Distance values shall be expressed using
the fes:Distance element. The content of the fes:Distance element shall represent the magnitude of the
distance and the uom attribute shall be used to specify the units of measure. Units of measure can be
expressed as symbols or as a URI that links to a definition of a unit of measure that may not have aconventional symbol or when it is desired to indicate a precise or variant definition.
EXAMPLEThe following XML fragment:<Distance unit="m">10</Distance>

encodes a distance value of 10 m.

Copyright © 2010 Open Geospatial Consortium

25

OGC 09-026r1 and ISO 19143:2010(E)7.8.4

Coordinate reference system handlingIn filter expressions, geometric values shall be encoded using GML, as given in ISO 19136. In GML, theoptional srsName attribute is used to specify the coordinate reference system for the coordinates of geometry.
Attention is drawn to the fact that specifications that reference this International Standard shall specify how tohandle the following cases that can arise where two expressions that resolve to geometric values arecompared:a)the two geometry values have difference srsName values;b)

one or both of the geometry values do not have an srsName value specified.

Although this International Standard does not mandate what actions to take to resolve these situations, it isclear that some strategies for resolving these issues can require coordinate transformations to be applied to
one or both of the geometries.

7.9

Temporal operators

7.9.1

General considerations

A temporal operator (see Figure 7) determines whether its time arguments satisfy the stated temporal
relationship. The operator evaluates to true if the temporal relationship is satisfied. Otherwise, the operator
evaluates to false.
TemporalOperator+ operatorType : TemporalOperatorName+ operand1 : ValueReference+ operand2 : TemporalOperand<<CodeList>>
TemporalOperatorName+ After+ Before+ Begins+ BegunBy+ TContains+ During+ TEquals+ TOverlaps+ Meets+ OverlappedBy+ MetBy+ EndedBy+ AnyInteracts<<Union>>TemporalOperand+ temporalObject : TM_Object+ valueReference : ValueReference

Figure 7 — TemporalOperator
Table 4 maps the temporal operators described in this International Standard to the set of temporal operators
defined in ISO 19108.

26

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)Table 4 — Mapping of ISO 19143 temporal operators to ISO 19108 temporal operators
ISO 19108 temporal operatora

ISO 19143 temporal operator
After

After

BeforeBeforeBeginsBeginsBegunBy

Begun

TContains

Contains

DuringDuringTEquals

EqualsTOverlaps

Overlaps

Meets

Meets

OverlappedBy

OverlappedBy

MetBy

MetBy

EndedBy

EndedBy

AnyInteracts

N/Aa

The values in this column are enumerates of TM_RelativePosition used in the relativePosition
operation from ISO 19108.

A service that implements this International Standard shall, in its filter capabilities (see 7.14.5), declare which
temporal operators it supports.
7.9.2

Encoding

The XML encoding for temporal operators is defined by the following XML Schema fragment:<xsd:element name="temporalOps" type="fes:TemporalOpsType" abstract="true"/><xsd:complexType name="TemporalOpsType" abstract="true"/><xsd:element name="After"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="Before"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="Begins"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="BegunBy"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="TContains"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="During"type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="EndedBy"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="Ends"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="TEquals"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="Meets"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="MetBy"
type="fes:BinaryTemporalOpType"

Copyright © 2010 Open Geospatial Consortium

27

OGC 09-026r1 and ISO 19143:2010(E)substitutionGroup="fes:temporalOps"/><xsd:element name="TOverlaps"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="OverlappedBy"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="AnyInteracts"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:complexType name="BinaryTemporalOpType"><xsd:complexContent><xsd:extension base="fes:TemporalOpsType"><xsd:sequence><xsd:element ref="fes:ValueReference"/><xsd:choice><xsd:element ref="fes:expression"/><xsd:any namespace="##other"/></xsd:choice></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType>As defined in this International Standard, temporal operators are used to test whether a value reference and afilter expression, that evaluates to a temporal value, satisfy the temporal relationship implied by the operator.
EXAMPLEThe fes:TOverlaps operator evaluates whether the value of the specified temporal property and thespecified literal temporal value temporally overlap.

Literal temporal values are expressed using GML (as defined in ISO 19136).
The semantics of all the temporal operators except fes:AnyInteracts are defined in ISO 19108:2002, 5.2.3.5.
Applicable to TM_Period only, the temporal operator fes:AnyInteracts is a shortcut operator semanticallyequivalent to NOT (Before OR Meets OR MetBy OR After).
If any input value of TM_TemporalPosition is indeterminate, an exception shall be raised.
7.9.3

Time zone handling

When temporal operators are used to compare time instants or periods, the time offset for local time zone
shall be handled as described in XML Schema Part 2, 3.2.7: Datatypes (see W3C XML Schema Part 2).

7.10 Logical operators
7.10.1 General considerations
A logical operator (see Figure 8) can be used to combine one or more conditional expressions. The logicaloperator AND evaluates to true if all the combined expressions evaluate to true. The operator OR operator
evaluates to true is any of the combined expressions evaluate to true. The NOT operator reverses the logicalvalue of an expression.

28

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)LogicalOperator

BinaryLogicOperator

UnaryLogicOperator+ operands [2] : NonIdOperator {ordered}+ operatorType : BinaryLogicType+ operands : NonIdOperator+ operatorType : UnaryLogicType<<CodeList>
BinaryLogicType
+ And
+ Or

<<CodeList>
UnaryLogicType+ Not

Figure 8 — LogicalOperator
7.10.2 Encoding
The XML encoding for the logical operators AND, OR and NOT is defined by the following XML Schema
fragment:<xsd:element name="logicOps" type="fes:LogicOpsType" abstract="true"/><xsd:complexType name="LogicOpsType" abstract="true"/><xsd:element name="And"type="fes:BinaryLogicOpType"substitutionGroup="fes:logicOps"/><xsd:element name="Or"
type="fes:BinaryLogicOpType"substitutionGroup="fes:logicOps"/><xsd:element name="Not"type="fes:UnaryLogicOpType"substitutionGroup="fes:logicOps"/><xsd:complexType name="BinaryLogicOpType"><xsd:complexContent><xsd:extension base="fes:LogicOpsType"><xsd:choice minOccurs="2" maxOccurs="unbounded"><xsd:group ref="fes:FilterPredicates"/></xsd:choice></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="UnaryLogicOpType"><xsd:complexContent><xsd:extension base="fes:LogicOpsType"><xsd:sequence><xsd:choice><xsd:group ref="fes:FilterPredicates"/></xsd:choice></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType>The fes:And, fes:Or and fes:Not elements can be used to combine elements, that are substitutable for theabstract fes:expression element, to form more complex compound expressions.

Copyright © 2010 Open Geospatial Consortium

29

OGC 09-026r1 and ISO 19143:2010(E)7.11 Object identifiers
7.11.1 General considerations
An object identifier is meant to represent a unique identifier for an instance of a resource within the context of
the web service that is serving the resource. This International Standard defines the abstract element
fes:AbstractId (see Figure 9) as the head of an XML substitution group that can be used to define a resource
identifier element that can be used as a predicate within a filter expressions for specific resource types.
This International Standard defines the element fes:ResourceId (see Figure 9) that can be used as a predicate
to identify any identifiable resource within a filter expression.
Specifications that reference this International Standard can also define their own element for identifying
resources, if the fes:ResourceId element is deemed unsuitable, and add it to the fes:AbstractId substitutiongroup.
Which resource identifier elements can be used predicates in a filter expression shall be advertized in the filter
capabilities document (see 7.14.2).
Id

RecourceId+ rid : CharacterString+ version [0..1] : Version+ startTime [0..1] : DateTime+ endTime [0..1] : DateTime<<Union>>Version+ enum : VersionActionTokens+ index : Integer+ timeStamp : DateTime<<Enumeration>>
VersionActionTokens+ first+ last+ all+ next+ previous

Figure 9 — ResourceId
7.11.2 Encoding
The following XML schema fragment declares the abstract element fes:AbstractId as well as the concreteelement fes:ResourceId:<xsd:element name="_Id" type="fes:AbstractIdType" abstract="true"/><xsd:complexType name="AbstractIdType" abstract="true"/><xsd:element name="ResourceId"
type="fes:ResourceIdType"substitutionGroup="fes:_Id"/><xsd:complexType name="ResourceIdType"><xsd:complexContent><xsd:extension base="fes:AbstractIdType"><xsd:attribute name="rid" type="xsd:string" use="required"/><xsd:attribute name="previousRid" type="xsd:string"/><xsd:attribute name="version" type="fes:VersionType"/><xsd:attribute name="startDate" type="xsd:dateTime"/><xsd:attribute name="endDate" type="xsd:dateTime"/></xsd:extension></xsd:complexContent></xsd:complexType><xsd:simpleType name="VersionType"><xsd:union memberTypes="fes:VersionActionTokens
xsd:positiveInteger
xsd:dateTime"/></xsd:simpleType>30

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<xsd:simpleType name="VersionActionTokens"><xsd:restriction base="xsd:string"><xsd:enumeration value="FIRST"/><xsd:enumeration value="LAST"/><xsd:enumeration value="PREVIOUS"/><xsd:enumeration value="NEXT"/><xsd:enumeration value="ALL"/></xsd:restriction></xsd:simpleType>

Within filter expressions, specific resource instances can be identified using the fes:ResourceId element.
The rid attribute specifies the id of the resource that shall be selected by the predicate.
The previousRid attribute may be used, in implementations that support versioning, to report the previous
identifier of a resource.
For attributes version, startTime and endTime are used to navigate versions of a resource if an
implementation that references this International Standard supports versioning.
If an implementation that references this International Standard does not support versioning, any value
specified for these attributes shall be ignored and the predicate shall always select the single version that isavailable.
If an implementation that references this International Standard supports versioning, the rid shall be a systemgenerated hash containing a logical resource identifier and a version number. The specific details of the hashare implementation dependant and shall be opaque to a client.
The version attribute may then be used to navigate the various versions of a resource.
The version attribute may be an integer N indicating that the Nth version of the resource shall be selected. The
first version of a resource shall be numbered 1. If N exceeds the number of versions available, the latest
version of the resource shall be selected.
The version attribute may also be date indicating that the version of the resource closest to the specified dateshall be selected.
The versionAction attribute may also be the strings FIRST, LATEST, PREVIOUS, NEXT and ALL. The token
FIRST shall select the first version of a resource. The token LATEST shall select the most recent version of a
resource. The PREVIOUS and NEXT tokens shall select the previous or next version of a resource relative tothe version specified using the rid attribute. The token ALL shall select all available version of a resource.
The attributes startTime and endTime may be used to specify a predicate that selects all versions of a
resource between the specified start date and end date. The startTime and endTime attributes shall always be
specified together. If the startTime and endTime are specified, the version attribute shall not be specified.

7.12 Extensions
7.12.1 General considerations
Standards that reference this International Standard may extend the filter syntax by:a)adding functions using the fes:Function element (see 7.6);b)adding new operators by defining new elements in the filter syntax.

Each of these methods can be used to extend the filter syntax, as described in 7.12.2 and 7.12.3.
Ad hoc extensions to the filter syntax are strongly discouraged because such extensions are not interoperable.
Instead, extensions should be made within the context of a standard that references this International
Standard.

Copyright © 2010 Open Geospatial Consortium

31

OGC 09-026r1 and ISO 19143:2010(E)7.12.2 Extending filter using the fes:Function element
Filter may be extended by adding new functions to the syntax that are invoked using the fes:Function element(see 7.6). Any functions added to the filter syntax shall be listed in the filter capabilities document using thefes:Function element (see 7.14.6). It is strongly recommended that additional functions be fully documented in
the filter capabilities document using comments or the ows:Metadata element (see 7.14.6).
7.12.3 Extending filter by adding new elements
The filter syntax may also be extended by adding new elements that represent new operators. This may be
accomplished by adding new elements that are substitutable for one of fes:comparisonOps, fes:spatialOps,
fes:temporalOps, or fes:extensionOps (see 7.2).
Any new operators that are added to the filter syntax shall be defined in a namespace other than the filternamespace (see 5.4).
Any new operators that are substitutable for fes:comparisonOps, fes:spatialOps or fes:temporalOps shall belisted in the capabilities document using the pattern “extension:Name_of_new_Operator” (see 7.7, 7.8, 7.9)
where the token “Name_of_new_Operator” is a placeholder for the name of the new operator.
Any new operators that are substitutable for fes:extensionOps shall be listed in the fes:Extended_Capabilities
section of the filter capabilities document (see 7.14.7).
EXAMPLEThe following XML Schema“myops:PropertyExists” to the filter syntax.

illustrates

how

to

add

a

new

comparison

operator

named<?xml version="1.0" encoding="UTF-8"?><xsd:schema
targetNamespace="http://www.someserver.com/myops/1.0"
xmlns:myops="http://www.someserver.com/myops/1.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"version="2.0.0"><xsd:import namespace="http://www.opengis.net/fes/2.0"
schemaLocation="http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"/><xsd:element name="PropertyExists"
type="myops:PropertyExistsType"substitutionGroup="fes:comparisonOps"/><xsd:complexType name="PropertyExistsType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:ValueReference"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType></xsd:schema>

The following XML fragment illustrates how the myops:PropertyExists operator might be used:<?xml version="1.0"?><fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:myops="http://www.someserver.com/myops/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.someserver.com/myops/1.0 ./filter23.xsd"><fes:And><myops:PropertyExists><fes:ValueReference>Person/age</fes:ValueReference></myops:PropertyExists><fes:PropertyIsBetween>

32

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<fes:ValueReference>Person/age</fes:ValueReference><fes:LowerBoundary><fes:Literal>18</fes:Literal></fes:LowerBoundary><fes:UpperBoundary><fes:Literal>200</fes:Literal></fes:UpperBoundary></fes:PropertyIsBetween></fes:And></fes:Filter>7.13 Filter capabilities
The filterCapabilities.xsd schema defines metadata that is used to describe the specific elements that a
particular implementation of this International Standard supports. A client application can inspect the filter
capabilities metadata (Figures 10 to 17) and be able to determine which operators and types a filter
expression processor supports.
The filter capabilities metadata can be embedded in a larger metadata document describing a system of whicha filter expression processor is one component. For example a web feature service (see ISO 19142) that uses
the XML encoding of a filter expression would include a filter capabilities fragment in its capabilities document
to advertize what filter capabilities the service supports.
FilterCapabilities+ conformance : Conformance+ idCapabilities [0..1] : IdCapabilities+ scalarCapabilities [0..1] : ScalarCapabilities+ spatialCapabilities [0..1] : SpatialCapabilities+ temporalCapabilities [0..1] : TemporalCapabilities+ functions [0..1] : AvailableFunctions+ extendedCapabilities [0..1] : ExtendedCapabilities

Figure 10 — FilterCapabilities
Conformance+ ImplementsQuery : Boolean+ ImplementsAdHocQuery : Boolean+ ImplementsFunctions : Boolean+ ImplementsMinStandardFilter : Boolean+ ImplementsStandardFilter : Boolean+ ImplementsMinSpatialFilter : Boolean+ ImplementsSpatialFilter : Boolean+ ImplementsMinTemporalFilter : Boolean+ ImplementsTemporalFilter : Boolean+ ImplementsVersionNav : Boolean+ ImplementsSorting : Boolean+ ImplementsExtendedOperators : Boolean

Figure 11 — Conformance

IdCapabilities+ resourceIdentifiers [1..*] : ResourceIdentifier

ResourceIdentifier+ name : LocalName+ metadata [0..1] : Any

Figure 12 — IdCapabilities

Copyright © 2010 Open Geospatial Consortium

33

OGC 09-026r1 and ISO 19143:2010(E)ScalarCapabilities+ logicalOperators : Boolean = #false+ comparisonOperator [0..*] : BinaryComparisonName<<CodeList>>
BinaryComparisonName+ PropertyIsEqualTo+ PropertyIsNotEqualTo+ PropertyIsLessThan+ PropertyIsGreaterThan+ PropertyIsLessThanOrEqualTo+ PropertyIsGreaterThanOrEqualTo

Figure 13 — ScalarCapabilities
SpatialCapabilities+ geometryOperand [1..*] : ScopedName+ spatialOperator [1..*] : SpatialOperatorDescription

SpatialOperatorDescription+ name : SpatialOperatorName+ geometryOperand [1..*] : ScopedName<<CodeList>>
SpatialOperatorName+ BBOX+ Equals+ Disjoint+ Intersects+ Touches+ Crosses+ Within+ Contains+ Overlaps

Figure 14 — SpatialCapabilities
TemporalCapabilities+ temporalOperand [1..*] : ScopedName+ temporalOperator [1..*] : TemporalOperatorDescription

TemporalOperatorDescription+ name : TemporalOperatorName+ temporalOperand [1..*] : ScopedName<<CodeList>>
TemporalOperatorName+ After+ Before+ Begins+ BegunBy+ TContains+ During+ TEquals+ TOverlaps+ Meets+ OverlappedBy+ MetBy+ EndedBy

Figure 15 — TemporalCapabilities

34

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)AvailableFunctions

Argument+ name : LocalName+ metadata [0..1] : Any+ returns : ScopedName+ arguments [0..*] : Argument {ordered}+ name : LocalName+ metadata [0..1] : Any+ type : ScopedName

Figure 16 — AvailableFunction
ExtendedCapabilities+ additionalOperator [1..*] : AdditionalOperatorDescription

AdditionalOperatorDescription+ name : ScopedName

Figure 17 — ExtendedCapabilities

7.14 Encoding
7.14.1 Capability categories
Filter capabilities are divided into five categories: id capabilities, scalar capabilities, spatial capabilities,
temporal capabilities and the ability to test the schema of a resource for the existence or absence of a named
property. The following XML Schema fragment defines the root element of the filter capabilities:<xsd:element name="Filter_Capabilities"><xsd:complexType><xsd:sequence><xsd:element name="Conformance"
Type="fes:ConformanceType"/><xsd:element name="Id_Capabilities"
type="fes:Id_CapabilitiesType"minOccurs="0"/><xsd:element name="Scalar_Capabilities"
type="fes:Scalar_CapabilitiesType"minOccurs="0"/><xsd:element name="Spatial_Capabilities"
type="fes:Spatial_CapabilitiesType"minOccurs="0"/><xsd:element name="Temporal_Capabilities"
type="fes:Temporal_CapabilitiesType"minOccurs="0"/><xsd:element name="Functions"
type="fes:AvailableFunctionsType"minOccurs="0"/><xsd:element name="Extended_Capabilities"
type="fes:Extended_CapabilitiesType"minOccurs="0"/></xsd:sequence></xsd:complexType></xsd:element>

7.14.2 Conformance clause
The conformance clauses/subclauses shall be used to declare which conformance classes a particular
implementation of this International Standard implements.

Copyright © 2010 Open Geospatial Consortium

35

OGC 09-026r1 and ISO 19143:2010(E)The following XML Schema fragment declares the schema of the fes:Conformance clause:<xsd:complexType name="ConformanceType"><xsd:sequence><xsd:element name="Constraint" type="ows:DomainType" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType>It is a list of ows:Constraint elements whose value is either “TRUE” or “FALSE”.
Table 5 — Names of conformance class constraints
Conformance class name (see Table 1)

Constraint nameQuery

ImplementsQuery

Ad hoc query

ImplementsAdHocQuery

Functions

ImplementsFunctions

Resource Identification

ImplementsResourceld

Minimum Standard Filter

ImplementsMinStandardFilter

Standard Filter

ImplementsStandardFilter

Minimum Spatial Filter

ImplementsMinSpatialFilter

Spatial Filter

ImplementsSpatialFilter

Minimum Temporal Filter

ImplementsMinTemporalFilter

Temporal Filter

ImplementsTemporalFilter

Version navigation

ImplementsVersionNav

Sorting

ImplementsSorting

Extended Operators

ImplementsExtendedOperators

Minimum XPath

ImplementsMinimumXPath

Schema Element Function

ImplementsSchemaElementFunc

Implementations of this International Standard shall include each of the constraints listed in Table 5 settings
its value to “TRUE” to indicate that the implementation implements the corresponding conformance class or“FALSE” to indicate that the implementation does not implement the conformance class.
EXAMPLEThe following XML fragment illustrates a conformance section:<fes:Conformance><fes:Constraint name="ImplementsQuery"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsAdHocQuery"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinStandardFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsStandardFilter"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinSpatialFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSpatialFilter"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinTemporalFilter"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue>

36

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)</fes:Constraint><fes:Constraint name="ImplementsVersionNav"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSorting"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint></fes:Conformance>

7.14.3 Id capabilities
This International Standard defines the element fes:ResourceId as a generic element for referencing
resources by id. Implementations that reference this International Standard, however, may define their own
elements for resource identifications. The resource identifiers section of the filter capabilities document allows
such implementations to declare the name or names of the elements it uses for resource identifiers.
The following XML Schema fragment declares the schema of the fes:ResourceIdentifiers section:<xsd:complexType name="Id_CapabilitiesType"><xsd:sequence><xsd:element name="ResourceIdentifier"type="fes:ResourceIdentifierType" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="ResourceIdentifierType"><xsd:sequence><xsd:element ref="ows:Metadata" minOccurs="0"/></xsd:sequence><xsd:attribute name="name" type="xsd:QName" use="required"/></xsd:complexType>It is a list of element names that represent the resource identifier elements that the service supports. Theseelement names shall be considered synonyms.
EXAMPLEA catalogue that implements this International Standard may include the following Id_Capabilities
element within its filter capabilities document:<fes:Id_Capabilities><fes:Id_Element>cat:RecordId</fes:Id_Element><fes:Id_Element>fes:ResourceId</fes:Id_Element></fes:Id_capabilities>

indicating that the service can accept the cat:RecordId or fes:ResourceId element as predicates in a filter expression.

7.14.4 Scalar capabilities
The fes:Scalar_Capabilities element can be specified by a service to advertise which logical, comparison andarithmetic operators the service supports. If the fes:Scalar_Capabilities element is not specified then a client
shall assume that the service does not support any logical or comparison operators and does not implement
any additional functions.
Scalar capabilities include the ability to process logical expressions and comparisons. The following XML
Schema defines how scalar capabilities are encoded:<xsd:complexType name="Scalar_CapabilitiesType"><xsd:sequence><xsd:element ref="fes:LogicalOperators" minOccurs="0"/><xsd:element name="ComparisonOperators"
type="fes:ComparisonOperatorsType" minOccurs="0"/></xsd:sequence></xsd:complexType><xsd:complexType name="ComparisonOperatorsType"><xsd:sequence maxOccurs="unbounded"><xsd:element name="ComparisonOperator"
type="fes:ComparisonOperatorType"/></xsd:sequence></xsd:complexType>

Copyright © 2010 Open Geospatial Consortium

37

OGC 09-026r1 and ISO 19143:2010(E)The fes:LogicalOperators element is used to indicate that the filter can process And, Or and Not operators.
The XML encoding for the fes:LogicalOperators element is declared by the following XML schema fragment:<xsd:element name="LogicalOperators"><xsd:complexType/></xsd:element>

The fes:ComparisonOperators element is used to indicate which comparison operators are supported by aservice. The XML encoding of the fes:ComparisonOperators element is declared by the following XML
Schema fragment:<xsd:complexType name="ComparisonOperatorsType"><xsd:sequence maxOccurs="unbounded"><xsd:element name="ComparisonOperator"
type="fes:ComparisonOperatorType"/></xsd:sequence></xsd:complexType><xsd:complexType name="ComparisonOperatorType"><xsd:attribute name="name"type="fes:ComparisonOperatorNameType" use="required"/></xsd:complexType><xsd:simpleType name="ComparisonOperatorNameType"><xsd:union><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:enumeration value="PropertyIsEqualTo"/><xsd:enumeration value="PropertyIsNotEqualTo"/><xsd:enumeration value="PropertyIsLessThan"/><xsd:enumeration value="PropertyIsGreaterThan"/><xsd:enumeration value="PropertyIsLessThanOrEqualTo"/><xsd:enumeration value="PropertyIsGreaterThanOrEqualTo"/><xsd:enumeration value="PropertyIsLike"/><xsd:enumeration value="PropertyIsNull"/><xsd:enumeration value="PropertyIsNil"/><xsd:enumeration value="PropertyIsBetween"/></xsd:restriction></xsd:simpleType><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:pattern value="extension:\w{2,}"/></xsd:restriction></xsd:simpleType></xsd:union></xsd:simpleType>The pattern “extension:OperatorName” shall be used to list any additional comparison operators that may be
added to the filter syntax (see 7.12). The token “OperatorName” is a placeholder for the actual name of theadditional operator.
7.14.5 Spatial capabilities
The fes:Spatial_Capabilities element can be specified by a service to advertise which spatial operators andgeometric operands the service supports. If the fes:Spatial_Capabilities element is not specified, a client shallassume that the service does not support any spatial operators.
A service that supports spatial filtering shall include a spatial capabilities section in its capabilities document.
Spatial capabilities include the ability to filter spatial data of specified geometry types based on the definitionof a bounding box (BBOX) as well as the ability to process the spatial operators declared in this International
Standard: Equals, Disjoint, Touches, Within, Overlaps, Crosses, Intersects, Contains, DWithin and Beyond.
Spatial capabilities are encoded according to the following XML Schema fragments:<xsd:complexType name="Spatial_CapabilitiesType"><xsd:sequence><xsd:element name="GeometryOperands"
type="fes:GeometryOperandsType"/><xsd:element name="SpatialOperators"
type="fes:SpatialOperatorsType"/></xsd:sequence>

38

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)</xsd:complexType><xsd:complexType name="GeometryOperandsType"><xsd:sequence><xsd:element name="GeometryOperand" maxOccurs="unbounded"><xsd:complexType><xsd:attribute name="name" type="xsd:QName" use="required"/></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType><xsd:complexType name="SpatialOperatorsType"><xsd:sequence><xsd:element name="SpatialOperator"
type="fes:SpatialOperatorType"
maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="SpatialOperatorType"><xsd:sequence><xsd:element name="GeometryOperands"
type="fes:GeometryOperandsType"minOccurs="0"/></xsd:sequence><xsd:attribute name="name" type="fes:SpatialOperatorNameType"/></xsd:complexType><xsd:simpleType name="SpatialOperatorNameType"><xsd:union><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:enumeration value="BBOX"/><xsd:enumeration value="Equals"/><xsd:enumeration value="Disjoint"/><xsd:enumeration value="Intersects"/><xsd:enumeration value="Touches"/><xsd:enumeration value="Crosses"/><xsd:enumeration value="Within"/><xsd:enumeration value="Contains"/><xsd:enumeration value="Overlaps"/><xsd:enumeration value="Beyond"/><xsd:enumeration value="DWithin"/></xsd:restriction></xsd:simpleType><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:pattern value="extension:\w{2,}"/></xsd:restriction></xsd:simpleType></xsd:union></xsd:simpleType>A service that implements this International Standard shall list the spatial operators and geometry operandtypes that it supports as the content of the fes:SpatialCapabilities element of its filter capabilities document.
Geometry operands are listed using the fes:GeometryOperands element. Geometry operands can be defined
globally (as the first child of the fes:Spatial_Capabilities element) indicating that all spatial operators know how
to process the specified operands or locally for each spatial operator (as the content of thefes:SpatialOperator element) indicating that the specific operator knows how to process the specified
operands.
The pattern “extension:OperatorName” shall be used to list any additional spatial operators that may be added
to the filter syntax (see 7.12). The token “OperatorName” is a placeholder for the actual name of the additional
operator.
7.14.6 Temporal capabilities
The fes:Temporal_Capabilities element can be specified by a service to advertise which temporal operatorsand temporal operands the service supports. If the fes:Temporal_Capabilities element is not specified then aclient shall assume that the service does not support any temporal operators.
A service that supports temporal filtering shall include a temporal capabilities section in its capabilities
document. Temporal capabilities include the ability to filter temporal data of specified temporal types based on

Copyright © 2010 Open Geospatial Consortium

39

OGC 09-026r1 and ISO 19143:2010(E)the spatial operators declared in this International Standard: After, Before, Begins, BegunBy, TContains,
During, TEquals, TOverlaps, Meets, OverlappedBy, MetBy and EndedBy.
Temporal capabilities are encoded according to the following XML Schema fragments:<xsd:complexType name="Temporal_CapabilitiesType"><xsd:sequence><xsd:element name="TemporalOperands"
type="fes:TemporalOperandsType"/><xsd:element name="TemporalOperators"
type="fes:TemporalOperatorsType"/></xsd:sequence></xsd:complexType><xsd:complexType name="TemporalOperandsType"><xsd:sequence><xsd:element name="TemporalOperand" maxOccurs="unbounded"><xsd:complexType><xsd:attribute name="name" type="xsd:QName" use="required"/></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType><xsd:complexType name="TemporalOperatorsType"><xsd:sequence><xsd:element name="TemporalOperator"
type="fes:TemporalOperatorType"
maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="TemporalOperatorType"><xsd:sequence><xsd:element name="TemporalOperands"
type="fes:TemporalOperandsType"minOccurs="0"/></xsd:sequence><xsd:attribute name="name"type="fes:TemporalOperatorNameType" use="required"/></xsd:complexType><xsd:simpleType name="TemporalOperatorNameType"><xsd:union><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:enumeration value="After"/><xsd:enumeration value="Before"/><xsd:enumeration value="Begins"/><xsd:enumeration value="BegunBy"/><xsd:enumeration value="TContains"/><xsd:enumeration value="During"/><xsd:enumeration value="TEquals"/><xsd:enumeration value="TOverlaps"/><xsd:enumeration value="Meets"/><xsd:enumeration value="OverlappedBy"/><xsd:enumeration value="MetBy"/><xsd:enumeration value="Ends"/><xsd:enumeration value="EndedBy"/></xsd:restriction></xsd:simpleType><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:pattern value="extension:\w{2,}"/></xsd:restriction></xsd:simpleType></xsd:union></xsd:simpleType>An implementation of this International Standard shall list the temporal operators and temporal operand types
that it supports as the content of the fes:TemporalCapabilities element of its filter capabilities document.
Temporal operands are listed using the fes:TemporalOperands element. Temporal operands can be defined
globally (as the first child of the fes:Temporal_Capabilities element) indicating that all temporal operators
know how to process the specified operands or locally for each temporal operator (as the content of thefes:TemporalOperator element) indicating that the specific operator knows how to process the specified
operands.

40

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)The pattern “extension:OperatorName” shall be used to list any additional temporal operators that may be
added to the filter syntax (see 7.12). The token “OperatorName” is a placeholder for the actual name of theadditional operator.
7.14.7 Functions
The fes:Functions element shall be used in a filter capabilities document to enumerate the function that may
be used in filter expressions.
The description of each function shall include a declaration of the return type, the list of arguments with
optional names and expected types. The ows:Metadata element may be used to reference detailed metadata
about the function or its arguments. The following fragment defines the schema of fes:Functions element.
<xsd:complexType name="AvailableFunctionsType"><xsd:sequence><xsd:element name="Function"
type="fes:AvailableFunctionType" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="AvailableFunctionType"><xsd:sequence><xsd:element ref="ows:Metadata" minOccurs="0"/><xsd:element name="Returns" type="xsd:QName"/><xsd:element name="Arguments"
type="fes:ArgumentsType" minOccurs="0"/></xsd:sequence><xsd:attribute name="name" type="xsd:string" use="required"/></xsd:complexType><xsd:complexType name="ArgumentsType"><xsd:sequence><xsd:element name="Argument"
type="fes:ArgumentType" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="ArgumentType"><xsd:sequence><xsd:element ref="ows:Metadata" minOccurs="0"/><xsd:element name="Type" type="xsd:QName"/></xsd:sequence><xsd:attribute name="name" type="xsd:string" use="required"/></xsd:complexType>7.14.8 Extended capabilities
The fes:Extended_Capabilities element may be specified within a service's filter capabilities document toadvertise any additional operators that standards that reference this International Standard might add to thefilter syntax.
The following XML Schema fragment defines the schema of the fes:Extended_Capabilities element:<xsd:complexType name="Extended_CapabilitiesType"><xsd:sequence><xsd:element name="AdditionalOperators"
type="fes:AdditionalOperatorsType" minOccurs="0"/></xsd:sequence></xsd:complexType><xsd:complexType name="AdditionalOperatorsType"><xsd:sequence><xsd:element name="Operator"
type="fes:ExtensionOperatorType"minOccurs="0" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="ExtensionOperatorType"><xsd:attribute name="name" type="xsd:QName" use="required"/></xsd:complexType>

Copyright © 2010 Open Geospatial Consortium

41

OGC 09-026r1 and ISO 19143:2010(E)Any additional operators added to the filter syntax shall be advertised in the extended capabilities section of
the filter capabilities document. This extended capabilities section contains a list of additional operator names.
How new operators can be added to the filter syntax is described in 7.12.3.

8

Sorting

8.1

General considerations

The fes:SortBy element (see Figure 18) is an optional part of a service-specific query and is included in thenormative set of Filter schema files (i.e. “sort.xsd”).
The fes:SortBy element is used to specify property names whose values shall be used to order(upon presentation) the set of resources that satisfy a filter expression.
The fes:SortBy element is provided as an entry point to invoke the sorting mechanism of the filter expression
processor. The sorting mechanism is not specified in this International Standard. The only requirement is thatthe sort sequence shall be consistent, given the same data set and sort request, between consecutive
invocations of the sort.
SortBy+ sortProperty [1..*] : SortProperty

SortProperty+ valueReference : ValueReference+ sortOrder : SortOrder<<Enumeration>>
SortOrder+ ascending+ descending

Figure 18 — SortBy

8.2

Encoding

The XML encoding for sorting is defined by the following XML Schema fragment:<xsd:element name="SortBy"
type="fes:SortByType"/><xsd:complexType name="SortByType"><xsd:sequence><xsd:element name="SortProperty"
type="fes:SortPropertyType" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="SortPropertyType"><xsd:sequence><xsd:element ref="fes:ValueReference"/><xsd:element name="SortOrder" type="fes:SortOrderType" minOccurs="0"/></xsd:sequence></xsd:complexType><xsd:simpleType name="SortOrderType"><xsd:restriction base="xsd:string"><xsd:enumeration value="DESC"/><xsd:enumeration value="ASC"/></xsd:restriction></xsd:simpleType>The fes:SortBy element shall have a minimum of one and an unbounded number of fes:SortProperty childelements. In the event that multiple fes:SortProperty elements exist, the sequence of the fes:SortProperty
elements shall determine the order of ordering. The fes:SortProperty element shall have a single
fes:PropertyName child element and an optional fes:SortOrder child element. The fes:SortOrder element

42

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)shall have a value of either “ASC” or “DESC”. The value “ASC” shall indicate that an ascending sort, in thecollation sequence of the underlying data store, be performed. The value “DESC” shall indicate that adescending sort, in the collation sequence of the filter expression processor, be performed. In the event that
fes:SortOrder is not included within the fes:SortProperty element of a request, the service shall assume a sortorder of ASC.

8.3

Exceptions

In the event that the fes:ValueReference element contains a reference to a value of an unknown resource
type, the service shall raise an InvalidParameterValue (as given in OGC 06-121r3, Table 25) exception.
In the event that the fes:ValueReference element contains a reference to a value of a known resource typebut that value if not defined for the resource type being queried, the service shall raise an
InvalidParameterValue (as given in OGC 06-121r3, Table 25) exception.
In the event that multiple fes:SortProperty elements are specified whose fes:ValueReference elements
reference the same value, the service shall raise a DuplicateSortKey exception with the exception locator(as given in OGC 06-121r3, 8.4) indicating the duplicate value reference.

Copyright © 2010 Open Geospatial Consortium

43

OGC 09-026r1 and ISO 19143:2010(E)Annex A(normative)
Conformance testing

A.1 Test cases for querya)

Test purpose: verify the correct use of query elements.

b)

Test method: verify that a concrete element is materialized that is substitutable forfes:AbstractQueryElement. Use that element to submit query requests and check that the query operation
works according to its description.

c)Reference: 6.2.

d)Test type: basic test.

A.2 Test cases for ad hoc querya)

Test purpose: verify the correct use of XML-encoded and KVP-encoded ad hoc query elements.

b)

Test method: verify that concrete elements are materialized that are substitutable forfes:AbstractAdhocQuery,
fes:AbstractSelectionClause,
fes:AbstractProjectionClause
andfes:AbstractSortingClause. Use those concrete elements to formulate and submit ad hoc query requests
and check that that ad hoc query requests work according to their description. Verify that the server
implements KVP-encoded ad hoc queries. Submit KVP-encoded ad hoc query requests and check thatthe ad hoc query operations work according to their description.

c)Reference: 6.3.2, 6.3.3.

d)Test type: basic test.

A.3 Test cases for functionsa)

Test purpose: verify that additional functions are defined and verify their correct use.

b)

Test method: verify that one or more functions are listed in the filter capabilities document. Submit
requests and check that the additional filter functions operate according to their description.

c)Reference: 7.6, 7.14.7.

d)Test type: basic Test.

A.4 Test cases for resource identificationa)

Test purpose: verify the correct use of the resource identification operator.

b)

Test method: submit requests that query specific instances of resource and check that the ResourceId
operator operates according to its description.

c)Reference: 7.11.

d)Test type: basic test.

44

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)A.5 Test cases for minimum standard filtera)Test purpose: verify the correct use of comparison and logical operators.

b)

Test method: verify that the operators PropertyIsEqualTo, PropertyIsNotEqualTo, PropertyIsLessThan,
PropertyIsGreaterThan, PropertyIsLessThanOrEqualTo, PropertyIsGreaterThanOrEqualTo are listed in
the filter capabilities document. Verify that all the logical operators are listed in the filter capabilities
document. Submit requests and check that the implemented comparison and logical operators work
according to their description.

c)Reference: 7.7.3, 7.7.3.2, 7.7.3.3, 7.10, 7.14.4.

d)Test type: basic test.

A.6 Test cases for standard filtera)Test purpose: verify the correct use of additional comparison operators.

b)

Test method: verify that the Minimum Standard Filter conformance class (see A.4) is satisfied. Verify thatthe operators PropertyIsNull, PropertyIsNil, PropertyIsLike and PropertyIsBetween are listed in the filter
capabilities document. Submit requests and check that the operators work according to their description.

c)Reference: 7.7.3.4, 7.7.3.5, 7.7.3.6, 7.7.3.7, 7.14.4.

d)Test type: basic test.

A.7 Test cases for minimum spatial filtera)Test purpose: verify the correct use of the BBOX operator.

b)

Test method: verify that the BBOX operator is listed in the filter capabilities document. Submit requests
and check that the BBOX operator works according to its description.

c)Reference: 7.8.3.2.

d)Test type: basic test.

A.8 Test cases for spatial filtera)Test purpose: verify the correct use of additional spatial operators.

b)

Test method: verify that the Minimum Spatial Filter conformance class is satisfied. Verify that one or more
additional spatial operators are listed in the filter capabilities document. Submit requests and check thatthe additional spatial operators work according to their description.

c)Reference: 7.8.2, 7.8.3, 7.8.3.3, 7.8.4, 7.14.5.

d)Test type: basic test.

Copyright © 2010 Open Geospatial Consortium

45

OGC 09-026r1 and ISO 19143:2010(E)A.9 Test cases for minimum temporal filtera)Test purpose: verify the correct use of the During operator.

b)

Test method: verify that the During operator is listed in the filter capabilities document. Submit requests
and check that the During operator works according to its description.

c)Reference: 7.9.2, 7.9.3, 7.14.6.

d)Test type: basic test.

A.10 Test cases for temporal filtera)Test purpose: verify the correct use of additional temporal operators.

b)

Test method: verify that the Minimum Temporal Filter conformance class is satisfied. Verify that one ormore additional temporal operators are listed in the filter capabilities document. Submit requests andcheck that the additional temporal operators work according to their description.

c)Reference: 7.9.2, 7.9.3, 7.14.6.

d)Test type: basic test.

A.11 Test cases for version navigationa)

Test purpose: verify the ability to navigate feature versions using the fes:ResourceId version navigation
capability.

b)

Test method: submit requests and check that the operations work according to their description.

c)Reference: 7.11.

d)Test type: basic test.

A.12 Test cases for sortinga)

Test purpose: verify the correct use of sorting.

b)

Test method: submit requests and check that the operations work according to their description.

c)Reference: ISO 19143:2010, Clause 8.

d)Test type: basic test.

A.13 Test cases for extended operatorsa)

Test purpose: verify the correct use of extended operators.

b)

Test method: verify that a list of extended operators in presented in the filter capabilities document.
Submit requests to check that the extended operators work according to their description.

c)Reference: 7.12.3,7.14.8.

d)Test type: basic test.

46

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)A.14 Test cases for XPatha)

Test purpose: verify that the correct use of the minimum set of XPath capabilities.

b)

Test method: submit requests to check that XPath processing operates according to its description.

c)Reference: 7.4.4.

d)Test type: basic test.

A.15 Test cases for schema-element() functiona)

Test purpose: verify the correct use of the schema-element() XPath function.

b)

Test method: verify that the Minimum XPath conformance class is satisfied. Submit requests that use theschema-element() function and check that the function operates according to its description.

c)Reference: 7.4.4, A.14.

d)

Test type: basic test.

Copyright © 2010 Open Geospatial Consortium

47

OGC 09-026r1 and ISO 19143:2010(E)Annex B(informative)
Filter schema definitions

B.1 General considerations
The XML schema fragments presented in this International Standard are gathered in this annex and factored
into files that may be used to validate XML-encoded query and filter expressions.

B.2 Schema files
B.2.1 expr.xsd<?xml version="1.0" encoding="UTF-8"?><xsd:schema
targetNamespace="http://www.opengis.net/fes/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"version="2.0.0"><xsd:element name="expression" abstract="true"/><xsd:element name="ValueReference" type="xsd:string"
substitutionGroup="fes:expression"/><xsd:element name="Function" type="fes:FunctionType"substitutionGroup="fes:expression"/><xsd:complexType name="FunctionType"><xsd:sequence><xsd:element ref="fes:expression"
minOccurs="0" maxOccurs="unbounded"/></xsd:sequence><xsd:attribute name="name" type="xsd:string" use="required"/></xsd:complexType><xsd:element name="Literal" type="fes:LiteralType"substitutionGroup="fes:expression"/><xsd:complexType name="LiteralType" mixed="true"><xsd:sequence><xsd:any minOccurs="0"/></xsd:sequence><xsd:attribute name="type" type="xsd:QName"/></xsd:complexType></xsd:schema>

B.2.2 filter.xsd<?xml version="1.0" encoding="UTF-8"?><xsd:schema
targetNamespace="http://www.opengis.net/fes/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"version="2.0.0"><xsd:include schemaLocation="expr.xsd"/><xsd:include schemaLocation="query.xsd"/><xsd:include schemaLocation="filterCapabilities.xsd"/>48

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<xsd:element name="Filter"
type="fes:FilterType"substitutionGroup="fes:AbstractSelectionClause"/><xsd:complexType name="FilterType"><xsd:complexContent><xsd:extension base="fes:AbstractSelectionClauseType"><xsd:sequence><xsd:group ref="fes:FilterPredicates"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><!-- =================================================================== --><!-- FILTER PREDICATES--><!-- =================================================================== --><xsd:group name="FilterPredicates"><xsd:choice><xsd:element ref="fes:comparisonOps"/><xsd:element ref="fes:spatialOps"/><xsd:element ref="fes:temporalOps"/><xsd:element ref="fes:logicOps"/><xsd:element ref="fes:extensionOps"/><xsd:element ref="fes:Function"/><xsd:element ref="fes:_Id" maxOccurs="unbounded"/></xsd:choice></xsd:group><!-- =================================================================== --><!-- COMPARISON OPERATORS--><!-- =================================================================== --><xsd:element name="comparisonOps"
type="fes:ComparisonOpsType"abstract="true"/><xsd:complexType name="ComparisonOpsType" abstract="true"/><xsd:element name="PropertyIsEqualTo"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsNotEqualTo"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsLessThan"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsGreaterThan"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsLessThanOrEqualTo"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsGreaterThanOrEqualTo"
type="fes:BinaryComparisonOpType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsLike"
type="fes:PropertyIsLikeType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsNull"
type="fes:PropertyIsNullType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsNil"
type="fes:PropertyIsNilType"substitutionGroup="fes:comparisonOps"/><xsd:element name="PropertyIsBetween"
type="fes:PropertyIsBetweenType"substitutionGroup="fes:comparisonOps"/><!-- =================================================================== --><!-- SPATIAL OPERATORS--><!-- =================================================================== --><xsd:element name="spatialOps" type="fes:SpatialOpsType" abstract="true"/><xsd:complexType name="SpatialOpsType" abstract="true"/><xsd:element name="Equals"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Disjoint"
type="fes:BinarySpatialOpType"

Copyright © 2010 Open Geospatial Consortium

49

OGC 09-026r1 and ISO 19143:2010(E)substitutionGroup="fes:spatialOps"/><xsd:element name="Touches"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Within"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Overlaps"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Crosses"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Intersects"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="Contains"
type="fes:BinarySpatialOpType"substitutionGroup="fes:spatialOps"/><xsd:element name="DWithin"
type="fes:DistanceBufferType"substitutionGroup="fes:spatialOps"/><xsd:element name="Beyond"type="fes:DistanceBufferType"substitutionGroup="fes:spatialOps"/><xsd:element name="BBOX"
type="fes:BBOXType"substitutionGroup="fes:spatialOps"/><!-- =================================================================== --><!-- TEMPORAL OPERATORS--><!-- =================================================================== --><xsd:element name="temporalOps" type="fes:TemporalOpsType" abstract="true"/><xsd:complexType name="TemporalOpsType" abstract="true"/><xsd:element name="After"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="Before"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="Begins"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="BegunBy"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="TContains"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="During"type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="EndedBy"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="Ends"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="TEquals"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="Meets"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="MetBy"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="TOverlaps"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="OverlappedBy"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/><xsd:element name="AnyInteracts"
type="fes:BinaryTemporalOpType"substitutionGroup="fes:temporalOps"/>

50

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<!-- =================================================================== --><!-- LOGICAL OPERATORS--><!-- =================================================================== --><xsd:element name="logicOps" type="fes:LogicOpsType" abstract="true"/><xsd:complexType name="LogicOpsType" abstract="true"/><xsd:element name="And"type="fes:BinaryLogicOpType"substitutionGroup="fes:logicOps"/><xsd:element name="Or"
type="fes:BinaryLogicOpType"substitutionGroup="fes:logicOps"/><xsd:element name="Not"type="fes:UnaryLogicOpType"substitutionGroup="fes:logicOps"/><!-- =================================================================== --><!-- EXTENSION OPERATORS--><!-- =================================================================== --><xsd:element name="extensionOps"
type="fes:ExtensionOpsType"abstract="true"/><xsd:complexType name="ExtensionOpsType" abstract="true"/><!-- =================================================================== --><!-- OBJECT/RECORDS IDENTIFIERS--><!-- =================================================================== --><xsd:element name="_Id" type="fes:AbstractIdType" abstract="true"/><xsd:complexType name="AbstractIdType" abstract="true"/><!-- =================================================================== --><!-- CONCRETE OBJECT IDENTIFIERS--><!-- =================================================================== --><xsd:element name="ResourceId"
type="fes:ResourceIdType"substitutionGroup="fes:_Id"/><xsd:complexType name="ResourceIdType"><xsd:complexContent><xsd:extension base="fes:AbstractIdType"><xsd:attribute name="rid" type="xsd:string" use="required"/><xsd:attribute name="previousRid" type="xsd:string"/><xsd:attribute name="version" type="fes:VersionType"/><xsd:attribute name="startDate" type="xsd:dateTime"/><xsd:attribute name="endDate" type="xsd:dateTime"/></xsd:extension></xsd:complexContent></xsd:complexType><xsd:simpleType name="VersionType"><xsd:union memberTypes="fes:VersionActionTokens
xsd:positiveInteger
xsd:dateTime"><xsd:annotation><xsd:documentation>
Allows navigation of versioned resources.
Can be the tokens FIRST,LAST,PREVIOUS,NEXT,ALL relative
to the specified rid. It is up to the WFS to arrange
for the version id to be hashed into the RID.
Can be an integer indicating which version of afeature to fetch. 1=first, 2=second, etc...
Can be a</xsd:documentation></xsd:annotation></xsd:union></xsd:simpleType><xsd:simpleType name="VersionActionTokens"><xsd:restriction base="xsd:string"><xsd:enumeration value="FIRST"/><xsd:enumeration value="LAST"/><xsd:enumeration value="PREVIOUS"/><xsd:enumeration value="NEXT"/><xsd:enumeration value="ALL"/></xsd:restriction></xsd:simpleType>

Copyright © 2010 Open Geospatial Consortium

51

OGC 09-026r1 and ISO 19143:2010(E)<!-- =================================================================== --><!-- TYPE DECLARATIONS--><!-- =================================================================== --><xsd:complexType name="BinaryComparisonOpType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="2" maxOccurs="2"/></xsd:sequence><xsd:attribute name="matchCase" type="xsd:boolean"use="optional" default="true"/><xsd:attribute name="matchAction" type="fes:MatchActionType"use="optional" default="Any"/></xsd:extension></xsd:complexContent></xsd:complexType><xsd:simpleType name="MatchActionType"><xsd:restriction base="xsd:string"><xsd:enumeration value="All"/><xsd:enumeration value="Any"/><xsd:enumeration value="One"/></xsd:restriction></xsd:simpleType><xsd:complexType name="PropertyIsLikeType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="2" maxOccurs="2"/></xsd:sequence><xsd:attribute name="wildCard" type="xsd:string" use="required"/><xsd:attribute name="singleChar" type="xsd:string" use="required"/><xsd:attribute name="escapeChar" type="xsd:string" use="required"/></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="PropertyIsNullType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="0"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="PropertyIsNilType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="0"/></xsd:sequence><xsd:attribute name="nilReason" type="xsd:string"/></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="PropertyIsBetweenType"><xsd:complexContent><xsd:extension base="fes:ComparisonOpsType"><xsd:sequence><xsd:element ref="fes:expression"/><xsd:element name="LowerBoundary" type="fes:LowerBoundaryType"/><xsd:element name="UpperBoundary" type="fes:UpperBoundaryType"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="LowerBoundaryType"><xsd:choice><xsd:element ref="fes:expression"/></xsd:choice></xsd:complexType><xsd:complexType name="UpperBoundaryType"><xsd:sequence><xsd:element ref="fes:expression"/></xsd:sequence></xsd:complexType>52

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<xsd:complexType name="BinarySpatialOpType"><xsd:complexContent><xsd:extension base="fes:SpatialOpsType"><xsd:sequence><xsd:element ref="fes:ValueReference"/><xsd:choice><xsd:element ref="fes:expression"/><xsd:any namespace="##other"/></xsd:choice></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="BinaryTemporalOpType"><xsd:complexContent><xsd:extension base="fes:TemporalOpsType"><xsd:sequence><xsd:element ref="fes:ValueReference"/><xsd:choice><xsd:element ref="fes:expression"/><xsd:any namespace="##other"/></xsd:choice></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="BBOXType"><xsd:complexContent><xsd:extension base="fes:SpatialOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="0"/><xsd:any namespace="##other"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="DistanceBufferType"><xsd:complexContent><xsd:extension base="fes:SpatialOpsType"><xsd:sequence><xsd:element ref="fes:expression" minOccurs="0"/><xsd:any namespace="##other"/><xsd:element name="Distance" type="fes:MeasureType"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="BinaryLogicOpType"><xsd:complexContent><xsd:extension base="fes:LogicOpsType"><xsd:choice minOccurs="2" maxOccurs="unbounded"><xsd:group ref="fes:FilterPredicates"/></xsd:choice></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="UnaryLogicOpType"><xsd:complexContent><xsd:extension base="fes:LogicOpsType"><xsd:sequence><xsd:choice><xsd:group ref="fes:FilterPredicates"/></xsd:choice></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType><xsd:complexType name="MeasureType"><xsd:simpleContent><xsd:extension base="xsd:double"><xsd:attribute name="uom" type="fes:UomIdentifier" use="required"/></xsd:extension></xsd:simpleContent></xsd:complexType><xsd:simpleType name="UomIdentifier"><xsd:union memberTypes="fes:UomSymbol fes:UomURI"/></xsd:simpleType><xsd:simpleType name="UomSymbol"></xsd:annotation>

Copyright © 2010 Open Geospatial Consortium

53

OGC 09-026r1 and ISO 19143:2010(E)<xsd:restriction base="xsd:string"><xsd:pattern value="[^: \n\r\t]+"/></xsd:restriction></xsd:simpleType><xsd:simpleType name="UomURI"></xsd:annotation><xsd:restriction base="xsd:anyURI"><xsd:pattern value="([a-zA-Z][a-zA-Z0-9\-\+\.]*:|\.\./|\./|#).*"/></xsd:restriction></xsd:simpleType></xsd:schema>

B.2.3 query.xsd<?xml version="1.0" encoding="UTF-8"?><xsd:schema
targetNamespace="http://www.opengis.net/fes/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"version="2.0.0"><xsd:element name="AbstractQueryExpression"
type="fes:AbstractQueryExpressionType" abstract="true"/><xsd:complexType name="AbstractQueryExpressionType" abstract="true"><xsd:attribute name="handle" type="xsd:string"/></xsd:complexType><xsd:element name="AbstractAdhocQueryExpression"
type="fes:AbstractAdhocQueryExpressionType"substitutionGroup="fes:AbstractQueryExpression"
abstract="true"/><xsd:complexType name="AbstractAdhocQueryExpressionType" abstract="true"><xsd:complexContent><xsd:extension base="fes:AbstractQueryExpressionType"><xsd:sequence><xsd:element ref="fes:AbstractProjectionClause"
minOccurs="0" maxOccurs="unbounded"/><xsd:element ref="fes:AbstractSelectionClause" minOccurs="0"/><xsd:element ref="fes:AbstractSortingClause" minOccurs="0"/></xsd:sequence><xsd:attribute name="typeNames"
type="fes:TypeNamesListType" use="required"/><xsd:attribute name="aliases"
type="fes:AliasesType"/></xsd:extension></xsd:complexContent></xsd:complexType><xsd:simpleType name="TypeNamesListType"><xsd:list itemType="fes:TypeNamesType"/></xsd:simpleType><xsd:simpleType name="TypeNamesType"><xsd:union memberTypes="fes:SchemaElement xsd:QName"/></xsd:simpleType><xsd:simpleType name="SchemaElement"><xsd:restriction base="xsd:string"><xsd:pattern value="schema\-element\(.+\)"/></xsd:restriction></xsd:simpleType><xsd:simpleType name="AliasesType"><xsd:list itemType="xsd:NCName"/></xsd:simpleType><xsd:element name="AbstractProjectionClause" abstract="true"/><xsd:complexType name="AbstractProjectionClauseType" abstract="true"/><xsd:element name="AbstractSelectionClause" abstract="true"/><xsd:complexType name="AbstractSelectionClauseType" abstract="true"/><xsd:element name="AbstractSortingClause" abstract="true"/><xsd:complexType name="AbstractSortingClauseType" abstract="true"/></xsd:schema>54

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)B.2.4 sort.xsd<?xml version="1.0" encoding="UTF-8"?><xsd:schema
targetNamespace="http://www.opengis.net/fes/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"version="2.0.0"><xsd:include schemaLocation="query.xsd"/><xsd:include schemaLocation="expr.xsd"/><!-- ============================================= --><!-- SORTBY EXPRESSION--><!-- ============================================= --><xsd:element name="SortBy"
type="fes:SortByType"substitutionGroup="fes:AbstractSortingClause"/><!-- ============================================= --><!-- COMPLEX TYPES--><!-- ============================================= --><xsd:complexType name="SortByType"><xsd:sequence><xsd:element name="SortProperty"
type="fes:SortPropertyType" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="SortPropertyType"><xsd:sequence><xsd:element ref="fes:ValueReference"/><xsd:element name="SortOrder" type="fes:SortOrderType" minOccurs="0"/></xsd:sequence></xsd:complexType><xsd:simpleType name="SortOrderType"><xsd:restriction base="xsd:string"><xsd:enumeration value="DESC"/><xsd:enumeration value="ASC"/></xsd:restriction></xsd:simpleType></xsd:schema>

B.2.5 filterCapabilities.xsd<?xml version="1.0" encoding="UTF-8"?><xsd:schema
targetNamespace="http://www.opengis.net/fes/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:ows="http://www.opengis.net/ows/1.1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xml="http://www.w3.org/XML/1998/namespace"elementFormDefault="qualified"version="2.0.0"><xsd:import namespace="http://www.w3.org/XML/1998/namespace"schemaLocation="http://www.w3.org/2001/xml.xsd"/><xsd:import namespace="http://www.opengis.net/ows/1.1"
schemaLocation="../../ows/1.1.0/owsAll.xsd"/><xsd:element name="Filter_Capabilities"><xsd:complexType><xsd:sequence><xsd:element name="Conformance"
type="fes:ConformanceType"/><xsd:element name="Id_Capabilities"
type="fes:Id_CapabilitiesType"/><xsd:element name="Scalar_Capabilities"
type="fes:Scalar_CapabilitiesType"minOccurs="0"/><xsd:element name="Spatial_Capabilities"
type="fes:Spatial_CapabilitiesType"minOccurs="0"/>Copyright © 2010 Open Geospatial Consortium

55

OGC 09-026r1 and ISO 19143:2010(E)<xsd:element name="Temporal_Capabilities"
type="fes:Temporal_CapabilitiesType"minOccurs="0"/><xsd:element name="Functions"
type="fes:AvailableFunctionsType" minOccurs="0"/><xsd:element name="Extended_Capabilities"
type="fes:Extended_CapabilitiesType"minOccurs="0"/></xsd:sequence></xsd:complexType></xsd:element><!-- CONFORMANCE --><xsd:complexType name="ConformanceType"><xsd:sequence><xsd:element name="Constraint" type="ows:DomainType" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><!-- RESOURCE IDENTIFIERS --><xsd:complexType name="Id_CapabilitiesType"><xsd:sequence><xsd:element name="ResourceIdentifier"type="fes:ResourceIdentifierType" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="ResourceIdentifierType"><xsd:sequence><xsd:element ref="ows:Metadata" minOccurs="0"/></xsd:sequence><xsd:attribute name="name" type="xsd:QName" use="required"/></xsd:complexType><!-- SCALAR CAPABILITIES --><xsd:complexType name="Scalar_CapabilitiesType"><xsd:sequence><xsd:element ref="fes:LogicalOperators" minOccurs="0"/><xsd:element name="ComparisonOperators"
type="fes:ComparisonOperatorsType" minOccurs="0"/></xsd:sequence></xsd:complexType><xsd:element name="LogicalOperators"><xsd:complexType/></xsd:element><xsd:complexType name="ComparisonOperatorsType"><xsd:sequence maxOccurs="unbounded"><xsd:element name="ComparisonOperator"
type="fes:ComparisonOperatorType"/></xsd:sequence></xsd:complexType><xsd:complexType name="ComparisonOperatorType"><xsd:attribute name="name"type="fes:ComparisonOperatorNameType" use="required"/></xsd:complexType><xsd:simpleType name="ComparisonOperatorNameType"><xsd:union><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:enumeration value="PropertyIsEqualTo"/><xsd:enumeration value="PropertyIsNotEqualTo"/><xsd:enumeration value="PropertyIsLessThan"/><xsd:enumeration value="PropertyIsGreaterThan"/><xsd:enumeration value="PropertyIsLessThanOrEqualTo"/><xsd:enumeration value="PropertyIsGreaterThanOrEqualTo"/><xsd:enumeration value="PropertyIsLike"/><xsd:enumeration value="PropertyIsNull"/><xsd:enumeration value="PropertyIsNil"/><xsd:enumeration value="PropertyIsBetween"/></xsd:restriction></xsd:simpleType><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:pattern value="extension:\w{2,}"/></xsd:restriction></xsd:simpleType></xsd:union>

56

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)</xsd:simpleType><xsd:complexType name="AvailableFunctionsType"><xsd:sequence><xsd:element name="Function"
type="fes:AvailableFunctionType" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="AvailableFunctionType"><xsd:sequence><xsd:element ref="ows:Metadata" minOccurs="0"/><xsd:element name="Returns" type="xsd:QName"/><xsd:element name="Arguments"
type="fes:ArgumentsType" minOccurs="0"/></xsd:sequence><xsd:attribute name="name" type="xsd:string" use="required"/></xsd:complexType><xsd:complexType name="ArgumentsType"><xsd:sequence><xsd:element name="Argument"
type="fes:ArgumentType" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="ArgumentType"><xsd:sequence><xsd:element ref="ows:Metadata" minOccurs="0"/><xsd:element name="Type" type="xsd:QName"/></xsd:sequence><xsd:attribute name="name" type="xsd:string" use="required"/></xsd:complexType><!-- SPATIAL CAPABILITIES --><xsd:complexType name="Spatial_CapabilitiesType"><xsd:sequence><xsd:element name="GeometryOperands"
type="fes:GeometryOperandsType"/><xsd:element name="SpatialOperators"
type="fes:SpatialOperatorsType"/></xsd:sequence></xsd:complexType><xsd:complexType name="GeometryOperandsType"><xsd:sequence><xsd:element name="GeometryOperand" maxOccurs="unbounded"><xsd:complexType><xsd:attribute name="name" type="xsd:QName" use="required"/></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType><xsd:complexType name="SpatialOperatorsType"><xsd:sequence><xsd:element name="SpatialOperator"
type="fes:SpatialOperatorType"
maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="SpatialOperatorType"><xsd:sequence><xsd:element name="GeometryOperands"
type="fes:GeometryOperandsType"minOccurs="0"/></xsd:sequence><xsd:attribute name="name" type="fes:SpatialOperatorNameType"/></xsd:complexType><xsd:simpleType name="SpatialOperatorNameType"><xsd:union><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:enumeration value="BBOX"/><xsd:enumeration value="Equals"/><xsd:enumeration value="Disjoint"/><xsd:enumeration value="Intersects"/><xsd:enumeration value="Touches"/><xsd:enumeration value="Crosses"/><xsd:enumeration value="Within"/><xsd:enumeration value="Contains"/><xsd:enumeration value="Overlaps"/>

Copyright © 2010 Open Geospatial Consortium

57

OGC 09-026r1 and ISO 19143:2010(E)<xsd:enumeration value="Beyond"/><xsd:enumeration value="DWithin"/></xsd:restriction></xsd:simpleType><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:pattern value="extension:\w{2,}"/></xsd:restriction></xsd:simpleType></xsd:union></xsd:simpleType><!-- TEMPORAL CAPABILITIES --><xsd:complexType name="Temporal_CapabilitiesType"><xsd:sequence><xsd:element name="TemporalOperands"
type="fes:TemporalOperandsType"/><xsd:element name="TemporalOperators"
type="fes:TemporalOperatorsType"/></xsd:sequence></xsd:complexType><xsd:complexType name="TemporalOperandsType"><xsd:sequence><xsd:element name="TemporalOperand" maxOccurs="unbounded"><xsd:complexType><xsd:attribute name="name" type="xsd:QName" use="required"/></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType><xsd:complexType name="TemporalOperatorsType"><xsd:sequence><xsd:element name="TemporalOperator"
type="fes:TemporalOperatorType"
maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="TemporalOperatorType"><xsd:sequence><xsd:element name="TemporalOperands"
type="fes:TemporalOperandsType"minOccurs="0"/></xsd:sequence><xsd:attribute name="name"type="fes:TemporalOperatorNameType" use="required"/></xsd:complexType><xsd:simpleType name="TemporalOperatorNameType"><xsd:union><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:enumeration value="After"/><xsd:enumeration value="Before"/><xsd:enumeration value="Begins"/><xsd:enumeration value="BegunBy"/><xsd:enumeration value="TContains"/><xsd:enumeration value="During"/><xsd:enumeration value="TEquals"/><xsd:enumeration value="TOverlaps"/><xsd:enumeration value="Meets"/><xsd:enumeration value="OverlappedBy"/><xsd:enumeration value="MetBy"/><xsd:enumeration value="Ends"/><xsd:enumeration value="EndedBy"/></xsd:restriction></xsd:simpleType><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:pattern value="extension:\w{2,}"/></xsd:restriction></xsd:simpleType></xsd:union></xsd:simpleType>58

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<!-- EXTENSION CAPABILITIES --><xsd:complexType name="Extended_CapabilitiesType"><xsd:sequence><xsd:element name="AdditionalOperators"
type="fes:AdditionalOperatorsType" minOccurs="0"/></xsd:sequence></xsd:complexType><xsd:complexType name="AdditionalOperatorsType"><xsd:sequence><xsd:element name="Operator"
type="fes:ExtensionOperatorType"minOccurs="0" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:complexType name="ExtensionOperatorType"><xsd:attribute name="name" type="xsd:QName" use="required"/></xsd:complexType></xsd:schema>

B.2.6 filterAll.xsd<?xml version="1.0" encoding="UTF-8"?><xsd:schema
targetNamespace="http://www.opengis.net/fes/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"version="2.0.0"><xsd:include schemaLocation="query.xsd"/><xsd:include schemaLocation="filter.xsd"/><xsd:include schemaLocation="sort.xsd"/></xsd:schema>

Copyright © 2010 Open Geospatial Consortium

59

OGC 09-026r1 and ISO 19143:2010(E)Annex C
(informative)
ExamplesC.1 General considerations
This annex contains a number of examples of filters. Since filters are meant to be part of larger schemas,
these examples represent XML fragments that would likely be embedded in another XML document, such as
web feature service request.

C.2 XPath example
To practically illustrate the use of XPath expressions for referencing the XML elements and attributes within
the description of an XML encoded object consider the fictitious feature Person defined by the following XML
Schema document:<?xml version="1.0" ?><schematargetNamespace="http://www.someserver.com/myns"
xmlns:myns="http://www.someserver.com/myns"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"version="1.0"><import namespace="http://www.opengis.net/gml/3.2"
schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/><complexType name="PersonPropertyType"><sequence><element ref="myns:Person"/></sequence><attributeGroup ref="gml:AssociationAttributeGroup"/></complexType><element name="Person" type="myns:PersonType"substitutionGroup="gml:AbstractFeature"/><complexType name="PersonType"><complexContent><extension base="gml:AbstractFeatureType"><sequence><element name="insuranceNumber" type="xsd:string"/><element name="lastName"><simpleType><restriction base="string"><maxLength value="30"/></restriction></simpleType></element><element name="firstName"><simpleType><restriction base="string"><maxLength value="10"/></restriction></simpleType></element><element name="age" type="gml:MeasureType" nillable="true"/><element name="sex" type="string"/><element name="spouse" type="myns:PersonPropertyType"minOccurs="0"/><element name="location"
type="gml:PointPropertyType" minOccurs="0"/>60

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<element name="mailAddress"
type="myns:AddressPropertyType" minOccurs="0"/><element name="phone" type="xsd:string"
minOccurs="0" maxOccurs="unbounded"/></sequence></extension></complexContent></complexType><complexType name="AddressPropertyType"><sequence><element name="Address" type="myns:AddressType"/></sequence></complexType><complexType name="AddressType"><sequence><element name="streetName"><simpleType><restriction base="string"><maxLength value="30"/></restriction></simpleType></element><element name="streetNumber"><simpleType><restriction base="string"><maxLength value="10"/></restriction></simpleType></element><element name="city"><simpleType><restriction base="string"><maxLength value="30"/></restriction></simpleType></element><element name="province"><simpleType><restriction base="string"><maxLength value="30"/></restriction></simpleType></element><element name="postalCode"><simpleType><restriction base="string"><maxLength value="15"/></restriction></simpleType></element><element name="country"><simpleType><restriction base="string"><maxLength value="30"/></restriction></simpleType></element></sequence></complexType></schema>

Example instances of the feature type “Person” might be:<Personxmlns="http://www.someserver.com/myns"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.someserver.com/myns
http://www.pvretano.com/Test/Person.xsd"
gml:id="P1"><insuranceNumber>345678345</insuranceNumber><lastName>Smith</lastName><firstName>John</firstName><age uom="years">35</age><sex>male</sex>

Copyright © 2010 Open Geospatial Consortium

61

OGC 09-026r1 and ISO 19143:2010(E)<spouce xlink:href="P2"/><location><gml:Point gml:id="PT1" srsName="urn:ogc:crs:EPSG::4326"><gml:pos>10 10</gml:pos></gml:Point></location><mailAddress><Address><streetName>Main</streetName><streetNumber>10</streetNumber><city>SomeTown</city><province>Ontario</province><postalCode>M1R1K9</postalCode><country>Canada</country></Address></mailAddress><phone>4161234567</phone><phone>4168901234</phone></Person><Personxmlns="http://www.someserver.com/myns"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.someserver.com/myns
http://www.pvretano.com/Test/Person.xsd"
gml:id="P2"><insuranceNumber>111222333</insuranceNumber><lastName>Smith</lastName><firstName>Jane</firstName><age uom="years">32</age><sex>female</sex><spouce xlink:href="#P1"/><location><gml:Point gml:id="PT1" srsName="urn:ogc:crs:EPSG::4326"><gml:pos>15 31</gml:pos></gml:Point></location><mailAddress><Address><streetName>Main</streetName><streetNumber>10</streetNumber><city>SomeTown</city><province>Ontario</province><postalCode>M1R1K9</postalCode><country>Canada</country></Address></mailAddress><phone>4161234567</phone><phone>4165678901</phone></Person>>Using XPath (as defined in W3C XML Path Language) expressions, each XML element within the descriptionof a Person feature that is the root element of an XML document can be referenced as shown in Table C.1(omitting the namespace qualifiers for the sake of clarity).

62

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)Table C.1 — XPath expressions and property values for Person example
XPath Expression in Person element
context

Alternate XPath Expression in XML
document context

Example Property Value

insuranceNumber

Person/insuranceNumber

111222333

lastName

Person/lastName

Smith

firstName

Person/firstName

Jane

age

Person/age

32

sex

Person/sex

femalespousePerson/spouse#P1

location

Person/location<gml:Point><gml:pos>15 31</gml:pos></gml:Point>

mailAddress/Address/streetNumber

Person/mailAddress/Address/streetNumber

10

mailAddress/Address/streetName

Person/mailAddress/Address/streetName

Main St.

mailAddress/Address/city

Person/mailAddress/Address/city

SomeTown

mailAddress/Address/province

Person/mailAddress/Address/province

Ontario

mailAddress/Address/postalCode

Person/mailAddress/Address/postalCode

M1R1K9

mailAddress/Address/country

Person/mailAddress/Address/country

Canadaphone[1]Person/phone[1]416-123-4567

phone[2]Person/phone[2]416-567-8901

In this instance, each relative location path begins with the root element of the feature property beingreferenced. This simply corresponds to the name of the feature property. Optionally, each XML element within
the description can be referenced with the relative location path beginning with root element of the feature (i.e.
the name of the feature type). Thus the lastName property could be reference as Person/lastName, the City
element could be referenced as Person/mailAddress/Address/city and so on.
Each step of the path is composed of the abbreviated child:: axis specifier (i.e. the axis specifier child:: isomitted) and the name of the specified XML element within the description which is of node type element.
The cardinality of the phone element is greater than 1 and phone property values appear multiple times. The
specific element being referenced is indicated using the predicates [1] and [2]. The predicate [1] is used toindicate the first occurrence of the Phone element. The predicate [2] is used to indicate the second occurrenceof the phone element.

C.3 XPath predicate example
The purpose of this example is to illustrate the use of XPath predicates to identify specific data elements totest if a Filter expression.
Consider the following sample dataset:<?xml version="1.0" ?><wfs:FeatureCollection
timeStamp="2008-09-07T19:00:00"
numberReturned="2"
numberMatched="unknown"
xmlns="http://www.someserver.com/myns"
xmlns:myns="http://www.someserver.com/myns"
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

Copyright © 2010 Open Geospatial Consortium

63

OGC 09-026r1 and ISO 19143:2010(E)http://schemas.opengis.net/wfs/2.0.0/wfs.xsd
http://www.someserver.com/myns
http://www.someserver.com/schemas/BuildingSchema.xsd"><wfs:member><Building gml:id="B1"><name>City hall</name><addresses><Address><city>Bonn</city><street>Oxfordstrasse</street><number>1</number></Address><Address><city>Bonn</city><street>Breitestrasse</street><number>5</number></Address></addresses></Building></wfs:member></wfs:FeatureCollection>

The following filter expression can be used to select all Building features in “Oxfordstrasse 1”:<fes:Filter><fes:PropertyIsEqualTo><fes:ValueReference>/Building/addresses/Address[street='Oxfordstrasse']/number</fes:ValueReference><fes:Literal>1</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>

C.4 XPath schema-element() example
The schema-element() function is a built-in XPath function (see W3C XML Path Language) that test anelement to see if it is the same substitution group as the function argument.
Consider the examples XPath expression:/Person/mailAddress/USAddress/streetName

Person is the feature type name, mailAddress is a property of the type Person, USAddress is the property
type of the mailAddress, streetName is a property of the Address type. Now consider the XPath expression:/Person/mailAddress/schema-element(Address)/streetName

In this case, the WFS shall consider the property streetName of all subtypes of Address, i.e. USAddress,
EUAddress, AUAddress.

C.5 Filter examples
EXAMPLE 1
A simple non-spatial filter checking to see if SomeProperty is equal to 100.
<fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:PropertyIsEqualTo><fes:ValueReference>SomeProperty</fes:ValueReference><fes:Literal>100</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>

64

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)

EXAMPLE 2
A simple non-spatial filter comparing a property value to a literal. In this case, the DEPTH is checked to find instanceswhere it is less than 30 - possibly to identify areas that need dredging.
<fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:PropertyIsLessThan><fes:ValueReference>DEPTH</fes:ValueReference><fes:Literal>30</fes:Literal></fes:PropertyIsLessThan></fes:Filter>

EXAMPLE 3
This example encodes a simple spatial filter. In this case, one is finding all features that have a geometry that spatiallyinteracts with the specified bounding box. The expression NOT DISJOINT is used to exclude all features that do notinteract with the bounding box; in other words identify all the features that interact with the bounding box in some way.
<fes:Filter
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.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><fes:Not><fes:Disjoint><fes:ValueReference>Geometry</fes:ValueReference><gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326"><gml:lowerCorner>13.0983 31.5899</gml:lowerCorner><gml:upperCorner>35.5472 42.8143</gml:upperCorner></gml:Envelope></fes:Disjoint></fes:Not></fes:Filter>

An alternative encoding of this filter could have used to fes:BBOX element:<fes:Filter
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.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><fes:BBOX><fes:ValueReference>Geometry</fes:ValueReference><gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326"><gml:lowerCorner>13.0983 31.5899</gml:lowerCorner><gml:upperCorner>35.5472 42.8143</gml:upperCorner></gml:Envelope></fes:BBOX></fes:Filter>

EXAMPLE 4
In this example, Examples 2 and 3 are combined with the logical operator AND. The predicate is thus interpreted as
seeking all features that interact with the specified bounding box and have a DEPTH value of less than 30 m.
<fes:Filter
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.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><fes:And>

Copyright © 2010 Open Geospatial Consortium

65

OGC 09-026r1 and ISO 19143:2010(E)<fes:PropertyIsLessThan><fes:ValueReference>DEPTH</fes:ValueReference><fes:Literal>30</fes:Literal></fes:PropertyIsLessThan><fes:Not><fes:Disjoint><fes:ValueReference>Geometry</fes:ValueReference><gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326"><gml:lowerCorner>13.0983 31.5899</gml:lowerCorner><gml:upperCorner>35.5472 42.8143</gml:upperCorner></gml:Envelope></fes:Disjoint></fes:Not></fes:And></fes:Filter>

EXAMPLE 5
A fes:Filter element can also be used to identify an enumerated set of feature instances or feature components. In thiscase, any operation that included this filter block would be limited to the feature instances or feature components listed
within the fes:Filter element.
A filter applied to a GML version 3 data store:<fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:ResourceId rid="TREESA_1M.1234"/><fes:ResourceId rid="TREESA_1M.5678"/><fes:ResourceId rid="TREESA_1M.9012"/><fes:ResourceId rid="INWATERA_1M.3456"/><fes:ResourceId rid="INWATERA_1M.7890"/><fes:ResourceId rid="BUILTUPA_1M.4321"/></fes:Filter>

EXAMPLE 6
The following filter includes the encoding of a function. This filter identifies all features where the sine() of the property
named DISPERSION_ANGLE is 1.
<fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:PropertyIsEqualTo><fes:Function name="SIN"><fes:ValueReference>DISPERSION_ANGLE</fes:ValueReference></fes:Function><fes:Literal>1</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>

EXAMPLE 7
This example assumes that the server advertises support for a function called “Add” in its filter capabilities document. The
example encodes a filter that includes an arithmetic expression. This filter is equivalent to the expression
PROPA = PROPB + 100.
<fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:PropertyIsEqualTo><fes:ValueReference>PROPA</fes:ValueReference><fes:Function name="Add"><fes:ValueReference>PROPB</fes:ValueReference><fes:Literal>100</fes:Literal></fes:Function></fes:PropertyIsEqualTo></fes:Filter>

66

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)

EXAMPLE 8
This example encodes a filter using the BETWEEN operator. The filter identifies all features where the DEPTH is between
100 m and 200 m.
<fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:PropertyIsBetween><fes:ValueReference>DEPTH</fes:ValueReference><fes:LowerBoundary><fes:Literal>100</fes:Literal></fes:LowerBoundary><fes:UpperBoundary><fes:Literal>200</fes:Literal></fes:UpperBoundary></fes:PropertyIsBetween></fes:Filter>

EXAMPLE 9
This example is similar to Example 8, except that in this case, the filter is checking to see if the SAMPLE_DATE property
is within a specified date range.
<fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:PropertyIsBetween><fes:ValueReference>SAMPLE_DATE</fes:ValueReference><fes:LowerBoundary><fes:Literal>2001-01-15T20:07:48.11</fes:Literal></fes:LowerBoundary><fes:UpperBoundary><fes:Literal>2001-03-06T12:00:00.00</fes:Literal></fes:UpperBoundary></fes:PropertyIsBetween></fes:Filter>

EXAMPLE 10
This example encodes a filter using the LIKE operation to perform a pattern matching comparison. In this case, the filter
identifies all features where the value of the property named LAST_NAME begins with the letters “JOHN”.
<fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:PropertyIsLike wildCard="*" singleChar="#" escapeChar="!"><fes:ValueReference>LAST_NAME</fes:ValueReference><fes:Literal>JOHN*</fes:Literal></fes:PropertyIsLike></fes:Filter>

EXAMPLE 11
This example encodes a spatial filter that identifies all features whose geometry property, named Geometry in thisexample, overlap a polygonal area of interest.
<fes:Filter
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.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><fes:Overlaps><fes:ValueReference>Geometry</fes:ValueReference><gml:Polygon gml:id="P1" srsName="urn:ogc:def:crs:EPSG::4326">

Copyright © 2010 Open Geospatial Consortium

67

OGC 09-026r1 and ISO 19143:2010(E)<gml:exterior><gml:LinearRing><gml:posList>10 10 20 20 30 30 40 40 10 10</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></fes:Overlaps></fes:Filter>

Although GML 3.2 is the canonical GML version supported by this International Standard, the filter schemas
have been crafted is such a way as to support any version of GML. For example, here is the same filter
expression expect that it GML 2.1.2 to encoding the geometry rather than GML 3.2:<?xml version="1.0"?><fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://www.pvretano.com/schemas/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml
http://www.pvretano.com/schemas/gml/2.1.2/geometry.xsd"><fes:Overlaps><fes:ValueReference>Geometry</fes:ValueReference><gml:Polygon srsName="urn:fes:def:crs:EPSG::4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>10,10 20,20 30,30 40,40 10,10</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></fes:Overlaps></fes:Filter>

EXAMPLE 12
In this example, a more complex scalar predicate is encoded using the logical operators AND and OR. The example isequivalent to the expression:((FIELD1=10 OR FIELD1=20) AND (STATUS="VALID"))<fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:And><fes:Or><fes:PropertyIsEqualTo><fes:ValueReference>FIELD1</fes:ValueReference><fes:Literal>10</fes:Literal></fes:PropertyIsEqualTo><fes:PropertyIsEqualTo><fes:ValueReference>FIELD1</fes:ValueReference><fes:Literal>20</fes:Literal></fes:PropertyIsEqualTo></fes:Or><fes:PropertyIsEqualTo><fes:ValueReference>STATUS</fes:ValueReference><fes:Literal>VALID</fes:Literal></fes:PropertyIsEqualTo></fes:And></fes:Filter>

68

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)

EXAMPLE 13
Spatial and non-spatial predicates can be encoded in a single filter expression. In this example, a spatial predicate checks
to see if the geometric property WKB_GEOM lies within a region of interest defined by a polygon and a scalar predicate
check to see if the scalar property DEPTH lies within a specified range. This example encoding is equivalent to theexpression:(wkb_geom WITHIN "some polygon") AND (depth BETWEEN 400 AND 800)
<fes:Filter
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.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><fes:And><fes:Within><fes:ValueReference>WKB_GEOM</fes:ValueReference><gml:Polygon gml:id="P1" srsName="urn:ogc:def:crs:EPSG::4326"><gml:exterior><gml:LinearRing><gml:posList>10 10 20 20 30 30 40 40 10 10</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></fes:Within><fes:PropertyIsBetween><fes:ValueReference>DEPTH</fes:ValueReference><fes:LowerBoundary><fes:Literal>400</fes:Literal></fes:LowerBoundary><fes:UpperBoundary><fes:Literal>800</fes:Literal></fes:UpperBoundary></fes:PropertyIsBetween></fes:And></fes:Filter>

EXAMPLE 14
This example restricts the active set of objects to those instances of the Person type that are older than 50 years old andlive in Toronto. This filter expression uses an XPath (as given in W3C XML Path Language) expression to reference thecomplex attributes of the Person type.
<fes:Filter
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:And><fes:PropertyIsGreaterThan><fes:ValueReference>Person/age</fes:ValueReference><fes:Literal>50</fes:Literal></fes:PropertyIsGreaterThan><fes:PropertyIsEqualTo><fes:ValueReference>Person/mailAddress/Address/city</fes:ValueReference><fes:Literal>Toronto</fes:Literal></fes:PropertyIsEqualTo></fes:And></fes:Filter>

Copyright © 2010 Open Geospatial Consortium

69

OGC 09-026r1 and ISO 19143:2010(E)

EXAMPLE 15
This example finds features within a specified distance of a geometry.
<?xml version="1.0"?><fes:Filter
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.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><fes:DWithin><fes:ValueReference>geometry</fes:ValueReference><gml:Point gml:id="P1" srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos>43.716589 -79.340686</gml:pos></gml:Point><fes:Distance uom="m">10</fes:Distance></fes:DWithin></fes:Filter>

C.6 SortBy example
WFS GetFeature operation with SortBy clause:<?xml version="1.0" ?><GetFeatureversion="2.0.0"
service="WFS"
handle="Query01"
xmlns="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:myns="http://www.someserver.com/myns"
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.0/wfs.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><Query typeNames="myns:Hydrography"><PropertyName>myns:geoTemp</PropertyName><PropertyName>myns:depth</PropertyName><PropertyName>myns:temperature</PropertyName><fes:Filter><fes:Not><fes:Disjoint><fes:ValueReference>myns:geoTemp</fes:ValueReference><gml:Envelope srsName="urn:ogc;def:crs:EPSG::4326"><gml:lowerCorner>-57.9118 46.2023</gml:lowerCorner><gml:upperCorner>-46.6873 51.8145</gml:upperCorner></gml:Envelope></fes:Disjoint></fes:Not></fes:Filter><fes:SortBy><fes:SortProperty><fes:ValueReference>myns:depth</fes:ValueReference></fes:SortProperty><fes:SortProperty><fes:ValueReference>myns:temperature</fes:ValueReference><fes:SortOrder>DESC</fes:SortOrder></fes:SortProperty></fes:SortBy></Query></GetFeature>70

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)Response<?xml version="1.0" ?><wfs:FeatureCollection
xmlns="http://www.someserver.com/myns"
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.someserver.com/myns
http://www.someserver.com/Schemas/Hydrography.xsd
http://www.opengis.net/wfs/2.0
http://schemas.opengis.net/wfs/2.0.0/wfs.xsd"><gml:boundedBy><gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326"><gml:lowerCorner>10 10</gml:lowerCorner><gml:upperCorner>20 20</gml:upperCorner></gml:Envelope></gml:boundedBy><gml:featureMember><HydrographyHydrography gml:id="HydrographyHydrography.450"><geoTemp><gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos>10 10</gml:pos></gml:Point></geoTemp><depth>561</depth><temperature>12</temperature></HydrographyHydrography></gml:featureMember><gml:featureMember><HydrographyHydrography gml:id="HydrographyHydrography.451"><geoTemp><gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos>10 11</gml:pos></gml:Point></geoTemp><depth>565</depth><temperature>15</temperature></HydrographyHydrography></gml:featureMember><gml:featureMember><HydrographyHydrography gml:id="HydrographyHydrography.450"><geoTemp><gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos>11 12</gml:pos></gml:Point></geoTemp><depth>565</depth><temperature>13</temperature></HydrographyHydrography></gml:featureMember><gml:featureMember><HydrographyHydrography gml:id="HydrographyHydrography.451"><geoTemp><gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos>11 13</gml:pos></gml:Point></geoTemp><depth>565</depth><temperature>11</temperature></HydrographyHydrography></gml:featureMember><!—.
. … more HydrographyHydrography instances …
.
--></wfs:FeatureCollection>

In the previous example, the response is returned with instances in ascending order first by the“myns:wkbGeom” property and then, in the event of a tie between retrieved instances, by the “myns:tileId”
property in descending order… (and so forth until either a tie between instances is no longer found or the
execution of fes:SortProperty elements is exhausted).

Copyright © 2010 Open Geospatial Consortium

71

OGC 09-026r1 and ISO 19143:2010(E)C.7 Temporal filter example
EXAMPLE 1
The following examples for temporal comparisons are provided to illustrate the proper use of thetemporal operators. The examples are based on the following sample GML:
<fes:SimpleTrajectory><gml:TimePeriod><gml:begin><gml:TimeInstant><gml:timePosition>2005-05-19T09:28:40Z</gml:timePosition></gml:TimeInstant></gml:begin><gml:end><gml:TimeInstant><gml:timePosition>2005-05-21T09:36:50Z</gml:timePosition></gml:TimeInstant></gml:end></gml:TimePeriod><pathGeometry><gml:MovingObjectStatus gml:id="GML_MS_100010"><gml:validTime><gml:TimeInstant frame="#ISO-8601"><gml:timePosition frame="#ISO-8601">2005-05-19T09:28:40Z</gml:timePosition></gml:TimeInstant></gml:validTime><gml:location><gml:Point srsName="EPSG:4326"><gml:pos>-89.0979727 42.1953272</gml:pos></gml:Point></gml:location></gml:MovingObjectStatus><gml:MovingObjectStatus gml:id="GML_MS_100011"><gml:validTime><gml:TimeInstant frame="#ISO-8601"><gml:timePosition frame="#ISO-8601">2005-05-21T09:36:50Z</gml:timePosition></gml:TimeInstant></gml:validTime><gml:location><gml:Point srsName="EPSG:4326"><gml:pos>-88.9897097 42.2219765</gml:pos></gml:Point></gml:location></gml:MovingObjectStatus></pathGeometry></fes:SimpleTrajectory>

EXAMPLE 2

Time instant to time instant:<fes:Filter
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.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><fes:TEquals><fes:ValueReference>SimpleTrajectory/pathGeometry/gml:MovingObjectStatus[1]/gml:validTime/gml:TimeInstant</fes:ValueReference><gml:TimeInstant gml:id="TI1"><gml:timePosition>2005-05-19T09:28:40Z</gml:timePosition></gml:TimeInstant></fes:TEquals></fes:Filter>

EXAMPLE 3

Time period to time instant:<fes:Filter
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.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml/3.2

72

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)http://schemas.opengis.net/gml/3.2.1/gml.xsd"><fes:TContains><fes:ValueReference>SimpleTrajectory/gml:TimePeriod</fes:ValueReference><gml:TimeInstant gml:id="TI1"><gml:timePosition>2005-05-20T02:45:00-05:00</gml:timePosition></gml:TimeInstant></fes:TContains></fes:Filter>

EXAMPLE 4

Time instant to time period:<fes:Filter
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.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><fes:During><fes:ValueReference>SimpleTrajectory/pathGeometry/gml:MovingObjectStatus[1]/gml:validTime/gml:TimeIns
tant</fes:ValueReference><gml:TimePeriod gml:id="TP1"><gml:begin><gml:TimeInstant gml:id="TI1"><gml:timePosition>2005-05-17T00:00:00Z</gml:timePosition></gml:TimeInstant></gml:begin><gml:end><gml:TimeInstant gml:id="TI2"><gml:timePosition>2005-05-23T00:00:00Z</gml:timePosition></gml:TimeInstant></gml:end></gml:TimePeriod></fes:During></fes:Filter>

EXAMPLE 5

Time period to time period:<fes:Filter
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.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/gml.xsd"><fes:TOverlaps><fes:ValueReference>SimpleTrajectory/gml:TimePeriod</fes:ValueReference><gml:TimePeriod gml:id="TP1"><gml:begin><gml:TimeInstant gml:id="TI1"><gml:timePosition>2005-05-17T08:00:00Z</gml:timePosition></gml:TimeInstant></gml:begin><gml:end><gml:TimeInstant gml:id="TI2"><gml:timePosition>2005-05-23T11:00:00Z</gml:timePosition></gml:TimeInstant></gml:end></gml:TimePeriod></fes:TOverlaps></fes:Filter>

Copyright © 2010 Open Geospatial Consortium

73

OGC 09-026r1 and ISO 19143:2010(E)C.8 Filter capabilities examples
EXAMPLE 1
The following example shows a capabilities fragment from a web feature service that supports all filtering capabilities
defined in this International Standard, including a list of named functions:<?xml version="1.0"?><fes:Filter_Capabilities
xmlns:ows="http://www.opengis.net/ows/1.1"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:Conformance><fes:Constraint name="ImplementsQuery"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsAdHocQuery"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsFunctions"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsResourceId><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinStandardFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsStandardFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinSpatialFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSpatialFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinTemporalFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsTemporalFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsVersionNav"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSorting"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsExtendedOperators"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinimumXPath><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSchemaElementFunc><ows:NoValues/>

74

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint></fes:Conformance><fes:Id_Capabilities><fes:ResourceIdentifier name="fes:ResourceId"/></fes:Id_Capabilities><fes:Scalar_Capabilities><fes:LogicalOperators/><fes:ComparisonOperators><fes:ComparisonOperator name="PropertyIsLessThan"/><fes:ComparisonOperator name="PropertyIsGreaterThan"/><fes:ComparisonOperator name="PropertyIsLessThanOrEqualTo"/><fes:ComparisonOperator name="PropertyIsGreaterThanOrEqualTo"/><fes:ComparisonOperator name="PropertyIsEqualTo"/><fes:ComparisonOperator name="PropertyIsNotEqualTo"/><fes:ComparisonOperator name="PropertyIsLike"/><fes:ComparisonOperator name="PropertyIsBetween"/><fes:ComparisonOperator name="PropertyIsNull"/><fes:ComparisonOperator name="PropertyIsNil"/></fes:ComparisonOperators></fes:Scalar_Capabilities><fes:Spatial_Capabilities><fes:GeometryOperands><fes:GeometryOperand name="gml:Point"/><fes:GeometryOperand name="gml:MultiPoint"/><fes:GeometryOperand name="gml:LineString"/><fes:GeometryOperand name="gml:MultiLineString"/><fes:GeometryOperand name="gml:Curve"/><fes:GeometryOperand name="gml:MultiCurve"/><fes:GeometryOperand name="gml:Polygon"/><fes:GeometryOperand name="gml:MultiPolygon"/><fes:GeometryOperand name="gml:Surface"/><fes:GeometryOperand name="gml:MultiSurface"/><fes:GeometryOperand name="gml:MultiGeometry"/><fes:GeometryOperand name="gml:Box"/><fes:GeometryOperand name="gml:Envelope"/></fes:GeometryOperands><fes:SpatialOperators><fes:SpatialOperator name="BBOX"/><fes:SpatialOperator name="Equals"/><fes:SpatialOperator name="Disjoint"/><fes:SpatialOperator name="Intersects"/><fes:SpatialOperator name="Touches"/><fes:SpatialOperator name="Crosses"/><fes:SpatialOperator name="Within"/><fes:SpatialOperator name="Contains"/><fes:SpatialOperator name="Overlaps"/><fes:SpatialOperator name="Beyond"/><fes:SpatialOperator name="DWithin"/></fes:SpatialOperators></fes:Spatial_Capabilities><fes:Temporal_Capabilities><fes:TemporalOperands><fes:TemporalOperand name="gml:validTime"/><fes:TemporalOperand name="gml:TimeInstant"/><fes:TemporalOperand name="gml:TimePeriod"/><fes:TemporalOperand name="gml:timePosition"/><fes:TemporalOperand name="gml:timeInterval"/><fes:TemporalOperand name="gml:duration"/></fes:TemporalOperands><fes:TemporalOperators><fes:TemporalOperator name="After"/><fes:TemporalOperator name="Before"/><fes:TemporalOperator name="Begins"/><fes:TemporalOperator name="BegunBy"/><fes:TemporalOperator name="TContains"/><fes:TemporalOperator name="During"/><fes:TemporalOperator name="TEquals"/><fes:TemporalOperator name="TOverlaps"/><fes:TemporalOperator name="Meets"/><fes:TemporalOperator name="OverlappedBy"/><fes:TemporalOperator name="MetBy"/><fes:TemporalOperator name="EndedBy"/></fes:TemporalOperators></fes:Temporal_Capabilities><fes:Functions>

Copyright © 2010 Open Geospatial Consortium

75

OGC 09-026r1 and ISO 19143:2010(E)<fes:Function name="min"><fes:Returns>xsd:double</fes:Returns><fes:Arguments><fes:Argument name="value1"><fes:Type>xsd:double</fes:Type></fes:Argument><fes:Argument name="value2"><fes:Type>xsd:double</fes:Type></fes:Argument></fes:Arguments></fes:Function><fes:Function name="max"><fes:Returns>xsd:double</fes:Returns><fes:Arguments><fes:Argument name="value1"><fes:Type>xsd:double</fes:Type></fes:Argument><fes:Argument name="value2"><fes:Type>xsd:double</fes:Type></fes:Argument></fes:Arguments></fes:Function></fes:Functions></fes:Filter_Capabilities>

EXAMPLE 2
The following example shows a capabilities fragment from a catalogue service that supports a large number of filtering
capabilities defined in this International Standard, including a list of named functions and an extended operator:<?xml version="1.0"?><fes:Filter_Capabilities
xmlns:ows="http://www.opengis.net/ows/1.1"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:myops="http://www.someserver.com/myops/1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd
http://www.someserver.com/myops/1.0 ./myOps.xsd"><fes:Conformance><fes:Constraint name="ImplementsQuery"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsAdHocQuery"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsFunctions"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsResourceId><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinStandardFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsStandardFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinSpatialFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSpatialFilter"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinTemporalFilter"><ows:NoValues/>

76

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsTemporalFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsVersionNav"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSorting"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsExtendedOperators"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinimumXPath><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSchemaElementFunc><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint></fes:Conformance><fes:Id_Capabilities><fes:ResourceIdentifier name="fes:ResourceId"/></fes:Id_Capabilities><fes:Scalar_Capabilities><fes:LogicalOperators/><fes:ComparisonOperators><fes:ComparisonOperator name="PropertyIsLessThan"/><fes:ComparisonOperator name="PropertyIsGreaterThan"/><fes:ComparisonOperator name="PropertyIsLessThanOrEqualTo"/><fes:ComparisonOperator name="PropertyIsGreaterThanOrEqualTo"/><fes:ComparisonOperator name="PropertyIsEqualTo"/><fes:ComparisonOperator name="PropertyIsNotEqualTo"/><fes:ComparisonOperator name="PropertyIsLike"/><fes:ComparisonOperator name="PropertyIsBetween"/><fes:ComparisonOperator name="PropertyIsNull"/></fes:ComparisonOperators></fes:Scalar_Capabilities><fes:Spatial_Capabilities><fes:GeometryOperands><fes:GeometryOperand name="gml:Envelope"/></fes:GeometryOperands><fes:SpatialOperators><fes:SpatialOperator name="BBOX"/></fes:SpatialOperators></fes:Spatial_Capabilities><fes:Temporal_Capabilities><fes:TemporalOperands><fes:TemporalOperand name="gml:validTime"/><fes:TemporalOperand name="gml:TimeInstant"/><fes:TemporalOperand name="gml:TimePeriod"/><fes:TemporalOperand name="gml:timePosition"/><fes:TemporalOperand name="gml:timeInterval"/><fes:TemporalOperand name="gml:duration"/></fes:TemporalOperands><fes:TemporalOperators><fes:TemporalOperator name="After"/><fes:TemporalOperator name="Before"/><fes:TemporalOperator name="Begins"/><fes:TemporalOperator name="BegunBy"/><fes:TemporalOperator name="TContains"/><fes:TemporalOperator name="During"/><fes:TemporalOperator name="TEquals"/><fes:TemporalOperator name="TOverlaps"/><fes:TemporalOperator name="Meets"/><fes:TemporalOperator name="OverlappedBy"/><fes:TemporalOperator name="MetBy"/><fes:TemporalOperator name="EndedBy"/></fes:TemporalOperators></fes:Temporal_Capabilities>

Copyright © 2010 Open Geospatial Consortium

77

OGC 09-026r1 and ISO 19143:2010(E)<fes:Functions><fes:Function name="ClassifiedAs"><fes:Returns>xsd:boolean</fes:Returns><fes:Arguments><fes:Argument name="ClassificationScheme"><fes:Type>xsd:anyUri</fes:Type></fes:Argument><fes:Argument name="ClassificationNode"><fes:Type>xsd:anyUri</fes:Type></fes:Argument></fes:Arguments></fes:Function></fes:Functions><fes:Extended_Capabilities><fes:AdditionalOperators><fes:Operator name="myops:MyNewOperator"/></fes:AdditionalOperators></fes:Extended_Capabilities></fes:Filter_Capabilities>

NOTE

This example needs the following additional schema file in order to validate:<?xml version="1.0"?><xsd:schema
targetNamespace="http://www.someserver.com/myops/1.0"
xmlns:myops="http://www.someserver.com/myops/1.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"version="2.0.0"><xsd:import namespace="http://www.opengis.net/fes/2.0"
schemaLocation="http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"/><!-- =================================================================== --><!-- MY NEW OPERATOR--><!-- =================================================================== --><xsd:element name="MyNewOperator"
type="myops:MyNewOperatorType"substitutionGroup="fes:extensionOps"/><!-- =================================================================== --><!-- TYPE DECLARATIONS--><!-- =================================================================== --><xsd:complexType name="MyNewOperatorType"><xsd:complexContent><xsd:extension base="fes:ExtensionOpsType"><xsd:sequence><xsd:element name="Arg1" type="xsd:string"/><xsd:element name="Arg2" type="xsd:string"/><xsd:element name="Arg3" type="xsd:string"/></xsd:sequence></xsd:extension></xsd:complexContent></xsd:complexType></xsd:schema>

EXAMPLE 3
The following example is a filter capabilities document for a web feature service that only supports the ability to reference
GML objects by id and the BBOX operator:<fes:Filter_Capabilities
xmlns:ows="http://www.opengis.net/ows/1.1"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/fes/2.0
http://schemas.opengis.net/filter/2.0.0/filterAll.xsd"><fes:Conformance><fes:Constraint name="ImplementsQuery"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsAdHocQuery"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint>78

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)<fes:Constraint name="ImplementsFunctions"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsResourceId><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinStandardFilter"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsStandardFilter"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinSpatialFilter"><ows:NoValues/><ows:DefaultValue>TRUE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSpatialFilter"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinTemporalFilter"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsTemporalFilter"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsVersionNav"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSorting"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsExtendedOperators"><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsMinimumXPath><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint><fes:Constraint name="ImplementsSchemaElementFunc><ows:NoValues/><ows:DefaultValue>FALSE</ows:DefaultValue></fes:Constraint></fes:Conformance><fes:Id_Capabilities><fes:ResourceIdentifier name="fes:ResourceId"/></fes:Id_Capabilities><fes:Spatial_Capabilities><fes:GeometryOperands><fes:GeometryOperand name="gml:Envelope"/></fes:GeometryOperands><fes:SpatialOperators><fes:SpatialOperator name="BBOX"/></fes:SpatialOperators></fes:Spatial_Capabilities></fes:Filter_Capabilities>

Copyright © 2010 Open Geospatial Consortium

79

OGC 09-026r1 and ISO 19143:2010(E)Annex D
(informative)
EBNF for XPath subset

AbbreviatedRelativePath ::= StepExpr (“/” StepExpr)*
StepExpr ::= “@” AttributeName | (FunctionCall |AbbrevChildStep) Predicate?
FunctionCall ::= QName “(“ ContextItemExpr “)”ContextItemExpr ::= “.”AttributeName ::= QName
AbbrevChildStep ::= NodeTest
NodeTest ::= KindTest | NameTest
KindTest ::= SchemaElementTest
SchemaElementTest ::= “schema-element” “(“ ElementDeclaration “)”
ElementDeclaration ::= ElementName
ElementName ::= QNameNameTest ::= QName
Predicate ::= “[“ Expr “]”Expr ::= NumbericExpr | OrExpr
NumbericExpr ::= [1-9]+
OrExpr ::= AndExpr ( “or” AndExpr )AndExpr ::= ComparisonExpr ( “and” ComparisonExpr )ComparisonExpr ::=ChildOrContextExpr GeneralComp Literal
GeneralComp ::= “=”ChildOrContextExpr ::= ContextItemExpr | ElementName
Literal ::= NumbericLiteral | StringLiteral
NumbericLiteral ::= IntegerLiteral | DecimalLiteral | DoubleLiteral
IntegerLiteral ::= Digits
Digits ::= [0-9]+
DecimalLiteral ::= (“.” Digits) | (Digites “.” [0-9]*)
DoubleLiteral ::= (( “.” Digits) | (Digits (“.” [0-9\*)?)) [eE] [+-}? Digits
StringLiteral ::= ('"' (EscapeQuot | [^"])* '"') | ("'" (EscapeApos | [^'])* "'")
ExcapeQuote ::= ’””’
EscapeApos ::= “’’”80

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)Annex E
(informative)
Abstract model

E.1 Prerequisites
Let H be some collection of resources.
Consider further the case where H is given as a cross product of sets Hk (the idea here is that each Hk for
fixed k are all instances of a feature type).
H = π Hk : k = 1, …l

E.2 Predicate
Define a predicate as a function f:H → {0,1} , i.e. for each h in H, f(h) = 0 or 1.
A predicate may be a spatial predicate, comparison predicate or a predicate that determines whether a set ofresources falls into a given set of resource ids.
predicate ::= SpatialPredicate | ComparisonPredicate | IdPredicate

E.3 Filter
A filter is then defined as the map g:{0,1} → H. We are interested only in g(1) = ф-1(1)(f1, f2, …, fn), where fi isa predicate and ф() represents a finite number of combinations of predicates with logical connectives, such as
AND, OR and Negative. The returned set g(1) is the set of resource that is said to satisfy the filter.

E.4 Query
A query is then a map q = g. A query is said to return the resource instances that satisfy the associated filter,i.e. g(1).
Let Hk for some fixed k be one of the sets in the product H. Each element hk of Hk is characterized by a set offunctions pk1,… pkmk called the properties of h. pki:Hk→ Ri,k (Ri,k is a set).
We define the predicate f in terms of the property functions.
pki(hjk) = rki , where hjk = is an instance of type k, rki is a set of values.
Define f(x) = f(pk1(x), pk2(x),… pknk(x) ) which is a predicate (see E.2).

Copyright © 2010 Open Geospatial Consortium

81

OGC 09-026r1 and ISO 19143:2010(E)Bibliography[1]

ISO 19101:2002, Geographic information — Reference model[2]

ISO/TS 19103:2005, Geographic information — Conceptual schema language[3]

ISO 19107:2003, Geographic information — Spatial schema[4]

ISO 19111:2007, Geographic information — Spatial referencing by coordinates[5]

ISO 19115:2003, Geographic information — Metadata[6]

ISO 19119:2005, Geographic information — Services[7]

ISO 19128:2005, Geographic information — Web map server interface[8]

ISO 19142:2010, Geographic information — Web Feature Service[9]

ISO/IEC 13249-3, Information technology — Database languages — SQL multimedia and application
packages — Part 3: Spatial[10]

ISO/IEC 14651, Information technology — International string ordering and comparison — Method forcomparing character strings and description of the common template tailorable ordering[11]

ISO/IEC 14977, Information technology — Syntactic metalanguage — Extended BNF[12]

OGC 06-131r3, EO Products Extension Package for ebRIM Profile of CSW 0.1.8

82

Copyright © 2010 Open Geospatial Consortium

OGC 09-026r1 and ISO 19143:2010(E)ICS 35.240.70
Price based on 82 pages© ISO 2010 – All rights reserved