Draft

OGC Standard

OGC API - Processes - Part 1: Core
Benjamin Pross Editor Panagiotis (Peter) A. Vretanos Editor
Version: 2.0
OGC Standard

Draft

Document number:18-062r3
Document type:OGC Standard
Document subtype:Implementation
Document stage:Draft
Document language:English

License Agreement

Use of this document is subject to the license agreement at https://www.ogc.org/license

Suggested additions, changes and comments on this document are welcome and encouraged. Such suggestions may be submitted using the online change request form on OGC web site: http://ogc.standardstracker.org/




I.  Abstract

The OGC API — Processes Standard specifies a Web API that enables the execution of computing processes, the retrieval of metadata describing their purpose and functionality and the retrieval of the results of the process execution. The requirements specified in the OGC API — Processes Standard build on the OGC Web Processing Service (WPS) 2.0 Standard and specify a processing interface to communicate over a RESTful protocol using JSON encodings.

By way of background and context, in many cases geospatial or location data (including data from sensors) must be processed before the information can be effectively used. The OGC Web Processing Service (WPS) Interface Standard specifies a standard interface that simplifies the task of making simple or complex computational geospatial processing services accessible via web services. Such services include well-known GIS processes as well as specialized processes for spatiotemporal modeling and simulation. While the OGC WPS Standard was designed with spatial processing in mind, WPS implementations could also be used to readily insert non-spatial processing tasks into a web services environment. The WPS Standard provides a robust, interoperable, and versatile protocol for process execution on web services. Implementations of the WPS Standard can support both immediate processing for computational tasks that take little time and asynchronous processing for more complex and time-consuming tasks. Moreover, the WPS Standard defines a general process model that is designed to provide an interoperable description of processing functions. The WPS Standard was designed to support process cataloging and discovery in a distributed environment.

The requirements in the OGC API – Processes Standard are designed to provide the same implementation functionality as a WPS implementation but are based on a more modern way of programming and interacting with resources over the web while allowing better integration into existing software packages.

The resources that are provided by a server implementing the OGC API — Processes Standard are listed in Table 1 below and include information about the server, the list of available processes (Process list and Process description), jobs (running processes) and results of process executions.

This following table provides an overview of resources, applicable HTTP methods and links to the related document sections.

Table 1 — Requirements class Core

ResourcePathHTTP methodParameterDocument reference
Landing page/GETN/AClause 7.2
Conformance classes/conformanceGETN/AClause 7.4
Process list/processesGETN/AClause 7.10
Process description/processes/{processID}GETprocessID (in path)Clause 7.11
Process execution/processes/{processID}/executionPOSTprocessID (in path), Execute request (contained in body)Clause 7.12
Job status info/jobs/{jobID}GETjobID (in path)Clause 7.13
Job results/jobs/{jobID}/resultsGETjobID (in path)Clause 7.14.2.3
Result/jobs/{jobID}/results/{outputID}GETjobID (in path), outputID (in path)Clause 7.14.2.2

In general, the HTTP GET operation is used to provide access to the resources described above. However, in order to execute a process, the HTTP POST method is used to send an execute request to the server.

Additionally, the /jobs endpoint can be used to grant access to a list of jobs.

Table 2 — Requirements class Job list

ResourcePathHTTP methodParameterDocument reference
Job list/jobsGETN/AClause 12

In addition to the operations accessible through HTTP GET and POST methods, the DELETE method can be used to cancel a job execution and/or remove traces of the job execution.

Table 3 — Requirements class Dismiss

ResourcePathHTTP methodParameterDocument reference
Job status info/jobs/{jobID}DELETEjobID (in path)Clause 14

II.  Keywords

The following are keywords to be used by search engines and document catalogues.

ogcdoc, OGC document, OGC API, Geospatial API, processes, Web Processing Service, WPS, JSON, HTML, geoprocessing, API, OpenAPI, HTML


III.  Preface

The OGC API — Processes Standard defines how a client application can request the execution of a process, how the inputs to that process can be provided, and how the output from the process is handled. The Standard specified who to “wrap” computational tasks into an executable process that can be invoked by a client application. Examples of computational processes that can be supported by implementations of API Processes include raster algebra, geometry buffering, constructive area geometry, routing, imagery analysis and several others.

IV.  Security Considerations

The OGC API — Processes Standard makes use of different HTTP methods, namely GET, POST and DELETE. (Note that future extensions could introduce additional HTTP methods.)

HTTP methods can be classified as

  • Safe, meaning that they do not alter the state of (a resource on) the server, and

  • Idempotent, meaning that can be executed an indefinite number of times and deliver the same result.

Table 4 gives an overview of the classification of HTTP the methods used in this standard:

Table 4 — Classification of HTTP methods

HTTP MethodSafeIdempotent
GETyesyes
POSTnono
DELETEnoyes
Source RFC 7231, Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content

The following resources can be retrieved using the safe HTTP GET operation and can contain sensitive information:

Requirements class “Core”:

Requirements class “Job list”

The following API — Processes operations use unsafe HTTP methods, modify resources and therefore require special attention:

Requirements class “Core”:

Requirements class “Dismiss”

IV.A.  Operations using HTTP GET

Most of the operations defined in the OGC API — Processes Standard use the safe HTTP GET operation. However, the resources that are returned by these operations contain information that could be used to exploit implementations of the Processes API. Table 5 gives an overview of the resources specified in this standard and what kind of information they contain.

Table 5 — Requirements class ‘Core’ — Overview of core operations and returned sensitive information

ResourcePathHTTP methodInformation delivered
Landing page/GETGeneral information about the service, links to API endpoints
Conformance classes/conformanceGETList of conformance classes
Process list/processesGETProcess identifiers, links to process descriptions
Process description/processes/{processID}GETInformation about a process, e.g. inputs/outputs
Job status info/jobs/{jobID}GETStatus info, links to results or exceptions
Job results/jobs/{jobID}/resultsGETJob results

The following is more detailed information on the resources:

  • The landing page can include links to endpoints, that are not defined in the API — Processes Standard, that can lead to all the other resources that the containing API might offer.

  • The list of conformance classes could contain information about extensions like “dismiss” that pose additional security issues.

  • The process list contains process identifiers and links to the respective process descriptions.

  • The process description contains all necessary information needed to execute a process. This information can be used to send a JSON execute request to the Processes API that will pass initial sanity checks, for example checks for the correct input/output identifiers. The ability to pass values to the server is vulnerable to injection attacks and issues as discussed in section Clause IV.B can occur.

  • The job status info contains not only status information, but for finished processes also links to results / exceptions. The results of a process execution are a valuable resource as well as the exceptions that could contain hints about why the execution has failed.

Table 6 — Requirements class ‘Job List’ — Overview of operations and returned sensitive information

ResourcePathHTTP methodInformation delivered
Job list/jobsGETList of job IDs and status info, links to results or exceptions

The retrieval of the job list of a process returns the job IDs and links to the respective job status.

IV.B.  Execute operation

The execute operation uses HTTP POST to create new processing jobs (process executions). As discussed above, the HTTP POST method is not safe and it poses the following threats if misused:

  • The processing can require considerable server resources, for example computing time, network traffic (when accessing referenced inputs) or storage space for inputs and outputs.

  • Malicious inputs can be encoded either inline in the execute request JSON or by reference by providing URIs to malicious input values in the execute request JSON.

Table 7 — Requirements class ‘Core’ — Overview of the execute operation and returned sensitive information

ResourcePathHTTP methodInformation delivered
Job status info/jobsPOSTJob id, status info, (links to) results or exceptions

The new job IDs that are returned in the status info document should be created in a non-guessable way, for example using UUIDs. This will prevent random attempts to get job status information, results / exceptions or even cancel jobs / delete job artifacts.

Recommendation 1

Identifier/rec/job-list/access-control-job-list
Label/rec/job-list/access-control-job-list
Statement

Servers implementing the conformance class ‘Job List’ SHOULD have an access control in place for the /jobs endpoint to prevent misuse of job identifiers.

IV.C.  Dismiss operation

The optional dismiss extension uses the HTTP DELETE method and can be used to

  • Cancel a running job, and

  • Remove artifacts of a finished job.

Both usages pose security related issues. The cancellation of a running job (if not done on purpose) is wasting the resources that the job used prior to being cancelled. The same issue applies to the unwanted removal of artifacts of a finished job. If the dismiss extension is implemented, access control for the operation should be considered. The dismiss operation is idempotent, as it is specified by this Standard to be called using a specific job identifier. The first dismiss request to that identifier will result in a HTTP 200 (OK) status code. Continued dismiss requests using the same identifier result in a HTTP 410 (Gone) error code, but nothing else is changed on the server. A successful dismiss request returns a status info document containing the job identifier and the status “dismissed”. This status info document has no further security implications.

V.  Submitting Organizations

The following organizations submitted this Document to the Open Geospatial Consortium (OGC):

  • 52°North GmbH
  • Hexagon
  • CubeWerx Inc.
  • Ecere Corporation
  • Terradue Srl
  • European Space Agency (ESA)
  • Spacebel

VI.  Submitters

All questions regarding this submission should be directed to the editor or the submitters:

Table — Table of submitters

NameAffiliation
Benjamin Pross (editor)52°North GmbH
Stan TillmanHexagon
Panagiotis (Peter) A. Vretanos (editor)CubeWerx Inc.
Jérôme Jacovella-St-LouisEcere Corporation
Pedro GonçalvesTerradue Srl
Gérald FenoyGérald Fenoy (Individual Member)
Francis Charette MigneaultCentre de Recherche Informatique de Montréal (CRIM)
Cristiano LopesEuropean Space Agency (ESA)
Christophe NoelSpacebel

1.  Scope

The OGC API — Processes Standard (aka “Processes API”) specifies requirements of a Web API that enables the execution of computing processes and the retrieval of metadata describing their purpose and functionality. Typically, these processes combine raster, vector, coverage and/or point cloud data with well-defined algorithms to produce new raster, vector, coverage and/or point cloud information.

2.  Conformance

This Standard defines seven requirements / conformance classes.

The standardization targets of all conformance classes are “Web APIs.”

The main requirements class is:

The Core specifies requirements that all Web APIs have to implement.

The Core does not mandate a specific encoding or format for the representation of resources defined in this Standard. Rather, two requirements classes depend on the Core and specify representations for the resources specified in the Corea in commonly used encodings for data on the Web:

Furthermore, the Core does not mandate any encoding or format for the formal definition of the Processes API. OpenAPI 3.0 specification is one option for defining the Processes API. As such a requirements class has been specified for OpenAPI 3.0, which depends on the requirements class Core:

An implementation of the Core requirements class may also decide to use other API definition representations in addition to, or instead of, an OpenAPI 3.0 definition. Examples for alternative API definitions: OpenAPI 2.0 (Swagger), future versions of the OpenAPI specification, an OWS Common 2.0 capabilities document, or WSDL.

NOTE:  OpenAPI 3.0 offers an open, powerful and vendor neutral description format. While the use of OpenAPI 3.0 for the formal definition of the API is not mandatory, the requests/responses of the API specified in this Standard are defined using OpenAPI 3.0 schemas. See also the note regarding /req/core/landingpage-success

An implementation of the Core is intended to be a minimal useful API for the execution of processes in the geospatial domain. The Core is designed to map the operations of a Web Processing Service 2.0 instance.

The Core does not mandate the use of any specific process description language to specify the interface of a process. Instead this Standard defines and recommends the use of the following conformance class:

This class defines an information model, encoded in JSON, which may be used to specify the interface of a process.

Three additional conformance classes are specified that extend the basic functionality of an API:

Additional capabilities such as support for transactions, extended job monitoring, etc., may be specified in future parts of the OGC API — Processes series or as vendor-specific extensions.

Conformance with this Standard SHALL be checked using all the relevant tests specified in Annex A (normative) of this document. The framework, concepts, and methodology for testing, and the criteria to be achieved to claim conformance are specified in the OGC Compliance Testing Policies and Procedures and the OGC Compliance Testing web site.

Table 8 — Conformance class URIs

Conformance classURI
Corehttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core
OGC Process Descriptionhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/ogc-process-description
JSONhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/json
HTMLhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/html
OpenAPI Specification 3.0http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/oas30
Job listhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/job-list
Callbackhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/callback
Dismisshttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/dismiss

3.  Normative references

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements 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.

Policy SWG: OGC 08-131r3, The Specification Model — Standard for Modular specifications. Open Geospatial Consortium (2009). https://portal.ogc.org/files/?artifact_id=34762&version=2.

Arliss Whiteside, Jim Greenwood: OGC 06-121r9, OGC Web Service Common Implementation Specification. Open Geospatial Consortium (2010). https://portal.ogc.org/files/?artifact_id=38867.

Matthias Mueller: OGC 14-065, OGC® WPS 2.0 Interface Standard. Open Geospatial Consortium (2015). http://www.opengis.net/doc/IS/wps/2.0.0.

T. Dierks, C. Allen: IETF RFC 2246, The TLS Protocol Version 1.0. RFC Publisher (1999). https://www.rfc-editor.org/info/rfc2246.

R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee: IETF RFC 2616, Hypertext Transfer Protocol — HTTP/1.1. RFC Publisher (1999). https://www.rfc-editor.org/info/rfc2616.

J. Franks, P. Hallam-Baker, J. Hostetler, S. Lawrence, P. Leach, A. Luotonen, L. Stewart: IETF RFC 2617, HTTP Authentication: Basic and Digest Access Authentication. RFC Publisher (1999). https://www.rfc-editor.org/info/rfc2617.

E. Levinson: IETF RFC 2387, The MIME Multipart/Related Content-type. RFC Publisher (1998). https://www.rfc-editor.org/info/rfc2387.

E. Rescorla: IETF RFC 2818, HTTP Over TLS. RFC Publisher (2000). https://www.rfc-editor.org/info/rfc2818.

T. Berners-Lee, R. Fielding, L. Masinter: IETF RFC 3986, Uniform Resource Identifier (URI): Generic Syntax. RFC Publisher (2005). https://www.rfc-editor.org/info/rfc3986.

A. Phillips, M. Davis: IETF RFC 4646, Tags for Identifying Languages. RFC Publisher (2006). https://www.rfc-editor.org/info/rfc4646.

R. Fielding, J. Reschke (eds.): IETF RFC 7231, Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. RFC Publisher (2014). https://www.rfc-editor.org/info/rfc7231.

J. Snell: IETF RFC 7240, Prefer Header for HTTP. RFC Publisher (2014). https://www.rfc-editor.org/info/rfc7240.

M. Nottingham: IETF RFC 8288, Web Linking. RFC Publisher (2017). https://www.rfc-editor.org/info/rfc8288.

T. Bray (ed.): IETF RFC 8259, The JavaScript Object Notation (JSON) Data Interchange Format. RFC Publisher (2017). https://www.rfc-editor.org/info/rfc8259.

JSON Schema Validation: A Vocabulary for Structural Validation of JSON. https://json-schema.org/draft/2020-12/json-schema-validation.html

4.  Terms, definitions and abbreviated terms

This document uses the terms defined in OGC Policy Directive 49, which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this document and OGC documents do not use the equivalent phrases in the ISO/IEC Directives, Part 2.

This document also uses terms defined in the OGC Standard for Modular specifications (OGC 08-131r3), also known as the ‘ModSpec’. The definitions of terms such as standard, specification, requirement, and conformance test are provided in the ModSpec.

For the purposes of this document, the following additional terms and definitions apply.

4.1.  Terms and definitions

A resource that may be available as one or more sub-resource distributions that conform to one or more OGC API standards. (OGC API — Common — Part 2: Geospatial Data)

A resource accessible at the OGC API path /collections/{collectionId} that provides metadata about a collection.

A collection of data, published or curated by a single agent, and available for access or download in one or more representations. (Data Catalog Vocabulary (DCAT) — Version 2)

A specific representation of a dataset. A dataset might be available in multiple serializations that may differ in various ways, including natural language, media-type or format, schematic organization, temporal and spatial resolution, level of detail or profiles (which might specify any or all of the above). (Data Catalog Vocabulary (DCAT) — Version 2)

EXAMPLE: a downloadable file, an RSS feed or an API.

The (processing) job is a server-side object created by a processing service for a particular process execution. A job may be latent in the case of synchronous execution or explicit in the case of asynchronous execution. Since the client has only oblique access to a processing job, a Job ID is used to monitor and control a job.

JavaScript Object Notation is a lightweight data-interchange format. JSON is easy for humans to read and write and it is easy for machines to parse and generate.

The term “link” is commonly used as substitute for URL or URI. In this Standard, “link” refers to an element described by the schema for a link as shown at link.yaml. This is a JSON element containing properties such as “rel” (relation) and “href”. The value of the “href” property is an URI.

HTTP Link header, as defined in RFC 8288 (Web Linking).

A collection that is local to the OGC API deployment currently being accessed.

A method or procedure, that conforms to an OGC API Standard, used to control how users or systems can access and interact with data.

EXAMPLE: OGC API — Tiles — Part 1: Core, OGC API — Coverages — Part 1: Core, OGC API — Discrete Global Grid Systems — Part 1: Core, OGC API — Features — Part 1: Core, OGC API — Environmental Data Retrieval Standard, OGC API — Maps — Part 1: Core

An implementation of an OGC API Standard that is accessible to users and other system typically through the internet.

A process p is a function that for each input returns a corresponding output

p : X Y

where X denotes the domain of arguments x and Y denotes the co-domain of values y. In this Standard, process arguments are referred to as process inputs and result values are referred to as process outputs. Processes that have no process inputs represent value generators that deliver constant or random process outputs.

The term “process” is one of the most used terms both in the information and geosciences domain. If not stated otherwise, this Standard uses the term process as an umbrella term for any algorithm, calculation or model that either generates new data or transforms some input data into output data as defined in section 4.1 of the OGC WPS 2.0 standard.

A process description is an information model that specifies the interface of a process. A process description is used for a machine-readable description of the process itself but also provides some basic information about the process inputs and outputs.

The execution of a process is an action that calculates the outputs of a given process for a given set of data inputs.

Process inputs are the arguments of a process and refer to data provided to a process. Each process input is an identifiable item.

A process offering is an identifiable process that may be executed on a particular service instance. A process offering contains a process description as well as service-specific information about the supported execution protocols (e.g. synchronous and asynchronous execution).

Process outputs are the results of a process and refer to data returned by a process. Each process output is an identifiable item.

A process output with identifier {outputID} that is explicitly specified in the “outputs” section of an execute request.

A process output that is defined in the description of a process and is generated as a result of an execute request where the “outputs” parameter has been omitted. Omitting the “outputs” parameters of an execute request is equivalent to explicitly requesting all of the outputs defined in the process description

A collection that is not local to the OGC API deployment currently being accessed.

The Representational State Transfer (REST) style is an abstraction of the architectural elements within a distributed hypermedia system. REST focuses on the roles of components, the constraints upon their interaction with other components, and their interpretation of significant data elements. It encompasses the fundamental constraints upon components, connectors, and data that define the basis of the Web architecture, and thus the essence of its behavior as a network-based application. An API that conforms to the REST architectural principles/constraints is called a RESTful API. (Source: OGC 18-088)

4.2.  Abbreviated terms

API

Application Programming Interface

CITE

Compliance Interoperability & Testing Evaluation

CRS

Coordinate Reference System

GML

Geography Markup Language

HTTP

Hypertext Transfer Protocol

ISO

International Organization for Standardization

JSON

JavaScript Object Notation

KVP

Key-Value Pair

MIME

Multipurpose Internet Mail Extensions

OGC

Open Geospatial Consortium

REST

Representational State Transfer

URI

Uniform Resource Identifier

URL

Uniform Resource Locator

WPS

Web Processing Service

XML

Extensible Markup Language

5.  Conventions

This section provides details and examples for any conventions used in the document. Examples of conventions are symbols, abbreviations, use of XML schema, or special notes regarding how to read the document.

5.1.  Identifiers

The normative provisions in this Standard are denoted by the URI

http://www.opengis.net/spec/ogcapi-processes-1/1.0

All requirements, permission, recommendations, and conformance tests that appear in this document are denoted by partial URIs which are relative to this base.

5.2.  APIs

This Standard is primarily concerned with defining the components of a Processes API. That is an API that enables the execution of computing processes, the retrieval of metadata describing their purpose and functionality and the retrieval of the results of the process execution. The reader, however, should be cogniscant of the fact that an implementation of the Processes API as defined in this Standard may be embeded as part of a broader API. For example, a single server may implement the Features and Processes APIs and so common elements (such as the landing page) will contain components of both standards. When the term “API” is encountered in this Standard, the term is in most cases referring only to the components of a Processes API even though an implementation of the Processes API may be part of a broader API implementation.

5.3.  Schemas

Schemas defined in this Standard are defined using the JSON Schema standard and are encoded using YAML which is a human-friendly data serialization language.

5.4.  Link relations

To express relationships between resources, RFC 8288 (Web Linking) is used.

The following link relation types are used in this document.

  • service: Indicates a URI that can be used to retrieve a service document (e.g. a service landing page).

  • alternate: Refers to a substitute for the link’s context.

  • monitor: Identifies a resource that can use used to monitor changes in a resource.

  • service-desc: Identifies service description for the context that is primarily intended for consumption by machines.

    • API definitions are considered service descriptions.

    • In this Standard, OpenAPI 3.0 is used to provide a formal, machine readable, definition of the service but other API definition representations can also be used.

  • service-doc: Identifies service documentation for the context that is primarily intended for human consumption.

  • self: Conveys an identifier for the link’s context.

  • up: Refers to a parent document in a hierarchy of documents.

  • profile: Refers to a profile of a resource.

In addition, the following link relation types are used for which no applicable registered link relation type could be identified.

Each resource representation includes an array of links. Implementations are free to add additional links for all resources provided by an implementation of the Processes API.

5.5.  Use of HTTPS

For simplicity, this Standard only refers to the HTTP protocol. This is not meant to exclude the use of HTTPS. This is simply a shorthand notation for “HTTP or HTTPS”. In fact, most servers are expected to use HTTPS, not HTTP.

OGC Web API Standards do not prohibit the use of any valid HTTP option. However, implementers should be aware that optional capabilities which are not in common use could be an impediment to interoperability.

5.6.  HTTP URIs

This Standard does not restrict the lexical space of URIs used in an implementation of the Processes API beyond the requirements of the HTTP and URI Syntax IETF RFCs. If URIs include reserved characters that are delimiters in the URI subcomponent, these must be percent-encoded. See Clause 2 of RFC 3986 (URI Syntax) for details.

6.  Overview

The OGC API — Processes Standard builds on the WPS 2.0 Standard and is modularized. This means that there is a separation between:

  • Core requirements, that specify basic capabilities and can easily be mapped to existing OGC Web Processing Services.

  • More advanced functionality that is not specified in WPS 2.0.

6.1.  Encodings

JSON is the encoding for requests and responses. The inputs and outputs of a process can be in any format. The formats are defined at the time of job creation and are fixed for the specific job.

Support for HTML is recommended as HTML is the core language of the World Wide Web. A server that supports HTML will support browsing with a web browser and will enable search engines to crawl and index the processes.

7.  Requirements Class “Core”

The following section describes the Core requirements class.

7.1.  Overview

Requirements class 1

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/req/core
Obligationrequirement
Target typeWeb API
Prerequisiteshttp://www.opengis.net/spec/ogcapi_common-1/1.0/req/core
RFC 2616 (HTTP/1.1)
RFC 2818 (HTTP over TLS)
RFC 8288 (Web Linking)
Label http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/core

A server that implements the OGC API — Processes Standard provides access to processes.

Each implementation of the OGC API — Processes Standard has a single LandingPage (path /) that provides links to:

  • The APIDefinition (no fixed path),

  • The Conformance statements (path /conformance),

  • The processes metadata (path /processes).

Note that additional requirements classes may introduce additional links for inclusion in the landing page.

The APIDefinition describes the capabilities of the server that can be used by clients to connect to the server or by development tools to support the implementation of servers and clients. Accessing the APIDefinition using HTTP GET returns a description of the an API that includes the Processes API defined in this Standard but may include the description of additional components that are part of a broader containing API.

Accessing Conformance using HTTP GET returns a list of URIs of conformance classes implemented by the server.

The list of processes contains a summary of each process offered by the OGC API — Processes implementation, including the link to a more detailed description of the process.

The process description contains information about inputs and outputs and a link to the execution-endpoint for the process.

A HTTP POST request to the execution-endpoint creates a new job. The inputs and outputs need to be passed in a JSON execute-request.

The URL for accessing status information is delivered in the HTTP header location.

After a process is finished (status = successful/failed), the results/exceptions can be retrieved.

 

Figure 1 — Resources in the Core requirements class

The OGC API — Processes Standard utilizes elements of the OGC API-Common Standard. Table 9 Identifies the API-Common Requirements Classes which are applicable to each section of this Processes API Standard.

Table 9 — Mapping API — Processes Sections to API-Common Requirements Classes

API — Processes SectionAPI-Common Requirements Class
API Landing Pagehttp://www.opengis.net/spec/ogcapi-common-1/1.0/req/core
API Definitionhttp://www.opengis.net/spec/ogcapi-common-1/1.0/req/core
Declaration of Conformance Classeshttp://www.opengis.net/spec/ogcapi-common-1/1.0/req/core
OpenAPI 3.0http://www.opengis.net/spec/ogcapi-common-1/1.0/req/oas30
HTMLhttp://www.opengis.net/spec/ogcapi-common-1/1.0/req/html

7.2.  Retrieve the API landing page

The following section defines the requirements to retrieve an API landing page that contains links to Processes API resources but may also contain links to resources that are part of a broader, containing, API.

7.2.1.  Operation

Requirement 1

Identifier/req/core/landingpage-op
Label/req/core/landingpage-op
Statement

The server SHALL support the HTTP GET operation at the path /.

7.2.2.  Response

Requirement 2

Identifier/req/core/landingpage-success
Label/req/core/landingpage-success
Statement

A successful execution of the operation SHALL be reported as a response with a HTTP status code 200.

The content of that response SHALL be based upon the OpenAPI 3.0 schema landingPage.yaml and include at least links to the following resources:

NOTE 1:  The term “…​based upon the OpenAPI 3.0 schema…​” used in the requirements of this Standard means that OpenAPI 3.0 is used to define:

  • All the required properties of the respective request/response schema,

  • Any optional properties of the respective request/response schema.

It also means that unless explicitly excluded these OpenAPI schemas are extensible with additional properties not defined in the schema using the additionalProperties mechanism defined in the OpenAPI 3.0 specification.

 

type: object
required:
  - links
properties:
  title:
    type: string
    example: Example processing server
  description:
    type: string
    example: Example server implementing the OGC API - Processes 1.0 Standard
  attribution:
    type: string
    title: attribution for the Processes API
    description: The `attribution` should be short and intended for presentation to a user, for example, in a corner of a map. Parts of the text can be links to other resources if additional information is needed. The string can include HTML markup.
  links:
    type: array
    items:
      $ref: 'link.yaml'

Listing 1 — Schema for the landing page

NOTE 2:  This schema can also be obtained from landingPage.yaml.

 

Listing 2 — Schema for a link

NOTE 3:  This schema can also be obtained from link.yaml.

Example — Landing page response document

 

{
 
"links": [{
   
"href": "http://processing.example.org/oapi-p?f=application/json",
   
"rel": "self",
   
"type": "application/json",
   
"title": "This document"
 
},{
   
"href": "http://processing.example.org/oapi-p?f=text/html",
   
"rel": "alternate",
   
"type": "text/html",
   
"title": "This document as HTML"
 
},
 
{
   
"href": "http://processing.example.org/oapi-p/api?f=application/json",
   
"rel": "service-desc",
   
"type": "application/json",
   
"title": "API definition for this endpoint as JSON"
 
},
 
{
   
"href": "http://processing.example.org/oapi-p/api?f=text/html",
   
"rel": "service-desc",
   
"type": "text/html",
   
"title": "API definition for this endpoint as HTML"
 
},
 
{
   
"href": "http://processing.example.org/oapi-p/conformance",
   
"rel": "http://www.opengis.net/def/rel/ogc/1.0/conformance",
   
"type": "application/json",
   
"title": "OGC API - Processes conformance classes implemented by this server"
 
},
 
{
   
"href": "http://processing.example.org/oapi-p/processes",
   
"rel": "http://www.opengis.net/def/rel/ogc/1.0/processes",
   
"type": "application/json",
   
"title": "Metadata about the processes"
 
},
 
{
   
"href": "http://processing.example.org/oapi-p/jobs",
   
"rel": "http://www.opengis.net/def/rel/ogc/1.0/job-list",
   
"title": "The endpoint for job monitoring"
 
}]
}

7.2.3.  Error situations

See Clause 7.5.1 for general guidance.

7.3.  Retrieve an API definition

The following section defines the requirements to retrieve an API definition. This API may only implement components of the Processes API defined in this Standard but may define the implementation of a broader API into which the Processes API is embedded.

7.3.1.  Operation

Every implementation of OGC API — Processes must provide metadata that describe the functional capabilities of the server instance that the API definition provides access to. In this document, this is known as the “API definition”. This definition is used by developers to understand the functionality provided by the API endpoing, so software clients can connect to the server, or by development tools to support the implementation of servers and clients.

Requirement 3

Identifier/req/core/api-definition-op
Label/req/core/api-definition-op
Statement

The URIs of all API definitions referenced from the landing page SHALL support the HTTP GET method.

Permission 1

Identifier/per/core/api-definition-uri
Label/per/core/api-definition-uri
Statement

The API definition is metadata about the capabilities provided by an API implementation instance and strictly speaking is not part of the API itself, but the definition MAY be hosted as a sub-resource to the base path of the API, for example, at path /api. There is no need to include the path of the API definition in the API definition itself.

Note that multiple API definition formats can be supported.

7.3.2.  Response

Requirement 4

Identifier/req/core/api-definition-success
Label/req/core/api-definition-success
Statement

A successful execution of the operation to get the API definition document SHALL be reported as a response with a HTTP status code 200.

The server SHALL return an API definition document.

Recommendation 2

Identifier/rec/core/api-definition-oas
Label/rec/core/api-definition-oas
Statement

If the API definition document is defined using the OpenAPI Specification 3.0, the document SHOULD conform to the OpenAPI Specification 3.0 requirements class.

If multiple API definition formats are supported by a server, use content negotiation to select the desired representation.

NOTE:  Two common approaches are:

  • An additional path for each encoding of each resource (this can be expressed, for example, using format specific suffixes like “.html”);

  • An additional query parameter (for example, “accept” or “f”) that overrides the Accept header of the HTTP request.

The API definition document describes the API. In other words, there is no need to include the /api operation in the API definition itself.

The idea is that any implementation of OGC API — Processes can be used by developers that are familiar with the API definition language(s) supported by the server. For example, if an OpenAPI definition is used, it should be possible to create the skeleton of a working client using the OpenAPI definition alone.

7.3.3.  Error situations

See Clause 7.5.1 for general guidance.

7.4.  Declaration of conformance classes

7.4.1.  Operation

To support “generic” clients for accessing servers implementing OGC API — Processes in general — and not “just” a specific API / server, the server must declare the requirements classes it implements and conforms to.

Requirement 5

Identifier/req/core/conformance-op
Label/req/core/conformance-op
Statement

The server SHALL support the HTTP GET operation at the path /conformance.

7.4.2.  Response

Requirement 6

Identifier/req/core/conformance-success
Label/req/core/conformance-success
Statement

A successful execution of the operation SHALL be reported as a response with a HTTP status code 200.

The content of that response SHALL be based upon the OpenAPI 3.0 schema req-classes.yaml and list all OGC API — Processes conformance classes that an implementation of the Processes API conforms to.

 

type: object
required:
  - conformsTo
properties:
  conformsTo:
    type: array
    items:
      type: string
      example: "http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core"

Listing 3 — Schema for the list of requirements classes

NOTE:  This schema can also be obtained from confClasses.yaml.

Example — Requirements class response document

This example response in JSON is for a server that supports OpenAPI 3.0 for the API definition and HTML and JSON as encodings.

 

{
 
"conformsTo": [
   
"http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core",
   
"http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/json",
   
"http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/html",
   
"http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/oas30"
 
]
}

7.4.3.  Error situations

See Clause 7.5.1 for general guidance.

7.5.  Use of HTTP 1.1

Requirement 7

Identifier/req/core/http
Label/req/core/http
Statement

The server SHALL conform to HTTP 1.1.

If the server supports HTTPS, the server SHALL also conform to HTTP over TLS.

This include the correct use of status codes, headers. etc.

Recommendation 3

Identifier/rec/core/http-head
Label/rec/core/http-head
Statement

The server SHOULD support the HTTP 1.1 method HEAD for all resources that support the method GET.

Supporting the method HEAD in addition to GET can be useful for clients and is simple to implement. In particular, the HEAD method is useful in determining the size of a potential response.

Recommendation 4

Identifier/rec/core/content-length
Label/rec/core/content-length
Statement

The server SHOULD include the HTTP 1.1 Content-Length header in all responses.

Servers implementing Cross-Origin Resource Sharing (CORS) will also implement the OPTIONS method.

7.5.1.  HTTP status codes

Table 10 lists the main HTTP status codes that clients should be prepared to receive.

This includes, for example, support for specific security schemes or URI redirection.

In addition, other error situations may occur in the transport layer outside of the server.

Table 10 — Typical HTTP status codes

Status codeDescription
200A successful request.
201The request was successful and one or more new resources have been created.
204The request was successful but did not generate any content.
400The server cannot or will not process the request due to an apparent client error. For example, a query parameter had an incorrect value.
401The request requires user authentication. The response includes a WWW-Authenticate header field containing a challenge applicable to the requested resource.
403The server understood the request but is refusing to fulfill it. While status code 401 indicates missing or bad authentication, status code 403 indicates that authentication is not the issue, but the client is not authorized to perform the requested operation on the resource.
404The requested resource does not exist on the server. For example, a path parameter had an incorrect value.
405The request method is not supported. For example, a POST request was submitted, but the resource only supports GET requests.
406The Accept header submitted in the request did not support any of the media types supported by the server for the requested resource.
410The target resource is no longer available at the origin server.
429The user has sent too many requests in a given amount of time (“rate limiting”).
500An internal error occurred in the server.
501The server does not support the functionality required to fulfill the request.

More specific guidance is provided for each resource, where applicable.

Permission 2

Identifier/per/core/additional-status-codes
Label/per/core/additional-status-codes
Statement

Servers MAY support other capabilities of the HTTP protocol and, therefore, MAY return other status codes than those listed in Table 10, too.

When a server encounters an error in the processing of a request, it may wish to include information in addition to the status code in the response. Since Web API interactions are often machine-to-machine, a machine-readable report would be preferred. RFC 7807 addresses this need by providing “Problem Details” response schemas for both JSON and XML.

Recommendation 5

Identifier/rec/core/problem-details
Label/rec/core/problem-details
Statement

A server SHOULD include a “Problem Details” report in an error response in accordance with RFC 7807.

7.6.  Support for cross-origin requests

Access to content from a HTML page is by default prohibited for security reasons if the content is located on another host than the webpage (“same-origin policy”). Cross-origin resource sharing is a mechanism that allows restricted resources on a web page to be requested from another domain outside the domain from which the first resource was served. A typical example is a web-application accessing processes and data from multiple servers.

Recommendation 6

Identifier/rec/core/cross-origin
Label/rec/core/cross-origin
Statement

If the server is intended to be accessed from the browser, cross-origin requests SHOULD be supported. Note that support can also be added in a proxy layer on top of the server.

Two common mechanisms to support cross-origin requests are:

Recommendation 7

Identifier/rec/core/access-control-expose-headers
Label/rec/core/access-control-expose-headers
Statement

If the server is intended to be accessed from the browser and if Cross-origin resource sharing is supported, the Access-Control-Expose-Headers header SHOULD be used and the header SHOULD contain the value location to enable the browser to access the location header of the response.

Recommendation 8

Identifier/rec/core/html
Label/rec/core/html
Statement

To support browsing an implementation of OGC API — Processes with a web browser and to enable search engines to crawl and index a process, implementations SHOULD consider to support an HTML encoding.

7.7.  Content negotiation by profile

The use of generic media types such as application/json makes it difficult to request or identify different flavors or profiles of a resource. For example, the media type application/json could be used to describe an OGC process description document as well as an OpenEO process description document.

It would thus be useful if there was a mechanism for requesting a profile of a resource. Although there is a new HTTP header, Accept-Profile, that is to be defined in an upcoming Internet-Draft there is currently no standardzied was to request a profile of a resource. Existing standards, however, do provide mechanisms for specifying profile information in HTTP headers. Specifically (see Content Negotiation by Profile) profiles of a resource may be requested by:

  • using the profile parameter if the media type includes provisions for such a parameter (e.g. application/ld+json),

  • using the profile parameter with the HTTP Prefer header

  • using a link header with rel="profile".

This standard also defines a query paramete, profile, that may be used with an HTTP GET request to specify one or more profiles of a resource that are to be retrieved.

7.8.  Limit parameter

Several resources defined in this Standard (see Retrieve a process list, Retrieve a job list) use the limit parameter to control the maximum number of results that are presented in a response page.

  • The client can request a limit it is interested in.

  • The server likely has a default value for the limit, and a maximum limit.

  • If the server has any more results available than it returns (the number it returns is less than or equal to the requested/default/maximum limit) then the server will include a link to the next set of results.

As an example, using the default/maximum values of 10/1000 from the OpenAPI fragment in requirement /req/core/pl-limit-definition or /req/job-list/limit-definition:

  • If the client asks for 10 results, the client will get 0 to 10 (as requested) and if there are more, a next link;

  • If the client does not specify a limit, the client will get 0 to 10 (default) and if there are more, a next link;

  • If the client asks for 5000 results, the client might get up to 1000 results (server-limited) and if there are more, a next link;

  • If the client follows the next link from the previous response, the client might get up to 1000 additional results and if there are more, a next link.

This Standard provides requirements and recommendations about links in general and the next link in particular at the appropriate resource end points.

An implementation of the Processes API could use opaque links that are managed by the server. It is up to the server to determine how long these links can be dereferenced. Clients should be prepared to receive a 404 response.

Another implementation approach is to use an implementation-specific parameter that specifies the index within the result set from which the server begins presenting results in the response, like offset or the startIndex parameter that was used in WFS 2.0.

An implementation of the Processes API will return no next link, if all selected results have been returned, and the server knows for certain that there are no further results to be presented. However, in some cases, the server may not be aware that it has already returned all selected results. For example, if the request states limit=10 and the query to the backend returns exactly 10 results. The server may not know if there are more results or not (in most cases there will be more results), unless the total number of results is also computed, which may be too costly. The server will then prudently add the next link, and if there are no more results, dereferencing the next link will return an empty results list and no next link. This behavior is consistent with the statements above.

Clients should not assume that paging is safe against changes to the dataset being accesses while a client iterates through next links. If a server provides opaque links these could be safe and maintain the state during the original request. Using a parameter for the start index, however, will not be safe.

7.9.  Link headers

7.10.  Retrieve a process list

The following section defines the requirements to retrieve the available processes offered by an implmentation of the Processes API.

It should be noted that the number of processes exposed via the Processes API may be very different than the number of processes offer by a back-end system upon which the Processes API is implemented.

7.10.1.  Operation

7.10.1.1.  Process list

Requirement 8

Identifier/req/core/process-list
Label/req/core/process-list
Statement

The server SHALL support the HTTP GET operation at the path /processes.

7.10.1.2.  Parameter limit

Requirement 9

Identifier/req/core/pl-limit-definition
Label/req/core/pl-limit-definition
A

The operation SHALL support a parameter limit with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: limit
in: query
required: false
schema:
  type: integer
  minimum: 1
  maximum: 10000
  default: 10
style: form
explode: false

Permission 3

Identifier/per/core/limit-default-minimum-maximum
Label/per/core/limit-default-minimum-maximum
A

The values for minimum, maximum and default in requirement /req/core/limit-definition are only examples and MAY be changed.

Requirement 10

Identifier/req/core/pl-limit-response
Label/req/core/pl-limit-response
A

The response SHALL not contain more process summaries than specified by the optional limit parameter.

B

If the API definition specifies a maximum value for limit parameter, the response SHALL not contain more process summaries than this maximum value.

Permission 4

Identifier/per/core/limit-response
Label/per/core/limit-response
A

The server MAY return fewer process summaries than requested (but not more).

7.10.2.  Response

Requirement 11

Identifier/req/core/process-list-success
Label/req/core/process-list-success
Statement

A successful execution of the process operation SHALL be reported as a response with a HTTP status code 200. The content of that response SHALL be based upon the OpenAPI 3.0 schema processList.yaml.

 

type: object
required:
  - processes
  - links
properties:
  processes:
    type: array
    items:
      $ref: "processSummary.yaml"
  links:
    type: array
    items:
      $ref: "../common-core/link.yaml"

Listing 5 — Schema for the process list

NOTE 1:  This schema can also be obtained from processList.yaml.

 

allOf:
  - $ref: "descriptionType.yaml"
  - type: object
    required:
      - id
      - version
    properties:
      id:
        type: string
      version:
        type: string
      jobControlOptions:
        type: array
        items:
          $ref: "jobControlOptions.yaml"
      links:
        type: array
        items:
          $ref: "../common-core/link.yaml"

Listing 6 — Schema for a process summary

NOTE 2:  This schema can also be obtained from processSummary.yaml.

(see also: descriptionType.yaml).

 

type: string
enum:
  - sync-execute
  - async-execute
  - dismiss

Listing 7 — Schema for the job control options

NOTE 3:  This schema can also be obtained from jobControlOptions.yaml.

The number of process summaries returned depends on the server and the parameter limit.

See the discussion about the limit parameter in the Limit parameter section.

See the discussion about the next links in the Limit parameter section.

Recommendation 10

Identifier/rec/core/next-1
Label/rec/core/next-1
Statement

If more processes summaries have been selected than returned in the response, a 200-response SHOULD include a link to the next page (relation: next) of process summaries.

Recommendation 11

Identifier/rec/core/next-2
Label/rec/core/next-2
Statement

Dereferencing a next page link (relation: next) SHOULD return additional process summaries from the set of selected process summaries that have not yet been returned.

Recommendation 12

Identifier/rec/core/next-3
Label/rec/core/next-3
Statement

The number of process summaries in a response to dereferencing a next page link (relation: next) SHOULD follow the same rules as for the response to the original query and again include a next page link (relation: next), if there are more process summaries in the selection that have not yet been returned.

See the discussion about the prev link in the Limit parameter section.

Permission 5

Identifier/per/core/prev
Label/per/core/prev
A

A response to dereferencing a next page link (relation: next) MAY include a prev page link (relation: prev) to the resource that included the next page link (relation: next).

Example 1 — A HTTP GET request for retrieving the list of offered processes encoded as JSON.

 

GET /processes HTTP/1.1
Host: processing.example.org

Example 2 — A Process list encoded as JSON.

 

{
 
"processes": [
   
{
     
"id": "EchoProcess",
     
"title": "EchoProcess",
     
"version": "1.0.0",
     
"jobControlOptions": [
       
"async-execute",
       
"sync-execute"
     
],
     
"links": [
       
{
         
"href": "https://processing.example.org/oapi-p/processes/EchoProcess",
         
"type": "application/json",
         
"rel": "self",
         
"title": "process description"
       
}
     
]
   
}
 
],
 
"links": [
   
{
     
"href": "https://processing.example.org/oapi-p/processes?f=json",
     
"rel": "self",
     
"type": "application/json"
   
},
   
{
     
"href": "https://processing.example.org/oapi-p/processes?f=html",
     
"rel": "alternate",
     
"type": "text/html"
   
}
 
]
}

7.10.3.  Error situations

See Clause 7.5.1 for general guidance.

7.11.  Retrieve a process description

The following section defines the requirements to retrieve metadata about a process.

7.11.1.  Operation

Requirement 14

Identifier/req/core/process-description
Label/req/core/process-description
Statement

The server SHALL support the HTTP GET operation at the path /processes/{processID}.

7.11.2.  Response

Requirement 15

Identifier/req/core/process-description-success
Label/req/core/process-description-success
A

A successful execution of the operation SHALL be reported as a response with a HTTP status code 200.

B

The content of the response SHALL be a process description.

The Core does not mandate the use of a specific process description to specify the interface of a process. That said, the Core requirements class makes the following recommendation:

Recommendation 13

Identifier/rec/core/ogc-process-description
Label/rec/core/ogc-process-description
Statement

Implementations SHOULD consider supporting the OGC process description.

7.11.3.  Error situations

See Clause 7.5.1 for general guidance.

Requirement 16

Identifier/req/core/process-exception/no-such-process
Label/req/core/process-exception/no-such-process
Statement

If the operation is executed using an invalid process identifier, the response SHALL be HTTP status code 404. The content of that response SHALL be based upon the OpenAPI 3.0 schema exception.yaml. The type of the exception SHALL be “http://www.opengis.net/def/exceptions/ogcapi-processes-1/1.0/no-such-process”.

7.12.  Execute a process

This section describes the requirements for executing a process.

Depending on the description of the process and the negotiated process execution mode, process execution may result in the creation of a job resource.

7.12.1.  Operation

Requirement 17

Identifier/req/core/process-execute-op
Label/req/core/process-execute-op
Statement

The server SHALL support the HTTP POST operation at the path /processes/{processID}/execution.

7.12.2.  Request body

7.12.2.1.  Content schema

Requirement 18

Identifier/req/core/process-execute-request
Label/req/core/process-execute-request
Statement

The content of a request the request body SHALL be based upon the OpenAPI 3.0 schema execute.yaml.

 

type: object
properties:
  processID:
    type: string
    format: uri
  inputs:
    additionalProperties:
      $ref: "input.yaml"
  outputs:
    additionalProperties:
      $ref: "output.yaml"
  subscriber:
    $ref: "subscriber.yaml"

Listing 8 — Schema for execute

NOTE 1:  This schema can also be obtained from execute.yaml.

 

oneOf:
  - $ref: "inputValueNoObject.yaml"
  - $ref: "qualifiedInputValue.yaml"
  - $ref: "../common-core/link.yaml"

Listing 9 — Schema for an in-line or referenced process input value

NOTE 2:  This schema can also be obtained from inlineOrRefData.yaml.

(see also: inputValueNoObject.yaml, qualifiedInputValue.yaml, link.yaml)

 

type: object
properties:
  format:
    $ref: "format.yaml"

Listing 10 — Schema for a process output

NOTE 3:  This schema can also be obtained from output.yaml.

 

type: object
properties:
  mediaType:
    type: string
  encoding:
    type: string
  schema:
    oneOf:
      - type: string
        format: url
      - type: object

Listing 11 — Schema for a format qualifier

NOTE 4:  This schema can also be obtained from format.yaml.

7.12.2.2.  Execution mode

A process may be executed synchronously or asynchronously.

Which mode a server responds with is a function of the job control options specified in the process description and the presence or absence of the HTTP Prefer header (IETF RFC 7240).

Requirement 19

Identifier/req/core/process-execute-default-execution-mode
Label/req/core/process-execute-default-execution-mode
Conditions

The execute request is not accompanied with the HTTP Prefer header.

A

The server SHALL respond asynchronously if, according to the job control options in the process description, the process can only be executed asynchronously.

B

The server SHALL respond synchronously if, according to the job control options in the process description, the process can only be executed synchronously.

C

The server SHALL respond synchronously if, according to the job control options in the process description, the process can be executed in either mode.

Requirement 20

Identifier/req/core/process-execute-auto-execution-mode
Label/req/core/process-execute-auto-execution-mode
Conditions

The execute request is accompanied with the HTTP Prefer header asserting a respond-async preference.

A

The server SHALL respond asynchronously if, according to the job control options in the process description, the process can only be executed asynchronously.

B

The server SHALL respond synchronously if, according to the job control options in the process description, the process can only be executed synchronously.

C

The server SHALL respond, at its discretion, either synchronously or asynchronously if, according to the job control options in the process description, the process can be executed in either mode.

Recommendation 15

Identifier/rec/core/process-execute-honor-prefer
Label/rec/core/process-execute-honor-prefer
A

If an execute request is accompanied with the HTTP Prefer header asserting a respond-async preference, then the server SHOULD honor that preference and response asynchronously if, according to the job control options in the process description, the process can be executed asynchronously.

B

If an execute request is accompanied with the HTTP Prefer header asserting a wait preference, then the server SHOULD honor that preference in the decision to execute the process asynchronously if, according to the job control options in the process description, the process can be executed asynchronously.

Recommendation 16

Identifier/rec/core/process-execute-handle-prefer
Label/rec/core/process-execute-handle-prefer
Statement

A client that accompanies an execute request with the HTTP Prefer header asserting a respond-async preference and/or a wait preference SHOULD be prepared to receive either an asynchronous or a synchronous response.

Recommendation 17

Identifier/rec/core/process-execute-preference-applied
Label/rec/core/process-execute-preference-applied
Statement

If an execute request is accompanied with the HTTP Prefer header then, in the response, servers SHOULD include the HTTP Preference-Applied response header as an indication as to which ‘Prefer` tokens were honored by the server.

7.12.2.3.  Process inputs

7.12.2.3.1.  Overview

Each process input is a name/value pair that appears in the inputs section of an execute request as show in the following example:

 

"inputs": {
   "inputName1": <input value 1>,
   "inputName2": <input value 2>,
   etc.
}

Listing 12

The actual name of each input is its identifier as specified by the input’s definition in the process description.

7.12.2.3.2.  Input values

As shown in inlineOrRefData.yaml, a process input value that is specified in-line in an execute request can be:

  • a simple literal value,

  • an array,

  • a qualified value,

  • a binary value,

  • or a bounding box.

    NOTE 1:  See also Clause 8.1.

Simple literal values:

A simple literal value can be a string, number, integer or Boolean.

 

anyOf:
  - type: string
  - type: number
  - type: integer
  - type: boolean
  - type: array
    items:
      $ref: "inputValue.yaml"
  - $ref: "binaryInputValue.yaml"
  - $ref: "bbox.yaml"
  - $ref: "collectionInput.yaml"

Listing 13 — Schema for a simple literal value

NOTE 2:  This schema can also be obtained from inputValueNoObject.yaml.

(see also: binaryInputValue.yaml, bbox.yaml)

Example 1 — Simple literal value examples.

A string literal:

 

"stringInput": "String value"

A date string:

 

"dateInput": "2021-05-24T20:40:13-05:00"

A number:

 

"numberInput": 3.14159

An integer:

 

"integerInput": 10

A Boolean:

 

"booleanInput": true

Array of values:

Array elements, as per inlineOrRefData.yaml, can be:

Requirement 21

Identifier/req/core/process-execute-input-array
Label/req/core/process-execute-input-array
Conditions

The process input is defined in the process description as having a maximum cardinality of greater than one (maxOccurs>1).

A

The server SHALL support process input values encoded as an array.

B

This SHALL be true even if the input consists of a single value.

Example 2 — Array value examples.

An array of simple values:

 

"arrayOfSimpleValues": [1, 2, 4, 10, 7]

An array with a single simple value:

 

"arrayOfSimpleValues": ["a"]

An array of arrays of simple values:

 

"arrayOfArrays": [[1,2,3,4], ["a","b","c","d"]]

An array of objects values:

 

"arrayOfQualifiedValues": [
  {
    "value": {
      "measurement": 10.3,
      "uom": "m",
      "reference": "https://ucum.org/ucum-essence.xml"
    }
  },
  {
    "value": {
      "measurement": 10.5,
      "uom": "m",
      "reference": "https://ucum.org/ucum-essence.xml"
    }
  },
  {
    "value": {
      "measurement": 10.9,
      "uom": "m",
      "reference": "https://ucum.org/ucum-essence.xml"
    }
  },...
],

NOTE 3:  In an execute request, as per requirement /req/core/process-execute-input-inline-object, object values must be encoded as qualified values.

Qualified values:

A qualified value is a value that can be optionally qualified with a format parameter.

Qualified values can be used to encode process input values that, according to their definition in the process description, can be of multiple media types. The format parameter is used to identify the specific media type being provided as the process input.

Qualified values can also be used to encode object-valued process inputs in order to avoid ambiguity with the built-in value schemas defined in this standard (i.e. bbox.yaml, link.yaml or qualifiedInputValue.yaml itself).

The actual value in a qualified value object is specified using the value key. The value of the value key is an instance of inputValue.yaml.

 

allOf:
  - $ref: "format.yaml"
  - type: object
    required:
      - value
    properties:
      value:
        $ref: "inputValue.yaml"

Listing 14 — Schema for a qualified value

NOTE 4:  This schema can also be obtained from qualifiedInputValue.yaml.

(see also: format.yaml)

 

anyOf:
  - $ref: "inputValueNoObject.yaml"
  - type: object

Listing 15 — Schema of a process input value

NOTE 5:  This schema can also be obtained from inputValue.yaml.

(see also: inputValueNoObject.yaml)

Requirement 22

Identifier/req/core/process-execute-input-inline-object
Label/req/core/process-execute-input-inline-object
Conditions
  1. The process input value is specified in-line in an execute request.

  2. The process input is defined as an object according to its schema from the process description.

A

The server SHALL support process input values encoded as qualified values (qualifiedValue.yaml).

B

The value of the value key SHALL be an object instance of inputValue.yaml.

Requirement 23

Identifier/req/core/process-execute-input-multiple-types
Label/req/core/process-execute-input-multiple-types
Conditions
  1. The process input value is specified in-line in an execute request.

  2. The schema of the process input from the process description indicates that a value instance can be one of multiple input media types.
    In JSON Schema this is denoted by the use of the oneOf construct.

A

The server SHALL support process input values encoded as qualified values (qualifiedValue.yaml).

B

The value of the value key SHALL be an instance of inputValue.yaml.

C

The format parameter of the qualified value (qualifiedValue.yaml) SHALL be used to indicate, for this value instance, the specific input type selected from the list of type choices defined by the input value’s schema from the process description.

Example 3 — Qualified value examples.

An example of a complex process input value.

 

"complexObjectInput": {
 
"value": {
   
"property1": "value1",
   
"property2": "value2",
   
"property3": "value3"
 
}
}

In this second example, the property, geometryInput has a cardinality of greater than 1 and value instances can be one of a number of enumerated media types. The schema of geometryInput from the OGC process description for the process might be:

 

"geometryInput": {
 
"title": "Geometry input",
 
"description": "This is an example of a geometry input.  In this case the geometry can be expressed as a GML or GeoJSON geometry.",
 
"minOccurs": 2,
 
"maxOccurs": 5,
 
"schema": {
   
"oneOf": [
     
{
       
"type": "string",
       
"contentMediaType": "application/gml+xml; version=3.2",
       
"contentSchema": "http://schemas.opengis.net/gml/3.2.1/geometryBasic2d.xsd"
     
},
     
{
       
"$ref": "http://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/geometryGeoJSON.json"
     
}
   
]
 
}
},

and an instance of this process input in an execute request might be:

 

"geometryInputs": [
  {
    "value": "<gml:Polygon gml:id=\"GID1\" srsName=\"urn:ogc:def:crs:OGC::CRS84\"><gml:exterior><gml:LinearRing><gml:posList>-77.024519 38.810529 -77.024635 38.810973 -77.024704 38.810962 -77.024776 38.811239 -77.024957 38.81121 -77.024905 38.811012 -77.024905 38.811012 -77.024865 38.810857 -77.025024 38.810832 -77.025071 38.811012 -77.025203 38.810992 -77.02506 38.810444 -77.024519 38.810529</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>",
    "mediaType": "application/gml+xml; version=3.2"
  },
  {
    "value": {
      "type": "Polygon",
      "coordinates": [[[ -176.5814819, -44.10896301 ],
                       [ -176.5818024, -44.10964584 ],
                       [ -176.5844116, -44.11236572 ],
                       [ -176.5935974, -44.11021805 ],
                       [ -176.5973511, -44.10743332 ],
                       [ -176.5950928, -44.10562134 ],
                       [ -176.5858459, -44.1043396  ],
                       [ -176.5811157, -44.10667801 ],
                       [ -176.5814819, -44.10896301 ]]]
    },
    "mediaType": "application/geo+json"
  }
]

In this case, the mediaType parameter is used to indicate the specific type of geometry being passed as input in each case: GML Polygon for the first element of the array and GeoJSON Polygon for the second element.

Binary values:

In some cases, for example to pass through firewalls, binary input values need to be encoded in-line in an execute request as a string.

 

type: string
format: byte

Listing 16 — Schema for an in-line binary value

NOTE 6:  This schema can also be obtained from binaryInputValue.yaml.

Requirement 24

Identifier/req/core/process-execute-input-inline-binary
Label/req/core/process-execute-input-inline-binary
Conditions
  1. The process input value is specified in-line in an execute request.

  2. The process input value is binary.

A

The service SHALL support binary values encoded as base64-encoded strings.

Example 4 — Binary value examples.

Below is an example of an image process input whose media type is defined in the process description. The schema definition for this process input might be:

 

"schema": {
 
"type": "string",
 
"contentEncoding": "binary",
 
"contentMediaType": "image/tiff; application=geotiff"
}

and an example instance value in an execute request might be:

 

"imageInput": "R0lGODdhNAHCAfcAAAcHDD+Gs4sLDQpDaqGFdaHE54dJPEoECUlGRteKgcdITgokG4hoVkpY\ngNzHwKKkqOLm7RRjlEgpHU9iZ44lHQYqVdmki6doVmhHOMOIeJG20HiDjCcKBglIeadISrso\nJGooFNbN2d2qr8aljyklHwQJQkdvkWaKxIdrb442LidLeGhMTp6LkeP1+Kh3aiUuVAoUHmlu\ngkcwNYdZRmkJDYGcsDFokElVYyk1NsWWhLEPDtmQldrUyoyFhrjo+Nna5d+4tMGstspoXgc4\n...qgu7sSu7qbtCs2u7t6u6rLsrp4u7veu76eO6vyu8w0u8xWu8x4u8yau8shu8y+u8zwu90Su9\n00u91Wu914u92au928u9whsQADs="

NOTE 7:  Even though the schema indicates that the input type is binary, when the input value is encoded in-line in an execute request, as per requirement /req/core/process-execute-input-inline-binary, the binary value is encoded as base64-encoded string.

In this second example, the image input can be one of a number of value types denoted in JSON Schema by the use of the oneOf[] construct. An example schema for this a process input might be:

 

"schema": {
 
"oneOf": [
   
{
     
"type": "string",
     
"contentEncoding": "binary",
     
"contentMediaType": "image/tiff; application=geotiff"
   
},
   
{
     
"type": "string",
     
"contentEncoding": "binary",
     
"contentMediaType": "image/jp2"
   
}
 
]
}

and a JPEG2000 instance example in an execute request might be:

 

{
 
"value": "VBORw0KGgoAAAANSUhEUgAABvwAAAa4CAYAAABMB35kAAABhGlDQ1BJQ0MgcHJvZmlsZQAA\nKJF9kT1Iw0AcxV9TpSL1A+xQxCFDdbIgKuKoVShChVArtOpgcumH0KQhSXFxFFwLDn4sVh1c\nnHV1cBUEwQ8QNzcnRRcp8X9JoUWMB8f9eHfvcfcOEOplplkdY4Cm22Y6mRCzuRUx9IogouhH\n ... \nj3Z5mX7/PCPVRJV92rpHK24xcJrzk20+tkeYlCPqcZNO3Lpni1OJWatPCcmgGDEqx7Om6lfa\nppM4k4BTe9+bsn3L9/9/yWhA0PwQGW8ipCZsnZt9lsdrYEM8z/M8z/M8z/M8z/M8z/MzLWY1\nAAAACUlEQVQ871H6P6JI+TxS5Wn2AAAAAElFTkSuQmCC",
 
"mediaType": "image/jp2"
}

Bounding box values:

A process input value instance can be a bounding box.

Requirement 25

Identifier/req/core/process-execute-input-inline-bbox
Label/req/core/process-execute-input-inline-bbox
Statement

Servers SHALL support process input values that conform to the bbox.yaml schema.

 

type: object
required:
  - bbox
properties:
  bbox:
    type: array
    oneOf:
      - minItems: 4
        maxItems: 4
      - minItems: 6
        maxItems: 6
    items:
      type: number
  crs:
    $ref: "bbox-def-crs.yaml"

Listing 17 — Schema for a bounding box value

NOTE 8:  This schema can also be obtained from bbox.yaml.

This schema is meant to be a template for defining bounding box process inputs. If the specified default and enum are suitable for the client’s requirements then this file can be referenced directly in the process description.

Permission 6

Identifier/per/core/process-execute-input-inline-bbox
Label/per/core/process-execute-input-inline-bbox
Statement

Servers MAY copy the contents of bbox.yaml into another file and adjust the default and enum values as required.

NOTE 9:  The crs property is defined using an anyOf of either an enumeration or a generic URI string to allow execute requests making use of a CRS other than CRS84 and CRS84h. These may be supported by the server to validate against the canonical OGC schema.

Input validation

Process inputs in an execute request and the corresponding process input definition in the process description have a validation relationship. That is to say, the schema of a process input definition from the process description can be used to validate the component of the corresponding process input value in an execute request that is an instance of inputValue.yaml.

Example

Consider a process input named complexObjectInput with the following definition from an OGC process description:

 

"complexObjectInput": {
 
"title": "Complex Object Input Example",
 
"description": "This is an example of a complex object input.",
 
"schema": {
   
"type": "object",
   
"required": [
     
"property1",
     
"property5"
   
],
   
"properties": {
     
"property1": {
       
"type": "string"
     
},
     
"property2": {
       
"type": "string",
       
"format": "uri"
     
},
     
"property3": {
       
"type": "number"
     
},
     
"property4": {
       
"type": "string",
       
"format": "date-time"
     
},
     
"property5": {
       
"type": "boolean"
     
}
   
}
 
}
}

and the following instance in an execute request:

 

"inputs": [
 
.
 
.
 
.
 
"complexObjectInput": {
   
"value": {
     
"property1": "value1",
     
"property2": "value2",
     
"property3": "value5"
   
}
 
},
 
.
 
.
 
.
]

The process input value in this execute request is an instance of a qualified value.

For the purposes of validation, the server needs to only validate the component of the qualified value that is an instance of inputValue.yaml against the schema fragment from the OGC process description. Specifically, the validation target is:

 

{
 
"property1": "value1",
 
"property2": "value2",
 
"property3": "value5"
}

NOTE 10:  This example makes use of an OGC process description. However, any other process description vocabulary may be used and applied, for the purpose of validation, in a similar manner.

Requirement 26

Identifier/req/core/process-execute-input-validation
Label/req/core/process-execute-input-validation
A

For process input values specified in-line in an execute request, the server SHALL validate each component of a process input value that is an instance of inputValue.yaml using the definition of the corresponding input from the process description.

B

For process input values specified by reference in an execute request, the server SHALL resolve the value and then validate it as if the value had been specified in-line in the execute request (i.e. as per requirement A).

7.12.2.4.  Process outputs

Overview:

Each process output is a named object that appears in the outputs section of an execute request. The name of each output is its identifier as specified by the output’s definition in the process description.

Omitted outputs:

Requirement 27

Identifier/req/core/process-execute-omitted-outputs
Label/req/core/process-execute-omitted-outputs
Conditions
  1. The process description defines one or more outputs.

  2. The “outputs” parameter is omitted from the execute request.

A

Omitting the “outputs” parameter in the execute request SHALL be equivalent to explicitly requesting all of the defined outputs of the process.

Empty outputs:

Requirement 28

Identifier/req/core/process-execute-empty-outputs
Label/req/core/process-execute-empty-outputs
Conditions
  1. The “outputs” parameter is included in the execute request but its content is empty (i.e. “outputs”:{}).

A

An empty “outputs” parameter in the execute request SHALL indicate that the execution of a process should occur without generating a response body.

Output value format:

A process output can be defined in the process description as being of one or more media types. In cases where a specific output can be presented in one of a number of media types, the format parameter in the execute request can be used to indicate the format that should be used to present the process output value in the server’s response.

Output value size:

Since a priori knowledge of the size of any given output is generally not known, hints can be provided to the server to prevent the inadvertent transmission of large volumes of output.

Return preferences signal to a server how output values should be transmitted based on the size of the output and any accompanying return preferences as define defined in IETF RFC 7240.

Recommendation 18

Identifier/rec/core/process-execute-honor-prefer-return
Label/rec/core/process-execute-honor-prefer-return
Statement

If an execute request is accompanied with the HTTP Prefer header asserting a return preference, then the server SHOULD honor that preference.

See requirements:

See recommendations:

Recommendation 19

Identifier/rec/core/process-execute-handle-return-preference
Label/rec/core/process-execute-handle-return-preference
Statement

A client that accompanies an execute request with the HTTP Prefer header asserting a return preference SHOULD be prepared to receive output values either:

  • in-line in the response,

  • or by reference via a hyperlink in the response.

7.12.3.  Example

Example — An execute request.

 

{
 
"inputs": {
   
"stringInput": "Value2",
   
"measureInput": {
     
"value": {
       
"measurement": 10.3,
       
"uom": "m",
       
"reference": "https://ucum.org/ucum-essence.xml"
     
}
   
},
   
"dateInput": "2021-03-06T07:21:00",
   
"doubleInput": 3.14159,
   
"arrayInput": [1,2,3,4,5,6],
   
"complexObjectInput": {
     
"value": {
       
"property1": "value1",
       
"property2": "value2",
       
"property5": true
     
}
   
},
   
"geometryInput": [
     
{
       
"value": "<gml:Polygon gml:id=\"GID1\" srsName=\"urn:ogc:def:crs:OGC::CRS84\"><gml:exterior><gml:LinearRing><gml:posList>-77.024519 38.810529 -77.024635 38.810973 -77.024704 38.810962 -77.024776 38.811239 -77.024957 38.81121 -77.024905 38.811012 -77.024905 38.811012 -77.024865 38.810857 -77.025024 38.810832 -77.025071 38.811012 -77.025203 38.810992 -77.02506 38.810444 -77.024519 38.810529</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>",
       
"mediaType": "application/gml+xml; version=3.2"
     
},
     
{
       
"value": {
         
"type": "Polygon",
         
"coordinates": [[[ -176.5814819, -44.10896301 ],
                          
[ -176.5818024, -44.10964584 ],
                          
[ -176.5844116, -44.11236572 ],
                          
[ -176.5935974, -44.11021805 ],
                          
[ -176.5973511, -44.10743332 ],
                          
[ -176.5950928, -44.10562134 ],
                          
[ -176.5858459, -44.1043396  ],
                          
[ -176.5811157, -44.10667801 ],
                          
[ -176.5814819, -44.10896301 ]]]
       
}
     
}
   
],
   
"boundingBoxInput": {
     
"bbox": [ 51.9, 7, 52, 7.1 ],
     
"crs": "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
   
},
   
"imagesInput": [
     
{
       
"href": "https://www.someserver.com/ogcapi/Daraa/collections/Daraa_DTED/styles/Topographic/coverage?...",
       
"type": "image/tiff; application=geotiff"
     
},
     
{
        
"value": "VBORw0KGgoAAAANSUhEUgAABvwAAAa4CAYAAABMB35kAAABhGlDQ1BJQ0MgcHJvZmlsZQAA\nKJF9kT1Iw0AcxV9TpSL1A+xQxCFDdbIgKuKoVShChVArtOpgcumH0KQhSXFxFFwLDn4sVh1c\nnHV1cBUEwQ8QNzcnRRcp8X9JoUWMB8f9eHfvcfcOEOplplkdY4Cm22Y6mRCzuRUx9IogouhH\n ... \nj3Z5mX7/PCPVRJV92rpHK24xcJrzk20+tkeYlCPqcZNO3Lpni1OJWatPCcmgGDEqx7Om6lfa\nppM4k4BTe9+bsn3L9/9/yWhA0PwQGW8ipCZsnZt9lsdrYEM8z/M8z/M8z/M8z/M8z/MzLWY1\nAAAACUlEQVQ871H6P6JI+TxS5Wn2AAAAAElFTkSuQmCC",
        
"encoding": "base64",
        
"mediaType": "image/jp2"
     
}
   
],
   
"featureCollectionInput": {
     
"value": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><FeatureCollection xmlns=\"http://schemas.myserver.com/namespaces/null\" xmlns:gml=\"http://www.opengis.net/gml/3.2\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://schemas.myserver.com/namespaces/null https://www.pvretano.com/myserver/ogcapi/daraa/schema?f=GML32&amp;collectionids=TransportationGroundCrv http://www.opengis.net/gml/3.2 http://schemas.opengis.net/schemas/gml/3.2.1/gml.xsd\">...",
     
"mediaType": "application/gml+xml; version=3.2"
   
}
 
},
 
"outputs": {
   
"stringOutput": { },
   
"measureOutput": { },
   
"dateOutput": { },
   
"doubleOutput": { },
   
"arrayOutput": { },
   
"complexObjectOutput": { },
   
"geometryOutput": { },
   
"boundingBoxOutput": { },
   
"imageOutput": {
     
"format": { "mediaType": "image/tiff; application=geotiff" }
   
},
   
"featureCollectionOutput": { }
 
}
}

7.12.4.  Response

7.12.4.1.  Overview

The way a server responds to a process an execute request is determined by the following parameters:

  • The negotiated execution mode (synchronous or asynchronous),

  • The number of outputs requested,

  • The negotiated content type for the response (via the HTTP Accept header),

  • Any negotiated client preferences (via the HTTP Prefer header).

The following table maps the possible responses based on the combinations of these execute parameters. The column headers denote:

  1. Negotiated execute mode: see Clause 7.12.2.2

  2. Requested # outputs: The number of requested (whether implicitly or explicitly) outputs in the execute request

  3. Return preference: The negotiated return preferences

  4. Response HTTP code: The HTTP status code that the server should generate in this context.

  5. Response headers: Any required HTTP headers that the server must include in this context.

  6. Response media type: The value of the HTTP Content-Type header that the server should generate in this context.

  7. Response body: A description of the content of the response body in this context.

  8. Req./Rec./Perm.: The corresponding requirements/recommendations/permission as per this Standard.

Table 11 — Execute responses based on number of requested outputs, request HTTP headers and the size of output values.

Negotiated execute modeRequested # outputs3Defined # of outputsReturn preference (Prefer header)Response HTTP codeResponse headersResponse media type (Content-Type header)Response bodyReq./Rec./Perm.
sync1n/an/a200as negotiatedrequested process outputSee requirement: /req/core/process-execute-sync-one
Nn/anone200application/json4results.yamlSee Note 5.,Note 6
minimalSee Note 5.,Note 7
representationSee Note 5.,Note 8
asyncn/an/an/a201Location to newly created jobapplication/jsonstatusInfo.yamlSee Response for asynchronous processes execution

NOTE 1: 

  • The value n/a in a cell means that the corresponding parameter is not applicable, not specified, not required or can be ignored in this context.

  • The value as negotiated means that the output content type is as negotiated between the client and the server based on the value of the HTTP Accept header.

NOTE 2:  This above table shows all possible combinations of execute parameters that are specified by this Standard. Not all these combinations need to be implemented by a server conforming to this Standard. For example, a server that only offers processes that can be executed synchronously does not need to implement any of the asynchronous requirements.

NOTE 3:  A process output may be requested explicitly or implicitly in an execute request .

NOTE 4: 

 

additionalProperties:
  $ref: "inlineOrRefData.yaml"

Listing 18 — Schema for processing results presented as a JSON document

NOTE:  This schema can also be obtained from results.yaml.

The results.yaml schema defines a map using the respective output identifier as the key. The value of an output can be returned as an in-line value or by reference.

7.12.4.2.  Response requesting a single processing output

When a process is executed synchronously and a single processing output is generated (whether requested implicitly or explicitly in the execute request) the following requirements and recommendations apply:

Requirement 29

Identifier/req/core/process-execute-sync-one
Label/req/core/process-execute-sync-one
Conditions
  1. The negotiated execution mode is synchronous,

  2. The number of requested (whether implicitly or explicitly) outputs in the execute request is 1.

A

A successful execution of the operation SHALL be reported with a response with a HTTP status code 200.

B

The media type of the response SHALL be as negotiated as per the HTTP content negotiation rules.

C

The content of response body SHALL be the requested process output value in the negotiated output format.

Requirement 30

Identifier/req/core/process-execute-sync-one-default-content
Label/req/core/process-execute-sync-one-default-content
Conditions
  1. The negotiated execution mode is synchronous,

  2. The number of requested (whether implicitly or explicitly) outputs in the execute request is 1.

  3. No content negotiation has been specified using either HTTP headers or other methods.

A

The media type of the response SHALL be the default media type for the requested processes output as specified in the process description.

B

The content of response body SHALL be the requested process output value in the default output format.

NOTE 1:  For servers that support the OGC Process Description conformance class see requirements /req/ogc-process-description/output-def and /req/ogc-process-description/output-multiple-types for determining the default format for a process output.

NOTE 2:  The size of a response may be determined without actually transmitting the entire response by using the HTTP HEAD method to retrieve the Content-Length header.

Permission 7

Identifier/per/core/process-execute-sync-one-result
Label/per/core/process-execute-sync-one-result
Conditions
  1. The negotiated execution mode is synchronous,

  2. The number of requested (whether implicitly or explicitly) outputs in the execute request is 1.

A

In the case where a single output is requested (whether implicitly or explicitly), content negotiation by profile MAY be used to request that the response conform to the results.yaml schema.

B

The profile URI that SHOULD be used in this case is ‘https://www.opengis.net/dev/profile/OGC/0/ogc-results‘.

Example

In the example below the process “copmpute-spectral-index” has a single output also named “spectral-index-output”. This processes is implemented to store the result file in some Web-accessible location. In this example the process is executed synchronously and the single output is requested. According to Table 11, in this case, the server should respond with the output image generated by the process. The server can either stream the response from its Web-accessiblke location to the client OR the server can use a HTTP 303 redirect to point to the result as shown in the example.

Example — HTTP 303 redirect example.

 

Client                                                                Server
  |                                                                     |
  |   POST /processes/compute-spectral-index/execution   HTTP/1.1       |
  |   Content-Type: application/json                                    |
  |   Link: <https://www.opengis.net/dev/profile/OGC/0/ogc-execute-reque|
  |          st>; rel="profile"                                         |
  |                                                                     |
  |   {                                                                 |
  |     "inputs": {                                                     |
  |       "spectral-index": "ndvi",                                     |
  |       "input-image": {                                              |
  |         "href": ".../sentinel-s1-l1c/S1A_EW_GRDM_1SDH_20240201T00375|
  |                  4_20240201T003859_052358_0654C4_86EE/measurement/ew|
  |                  -hh.tiff",                                         |
  |         "type": "image/tiff; application=geotiff"                   |
  |       }                                                             |
  |     },                                                              |
  |     "outputs": {                                                    |
  |       "spectral-index-output": {                                    |
  |       }                                                             |
  |     }                                                               |
  |   }                                                                 |
  |-------------------------------------------------------------------->|
  |                                                                     |
  |   HTTP/1.1 303 See Other                                            |
  |   Location: https://www.example.com/resp/job-01/spectral-index.tiff |
  |   Content-Type: image/tiff; application=geotiff                     |
  |   Content-Length: 13101963                                          |
  |<--------------------------------------------------------------------|

7.12.4.3.  Response requesting multiple processing outputs

When a process is executes synchronously and a multiple processing outputs are generated (whether requested implicitly or explicitly in the execute request) the following requirements and recommendations apply:

Requirement 31

Identifier/req/core/process-execute-sync-many-json
Label/req/core/process-execute-sync-many-json
Conditions
  1. The negotiated execution mode is synchronous.

  2. The number of requested (whether implicitly or explicity) outputs in the execute request is 2 or more.

  3. The negotiated output content type is application/json.

  4. Optionally, the negotiated profile is https://www.opengis.net/dev/profile/OGC/0/ogc-results.

A

The server SHALL respond with an HTTP status code of 200.

B

The media type of the response SHALL be application/json

C

The response HTTP headers SHALL include a link (href=”https://www.opengis.net/dev/profile/OGC/0/ogc-results”, rel=”profile”).

D

The content of response SHALL conform to the results.yaml schema.

Permission 8

Identifier/per/core/process-execute-multiple-output-pkg
Label/per/core/process-execute-multiple-output-pkg
Statement

A server MAY, through content negotiation, respond with something other than that specified by requirement /req/core/process-execute-sync-many-json. A server MAY, for example, respond with a ZIP file or a multi-part MIME document containing all the requested output values.

Recommendation 20

Identifier/rec/core/process-execute-sync-many-json-prefer-none
Label/rec/core/process-execute-sync-many-json-prefer-none
Conditions
  1. The negotiated execution mode is synchronous.

  2. The number of requested (whether implicitly or explicitly) outputs in the execute request is 2 or more.

  3. No return preference accompanies the request.

A

If the server deems that the size of an output value is small, that value SHOULD be included in-line in the response.

B

If the server deems that the size of an output value is large, that value SHOULD be included by reference via hyperlink in the response.

Recommendation 21

Identifier/rec/core/process-execute-sync-many-json-prefer-minimal
Label/rec/core/process-execute-sync-many-json-prefer-minimal
Conditions
  1. The negotiated execution mode is synchronous.

  2. The number of requested (whether implicitly or explicitly) outputs in the execute request is 2 or more.

  3. The negotiated return preference is minimal.

A

If the server deems that the size of an output value is small, that value SHOULD be included in-line in the response.

B

If the server deems that the size of an output value is large, that value SHOULD be included by reference via hyperlink in the response.

Recommendation 22

Identifier/rec/core/process-execute-sync-many-json-prefer-representation
Label/rec/core/process-execute-sync-many-json-prefer-representation
Conditions
  1. The negotiated execution mode is synchronous.

  2. The number of requested (whether implicitly or explicitly) outputs in the execute request is 2 or more.

  3. The negotiated return preference is representation.

A

Each requested output value SHOULD be included in-line in the response.

Permission 9

Identifier/per/core/process-execute-sync-many-other-formats
Label/per/core/process-execute-sync-many-other-formats
Conditions
  1. The negotiated execution mode is synchronous.

  2. The number of requested (whether implicitly or explicity) outputs in the execute request is 2 or more.

part

Servers MAY support other response formats or encodings (e.g. ZIP or multipart/*) that do not conform to results.yaml.


This Standard does not provide any guidance on these other formats or encodings.

7.12.4.5.  Response when the “outputs” parameter is empty

An “outputs” parameter whose value is empty (i.e. “outputs”: {}) signals to a process to execute its logic but to not generate a response body.

Requirement 32

Identifier/req/core/process-execute-success-sync-empty-outputs
Label/req/core/process-execute-success-sync-empty-outputs
Conditions
  1. The negotiated execution mode is synchronous.

  2. The “outputs” parameter is included in the execute request but is empty (i.e. “outputs”:{}).

A

A successful execution of the operation SHALL be reported with a response with a HTTP status code 204.

B

The response body SHALL be empty.

7.12.4.6.  Job creation on synchronous process execution

This Standard does not mandate that servers create a job as a result of executing a process synchronously. However, the following permission is given:

Permission 10

Identifier/per/core/process-execute-sync-job
Label/per/core/process-execute-sync-job
Statement

Servers MAY support the creation of a job for synchronously executed processes.

For servers that implement this permission and do create a job as a result of synchronous execution of a process, the following requirement applies:

Requirement 33

Identifier/req/core/job-results-success-sync
Label/req/core/job-results-success-sync
Conditions

The server creates a job when a process is executed synchronously.

A

A successful execution of the operation SHALL include an HTTP Link header with rel=monitor pointing to the created job.

B

When resolving the rel=monitor link, the content type of response SHALL be application/json.

C

When resolving the rel=monitor link, the body of the response SHALL be based upon the JSON schema fragment statusInfo.yaml.

The job reference in the header can then be used to re-fetch the results of the original synchronous execution.

7.12.4.7.  Response for asynchronous processes execution

In the case of asynchronous execution, the following requirement applies:

Requirement 34

Identifier/req/core/process-execute-success-async
Label/req/core/process-execute-success-async
Conditions

The negotiated execution mode is asynchronous.

A

A successful execution of the operation SHALL be reported as a response with a HTTP status code 201.

B

The header of the response SHALL return the HTTP Location header that contains a link to the newly created job.

C

The content of the response SHALL be based upon the JSON Schema fragment statusInfo.yaml.

Requirement 35

Identifier/req/core/process-execute-success-async-outputs
Label/req/core/process-execute-success-async-outputs
Conditions
  1. The negotiated execution mode is asynchronous.

  2. One or more of the defined outputs of the process are specified in the execute request.

A

The server SHALL produce and make available for retrieval all of the outputs specified in the execute request.

Requirement 36

Identifier/req/core/process-execute-success-async-outputs-empty
Label/req/core/process-execute-success-async-outputs-empty
Conditions
  1. The negotiated execution mode is asynchronous.

  2. The “outputs” parameter is specified execute request but its content is empty (i.e. “outputs”:{}).

A

The server SHALL asynchoronously execute the process but SHALL not produce any retrievable outputs.

B

Attempting to retieve any of the process’s defined outputs via the /jobs/{jobID}/results[/{outputID}] path SHALL result in a response that has HTTP status code 404.

Requirement 37

Identifier/req/core/process-execute-success-async-outputs-omitted
Label/req/core/process-execute-success-async-outputs-omitted
Conditions
  1. The negotiated execution mode is asynchronous.

  2. The “outputs” parameter is omitted in the execute request.

A

The server SHALL produce and make available for retrieval all of the outputs defined for the process in its process description.

7.12.5.  Error situations

See Clause 7.5.1 for general guidance.

If the process with the specified identifier does not exist on the server, see requirement /req/core/process-exception/no-such-process.

7.13.  Retrieve status information about a job

The following section describes the requirements to retrieve information about the status of a job.

7.13.1.  Operation

Requirement 38

Identifier/req/core/job
Label/req/core/job
Statement

The server SHALL support the HTTP GET operation at the path /jobs/{jobID}.

7.13.2.  Response

Requirement 39

Identifier/req/core/job-success
Label/req/core/job-success

Statement

A successful execution of the operation SHALL be reported as a response with a HTTP status code 200. —-


Statement

The content of that response SHALL be based upon the OpenAPI 3.0 schema statusInfo.yaml. —-

 

allOf:
  - $ref: "./descriptionType.yaml"
  - type: object
    required:
      - id
      - status
      - type
    properties:
      id:
        type: string
      processID:
        type: string
        format: uri
      type:
        type: string
        example:
          - process
          - wps
          - openeo
      request:
        oneOf:
          - type: string
          - type: object
          - $ref: "../common-core/link.yaml"
      status:
        $ref: "statusCode.yaml"
      message:
        type: string
      exception:
        $ref: "../common-core/exception.yaml"
      created:
        type: string
        format: date-time
      started:
        type: string
        format: date-time
      finished:
        type: string
        format: date-time
      updated:
        type: string
        format: date-time
      progress:
        type: integer
        minimum: 0
        maximum: 100
      links:
        type: array
        items:
          $ref: "../common-core/link.yaml"

Listing 19 — Schema for status info

NOTE 1:  This schema can also be obtained from statusInfo.yaml.

 

type: string
nullable: false
enum:
  - accepted
  - running
  - successful
  - failed
  - dismissed

Listing 20 — Schema for status codes

NOTE 2:  This schema can also be obtained from statusCode.yaml.

The job status information includes several optional date-time fields that represent milestones in the life cycle of a job. The following are recommended for servers that decide to populate some or all these date-time fields:

Recommendation 23

Identifier/rec/core/job-status
Label/rec/core/job-status
A

Servers SHOULD, via the title, description, keywords and metadata fields, include descriptive metadata about the job.

B

Servers SHOULD set the value of the processID field if it is known.

C

Servers SHOULD set the value of the created field when a job has been accepted and queued for execution.

D

Servers SHOULD set the value of the started field when a job begins execution and is consuming compute resources.

E

Servers SHOULD set the value of the finished field when the execution of a job has completed, and the process is no longer consuming compute resources.

F

Whenever the status field of the job changes, servers SHOULD revise the value of the updated field.

G

Servers SHOULD, if the information can be determined, set the value of the progress field indicating how much of the job has been completed.

NOTE 3:  Once a job has finished execution and is no longer consuming compute resources, the duration of processing can be computed as finished-started. The updated field, however, may still be revised as the system continues processing outputs, storing results, releasing compute resources, etc.

Permission 11

Identifier/per/core/job-status
Label/per/core/job-status
A

Servers MAY, via the request field, include the request that was submitted to the server resulting in the creation of this job. The initiating request MAY be encoded inline in the job status information or MAY be referenced via a link.

B

Servers MAY, via the message field, include additional human-readable context information about the job.

Example 1 — A HTTP GET request for retrieving status information about a job encoded as JSON.

 

GET /jobs/81574318-1eb1-4d7c-af61-4b3fbcf33c4f HTTP/1.1
Host: processing.example.org

Example 2 — A job encoded as JSON.

 

{
 
"jobID" : "81574318-1eb1-4d7c-af61-4b3fbcf33c4f",
 
"status": "accepted",
 
"message": "Process started",
 
"progress": 0,
 
"created": "2021-05-04T10:13:00+05:00",
 
"links": [
   
{
     
"href": "http://processing.example.org/oapi-p/jobs/81574318-1eb1-4d7c-af61-4b3fbcf33c4f",
     
"rel": "self",
     
"type": "application/json",
     
"title": "this document"
   
}
 
]
}

7.13.3.  Error situations

See Clause 7.5.1 for general guidance.

If the process with the specified identifier does not exist on the server, see requirement /req/core/process-exception/no-such-process.

Requirement 40

Identifier/req/core/job-exception-no-such-job
Label/req/core/job-exception-no-such-job
Statement

If the operation is executed using an invalid job identifier, the response SHALL have HTTP status code 404. The content of that response SHALL be based upon the OpenAPI 3.0 schema exception.yaml. The type of the exception SHALL be “http://www.opengis.net/def/exceptions/ogcapi-processes-1/1.0/no-such-job”.

7.14.  Retrieve job results

7.14.1.  Operation

7.14.1.1.  All processing results

Requirement 41

Identifier/req/core/job-results
Label/req/core/job-results
Statement

The server SHALL support the HTTP GET operation at the path /jobs/{jobID}/results.

Requirement 42

Identifier/req/core/job-results-param-outputs
Label/req/core/job-results-param-outputs
A

The operation at the /jobs/{jobID}/results endpoint SHALL support a parameter outputs with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: outputs
in: query
required: false
schema:
  type: array
  items:
    type:string
style: form
explode: false

Requirement 43

Identifier/req/core/job-results-param-outputs-response
Label/req/core/job-results-param-outputs-response
A

Only the outputs with identifers specified by the optional outputs parameter SHALL be included in the response.

7.14.1.2.  Individual processing results

Requirement 44

Identifier/req/core/job-result
Label/req/core/job-result
Statement

For each output, with output identifier outputID, defined in the description of a process and requested (whether implicitly or explicitly) in an execute request, the server SHALL support the HTTP GET operation at the path /jobs/{jobID}/results/{outputID}.

NOTE:  The size of individual processing results may be determined without actually transmitting the entire result by using the HTTP HEAD method to retrieve the Content-Length header.

7.14.2.  Response

7.14.2.1.  Overview

The way a server responds when retrieving job results depends on:

  • The number of outputs requested (whether implicitly or explicitly) in an execute request.

  • The negotiated content type for the response (via the HTTP Accept header) or lack thereof,

  • Any negotiated client preferences (via the HTTP Prefer header).

The following table maps the possible responses based on the combinations of parameters in the execute request.

The column headers in the following table denote:

  1. Requested # outputs: The number of outputs requested (whether implicitly or explicitly) in the execute request.

  2. Access path: The API endpoint from which the result(s) can be retrieved.

  3. Return preference: The negotiated return preferences.

  4. Response HTTP code: The HTTP status code that the server should generate in this context.

  5. Response media type: The value of the HTTP Content-Type header that the server should generate in this context.

  6. Response body: A description of the content of the response body in this context.

  7. Req./Rec./Perm.: The corresponding requirements/recommendations/permission as per this Standard.

Table 12 — Table mapping get results responses based on the input parameter values used on the original execute request.

Requested # outputs6Access pathReturn preference (Prefer header)Response HTTP codeResponse media type (Content-Type header)Response bodyReq./Rec./Perm.
1/jobs/{jobID}/results/{outputID}n/a200as negotiatedrequested process output valueSee requirement: /req/core/job-results-async-one
N/jobs/{jobID}/resultsnone200application/jsonresults.yamlSee Note 2,Note 3
minimalSee Note 2,Note 4
representationSee Note 2,Note 5

NOTE 1: 

  • The value n/a in a cell means value of the corresponding parameter is not applicable, not specified, not required or can be ignored in this context.

  • The value as negotiated means that the output content type is as negotiated between the client and the server based on the value of the HTTP Accept header.

The following requirements apply when retrieving the results of a job that was created by executing a process asynchronously OR was created by executing a process synchronously on a server that creates a job even for synchronous execution:

7.14.2.2.  Retrieving results individually

Requirement 45

Identifier/req/core/job-results-async-one
Label/req/core/job-results-async-one
Conditions
  1. The negotiated execution mode is asynchronous,

  2. The number of requested (whether implicitly or explicitly) outputs in the execute request is 1.

  3. The result is retieved from the /jobs/{jobID}/results/{outputID} endpoint.

A

The server SHALL respond with an HTTP status code of 200.

B

The media type of the response SHALL be as negotiated as per the HTTP content negotiation rules.

C

The content of response body SHALL be the requested process output value in the negotiated output format.

7.14.2.3.  Retrieving multiple results simultaneouly

Requirement 46

Identifier/req/core/job-results-async-many
Label/req/core/job-results-async-many
Conditions
  1. The negotiated execution mode is asynchronous.

  2. The number of requested (whether implicitly or explicitly) outputs in the execute request is 2 or more.

  3. The results are retrieved from the /jobs/{jobID}/results endpoint.

A

The server SHALL respond with an HTTP status code of 200.

B

The media type of the response SHALL be application/json

C

The content of response SHALL conform to the results.yaml schema.

Recommendation 25

Identifier/rec/core/job-results-async-many-json-prefer-none
Label/rec/core/job-results-async-many-json-prefer-none
Conditions

A return preference is not specified via the HTTP prefer header.

A

If the server deems that the size of an output value is small, that value SHOULD be included in-line in the response.

B

If the server deems that the size of an output value is large, that value SHOULD be included by reference via hyperlink in the response.

Recommendation 26

Identifier/rec/core/job-results-async-many-json-prefer-minimal
Label/rec/core/job-results-async-many-json-prefer-minimal
Conditions

The negotiated return preference is minimal.

A

If the server deems that the size of an output value is small, that value SHOULD be included in-line in the response.

B

If the server deems that the size of an output value is large, that value SHOULD be included by reference via hyperlink in the response.

Recommendation 27

Identifier/rec/core/job-results-async-many-json-prefer-representation
Label/rec/core/job-results-async-many-json-prefer-representation
Conditions

The negotiated return preference is representation.

A

Each requested output value SHOULD be included in-line in the response.

Permission 12

Identifier/per/core/job-results-async-many-other-formats
Label/per/core/job-results-async-many-other-formats
Conditions
  1. The negotiated execution mode is asynchronous.

  2. The number of requested (whether implicitly or explicitly) outputs in the execute request is 2 or more.

part

Servers MAY support other response formats or encodings (e.g. ZIP or multipart/*) that do not conform to results.yaml.


This Standard does not provide any guidance on these other formats or encodings.

Example 1 — A HTTP GET request for retrieving the result a job encoded as JSON.

 

GET /jobs/81574318-1eb1-4d7c-af61-4b3fbcf33c4f/results HTTP/1.1
Host: processing.example.org

Example 2 — A result encoded as JSON.

 

{
 
"stringOutput": "Value2",
 
"measureOutput": {
   
"value": {
     
"measurement": "10.3",
     
"uom": "m",
     
"reference": "https://ucum.org/ucum-essence.xml"
   
}
 
},
 
"dateOutput": "2021-03-06T07:21:00",
 
"doubleOutput": "3.14159",
 
"arrayOutput": [1,2,3,4,5,6],
 
"complexObjectOutput": {
   
"value": {
     
"property1": "value1",
     
"property2": "value2",
     
"property5": true
   
}
 
},
 
"geometryOutput": [
   
{
     
"value": "<gml:Polygon gml:id=\"GID1\" srsName=\"urn:ogc:def:crs:OGC::CRS84\"><gml:exterior><gml:LinearRing><gml:posList>-77.024519 38.810529 -77.024635 38.810973 -77.024704 38.810962 -77.024776 38.811239 -77.024957 38.81121 -77.024905 38.811012 -77.024905 38.811012 -77.024865 38.810857 -77.025024 38.810832 -77.025071 38.811012 -77.025203 38.810992 -77.02506 38.810444 -77.024519 38.810529</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>",
     
"mediaType": "application/gml+xml; version=3.2"
   
},
   
{
     
"value": {
       
"type": "Polygon",
       
"coordinates": [[[ -176.5814819,-44.10896301 ],
                        
[ -176.5818024,-44.10964584 ],
                        
[ -176.5844116,-44.11236572 ],
                        
[ -176.5935974,-44.11021805 ],
                        
[ -176.5973511,-44.10743332 ],
                        
[ -176.5950928,-44.10562134 ],
                        
[ -176.5858459,-44.1043396  ],
                        
[ -176.5811157,-44.10667801 ],
                        
[ -176.5814819,-44.10896301 ]]]
     
}
   
}
 
],
 
"boundingBoxOutput": {
   
"bbox": [51.9,7,52,7.1],
   
"crs": "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
 
},
 
"imagesOutput": [
   
{
     
"href": "https://www.someserver.com/ogcapi/Daraa/collections/Daraa_DTED/styles/Topographic/coverage?...",
     
"type": "image/tiff; application=geotiff"
   
},
   
{
     
"value": "VBORw0KGgoAAAANSUhEUgAABvwAAAa4CAYAAABMB35kAAABhGlDQ1BJQ0MgcHJvZmlsZQAA\nKJF9kT1Iw0AcxV9TpSL1A+xQxCFDdbIgKuKoVShChVArtOpgcumH0KQhSXFxFFwLDn4sVh1c\nnHV1cBUEwQ8QNzcnRRcp8X9JoUWMB8f9eHfvcfcOEOplplkdY4Cm22Y6mRCzuRUx9IogouhH\n ... \nj3Z5mX7/PCPVRJV92rpHK24xcJrzk20+tkeYlCPqcZNO3Lpni1OJWatPCcmgGDEqx7Om6lfa\nppM4k4BTe9+bsn3L9/9/yWhA0PwQGW8ipCZsnZt9lsdrYEM8z/M8z/M8z/M8z/M8z/MzLWY1\nAAAACUlEQVQ871H6P6JI+TxS5Wn2AAAAAElFTkSuQmCC",
     
"encoding": "base64",
     
"mediaType": "image/tiff; application=geotiff"
   
}
 
],
 
"featureCollectionOutput": {
   
"value": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><FeatureCollection xmlns=\"http://schemas.myserver.com/namespaces/null\" xmlns:gml=\"http://www.opengis.net/gml/3.2\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://schemas.myserver.com/namespaces/null https://www.pvretano.com/myserver/ogcapi/daraa/schema?f=GML32&amp;collectionids=TransportationGroundCrv http://www.opengis.net/gml/3.2 http://schemas.opengis.net/schemas/gml/3.2.1/gml.xsd\">...",
   
"mediaType": "application/gml+xml; version=3.2"
 
}
}

7.14.3.  Error situations

See Clause 7.5.1 for general guidance.

Requirement 47

Identifier/req/core/job-results-exception/invalid-query-parameter-value
Label/req/core/job-results-exception/invalid-query-parameter-value
Statement

If the operation is executed using an invalid query parameter value, the response SHALL have HTTP status code 400. The content of that response SHALL be based upon the OpenAPI 3.0 schema exception.yaml. The type of the exception SHALL be “http://www.opengis.net/def/exceptions/ogcapi-processes-1/1.0/invalid-query-parameter-value”.

Requirement 48

Identifier/req/core/job-results-exception/no-such-job
Label/req/core/job-results-exception/no-such-job
Statement

If the operation is executed using an invalid job identifier, the response SHALL have HTTP status code 404. The content of that response SHALL be based upon the OpenAPI 3.0 schema exception.yaml. The type of the exception SHALL be “http://www.opengis.net/def/exceptions/ogcapi-processes-1/1.0/no-such-job”.

Requirement 49

Identifier/req/core/job-results-exception/results-not-ready
Label/req/core/job-results-exception/results-not-ready
Conditions
  1. The request is execute on a running job with valid job identifier jobID.

A

The response SHALL have HTTP status code 404.

B

The content of that response SHALL be based upon the OpenAPI 3.0 schema exception.yaml.

C

The type of the exception SHALL be “http://www.opengis.net/def/exceptions/ogcapi-processes-1/1.0/result-not-ready”.

Requirement 50

Identifier/req/core/job-results-exception/results-not-available
Label/req/core/job-results-exception/results-not-available
Conditions
  1. The request is executed on a completed job with a valid job identifier jobID.

  2. No outputs were generated either because processing failed or the execute request specified an empty “outputs” parameter thus requested that no outputs be made available for retrieval.

A

The response SHALL have HTTP status code 404.

B

The content of that response SHALL be based upon the OpenAPI 3.0 schema exception.yaml.

C

The type of the exception SHALL be “http://www.opengis.net/def/exceptions/ogcapi-processes-1/1.0/result-not-available”.

Requirement 51

Identifier/req/core/job-results-failed
Label/req/core/job-results-failed
Statement

If the operation is executed on a failed job using a valid job identifier, the response SHALL have a HTTP error code that corresponds to the reason for the failure. The content of that response SHALL be based upon the OpenAPI 3.0 schema exception.yaml. The type of the exception SHALL correspond to the reason of the failure, e.g. InvalidParameterValue for invalid input data.

8.  Collections

8.1.  REQUIREMENTS CLASS “COLLECTION INPUT”

8.1.1.  Overview

The Collection Input conformance class allows an OGC API collection, available using one or more OGC API data access mechanisms, to be specified as an input to a process.

Unless an implementation also conforms to the Remote Collections conformance class, only collections that are locally accessible in the current OGC API deployment are supported.

Requirements class 2

Identifierhttp://www.opengis.net/spec/ogcapi-processes-3/0.0/req/collection-input
Target typeCollection Input
PrerequisitesRequirements class 1: http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/core
Requirements class 5: http://www.opengis.net/spec/ogcapi-processes-3/0.0/req/input-fields-modifiers

The following requirements describe how an execute requests references an OGC API collection and how an implementation requests data from that collection to use as input to a process.

8.1.2.  Referencing a collection

Requirement 52

Identifier/req/collection-input/referenced-collection
Label/req/collection-input/referenced-collection
Description

For referencing a collection as an input to a process:

A

The implementation SHALL support execute requests containing a "collection" key and a corresponding URI or Relative-URI value identifying an OGC API collection as an input to a process.

B

The implementation SHALL interpret Relative-URIs as relative to the parent process within which the containing collection object is nested.

NOTE:  PAV: The second part of this requirement does not make sense or at least is it is not clear to me.

8.1.3.  Accessing data from a collection

Requirement 53

Identifier/req/collection-input/collection-access
Label/req/collection-input/collection-access
Statement

For referencing a collection as an input to a process the implementation SHALL support accessing local collections accessible using at least one OGC API data access mechanism.

NOTE:  For local collections, the specification is agnostic to how data flows from the collection to the process.

8.2.  REQUIREMENTS CLASS “REMOTE COLLECTIONS”

8.2.1.  Overview

The Remote Collections conformance class allows to reference a remote OGC API collection in addition to any local collections.

If the Nested Processes conformance class is also supported, but Remote Processes is not, an implementation still provides the ability to substitute a collection by remote nested processes supporting the Collection Output conformance class as input to a process.

Requirements class 3

Identifierhttp://www.opengis.net/spec/ogcapi-processes-3/0.0/req/remote-collections
Target typeRemote Collections
PrerequisitesRequirements class 2: http://www.opengis.net/spec/ogcapi-processes-3/0.0/req/collection-input
http://www.opengis.net/spec/ogcapi-processes-3/0.0/req/nested-process

The following requirements describe how an execute requests references a remote OGC API collection and how an implementation requests data from that collection to use as an input to a process.

8.2.2.  Referencing a remote collection

Requirement 54

Identifier/req/remote-collections/referenced-collection
Label/req/remote-collections/referenced-collection
Description

For referencing a remote collection as an input to a process:

A

The implementation SHALL support execute requests containing a "collection" key and a corresponding URI or Relative-URI value identifying an authorized OGC API collection as an input to a process.

B

The implementation SHALL interpret Relative-URIs as relative to the parent process within which the containing collection or process object is nested.

NOTE:  PAV: Don’t quite understand the second part.

8.2.3.  Accessing data from a remote collection

Requirement 55

Identifier/req/remote-collections/collection-access
Label/req/remote-collections/collection-access
Statement

For referencing a collection as an input to a process the implementation SHALL support accessing a remote OGC API collection using one or more OGC API data access mechanisms.

8.3.  REQUIREMENTS CLASS “COLLECTION OUTPUT”

8.3.1.  Overview

The Collection Output conformance class specifies how clients can trigger the execution of a process for a specific area, time and resolution of interest as a result of requesting output data using OGC API data access mechanisms, such as OGC API — Tiles, DGGS, Coverages, Features, EDR, or Maps.

This provides an alternative to the synchronous and asynchronous execution mechanisms defined in OGC API — Processes — Part 1: Core for which area, time and resolution of interest are hardcoded in the execute request. With Core, when lengthy batch processing is not desirable, completely new execute requests returning a partial output must continuously be re-submitted.

This conformance class allows to submit an execute request once and then access the output using mechanisms widely supported by clients in a manner completely agnostic of process execution.

Compared to separate execute requests, this mechanism makes it easier for implementations to optimize for scenarios where clients will stream small partial outputs from the same pre-established processing pipeline. Parsing the execute request, validating inputs, and handshakes with remote components only needs to be performed once. An implementation could also preempt future requests based on past requests, offsetting the latency of a complex processing pipeline.

Requirements class 4

Identifierhttp://www.opengis.net/spec/ogcapi-processes-3/0.0/req/collection-output
Target typeCollection Output
PrerequisitesRequirements class 1: http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/core
http://www.opengis.net/spec/ogcapi-common-2/1.0/req/collections
http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/geodata-tilesets
http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core
http://www.opengis.net/spec/ogcapi-coverages-1/0.0/conf/core
http://www.opengis.net/spec/ogcapi-coverages-1/0.0/conf/coverage-scaling
http://www.opengis.net/spec/ogcapi-coverages-1/0.0/conf/coverage-subset
http://www.opengis.net/spec/ogcapi-coverages-1/0.0/conf/coverage-rangesubset
http://www.opengis.net/spec/ogcapi-dggs-1/0.0/conf/data-retrieval
http://www.opengis.net/spec/ogcapi-dggs-1/0.0/conf/zone-query
http://www.opengis.net/spec/ogcapi-edr-1/1.0/conf/core
http://www.opengis.net/spec/ogcapi-edr-1/1.0/conf/collections
http://www.opengis.net/spec/ogcapi-maps-1/0.0/conf/core
http://www.opengis.net/spec/ogcapi-maps-1/0.0/conf/spatial-subset
http://www.opengis.net/spec/ogcapi-maps-1/0.0/conf/datetime
http://www.opengis.net/spec/ogcapi-maps-1/0.0/conf/scaling

The following requirements describe an execution mechanism where a client is redirected (using a 303 See Other HTTP status code and a Location: header) to an OGC API landing page or collection description document, which provides links to request output data using standard OGC API data access mechanisms, triggering on-demand processing for a particular area, time and resolution of interest.

8.3.2.  response query parameter

Requirement 56

Identifier/req/collection-output/response-query-parameter
Label/req/collection-output/response-query-parameter
Statement

For initiating the execution of a process and retrieving its output as an OGC API collection the implementation SHALL support the response query parameter with collection and landingPage as possible values.

8.3.3.  Collection Response

A request for a collection response is only valid for an execute request generating or selecting a single output which can be retrieved using an OGC API data access mechanism.

Requirement 57

Identifier/req/collection-output/collection-response
Label/req/collection-output/collection-response
Description

For initiating the execution of a process and retrieving its output as an OGC API collection:

A

For a request including the reponse=collection parameter and generating a single output, the implementation SHALL return a 303 See Other HTTP status code together with a Location: response header redirecting to a collection description document.

B

For a request including the response=collection parameter and generting multiple outputs, the implementation SHALL return a 400 Bad Request HTTP status code.

C

The target collection description SHALL link to at least one OGC API data access mechanism.

8.3.4.  Landing Page Response

A request for a landing page response is valid for an execute request generating one or more outputs which can be retrieved using an OGC API data access mechanism.

Requirement 58

Identifier/req/collection-output/landing-page-response
Label/req/collection-output/landing-page-response
Description

For initiating the execution of a process and retrieving its output as an OGC API dataset landing page:

A

In response to a request including the response=landingPage parameter the implementation SHALL return a 303 See Other HTTP status code together with a Location response header redirecting to a landing page.

B

The target landing page SHALL contain a link (rel=data) to a list of available collections.

C

The target landing page SHALL include links to at least one OGC data access mechanism.

8.3.5.  Collection Output expiry

Permission 13

Identifier/per/collection-output/expiry
Statement

Collection output resources are ephemeral in nature:

A

An Implementation MAY return a 410 Gone HTTP status code for resources associated with a previous Collection Output response (i.e., a landing page, a collection, or any resources linked from either) if a significant period of time has elapsed since both the original request and any further associated data access request from the client.

B

An Implementation MAY redirect a client re-posting an identical or equivalent process execution request for Collection Output (e.g., after having received a 410 gone status) to the same location as a previous execution (expired and reinstated, or still valid), or to a new location.

8.3.6.  Data Access Mechanisms

Requirement 59

Identifier/req/collection-output/data-access-mechanisms
Label/req/collection-output/data-access-mechanisms
Description

For triggering processing and returning resulting output data as a response to data access requests:


The implementation SHALL support at least one OGC API data access mechanisms corresponding to the links returned from a request including the response=collection or response=landingPage parameters.


The implementation SHALL trigger the processing required to respond to the request with considerations for the area, time and/or resolution of interest associated with the request.

8.4.  REQUIREMENTS CLASS “INPUT FIELDS MODIFIERS”

8.4.1.  Overview

The Input Fields Modifiers conformance class specifies how execute requests can modify an input (including those specified using the Collection Input, Remote Collections, Nested Processes and Remote Processes conformance classes) by filtering its data according to its fields (properties), selecting a subset of the data fields or deriving new fields from existing ones (e.g., by performing arithmetic), and/or sorting the data according to the value of fields. An expression language such as the OGC Common Query Language 2 (CQL2) can be used for this purpose. There are plans to extend CQL2 beyond boolean predicates to expressions that resolve to other types of values (e.g., numbers or geometry).

Requirements class 5

Identifierhttp://www.opengis.net/spec/ogcapi-processes-3/0.0/req/input-fields-modifiers
Target typeInput Fields Modifiers
PrerequisitesRequirements class 1: http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/core
http://www.opengis.net/spec/ogcapi-features-3/0.0/req/features-filter

The following requirements describe the ability of an implementation to modify the data accessed as an input to a process by first applying a filter ("filter"), selecting a subset of the fields or deriving new fields ("properties") or sorting the data ("sortBy"), before providing the data as input to the process. In an execute request, these additional keys are specified at the same level as the "collection" defined in the Collection Input conformance class, or the "process" defined in the Nested Process conformance class.

For an input generated by a nested process, this capability is equivalent to the Output Fields Modifiers conformance class from the perspective of that nested process. For a remote process (as defined in Remote Processes conformance class) that supports Output Fields Modifiers, or for a collection (or a process supporting Collection Output) with a data access mechanism providing the required functionality, it is preferable to let the remote process or collection access handle the modification to lower bandwidth and processing requirements.

For an input from a remote collection, a data access mechanism for the collection may readily support some or all of these parameters (e.g., OGC API — Features — Part 3: Filtering). In this case, it is preferable for the Implementation to query the data with the relevant parameters.

This ability to pass on these modifiers to remote data and processing sources allows to easily bring a certain category of algorithms close to the data through simple standard expressions.

The extent to which an implementation support these field modifiers capabilities depends on its stated level of conformance to one or more expression language.

8.4.2.  Filtering

Requirement 60

Identifier/req/input-fields-modifiers/filtering
Statement

For filtering the data coming in as an input to a process:

A

The Implementation SHALL support specifying a "filter" key and a corresponding filter predicate as part of an input to a process.

B

The Implementation SHALL support one or more expression languages to define the filter, such as the OGC Common Query Language (CQL2).

8.4.3.  Selecting and Deriving Fields

Requirement 61

Identifier/req/input-fields-modifiers/derived-fields
Statement

For selecting and/or deriving new fields from the input data to a process:

A

As part of an input to a process, the Implementation SHALL support specifying a "properties" key and a corresponding set of selected fields as an array of field names.

B

As part of an input to a process, the Implementation SHALL support specifying a "properties" key and a corresponding set of derived fields expressions as a key / value pair object mapping expressions to field names.

C

The Implementation SHALL support one or more expression languages to define the derived fields, such as the OGC Common Query Language (CQL2).

8.4.4.  Sorting

Requirement 62

Identifier/req/input-fields-modifiers/sorting
Statement

For sorting the input data to a process according to its data fields:

A

The Implementation SHALL support specifying a "sortBy" key and a corresponding comma-separated sequence of expressions defining the order in which to sort the data coming in as an input to a process.

B

The Implementation SHALL support one or more expression languages to define the sorting expressions, such as the OGC Common Query Language (CQL2).

8.5.  REQUIREMENTS CLASS “OUTPUT FIELDS MODIFIERS”

8.5.1.  Overview

The Output Fields Modifiers conformance class specifies how execute requests can modify the data output from a process by filtering its data according to its fields (properties), selecting a subset of the data fields or deriving new fields from existing ones (e.g., by performing arithmetic), and/or sorting the data according to the value of fields. An expression language such as the OGC Common Query Language 2 (CQL2) can be used for this purpose. There are plans to extend CQL2 beyond boolean predicates to expressions that resolve to other types of values (e.g., numbers or geometry).

This capability is available whether using the Collection Output conformance class, or the synchronous or asynchronous execution capabilities of OGC API — Processes — Part 1: Core.

Requirements class 6

Identifierhttp://www.opengis.net/spec/ogcapi-processes-3/0.0/req/output-fields-modifiers
Target typeOutput Fields Modifiers
PrerequisiteRequirements class 1: http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/core

The following requirements describe the ability of an implementation to modify the data output from a process by applying a filter ("filter"), selecting a subset of the fields or deriving new fields ("properties") or sorting the data ("sortBy"), before returning the data as an output of a process. In an execute request, these additional keys are specified at the same level as the "process" defined in the Nested Process conformance class, or at the top-level of an execute request as defined in OGC API — Processes — Part 1: Core.

When a nested process is used as an input to another process, this capability is equivalent to the Input Fields Modifiers conformance class from the perspective of the parent process receiving the output of the nested process. For a remote process (as defined in Remote Processes conformance class) that supports Output Fields Modifiers, or supports Collection Output with a data access mechanism providing the required functionality, it is preferable to let the remote process handle the modification to lower bandwidth and processing requirements.

The extent to which an implementation support these capabilities depends on its stated level of conformance to one or more expression language.

8.5.2.  Filtering

Requirement 63

Identifier/req/output-fields-modifiers/filtering
Statement

For filtering the data returned as a data output from a process:

A

The Implementation SHALL support specifying a "filter" key and a corresponding filter predicate as part of a nested process or top-level process execution request.

B

The Implementation SHALL support one or more expression languages to define the filter, such as the OGC Common Query Language (CQL2).

8.5.3.  Selecting and Deriving Fields

Requirement 64

Identifier/req/output-fields-modifiers/derived-fields
Statement

For selecting and/or deriving new fields returned as a data output from a process:

A

As part of a nested process or top-level process execution request object, the Implementation SHALL support specifying a "properties" key and a corresponding set of selected fields as an array of field names.

B

As part of a nested process or top-level process execution request object, the Implementation SHALL support specifying a "properties" key and a corresponding set of derived fields expressions as a key / value pair object mapping expressions to field names.

C

The Implementation SHALL support one or more expression languages to define the derived fields, such as the OGC Common Query Language (CQL2).

8.5.4.  Sorting

Requirement 65

Identifier/req/output-fields-modifiers/sorting
Statement

For sorting the data returned as an output from a process according to its data fields:

A

The Implementation SHALL support specifying a "sortBy" key and a corresponding comma-separated sequence of expressions defining the order in which to sort the data returned as part of a nested process or top-level process execution request.

B

The Implementation SHALL support one or more expression languages to defined the sorting expressions, such as the OGC Common Query Language (CQL2).

9.  Requirements Class “OGC Process Description”

The following section describes the OGC Process Description requirements class.

9.1.  Overview

Requirements class 7

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/req/ogc-process-description
Obligationrequirement
Target typeWeb API
PrerequisitesOGC API — Processes Core
JSON
Label http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/ogc-process-description

The OGC process description is an information model that may be used to specify the interface of a process. This model is an evolution of the process description model originally defined in the OGC WPS 2.0.2 Interface Standard but also includes elements of the OpenAPI Specification. Specifically, this process description languages uses JSON Schema fragments to define the input and output parameters of a process. As such, this process description provides a bridge from legacy implementations to using the OGC API Framework.

NOTE:  The use of other schema languages for describing the interface to a process is permitted but is outside the scope of this Standards. A description of how other schema languages would be used to describe the interface of a process would need to be described in a new conformance class added to this Standard or in a new Part of the OGC API — Processes suite of standards.

The process description allows the following information to be specified:

  • An identifier for the process

  • Descriptive metadata about the process:

    • A title

    • A narrative description of the process

    • Keywords that can be associated with the process

    • References to additional metadata

  • A description of each process input specified using a JSON Schema fragment.

  • A description of each process output specified using a JSON Schema fragment.

  • A job control specification that indicates whether the process can be invoked synchronously, asynchronously, or either.

  • An output transmission specification that indicates how the results of a process are retrieved; either by value or by reference

  • A section for additional parameters that are intended for communities of use to extend the process description as required.

The following clause defines a JSON-encoding of the OGC process description.

9.2.  OGC process description

Requirement 66

Identifier/req/ogc-process-description/json-encoding
Label/req/ogc-process-description/json-encoding
A

A JSON-encoded OGC process description SHALL validate against the JSON Schema: process.yaml.

B

The JSON-encoded OGC process description SHALL include, in the links section, a profile link (href: https://www.opengis.net/dev/profile/OGC/0/ogc-process-description, relation: profile);

 

allOf:
  - $ref: "processSummary.yaml"
  - type: object
    properties:
      inputs:
        additionalProperties:
          $ref: "inputDescription.yaml"
      outputs:
        additionalProperties:
          $ref: "outputDescription.yaml"

Listing 22 — Schema for a process

NOTE:  This schema can also be obtained from process.yaml

(see also processSummary.yaml)

The schema imports the elements from the process summary and specifies an object for the definition of process inputs and another object for the definition of process outputs.

9.3.  Describing a process input

9.3.1.  Overview

Requirement 68

Identifier/req/ogc-process-description/inputs-def
Label/req/ogc-process-description/inputs-def
A

Each process input definition SHALL be listed in the inputs section according to the JSON Schema: inputDescription.yaml.

B

The key for each process input in the inputs section of the process definition SHALL be the identifier for that input.

Each process input is characterized by its schema, its cardinality and whether the input value can be passed by-value, by-reference or both.

 

allOf:
  - $ref: "descriptionType.yaml"
  - type: object
    required:
      - schema
    properties:
      schema:
        $ref: "https://json-schema.org/draft/2020-12/schema"
      dataClasses:
        type: array
        items:
          type: string
          format: uri
      minOccurs:
        type: integer
        default: 1
      maxOccurs:
        oneOf:
          - type: integer
            default: 1
          - type: string
            enum:
              - "unbounded"
      valuePassing:
        type: array
        items:
           type: string
           enum:
             - "byValue"
             - "byReference"
        default: ["byValue","byReference"]

Listing 23 — Schema for a process input

NOTE:  This schema can also be obtained from inputDescription.yaml

(see also: descriptionType.yaml).

9.3.2.  Schema

Requirement 69

Identifier/req/ogc-process-description/input-def
Label/req/ogc-process-description/input-def
A

The schema of each process input value SHALL be specified using the schema parameter.

B

The schema parameter SHALL define the schema of a single instance of an inpuit value.

C

The value of the schema parameter SHALL be a JSON fragment that validates according to the JSON Schema: schema.yaml.

D

Servers SHALL use this schema fragment to validate the components of a process input in an execute request that is an instance of inputValue.yaml.

NOTE:  The schema fragment specified as the value of the schema parameter can be used to validate the corresponding process input value in an execute request.

Requirement 70

Statement

A server SHALL support the following schema for binary include values:

 

type: string
format: byte

Requirement 71

Identifier/req/ogc-process-description/input-multiple-types
Label/req/ogc-process-description/input-multiple-types
A

An input that can be of multiple types SHALL be defined using the oneOf JSON Schema keyword.

B

Each sub-schema SHALL be a JSON fragment that validates according to the JSON Schema: schema.yaml.

C

The first sub-schema in the oneOf array SHALL be considered the default format.

The following JSON Schema fragment illustrates how to define an input that allows multiple types. In this case, the imageInput input can be one of a couple of image media types.

 

"imageInput": {
 
"schema": {
   
"oneOf": [
     
{
       
"type": "string",
       
"contentEncoding": "binary",
       
"contentMediaType": "image/tiff; application=geotiff"
     
},
     
{
       
"type": "string",
       
"contentEncoding": "binary",
       
"contentMediaType": "image/jp2"
     
}
   
]
 
}
}

Listing 25 — Input of multiple types example

Recommendation 29

Identifier/rec/ogc-process-description/format-key
Label/rec/ogc-process-description/format-key
Statement

Servers SHOULD use the format key in the schema description of a process input or output (key: schema) to provide additional semantic context that can aid in the interpretation and validation of process input or output values in an execute request.

Processes that perform geo-spatial processing can be expected to have geometric and feature input types. In JSON, geometries, features and collections of feature are commonly encoded using GeoJSON. Rather the requiring processes descriptions to embed or reference the full schemas for GeoJSON geometries, features or feature collections, this Standard defines a common set of convenience tokens that can be used instead.

The JSON Schema specification defines a set of values for the format key. This Standard extends this list by defining the following additional key values for use specifically in OGC process descriptions.

Table 13 — Additional values for the JSON schema format key for OGC Process Description

Key valueShort codeDescription
http://www.opengis.net/def/format/ogcapi-processes/0/geojson-feature-collectiongeojson-feature-collectionIndicates that the value is an instance of a GeoJSON feature collection (featureCollectionGeoJSON.yaml).
http://www.opengis.net/def/format/ogcapi-processes/0/geojson-featuregeojson-featureIndicates that the value is an instance of a GeoJSON feature (featureGeoJSON.yaml).
http://www.opengis.net/def/format/ogcapi-processes/0/geojson-geometrygeojson-geometryIndicates that the value is an instance of a GeoJSON geometry (geometryGeoJSON.yaml).
http://www.opengis.net/def/format/ogcapi-processes/0/ogc-bboxogc-bboxIndicates that the value is an instance of an OGC bounding box (bbox.yaml).
http://www.opengis.net/def/format/ogcapi-processes/0/epsg-codeepsg-codeIndicates that the string value is a code from the EPSG registry.
http://www.opengis.net/def/format/ogcapi-processes/0/wkt2-definitionwkt2-definitionIndicates that the string value is a well-known text representation of a coordinate reference system.
http://www.opengis.net/def/format/ogcapi-processes/0/cql2-text-filtercql2-textIndicates that the string value is a filter expression encoded using the text representation of the Common Query Language (CQL2).
http://www.opengis.net/def/format/ogcapi-processes/0/cql2-json-filtercql2-jsonIndicates that the string value is a filter expression encoded using the JSON representation of the Common Query Language (CQL2).
http://www.opengis.net/def/format/ogcapi-processes/0/collection-idcollection-idIndicates that the string value is a collection identifier (e.g. a feature collection identifier).
http://www.opengis.net/def/format/ogcapi-processes/0/stac-collectionstac-collectionIndicates that the value is an instance of a STAC collection.
http://www.opengis.net/def/format/ogcapi-processes/0/stac-catalogstac-catalogIndicates that the value is an instance of a STAC catalog.
http://www.opengis.net/def/format/ogcapi-processes/0/stac-item-collectionstac-item-collectionIndicates that the value is a STAC ItemCollection.
http://www.opengis.net/def/format/ogcapi-processes/0/stac-itemstac-itemIndicates that the value is an instance of a STAC item.
http://www.opengis.net/def/format/ogcapi-processes/0/stacstacIndicates that the value is an instance of any of the STAC types listed above (i.e. one of stac-collection, stac-catalog, stac-item-collection, or stac-item).
http://www.opengis.net/def/format/ogcapi-processes/0/ogc-feature-collectionogc-feature-collectionIndicates that the value is an instance of an OGC feature collection.
http://www.opengis.net/def/format/ogcapi-processes/0/ogc-coverage-collectionogc-coverage-collectionIndicates that the value is an instance of an OGC coverage collection.

NOTE 1:  This list of values has been submitted to the OGC Naming Authority for registration in their definition server.

NOTE 2:  Other encodings for geometric, feature and feature collection typed inputs/outpus are allowed but are not described in this Standard.

Recommendation 30

Identifier/rec/ogc-process-description/format-short-code
Label/rec/ogc-process-description/format-short-code
Statement

In addition to the key values listed in Table 13, servers SHOULD also accept the short codes.

Situations might arise where communities of interest wish to extend this list of values for their own purposes.

Recommendation 31

Identifier/rec/ogc-process-description/format-value-registration
Label/rec/ogc-process-description/format-value-registration
Statement

Servers wishing to extend this list of format key values, SHOULD officially register such values with the OGC Naming Authority.

The following JSON Schema fragment illustrates the use of the format key to include a semantic hint to a process input that is of a geometric type.

 

"geometryInput": {
 
"title": "Geometry input",
 
"description": "This is an example of a geometry input.  In this case the geometry can be expressed as a GML of GeoJSON geometry.",
 
"minOccurs": 2,
 
"maxOccurs": 5,
 
"schema": {
   
"oneOf": [
     
{
       
"type": "string",
       
"contentMediaType": "application/gml+xml; version=3.2",
       
"contentSchema": "http://schemas.opengis.net/gml/3.2.1/geometryBasic2d.xsd"
     
},
     
{
       
"format": "geojson-geometry"
     
}
   
]
 
}
}

Listing 26 — Example of semantic hints using the format key

9.3.3.  Data classes

One common input type that a process might accept is a feature collection indicating that the process will operate over the items of the collection. This implies that the process will have certain expections about the structure of the collection with regard to which properties the collection contains, their types, etc. In order to properly handle any arbitrary input collection a process would need to inspect the structure of the collection to ensure that all the expected properties with the expected schemas and semantics are present. To alleviate the server from having to perform such a tedious, and perhaps computationally expensive, validation step this Standard introduces the concept of the Data Class via the dataClasses parameter. The value of the dataClasses parameter is an array of URIs. Each URI identifies the schema, and optionally semantics, of a predefined set of properties. Two data resources tagged with the same data class URI value can be assumed to each contain all the properties defined by the data class. This equivalence allows a server to quickly validate that an input data resource meets the server’s expections in terms of the properties available for processing simply by comparing data class URI values. If the data class URI of the input data resource matches at least one of the data class URIs specified in the description of the process input (via the dataClasses parameter) then the server can assume that the process can operate on that data resource.

NOTE 1:  Care should be taken when tagging data resources with a data class URI. Both the schema and the semantics of each property in the data class must match the correspoding properties of the data resource. Consider two data resources that both contain fields a and b with the same data types but differ in, for example, units of measure. In this case, these two data resources should not be tagged with the same data class URI. While the schemas of a and b in the two data resources are the same, the semantics are clearly different.

The dataClasses parameter is an array allowing process inputs to be described that can handle a variety of data classes. As long as the data class URI associated with an input data resource matches at least one of the data class URIs listed in the dataClasses array the server can assume that the process can operate on that input data process.

The dataClasses parameter can also be used when describing process outputs and indicates that the generated output conforms to the schema requirements of the data class. This allows, for example, for a simple determination of whether the output of one process is suitable as an input to another process.

This clause started by introducing the concept of the Data Class in relation to a feature collection but the concept is a general one applying to any number of data resources such as feature collections, coverages, styles, etc. For example, a specific data class might be defined to include a geometry property fenceLine of type polygon. Thus, any input feature collection tagged with this data class’s URI can be expected to include a fenceLine property and its type can be assumed to be polygon. Similarly, a data class could be defined that identifies a set of bands in a coverage, say R, G, B and NIR. Any coverages tagged with this data class’s URI can thus be assumed to contain these bands. The Data Class concept is also independent of the particular encoding used for the data resource. So, applying data class validation applies equally to feature collections encoded as GeoJSON documents as it does to feature collections encodes as SHAPE files. Finally, the Data Class concept is independent of whether data resource values are passed to a process by-value or by-reference. In either case the server goes through the same procedure (i.e. comparing data class URIs) to determine whether a specific input value is suitable for processing as per the process description.

NOTE 2: 

  1. A data resource tagged with a specific data class will contain all the properties defined for that class but may also contain additional properties that are not members of the class. A process expecting an input value of a particular data class value would simply ignore these extraneous properties.

  2. A data resource can be tagged with more than one data class URI indicating that it satisfies all the requirements of all the data classes associated with the resource.

  3. In order for the Data Class concept to be most effective a registry akin to that found at Schema.org would need to be created and maintained. The OGC definition server is likely the best place to define and manage Data Class URIs.

9.3.4.  Cardinality

9.3.4.1.  Overview

The cardinality on an input is specified using the minOccurs and maxOccurs parameters from the input’s definition in the process description. The default values of minOccurs and maxOccurs are 1 indicating that a single input of the corresponding name must be specified in an execute request. The following table covers the various combinations of minOccurs and maxOccurs values.

Table 14 — Cardinality rules for process inputs.

minOccursmaxOccursInterpretationExample
00Not Allowed
01A single input value may be optionally specified.“input”: {value}
11A single input value must be specified.“input”: {value}
1NAt least 1 input value must be specified.
Regardless of the number of input values provided, those values must be encoded using an array.
“input”: [{value}] OR
“input”: [{value1},…​,{valueN}]
MNAll values provided must be encoded using an array.“input”: [{value1},…​,{valueM}] OR
“input”: [{value1},…​,{valueM},…​,{valueN}]

NOTE:  The tokens {value}, {value1}, {valueN} or {valueM} represent values of the type expected for the input according to its definition. This can include array values.

9.3.4.2.  Interaction of minOccurs/maxOccurs and minItems/maxItems

The schema member of the input definition in the process description defines the schema of a single instance of an input. If the input happens to be an array then the minItems and maxItems properties may be used to define the limits of the array. The use of minItems and maxItems in the definition of the input does not affect how minOccurs and maxOccurs are interpreted and the same cardinality rules apply.

Consider the following definitions of an input named “input”.

Table 15 — Schema examples for cardinality

Example SchemaExamples instances

 

inputs:
  input:
    schema:
      type: array
      maxItems: 2
      items:
        type: string

In this case the schema of an input value is defined as an array and so will always be encoded as an array in an execute request.

 

"input": ["value1"]

or

 

"input": ["value1","value2"]

 

inputs:
  input:
    maxOccurs: 2
    schema:
      type: string

In this case, the schema of the input is defined as a plain string with a cardinality of 2. Inputs with cardinalities of greater than 1 are encoded as arrays in an execute request. This situation is equivalently encoded to the previous row.
Servers, however, being internally aware of the definition of each input, can disambiguate the input values accordingly (treating the values in this example as string values and the values in the above example as arrays of values).

 

"input": ["value1"]

or

 

"input": ["value1","value2"]

 

inputs:
  input:
    maxOccurs: 2
    schema:
      type: array
      maxItems: 2
      items:
        type: string

In this case we have an input with cardinality greater than 1 but that has values that themselves are defined as arrays. Since inputs with cardinality greater than 1 are encoded as arrays in an execute request, the result is that the inputs are encoded as arrays of arrays.

 

"input": [["value1"]]

or

 

"input": [["value1","value2"]]

or

 

"input": [["value1"],["value2"]]

or

 

"input": [["value1","value3"],["value2"]]

or

 

"input": [["value1"],["value2","value3"]]

or

 

"input": [["value1","value4"],["value2","value3"]]

9.3.5.  Value passing

Requirement 72

Identifier/req/ogc-process-description/value-passing
Label/req/ogc-process-description/value-passing
A

How process input values can be specified in an execute request (by-value, by-reference or both) SHALL be controlled by the valuePassing parameter that may be specified per input in the process description.

B

The default value of the valuePassing parameter shall be ["byValue","byReference"].

C

If an input value can be passed by value ("byValue"), process input values SHALL be specified in-line in an execute request.

D

If an input value can be passed by reference ("byReference"), then input values shall be referenced in an execute request using a link.

9.4.  Describing a process output

Requirement 73

Identifier/req/ogc-process-description/outputs-def
Label/req/ogc-process-description/outputs-def
A

Each process output definition SHALL be listed in the outputs section according to the JSON Schema: outputDescription.yaml.

B

The key for each process output in the output section of the process definition SHALL be the identifier for that output.

Requirement 74

Identifier/req/ogc-process-description/output-def
Label/req/ogc-process-description/output-def
A

The schema of each process output SHALL be specified using the schema parameter.

B

The value of the schema parameter SHALL be a JSON fragment that validates according to the JSON Schema: schema.yaml.

Requirement 75

Identifier/req/ogc-process-description/output-multiple-types
Label/req/ogc-process-description/output-multiple-types
A

An output that can be of multiple types SHALL be defined using the oneOf JSON Schema keyword.

B

Each sub-schema SHALL be a JSON fragment that validates according to the JSON Schema: schema.yaml.

C

The first sub-schema in the oneOf array SHALL be considered the default format.

 

allOf:
  - $ref: "descriptionType.yaml"
  - type: object
    required:
      - schema
    properties:
      schema:
        $ref: "https://json-schema.org/draft/2020-12/schema"
      dataClasses:
        type: array
        items:
          type: string
          format: uri

Listing 40 — Schema for a process output

NOTE:  This schema can also be obtained from outputDescription.yaml

(see also: descriptionType.yaml).

9.5.  Example

The following URL is an example of retrieving a process description from the /processes/{processID} endpoint.

 

https://processing.example.org/processes/EchoProcess

Listing 41

The description of the example EchoProcess process might be:

 

{
 
"id": "EchoProcess",
 
"title": "Echo Process",
 
"description": "This process accepts and number of input and simple echoes each input as an output.",
 
"version": "1.0.0",
 
"jobControlOptions": [
   
"async-execute",
   
"sync-execute"
 
],
 
"inputs": {
   
"stringInput": {
     
"title": "String Literal Input Example",
     
"description": "This is an example of a STRING literal input.",
     
"schema": {
       
"type": "string",
       
"enum": [
         
"Value1",
         
"Value2",
         
"Value3"
       
]
     
}
   
},
   
"measureInput": {
     
"title": "Numerical Value with UOM Example",
     
"description": "This is an example of a NUMERIC literal with an associated unit of measure.",
     
"schema": {
       
"type": "object",
       
"required": [
         
"measurement",
         
"uom"
       
],
       
"properties": {
         
"measurement": {
           
"type": "number"
         
},
         
"uom": {
           
"type": "string"
         
},
         
"reference": {
           
"type": "string",
           
"format": "uri"
         
}
       
}
     
}
   
},
   
"dateInput": {
     
"title": "Date Literal Input Example",
     
"description": "This is an example of a DATE literal input.",
     
"schema": {
       
"type": "string",
       
"format": "date-time"
     
}
   
},
   
"doubleInput": {
     
"title": "Bounded Double Literal Input Example",
     
"description": "This is an example of a DOUBLE literal input that is bounded between a value greater than 0 and 10.  The default value is 5.",
     
"schema": {
       
"type": "number",
       
"format": "double",
       
"minimum": 0,
       
"maximum": 10,
       
"default": 5,
       
"exclusiveMinimum": true
     
}
   
},
   
"arrayInput": {
     
"title": "Array Input Example",
     
"description": "This is an example of a single process input that is an array of values.  In this case, the input array would be interpreted as a single value and not as individual inputs.",
     
"schema": {
       
"type": "array",
       
"minItems": 2,
       
"maxItems": 10,
       
"items": {
         
"type": "integer"
       
}
     
}
   
},
   
"complexObjectInput": {
     
"title": "Complex Object Input Example",
     
"description": "This is an example of a complex object input.",
     
"schema": {
       
"type": "object",
       
"required": [
         
"property1",
         
"property5"
       
],
       
"properties": {
         
"property1": {
           
"type": "string"
         
},
         
"property2": {
           
"type": "string",
           
"format": "uri"
         
},
         
"property3": {
           
"type": "number"
         
},
         
"property4": {
           
"type": "string",
           
"format": "date-time"
         
},
         
"property5": {
           
"type": "boolean"
         
}
       
}
     
}
   
},
   
"geometryInput": {
     
"title": "Geometry input",
     
"description": "This is an example of a geometry input.  In this case the geometry can be expressed as a GML of GeoJSON geometry.",
     
"minOccurs": 2,
     
"maxOccurs": 5,
     
"schema": {
       
"oneOf": [
         
{
           
"type": "string",
           
"contentMediaType": "application/gml+xml; version=3.2",
           
"contentSchema": "http://schemas.opengis.net/gml/3.2.1/geometryBasic2d.xsd"
         
},
         
{
           
"format": "geojson-geometry"
         
}
       
]
     
}
   
},
   
"boundingBoxInput": {
     
"title": "Bounding Box Input Example",
     
"description": "This is an example of a BBOX literal input.",
     
"schema": {
       
"allOf": [
         
{
           
"format": "ogc-bbox"
         
},
         
{
           
"$ref": "bbox.json"
         
}
       
]
     
}
   
},
   
"imagesInput": {
     
"title": "Inline Images Value Input",
     
"description": "This is an example of an image input.  In this case, the input is an array of up to 150 images that might, for example, be a set of tiles.  The oneOf[] conditional is used to indicate the acceptable image content types; GeoTIFF and JPEG 2000 in this case.  Each input image in the input array can be included inline in the execute request as a base64-encoded string or referenced using the link.yaml schema.  The use of a base64-encoded string is implied by the specification and does not need to be specified in the definition of the input.",
  
"minOccurs": 1,
  
"maxOccurs": 150,
     
"schema": {
       
"oneOf": [
         
{
           
"type": "string",
           
"contentEncoding": "binary",
           
"contentMediaType": "image/tiff; application=geotiff"
         
},
         
{
           
"type": "string",
           
"contentEncoding": "binary",
           
"contentMediaType": "image/jp2"
         
}
       
]
     
}
   
},
   
"featureCollectionInput": {
     
"title": "Feature Collection Input Example.",
     
"description": "This is an example of an input that is a feature collection that can be encoded in one of three ways: as a GeoJSON feature collection, as a GML feature collection retrieved from a WFS or as a KML document.",
     
"schema": {
       
"oneOf": [
         
{
           
"type": "string",
           
"contentMediaType": "application/gml+xml; version=3.2"
         
},
         
{
           
"type": "string",
           
"contentSchema": "https://schemas.opengis.net/kml/2.3/ogckml23.xsd",
           
"contentMediaType": "application/vnd.google-earth.kml+xml"
         
},
         
{
           
"allOf": [
             
{
               
"format": "geojson-feature-collection"
             
},
             
{
               
"$ref": "https://geojson.org/schema/FeatureCollection.json"
             
}
           
]
         
}
       
]
     
}
   
}
 
},
 
"outputs": {
   
"stringOutput": {
     
"schema": {
       
"type": "string",
       
"enum": [
         
"Value1",
         
"Value2",
         
"Value3"
       
]
     
}
   
},
   
"measureOutput": {
     
"schema": {
       
"type": "object",
       
"required": [
         
"measurement",
         
"uom"
       
],
       
"properties": {
         
"measurement": {
           
"type": "number"
         
},
         
"uom": {
           
"type": "string"
         
},
         
"reference": {
           
"type": "string",
           
"format": "uri"
         
}
       
}
     
}
   
},
   
"dateOutput": {
     
"schema": {
       
"type": "string",
       
"format": "date-time"
     
}
   
},
   
"doubleOutput": {
     
"schema": {
       
"type": "number",
       
"format": "double",
       
"minimum": 0,
       
"maximum": 10,
       
"default": 5,
       
"exclusiveMinimum": true
     
}
   
},
   
"arrayOutput": {
     
"schema": {
       
"type": "array",
       
"minItems": 2,
       
"maxItems": 10,
       
"items": {
         
"type": "integer"
       
}
     
}
   
},
   
"complexObjectOutput": {
     
"schema": {
       
"type": "object",
       
"required": [
         
"property1",
         
"property5"
       
],
       
"properties": {
         
"property1": {
           
"type": "string"
         
},
         
"property2": {
           
"type": "string",
           
"format": "uri"
         
},
         
"property3": {
           
"type": "number"
         
},
         
"property4": {
           
"type": "string",
           
"format": "date-time"
         
},
         
"property5": {
           
"type": "boolean"
         
}
       
}
     
}
   
},
   
"geometryOutput": {
     
"schema": {
       
"oneOf": [
         
{
           
"type": "string",
           
"contentMediaType": "application/gml+xml",
           
"contentSchema": "http://schemas.opengis.net/gml/3.2.1/geometryBasic2d.xsd"
         
},
         
{
           
"allOf": [
             
{
               
"format": "geojson-geometry"
             
},
             
{
               
"$ref": "https://geojson.org/schema/Geometry.json"
             
}
           
]
         
}
       
]
     
}
   
},
   
"boundingBoxOutput": {
     
"schema": {
       
"allOf": [
          
{
            
"format": "ogc-bbox"
          
},
          
{
            
"$ref": "bbox.json"
          
}
       
]
     
}
   
},
   
"imagesOutput": {
     
"schema": {
       
"oneOf": [
         
{
           
"type": "string",
           
"contentEncoding": "binary",
           
"contentMediaType": "image/tiff; application=geotiff"
         
},
         
{
           
"type": "string",
           
"contentEncoding": "binary",
           
"contentMediaType": "image/jp2"
         
}
       
]
     
}
   
},
   
"featureCollectionOutput": {
     
"schema": {
       
"oneOf": [
         
{
           
"type": "string",
           
"contentMediaType": "application/gml+xml; version=3.2"
         
},
         
{
           
"type": "string",
           
"contentMediaType": "application/vnd.google-earth.kml+xml",
           
"contentSchema": "https://schemas.opengis.net/kml/2.3/ogckml23.xsd"
         
},
         
{
           
"allOf": [
             
{
               
"format": "geojson-feature-collection"
             
},
             
{
               
"$ref": "https://geojson.org/schema/FeatureCollection.json"
             
}
           
]
         
}
       
]
     
}
   
}
 
},
 
"links": [
   
{
     
"href": "https://processing.example.org/oapi-p/processes/EchoProcess/execution",
     
"rel": "http://www.opengis.net/def/rel/ogc/1.0/execute",
     
"title": "Execute endpoint"
   
},
   
{
     
"href": "https://www.opengis.net/dev/profile/OGC/0/ogc-process-description",
     
"rel": "profile"
   
}
 
]
}

Listing 42

The EchoProcess process simply echoes each process input value it is given.

10.  Requirements classes for encodings

10.1.  Overview

This clause specifies two pre-defined requirements classes for request and response message encodings to be used by implementations the Processes API. The two classes are:

The JSON requirements class defines the requirements for encoding Processes API request and response messages using JSON.

The HTML requirements class defines the requirements for encoding Processes API request and response messages using HTML.

NOTE 1:  The encoding of Processes API request and response messages is distinct from the values that are generated when executing a process. Process output values can be of any type and are not bound by the requirements of the classes defined in this clause.

NOTE 2:  Any server that supports multiple response encodings (JSON or HTML defined in this Standard or other encodings not specified in this Standard) will have to support a mechanism to mint encoding-specific URIs for resources in order to express links, for example, to alternate representations of the same resource. This document does not mandate any approach as to how this is supported by the server.

As clients simply need to dereference the URI of the link, the implementation detail and the mechanism as to how the encoding is included in the URI of the link are not important. Developers interested in the approach of a particular implementation, for example, to manipulate (“hack”) URIs in the browser address bar, can study the API definition.

Two common approaches are:

  • An additional path for each encoding of each resource (this can be expressed, for example, using format specific suffixes like .html);

  • An additional query parameter (for example, “accept” or “f”) that overrides the Accept header of the HTTP request.

The Core requirements class includes recommendations to support HTML and JSON as encodings, where practical.

10.2.  Requirement Class “JSON”

This section defines the requirements class JSON.

Requirements class 8

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/req/json
Obligationrequirement
Target typeWeb API
PrerequisitesOGC API — Processes Core
JSON
Label http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/json

Requirement 76

Identifier/req/json/definition
Label/req/json/definition
Statement

200-responses of the server SHALL support the following media type:

  • application/json

for the following API endpoints:

NOTE:  Responses from the execution endpoint /processes/{processID}/execution may or may not generate JSON depending on the process being executed, the negotiated execution mode, the negotiated response format (specified using the HTTP Accept header or the f query parameter) and the number of requested outputs.

Permission 14

Identifier/per/json/media-types
Label/per/json/media-types
Statement

A JSON media type may be further qualified with additional subtype, suffix and parameter components. For example, application/ld+json; charset=UTF-8.

10.3.  Requirement Class “HTML”

This section defines the requirements class HTML.

Requirements class 9

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/req/html
Obligationrequirement
Target typeWeb API
PrerequisitesOGC API — Processes Core
http://www.opengis.net/spec/ogcapi_common/1.0/req/html
W3C HTML 5
Label http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/html

Requirement 77

Identifier/req/html/definition
Label/req/html/definition
Statement

200-responses of the server SHALL support the following media type:

  • text/html

for the following API endpoints:

NOTE:  Responses from the execution endpoint /processes/{processID}/execution may or may not generate HTML depending on the process being executed, the negotiated execution mode, the negotiated response format (specified using the HTTP Accept header or the f query parameter) and the number of requested outputs.

Permission 15

Identifier/per/html/media-types
Label/per/html/media-types
Statement

A HTML media type may be further qualified with additional subtype, suffix and parameter components. For example, test/html; charset=UTF-8.

Requirement 78

Identifier/req/html/content
Label/req/html/content
Statement

Every 200-response of the server with the media type “text/html” SHALL be a W3C HTML 5 document that includes the following information in the HTML body:

  • all information identified in the schemas of the Response Object in the HTML <body/>, and

  • all links in HTML <a/> elements in the HTML <body/>.

11.  Requirements Class “OpenAPI 3.0”

11.1.  Basic requirements

APIs conforming to this requirements class are documented as an OpenAPI Document.

Requirements class 10

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/req/oas30
Obligationrequirement
Target typeWeb API
PrerequisitesOGC API — Processes 1.0 Core
http://www.opengis.net/spec/ogcapi_common-1/1.0/req/oas30
OpenAPI Specification 3.0.1
Label http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/oas30

Requirement 79

Identifier/req/oas30/oas-definition-1
Label/req/oas30/oas-definition-1
A

The content of the response of the HTTP GET operation at the landing page SHALL include the following links to the API definition:

  • relation type service-desc and content type `application/vnd.oai.openapi+json;version=3.0

  • relation type service-doc and content type text/html

Requirement 80

Identifier/req/oas30/oas-definition-2
Label/req/oas30/oas-definition-2
Statement

The JSON representation SHALL conform to the OpenAPI Specification, version 3.0.

Requirement 81

Identifier/req/oas30/oas-impl
Label/req/oas30/oas-impl
Statement

The server SHALL implement all capabilities specified in the OpenAPI definition.

11.2.  Complete definition

Requirement 82

Identifier/req/oas30/completeness
Label/req/oas30/completeness
Statement

The OpenAPI definition SHALL specify for each operation all HTTP Status Codes and Response Objects that the server uses in responses.

This includes the successful execution of an operation as well as all error situations that originate from the server.

NOTE:  Implementations of the Processes API may also include capabilities that are not specified in this Standard such as access-control (see Security), support for web cache validation, handling of CORS or the use of HTTP redirection. These additional capabilities make use of HTTP status codes that are beyond the regular set of code such as 200 for successful GET requests and 400, 404 or 500 for error situations (see Clause 7.5.1). These additional codes would not necessarily be specified in a OpenAPI document and so clients must be prepared to receive responses not documented in the OpenAPI definition. For example, additional error codes may be generated in the transport layer which is outside the server.

11.3.  Exceptions

Requirement 83

Identifier/req/oas30/exceptions-codes
Label/req/oas30/exceptions-codes
Statement

For error situations that originate from the server, the API definition SHALL cover all applicable HTTP Status Codes.

Example — An exception response object definition

 

description: An error occurred.
content:
  application/json:
    schema:
      $ref: https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/openapi/schemas/common-core/exception.yaml
  text/html:
    schema:
      type: string

11.4.  Security

Requirement 84

Identifier/req/oas30/security
Label/req/oas30/security
Statement

For cases, where the operations of the server are access-controlled, the security scheme(s) SHALL be documented in the OpenAPI definition.

The OpenAPI specification currently supports the following security schemes:

  • HTTP authentication,

  • an API key (either as a header or as a query parameter),

  • OAuth2’s common flows (implicit, password, application and access code) as defined in RFC6749, and

  • OpenID Connect Discovery.

12.  Requirements Class “Job list”

12.1.  Overview

This class specifies the requirements of a request that retrieves a list of jobs from the Processes API.

Requirements class 11

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/req/job-list
Obligationrequirement
Target typeWeb API
PrerequisiteOGC API — Processes Core
Label http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/job-list

12.2.  Operation

12.2.1.  Job list

Requirement 85

Identifier/req/job-list/job-list-op
Label/req/job-list/job-list-op
Statement

The server SHALL support the HTTP GET operation at the path /jobs.

Recommendation 32

Identifier/rec/job-list/job-list-landing-page
Label/rec/job-list/job-list-landing-page
Statement

A link to the following resource SHOULD be added to the API landing page:

/jobs (relation type ‘http://www.opengis.net/def/rel/ogc/1.0/job-list‘)

12.2.2.  Parameter type

Requirement 86

Identifier/req/job-list/type-definition
Label/req/job-list/type-definition
A

The operation SHALL support a parameter type with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: type
in: query
required: false
schema:
  type: array
  items:
    type: string

Requirement 87

Identifier/req/job-list/type-response
Label/req/job-list/type-response
A

If the parameter is provided and its value is process then only jobs created by an OGC processes API SHALL be included in the response.

B

If the parameter is omitted, then all jobs SHALL be included in the response.

12.2.3.  Parameter processID

Requirement 88

Identifier/req/job-list/processID-mandatory
Label/req/job-list/processID-mandatory
A

If the server supports this conformance class, the optional processID property in the statusInfo.yaml schema SHALL be mandatory.

Requirement 89

Identifier/req/job-list/processID-definition
Label/req/job-list/processID-definition
A

The operation SHALL support a parameter processID with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: processID
in: query
required: false
schema:
  type: array
  items:
    type: string

Requirement 90

Identifier/req/job-list/processid-response
Label/req/job-list/processid-response
Statement

If the processID parameter is specified with the operation, only jobs that have a value for the processID property (see: statusInfo.yaml) that matches one of the values specified for the processID parameter SHALL be included in the response.

12.2.4.  Parameter status

Requirement 91

Identifier/req/job-list/status-definition
Label/req/job-list/status-definition
A

The operation SHALL support a parameter status with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: status
in: query
required: false
schema:
  type: array
  items:
    type: string

Requirement 92

Identifier/req/job-list/status-response
Label/req/job-list/status-response
Statement

If the status parameter is specified with the operation, only jobs that have a value for the status property (see: statusInfo.yaml) that matches one of the specified values of the status parameter SHALL be included in the response.

12.2.5.  Parameter datetime

Requirement 93

Identifier/req/job-list/datetime-definition
Label/req/job-list/datetime-definition
A

The operation SHALL support a parameter datetime with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: datetime
in: query
required: false
schema:
  type: string
B

The value of the datetime parameter is either a date-time value or a time interval. The datetime parameter value SHALL conform to the following syntax (using ABNF):

 

interval-closed     = date-time "/" date-time
interval-open-start = [".."] "/" date-time
interval-open-end   = date-time "/" [".."]
interval            = interval-closed / interval-open-start / interval-open-end
datetime            = date-time / interval
C

The syntax of date-time is specified by RFC 3339, 5.6.

D

Open ranges in time intervals at the start or end are supported using a double-dot (..) or an empty string for the start/end.

Requirement 94

Identifier/req/job-list/datetime-response
Label/req/job-list/datetime-response
Statement

If the datetime parameter is specified with the operation, only jobs that have a value for the created property (see: statusInfo.yaml that intersects the temporal information in the datetime parameter SHALL be included in the response.

12.2.6.  Parameter minDuration, maxDuration

Requirement 95

Identifier/req/job-list/duration-definition
Label/req/job-list/duration-definition
A

The operation SHALL support a parameter minDuration with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: minDuration
in: query
required: false
schema:
  type: integer
B

The operation SHALL support a parameter maxDuration with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: maxDuration
in: query
required: false
schema:
  type: integer

Requirement 96

Identifier/req/job-list/duration-response
Label/req/job-list/duration-response
Conditions
  1. If the status parameter is not specified then only jobs that are running (status: running) or have completed execution (successful, failed or dismissed) SHALL be considered for inclusion in the response.

  2. If the status parameter is specified, then only jobs with the specified status SHALL be considered for inclusion in the response.

A

If only the minDuration parameter is specified with the operation, only jobs with the appropriate status and a duration of at least the specified minDuration value SHALL be included in the response.

B

If only the maxDuration parameter is specified with the operation, only jobs with the appropriate status and a duration of no longer than the specified maxDuration value SHALL be included in the response.

C

If both the minDuration and maxDuration parameters are specified with the operation, only jobs with the appropriate status and a duration of at least the specified minDuration value and no longer than the specified maxDuration value SHALL be included in the response.

D

The value of the minDuration and maxDuration parameters SHALL be number of seconds.

E

For running jobs, the duration SHALL be computed at runtime as the time the operation was invoked minus the value of the started parameter (see: statusInfo.yaml).

F

For completed jobs, the duration SHALL be computed as the value of the finished parameter minus the value of the started parameter (see: statusInfo.yaml).

G

Jobs for which runtime statistics are not included in the status information or are incomplete for computing the duration of the job SHALL be omitted from the response.

12.2.7.  Parameter limit

Requirement 97

Identifier/req/job-list/limit-definition
Label/req/job-list/limit-definition
A

The operation SHALL support a parameter limit with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: limit
in: query
required: false
schema:
  type: integer
  minimum: 1
  maximum: 10000
  default: 10

Permission 16

Identifier/per/job-list/limit-default-minimum-maximum
Label/per/job-list/limit-default-minimum-maximum
A

The values for minimum, maximum and default in requirement /req/job-list/limit-definition are only examples and MAY be changed.

Requirement 98

Identifier/req/job-list/limit-response
Label/req/job-list/limit-response
A

The response SHALL not contain more jobs than specified by the optional limit parameter.

B

If the API definition specifies a maximum value for limit parameter, the response SHALL not contain more jobs than this maximum value.

Permission 17

Identifier/per/job-list/limit-response
Label/per/job-list/limit-response
A

The server MAY return fewer jobs than requested (but not more).

12.3.  Response

Requirement 99

Identifier/req/job-list/job-list-success
Label/req/job-list/job-list-success
Statement

A successful execution of the operation SHALL be reported as a response with a HTTP status code 200. The content of that response SHALL be based upon the OpenAPI 3.0 schema jobList.yaml.

 

type: object
required:
  - jobs
  - links
properties:
  jobs:
    type: array
    items:
      $ref: "statusInfo.yaml"
  links:
    type: array
    items:
      $ref: "../common-core/link.yaml"

Listing 51 — Schema for the job list

NOTE:  This schema can also be obtained from jobList.yaml.

(see also: statusInfo.yaml, link.yaml)

The schema defines an array of status info elements and includes a links section for navigation links within the API.

The number of jobs returned depends on the server and the parameter limit.

See the discussion about the limit parameter in the Limit parameter section.

See the discussion about the next links in the Limit parameter section.

Recommendation 33

Identifier/rec/job-list/next-1
Label/rec/job-list/next-1
Statement

If more jobs have been selected than returned in the respose, a 200-response SHOULD include a link to the next page (relation: next) of jobs.

Recommendation 34

Identifier/rec/job-list/next-2
Label/rec/job-list/next-2
Statement

Dereferencing a next page link (relation: next) SHOULD return additional jobs from the set of selected jobs that have not yet been returned.

Recommendation 35

Identifier/rec/job-list/next-3
Label/rec/job-list/next-3
Statement

If there are more jobs in the selection that have not yet been returned, the number of jobs in a response to dereferencing a next page link (relation: next) SHOULD follow the same rules as for the response to the original query and again include a next page link (relation: next).

See the discussion about the prev link in the Limit parameter section.

Permission 18

Identifier/per/job-list/prev
Label/per/job-list/prev
A

A response to dereferencing a next page link (relation: next) MAY include a previous page link (relation: prev) to the resource that included the next page link (relation: next).

Example 1 — A HTTP GET request for retrieving a list of jobs encoded as JSON.

 

http://processing.example.org/jobs

Example 2 — A job list encoded as JSON.

 

{
 
"jobs": [
   
{
     
"processID": "Voronoi",
     
"jobID": "8ca109b4-3b86-4a9c-a284-a6d50f91019e",
     
"status": "running",
     
"message": "Perform step 1/2",
     
"progress": 50,
     
"links": [
       
{
         
"href": "http://processing.example.org/oapi-p/jobs/8ca109b4-3b86-4a9c-a284-a6d50f91019e",
         
"rel": "status",
         
"type": "application/json",
         
"hreflang": "en",
         
"title": "Job status"
       
}
     
]
   
},
   
{
     
"processID": "EchoProcess",
     
"jobID": "0cf773a5-282a-4e23-96cc-f5dab18123e5",
     
"status": "successful",
     
"message": "EchoProcess job finished successful",
     
"progress": 100,
     
"links": [
       
{
         
"href": "http://processing.example.org/oapi-p/jobs/0cf773a5-282a-4e23-96cc-f5dab18123e5",
         
"rel": "status",
         
"type": "application/json",
         
"hreflang": "en",
         
"title": "Job status"
       
},
       
{
         
"href": "http://processing.example.org/oapi-p/jobs/0cf773a5-282a-4e23-96cc-f5dab18123e5/results",
         
"rel": "http://www.opengis.net/def/rel/ogc/1.0/results",
         
"type": "application/json",
         
"hreflang": "en",
         
"title": "Job result"
       
}
     
]
   
},
   
{
     
"processID": "EchoProcess",
     
"jobID": "63aadd9c-c0e5-4a7f-80f0-228dbb158f09",
     
"status": "failed",
     
"message": "EchoProcess job failed",
     
"progress": 100,
     
"links": [
       
{
         
"href": "http://processing.example.org/oapi-p/jobs/63aadd9c-c0e5-4a7f-80f0-228dbb158f09",
         
"rel": "status",
         
"type": "application/json",
         
"hreflang": "en",
         
"title": "Job status"
       
},
       
{
         
"href": "http://processing.example.org/oapi-p/jobs/63aadd9c-c0e5-4a7f-80f0-228dbb158f09/results",
         
"rel": "http://www.opengis.net/def/rel/ogc/1.0/exceptions",
         
"type": "application/json",
         
"hreflang": "en",
         
"title": "Job exception"
       
}
     
]
   
}
 
],
 
"links": [
   
{
     
"href": "http://processing.example.org/jobs?limit3&f=json",
     
"rel": "self",
     
"type": "application/json"
   
},
   
{
     
"href": "http://processing.example.org/jobs?f=html",
     
"rel": "alternate",
     
"type": "text/html"
   
},
   
{
      
"href": "http//processing.example.org/jobs?offset=4&limit=3&f=json",
      
"rel": "next"
   
}
      
 
]
}

12.4.  Error situations

See Clause 7.5.1 for general guidance.

If the process with the specified identifier does not exist on the server, the status code of the response SHALL be 404 (see Requirement 16: /req/core/process-exception/no-such-process).

13.  Requirements Class “Callback”

The Callback conformance class specifies a callback mechanism for completed jobs. In contrast to the pull-based mechanism specified in Clause 7.12 and Clause 7.13, this conformance class specifies a push-based mechanism, where a subscriber-URL is passed to the Processes API in the execute request. After the job is completed, the result response is sent to the specified URL.

Requirements class 12

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/req/callback
Obligationrequirement
Target typeWeb API
PrerequisiteOGC API — Processes Core
Label http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/callback

Requirement 101

Identifier/req/callback/job-callback
Label/req/callback/job-callback
A

The server SHALL support callback functions for jobs.

B

The optional subscriber element SHALL be used on an execute request to specify zero or more of the success, in-progress and failed URI endpoints.

C

The schema of the subscriber element of the execute request SHALL be defined by the following schema fragment:

description: |- Optional URIs for callbacks for this job.

 

  Support for this parameter is not required and the parameter may be
  removed from the API definition, if conformance class **'callback'**
  is not listed in the conformance declaration under `/conformance`.
type: object
properties:
  successUri:
    type: string
    format: uri
  inProgressUri:
    type: string
    format: uri
  failedUri:
    type: string
    format: uri

Figure 2

Example — A callback in the execute operation

 

callbacks:
    jobCompleted:
      '{$request.body#/subscriber/successUri}':
        post:
          requestBody:
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/results'
          responses:
            '202':
              description: Results received successfully

Adding multiple callbacks is possible for getting progress updates and notifications of the success or failure of a job completion.

Further guidance about how to use callbacks can be found in the OpenAPI documentation.

14.  Requirements Class “Dismiss”

The Dismiss requirement class specifies how to dismiss a job.

Requirements class 13

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/req/dismiss
Obligationrequirement
Target typeWeb API
PrerequisiteOGC API — Processes Core
Label http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/dismiss

14.1.  Operation

Requirement 102

Identifier/req/dismiss/job-dismiss-op
Label/req/dismiss/job-dismiss-op
Statement

The server SHALL support the HTTP DELETE operation at the path /jobs/{jobID}.

Requirement 103

Identifier/req/dismiss/job-dismiss-status
Label/req/dismiss/job-dismiss-status
Statement

If the job is currently in the accepted or running state, then the server SHALL set the status of the job to dismissed.

If the job is currently in the sucessful, failed or dismissed state, the the server SHALL remove the job and it SHALL not longer be accessible via the Processes API.

NOTE:  This standard makes no statments regarding the dispoisition of artifacts created by a job once a job has been removed and is no longer accessible via the Processes API.

14.2.  Response

Requirement 104

Identifier/req/dismiss/job-dismiss-success
Label/req/dismiss/job-dismiss-success
Statement

A successful execution of the operation SHALL be reported as a response with a HTTP status code 200. The content of that response SHALL be based upon the OpenAPI 3.0 schema statusInfo.yaml. The status SHALL be set to “dismissed”.

Example — A dismissed job encoded as JSON.

 

{
 
"jobID" : "81574318-1eb1-4d7c-af61-4b3fbcf33c4f",
 
"status": "dismissed",
 
"message": "Job dismissed",
 
"progress": 56,
 
"links": [
   
{
     
"href": "http://processing.example.org/oapi-p/jobs",
     
"rel": "up",
     
"type": "application/json",
     
"title": "The job list of this server"
   
}
 
]
}

14.3.  Error situations

See Clause 7.5.1 for general guidance.

If the process with the specified identifier does not exist on the server, the status code of the response SHALL be 404 (see /req/core/process-exception/no-such-process).

If the job with the specified identifier does not exist, the status code of the response SHALL be 404 (see /req/core/job-results-exception/no-such-job).

15.  Requirements Class “KVP-encoded Execute”

15.1.  Overview

Requirements class 14

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/req/kvp-execute
Obligationrequirement
Target typeWeb API
PrerequisiteRequirements class 1: http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/core
Label http://www.opengis.net/spec/ogcapi-processes-1/1.0/req/kvp-execute

The “Execute a process” clause describes how to invoke a process by sending a JSON-encoded execute request to the execution endpoint of a server using the HTTP POST method. This invocation pattern does not, however, allow dynamic execute requests to be embedded in other documents. This clause describes a process invocation method that encodes an execute request as a URL with query parameters.

The following examples illustrate KVP-encoded process execution requests.

Example — Examples

 

https://www.someserver.com/processes/area:retrieve/execution?
collections=observations&
bbox=5.8,47.2,15.1,55.1&
datetime=2019-08-09&
variables=TMAX,TMIN,PRCP

 

http://www.someserver.com/processes/echo/execution?
stringInput=Value2&
measureInput=%7B%22value%22%3A%7B%22measurement%22%3A10.3%2C%22uom%22%3A%22m%22%2C%22reference%22%3A%22https%3A%2F%2Fucum.org%2Fucum-essence.xml%22%7D%7D
dateInput=2021-03-06T07:21:00&
doubleInput=3.14159&
arrayInput=%5B1%2C2%2C3%2C4%2C5%2C6%5D&
complexObjectInput=%22value%22%3A%7B%22property1%22%3A%22value1%22%2C%22property2%22%3A%22value2%22%2C%22property5%22%3Atrue%7D%7D&
geometryInput=%5B%7B%22value%22%3A%22%3Cgml%3APolygongml%3Aid%3D%5C%22GID1%5C%22srsName%3D%5C%22urn%3Aogc%3Adef%3Acrs%3AOGC%3A%3ACRS84%5C%22%3E%3Cgml%3Aexterior%3E%3Cgml%3ALinearRing%3E%3Cgml%3AposList%3E-77.02451938.810529-77.02463538.810973-77.02470438.810962-77.02477638.811239-77.02495738.81121-77.02490538.811012-77.02490538.811012-77.02486538.810857-77.02502438.810832-77.02507138.811012-77.02520338.810992-77.0250638.810444-77.02451938.810529%3C%2Fgml%3AposList%3E%3C%2Fgml%3ALinearRing%3E%3C%2Fgml%3Aexterior%3E%3C%2Fgml%3APolygon%3E%22%2C%22mediaType%22%3A%22application%2Fgml%2Bxml%3Bversion%3D3.2%22%7D%2C%7B%22value%22%3A%7B%22type%22%3A%22Polygon%22%2C%22coordinates%22%3A%5B%5B%5B-176.5814819%2C-44.10896301%5D%2C%5B-176.5818024%2C-44.10964584%5D%2C%5B-176.5844116%2C-44.11236572%5D%2C%5B-176.5935974%2C-44.11021805%5D%2C%5B-176.5973511%2C-44.10743332%5D%2C%5B-176.5950928%2C-44.10562134%5D%2C%5B-176.5858459%2C-44.1043396%5D%2C%5B-176.5811157%2C-44.10667801%5D%2C%5B-176.5814819%2C-44.10896301%5D%5D%5D%7D%7D%5D&
imagesInput=%5B%7B%22href%22%3A%22https%3A%2F%2Fwww.someserver.com%2Fogcapi%2FDaraa%2Fcollections%2FDaraa_DTED%2Fstyles%2FTopographic%2Fcoverage%3F...%22%2C%22type%22%3A%22image%2Ftiff%3Bapplication%3Dgeotiff%22%7D%2C%7B%22value%22%3A%22VBORw0KGgoAAAANSUhEUgAABvwAAAa4CAYAAABMB35kAAABhGlDQ1BJQ0MgcHJvZmlsZQAA%5CnKJF9kT1Iw0AcxV9TpSL1A%2BxQxCFDdbIgKuKoVShChVArtOpgcumH0KQhSXFxFFwLDn4sVh1c%5CnnHV1cBUEwQ8QNzcnRRcp8X9JoUWMB8f9eHfvcfcOEOplplkdY4Cm22Y6mRCzuRUx9IogouhH%5Cn...%5Cnj3Z5mX7%2FPCPVRJV92rpHK24xcJrzk20%2BtkeYlCPqcZNO3Lpni1OJWatPCcmgGDEqx7Om6lfa%5CnppM4k4BTe9%2Bbsn3L9%2F9%2FyWhA0PwQGW8ipCZsnZt9lsdrYEM8z%2FM8z%2FM8z%2FM8z%2FM8z%2FMzLWY1%5CnAAAACUlEQVQ871H6P6JI%2BTxS5Wn2AAAAAElFTkSuQmCC%22%2C%22encoding%22%3A%22base64%22%2C%22mediaType%22%3A%22image%2Fjp2%22%7D%5D
boundingBoxInput=51.9,7,52,7.1&
boundingBoxInput-crs=http://www.opengis.net/def/crs/OGC/1.3/CRS84&
featureCollectionInput=%7B%22value%22%3A%22%3C%3Fxmlversion%3D%5C%221.0%5C%22encoding%3D%5C%22UTF-8%5C%22%3F%3E%3CFeatureCollectionxmlns%3D%5C%22http%3A%2F%2Fschemas.myserver.com%2Fnamespaces%2Fnull%5C%22xmlns%3Agml%3D%5C%22http%3A%2F%2Fwww.opengis.net%2Fgml%2F3.2%5C%22xmlns%3Axsi%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance%5C%22xsi%3AschemaLocation%3D%5C%22http%3A%2F%2Fschemas.myserver.com%2Fnamespaces%2Fnullhttps%3A%2F%2Fwww.pvretano.com%2Fmyserver%2Fogcapi%2Fdaraa%2Fschema%3Ff%3DGML32%26amp%3Bcollectionids%3DTransportationGroundCrvhttp%3A%2F%2Fwww.opengis.net%2Fgml%2F3.2http%3A%2F%2Fschemas.opengis.net%2Fschemas%2Fgml%2F3.2.1%2Fgml.xsd%5C%22%3E...%22%2C%22mediaType%22%3A%22application%2Fgml%2Bxml%3Bversion%3D3.2%22%7D&
stringOutput[include]=true&
measureOutput[include]=true&
dateOutput[include]=true&
doubleOutput[include]=true&
arrayOutput[include]=true&
complexObjectOutput[include]=true&
geometryOutput[include]=true&
boundingBoxOutput[include]=true&
imageOutput[include]=true&
featureCollectionOutput[include]=true

NOTE:  Add more examples!

15.2.  Execute a process

This section describes the requirements for an operation that invokes a process with an execute request encoded as a URL with query parameters.

15.2.1.  Operation

Requirement 105

Identifier/req/kvp-execute/process-execute-op
Label/req/kvp-execute/process-execute-op
Statement

The server SHALL support the HTTP GET operation at the path /processes/{processID}/execution.

15.2.2.  Parameters

15.2.2.1.  Format parameter

Table 16

Requirement 1

/req/kvp-execute/f-definition

A

The operation SHALL support a response parameter response[f] with the following characteristics:

 

name: response
in: query
required: false
schema:
  type: object
  required:
    - f
  properties:
    f:
      type: string
      format: uri
style: deepObject
explode: true

Table 17

Requirement 2

/req/kvp-execute/f-response

A

The response[f] parameter SHALL behave in the same way that the HTTP Accept header behaves.

Example — Negotiating a respone format.

This is an execution example where an input image is provided, along with other parameters, to the myProcess process and the response format is requested to be either a PNG or JPEG image (in that order of preference).

 

https://www.someserver.com/processes/myProcess/execution?
inputImage=s3://mybucker/myInputImage.tif&
bbox=5.8,47.2,15.1,55.1&
datetime=2019-08-09&
output=image&
response[f]=image%2Fjpeg%3B%20q%3D0.5%2Cimage%2Fpng%20q%3D0.8

15.2.2.2.  Prefer parameter

Table 18

Requirement 3

/req/kvp-execute/prefer-definition

A

The operation SHALL support a parameter response[prefer] with the following characteristics:

 

name: response
in: query
required: false
schema:
  type: object
  required:
    - prefer
  properties:
    prefer:
      type: string
      format: uri
style: deepObject
explode: true

Table 19

Requirement 4

/req/kvp-execute/f-response

A

The response[prefer] parameter SHALL behave in the same way that the HTTP Prefer header behaves.

Example — Asynchronous execution.

In this example, the response[prefer] parameter is used to indicate that asynchronous execution is preferred.

 

https://www.someserver.com/processes/myProcess/execution?
inputImage=s3://mybucker/myInputImage.tif&
bbox=5.8,47.2,15.1,55.1&
datetime=2019-08-09&
output=image&
response[f]=image%2Fjpeg%3B%20q%3D0.5%2Cimage%2Fpng%20q%3D0.8&
response[prefer]=handling%3Dlenient%2C%20wait%3D100%2C%20respond-async

15.2.2.3.  Process inputs

15.2.2.3.1.  Overview

Requirement 106

Identifier/req/kvp-execute/input-query-parameters
Label/req/kvp-execute/input-query-parameters
A

Each input defined in a process description SHALL map to a URI query parameter on the process execution endpoint.

B

The name of this URI query parameter SHALL be the identifier of the corresponding process input as defined in the process description.

C

The name of this URI query parameter SHALL be case in-sensitive. (??)

Requirement 107

Identifier/req/kvp-execute/input-query-parameter-values
Label/req/kvp-execute/input-query-parameter-values
A

The server SHALL support process input values specified in-line as the value of the corresponding URI query parameter in the KVP-encoded execute request (i.e. by value).

B

The server SHALL support process input values specified by reference using a link as the value of the corresponding URI query parameter in the KVP-encoded execute request (i.e. by reference).

The value of an input URI query parameter in a KVP-encoded execute request can be:

  • a simple value,

  • a complex value,

  • a binary value,

  • a bounding box value,

  • an array of values,

  • or a reference to a value.

15.2.2.3.2.  Simple string input

Requirement 108

Identifier/req/kvp-execute/string-input-value
Label/req/kvp-execute/string-input-value
Conditions
  1. The process input value is specified in-line in an execute request.

  2. A process input, with identifier {inputID}, is defined as type string in the process description.

A

The input parameter SHALL have the following characteristics:

 

name: {inputID}
in: query
required: false
schema:
  type: string
style: form
explode: false

where the token {inputID} represents the identifier of the input.

Permission 19

Identifier/per/kvp-execute/string-input-value
Label/per/kvp-execute/string-input-value
A

The characteristics of a string-valued input parameter MAY include additional validation keywords (i.e. maxLength, minLength, pattern).

B

The characteristics of a string-valued input parameter MAY include the format validation keyword.

C

The characteristics of a string-valued input parameter MAY include additional keywords for string-encoded data (i.e. contentEncoding, contentMediaType, contentSchema).

D

The characteristics of a string-valued input parameter MAY include additional validation keywords (i.e. enum, const) that apply to any type.

E

The characteristics of a string-valued input parameter MAY include basic meta-data annotations (i.e. title and description, default, deprecated, readOnly, writeOnly and examples.

Example — Simple string input examples.

A string literal:

 

stringInput=String+value

A date string:

 

dateInput=2021-05-24T20:40:13-05:00
15.2.2.3.3.  Simple numeric input

Requirement 109

Identifier/req/kvp-execute/numeric-input-value
Label/req/kvp-execute/numeric-input-value
Conditions
  1. The process input value is specified in-line in an execute request.

  2. A process input, with identifier {inputID}, is defined as a numeric type input in the process description.

A

The input parameter SHALL have the following characteristics:

 

name: {inputID}
in: query
required: false
schema:
  type: {numeric-type}
style: form
explode: false

where the token {inputID} represented the identifier of the input and the token {numeric-type} is the value number or integer.

Permission 20

Identifier/per/kvp-execute/numeric-input-value
Label/per/kvp-execute/numeric-input-value
A

The characteristics of a numeric input parameter MAY include additional validation keywords (i.e. multipleOf, maximum, exclusiveMaximum, minimum, exclusiveMinimum).

B

The characteristics of a numeric input parameter MAY include additional validation keywords (i.e. enum, const) that apply to any type.

C

The characteristics of a numeric input parameter MAY include basic meta-data annotations (i.e. title, description, default, deprecated, readOnly, writeOnly and examples).

A number:

 

numberInput=3.14159

Listing 56

An integer:

 

integerInput=10

Listing 57

15.2.2.3.4.  Simple boolean input

Requirement 110

Identifier/req/kvp-execute/boolean-input-value
Label/req/kvp-execute/boolean-input-value
Conditions
  1. The process input value is specified in-line in an execute request.

  2. A process input, with identifier {inputID} is defined as type boolean in the process description.

A

The input parameter SHALL have the following characteristics:

 

name: {inputID}
in: query
required: false
schema:
  type: boolean
style: form
explode: false

where the token {inputID} represented the identifier of the input.

Permission 21

Identifier/per/kvp-execute/boolean-input-value
Label/per/kvp-execute/boolean-input-value
A

The characteristics of a boolean-valued input parameter MAY include additional validation keywords (i.e. enum, const) that apply to any type.

B

The characteristics definition of a boolean-valued input parameter MAY include basic meta-data annotations (i.e. title and description, default, deprecated, readOnly, writeOnly and examples.

A Boolean:

 

booleanInput=true

Listing 59

15.2.2.3.5.  Complex-valued input

A complex value is a value with structure that is defined using a schema. The schema of a complex process input value is defined in the process description and can be specified using JSON-Schema.

Requirement 111

Identifier/req/kvp-execute/complex-input-value
Label/req/kvp-execute/complex-input-value
Conditions
  1. The process input value is specified in-line in an execute request.

  2. A process input, with identifier {inputID}, is defined as type object in the process description.

A

Complex-valued inputs SHALL be encoded as URL-encoded string-data.

B

The input parameter SHALL have the following characteristics:

 

name: {inputID}
in: query
required: false
schema:
  type: string
style: form
explode: false

where the token {inputID} represents the identifier of the input.

Permission 22

Identifier/per/kvp-execute/complex-input-value
Label/per/kvp-execute/complex-input-value
A

The characteristics of a complex-valued input parameter MAY include additional keywords for string-encoded data (i.e. contentEncoding, contentMediaType, contentSchema).

B

The characteristics of a complex-valued input parameter MAY include additional validation keywords (i.e. enum, const) that apply to any type.

C

The characteristics of a complex-valued input parameter MAY include basic meta-data annotations (i.e. title and description, default, deprecated, readOnly, writeOnly and examples.

A complex-valued input parameter can be encoded as JSON, XML or some other text encoding of complex values such as Well Know Text (WKT).

Example — Complex input value examples.

An example of a complex process input value.

 

complexObjectInput=%22value%22%3A%7B%22property1%22%3A%22value1%22%2C%22property2%22%3A%22value2%22%2C%22property3%22%3A%22value3%22%7D%7D

Decoded value is:
{"value":{"property1":"value1","property2":"value2","property3":"value3"}}
15.2.2.3.6.  Array-valued input

Requirement 112

Identifier/req/kvp-execute/array-input-value
Label/req/kvp-execute/array-input-value
Conditions
  1. The process input value is specified in-line in an execute request.

  2. A process input, with identifier {inputID}, is defined as type array in the process description.

A

Array-valued inputs SHALL be encoded as URL-encoded string-data.

B

The input parameter SHALL have the following characteristics:

 

name: {inputID}
in: query
required: false
schema:
  type: string
style: form
explode: false

where the token {inputID} represents the identifier of the input.

The elements of an array input value can be:

Example — Array input value examples.

An array of simple values:

 

arrayOfSimpleValues=%5B1%2C2%2C4%2C10%2C7%5D

Decoded value is:
arrayOfSimpleValues=[1,2,4,10,7]

An array with a single simple value:

 

arrayOfSimpleValues=%5Ba%5D

Decoded value is:
arrayOfSimpleValues=[a]

An array of complex values:

 

arrayOfQualifiedValues=%5B%7B%22value%22%3A%7B%22measurement%22%3A10.3%2C%22uom%22%3A%22m%22%2C%22reference%22%3A%22https%3A%2F%2Fucum.org%2Fucum-essence.xml%22%7D%7D%2C%7B%22value%22%3A%7B%22measurement%22%3A10.5%2C%22uom%22%3A%22m%22%2C%22reference%22%3A%22https%3A%2F%2Fucum.org%2Fucum-essence.xml%22%7D%7D%2C%7B%22value%22%3A%7B%22measurement%22%3A10.9%2C%22uom%22%3A%22m%22%2C%22reference%22%3A%22https%3A%2F%2Fucum.org%2Fucum-essence.xml%22%7D%7D%5D

Decoded value is:
arrayOfQualifiedValues=[
  {
    "value": {
      "measurement":10.3,
      "uom":"m",
      "reference":"https://ucum.org/ucum-essence.xml"
    }
  },
  {
    "value": {
      "measurement":10.5,
      "uom":"m",
      "reference":"https://ucum.org/ucum-essence.xml"
    }
  },
  {
    "value": {
      "measurement":10.9,
      "uom":"m",
      "reference":"https://ucum.org/ucum-essence.xml"
    }
  }
]

An array of bounding box values:

 

bboxes=%7B%22bbox%22%3A%5B-160.2871383684127%2C21.77618201427491%2C-160.05226732350857%2C22.035461193553438%5D%7D%2C%7B%22bbox%22%3A%5B-159.8119271016866%2C21.868377883379342%2C-159.2728781199529%2C22.27253365936666%5D%7D%2C%7B%22bbox%22%3A%5B-158.2809447669924%2C21.257850724966435%2C-157.62449293560164%2C21.75719228424245%5D%7D%2C%7B%22bbox%22%3A%5B-157.3665805976117%2C21.056725789376443%2C-156.68744814385997%2C21.207484214479813%5D%7D%2C%7B%22bbox%22%3A%5B-157.0721466133514%2C20.73998198222469%2C-156.80164904228144%2C20.958125881743094%5D%7D%2C%7B%22bbox%22%3A%5B-156.67924097602452%2C20.599995119588588%2C-155.9289696479082%2C21.048822845802146%5D%7D%2C%7B%22bbox%22%3A%5B-156.72917922429528%2C20.49209982653643%2C-156.53052477930564%2C20.635403336088483%5D%7D%2C%7B%22bbox%22%3A%5B-156.07415148465623%2C18.89763704552276%2C-154.87280121907844%2C20.33421989495902%5D%7D

Decoded value is:
bboxes=[
  {
    "bbox":[-160.2871383684127,21.77618201427491,
            -160.05226732350857,22.035461193553438]
  },
  {
    "bbox":[-159.8119271016866,21.868377883379342,
            -159.2728781199529,22.27253365936666]
  },
  {
    "bbox":[-158.2809447669924,21.257850724966435,
            -157.62449293560164,21.75719228424245]
  },
  {
    "bbox":[-157.3665805976117,21.056725789376443,
            -156.68744814385997,21.207484214479813]
  },
  {
    "bbox":[-157.0721466133514,20.73998198222469,
            -156.80164904228144,20.958125881743094]
  },
  {
    "bbox":[-156.67924097602452,20.599995119588588,
            -155.9289696479082,21.048822845802146]
  },
  {
    "bbox":[-156.72917922429528,20.49209982653643,
            -156.53052477930564,20.635403336088483]
  },
  {
    "bbox":[-156.07415148465623,18.89763704552276,
            -154.87280121907844,20.33421989495902]
  }
]

An array of arrays:

 

arrayOfArrays=%5B%5B1%2C2%2C3%2C4%5D%2C%5B%22a%22%2C%22b%22%2C%22c%22%2C%22d%22%5D%5D

Decoded value is:
arrayOfArrays=[[1,2,3,4],["a","b","c","d"]]

An array of value references:

 

images=%5B%7B%22href%22%3A%22http%3A%2F%2Fwww.imagearchive.com%2Fimages%2Fimage01.tif%22%2C%22type%22%3A%22image%2Ftiff%3Bapplcation%3Dgeotiff%22%7D%2C%7B%22href%22%3A%22http%3A%2F%2Fwww.imagearchive.com%2Fimages%2Fimage19.jp2%2C%22type%22%3A%22image%2Fjp2%22%7D%5D

Decoded value is:
images=[
  {
    "href":"http://www.imagearchive.com/images/image01.tif",
    "type":"image/tiff;applcation=geotiff"
  },
  {
    "href":"http://www.imagearchive.com/images/image19.jp2,
    "type":"image/jp2"
  }
]
15.2.2.3.7.  Binary-valued input

NOTE:  Not sure we should specify this. Binary input values should be by reference only in my opinion. It really makes no sense to specify a binary value by-value in a URL-encoded execute request. Does it? Something small like icons …​ maybe?

In some cases, for example to pass through firewalls, binary input values need to be encoded in-line in an execute request as a string.

Requirement 113

Identifier/req/kvp-execute/binary-input-value
Label/req/kvp-execute/binary-input-value
Conditions
  1. The process input value is specified in-line in an execute request.

  2. A process input, with identifier {inputID}, is defined as binary type in the process description.

  3. The input value does not need to be qualified with a format specification.

A

The input parameter SHALL have the following characteristics:

 

name: {inputID}
in: query
required: false
schema:
  type: string
  format: byte
style: form
explode: false

where the token {inputID} represents the identifier of the input.

A binary value can be optionally qualified with a format parameter. This is usually done to identify several possible input types for the specified input parameter.

Requirement 114

Identifier/req/kvp-execute/binary-input-value-qualified
Label/req/kvp-execute/binary-input-value-qualified
Conditions
  1. The process input value is specified in-line in an execute request.

  2. A process input, with identifier {inputID}, is defined as binary type in the process description.

  3. The input value needs to qualified with a format specification.

A

The input parameter SHALL have the following characteristics:

 

name: {inputID}
in: query
required: false
schema:
  type: object
  required:
    - value
  properties:
    value:
      type: string
      format: byte
    mediaType:
      type: string
    encoding:
      type: string
    schema:
      oneOf:
        - type: string
          format: url
        - type: object
style: deepObject
explode: true

where the token {inputID} represents the identifier of the input.

Example — Binary value examples.

This is an example of an image process input whose media type is defined in the process description. The schema definition for this process input might be:

 

"schema": {
 
"type": "string",
 
"contentEncoding": "binary",
 
"contentMediaType": "image/tiff; application=geotiff"
}

and an example instance value in an execute request might be:

 

imageInput="R0lGODdhNAHCAfcAAAcHDD+Gs4sLDQpDaqGFdaHE54dJPEoECUlGRteKgcdITgokG4hoVkpY\ngNzHwKKkqOLm7RRjlEgpHU9iZ44lHQYqVdmki6doVmhHOMOIeJG20HiDjCcKBglIeadISrso\nJGooFNbN2d2qr8aljyklHwQJQkdvkWaKxIdrb442LidLeGhMTp6LkeP1+Kh3aiUuVAoUHmlu\ngkcwNYdZRmkJDYGcsDFokElVYyk1NsWWhLEPDtmQldrUyoyFhrjo+Nna5d+4tMGstspoXgc4\n...qgu7sSu7qbtCs2u7t6u6rLsrp4u7veu76eO6vyu8w0u8xWu8x4u8yau8shu8y+u8zwu90Su9\n00u91Wu914u92au928u9whsQADs="

In this second example, the image input can be one of a number of value types denoted in JSON Schema by the use of the oneOf[] construct. An example schema for this a process input might be:

 

"schema": {
 
"oneOf": [
   
{
     
"type": "string",
     
"contentEncoding": "binary",
     
"contentMediaType": "image/tiff; application=geotiff"
   
},
   
{
     
"type": "string",
     
"contentEncoding": "binary",
     
"contentMediaType": "image/jp2"
   
}
 
]
}

and a JPEG2000 instance example in an execute request might be:

 

imageInput[value]=VBORw0KGgoAAAANSUhEUgAABvwAAAa4CAYAAABMB35kAAABhGlDQ1BJQ0MgcHJvZmlsZQAA\nKJF9kT1Iw0AcxV9TpSL1A+xQxCFDdbIgKuKoVShChVArtOpgcumH0KQhSXFxFFwLDn4sVh1c\nnHV1cBUEwQ8QNzcnRRcp8X9JoUWMB8f9eHfvcfcOEOplplkdY4Cm22Y6mRCzuRUx9IogouhH\n ... \nj3Z5mX7/PCPVRJV92rpHK24xcJrzk20+tkeYlCPqcZNO3Lpni1OJWatPCcmgGDEqx7Om6lfa\nppM4k4BTe9+bsn3L9/9/yWhA0PwQGW8ipCZsnZt9lsdrYEM8z/M8z/M8z/M8z/M8z/MzLWY1\nAAAACUlEQVQ871H6P6JI+TxS5Wn2AAAAAElFTkSuQmCC&imageInput[mediaType]=image/jp2
15.2.2.3.8.  Bounding box-valued input

Requirement 115

Identifier/req/kvp-execute/bbox-input-value
Label/req/kvp-execute/bbox-input-value
Conditions
  1. The process input value is specified in-line in an execute request.

  2. The process input parameter is defined as a bbox in the process description.

A

A bbox input parameter SHALL have the following characteristics:

 

name: {bbox-input-name}
in: query
description: |-
  Only features that have a geometry that intersects the bounding box are selected.
  The bounding box is provided as four or six numbers, depending on whether the
  coordinate reference system includes a vertical axis (height or depth):

  * Lower left corner, coordinate axis 1
  * Lower left corner, coordinate axis 2
  * Minimum value, coordinate axis 3 (optional)
  * Upper right corner, coordinate axis 1
  * Upper right corner, coordinate axis 2
  * Maximum value, coordinate axis 3 (optional)

  If the value consists of four numbers, the coordinate reference system is
  WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)
  unless a different coordinate reference system is specified in the parameter `bbox-crs`.

  If the value consists of six numbers, the coordinate reference system is WGS 84
  longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h)
  unless a different coordinate reference system is specified in the parameter `bbox-crs`.

  The query parameter `bbox-crs` is specified in OGC API - Features - Part 2: Coordinate
  Reference Systems by Reference.

  For WGS 84 longitude/latitude the values are in most cases the sequence of
  minimum longitude, minimum latitude, maximum longitude and maximum latitude.
  However, in cases where the box spans the antimeridian the first value
  (west-most box edge) is larger than the third value (east-most box edge).

  If the vertical axis is included, the third and the sixth number are the
  bottom and the top of the 3-dimensional bounding box.

  If a feature has multiple spatial geometry properties, it is the decision of the
  server whether only a single spatial geometry property is used to determine
  the extent or all relevant geometries.
required: false
schema:
  type: array
  oneOf:
  - minItems: 4
    maxItems: 4
  - minItems: 6
    maxItems: 6
  items:
    type: number
style: form
explode: false

where the token {bbox-input-name} represented the identifier of the input.

Requirement 116

Identifier/req/kvp-execute/bbox-crs-input-value
Label/req/kvp-execute/bbox-crs-input-value
Conditions
  1. The server supports CRSs other than http://www.opengis.net/def/crs/OGC/1.3/CRS84 or http://www.opengis.net/def/crs/OGC/0/CRS84h.

  2. The process input value is specified in-line in an execute request.

  3. The process defines an input parameter named {bbox-input-name}.

A

A {bbox-input-name} input parameter SHALL have the following characteristics:

 

name: inputsCrs
description: |-
  Asserts the CRS used for the coordinate values of a bounding
  box input parameter. The name `inputsCrs` is just a generic
  name to avoid ambiguity.  It is ignored since explode is set
  to true.
in: query
description: |-
  Asserts the CRS used for the coordinate values of a bounding
  box input parameter.
required: false
schema:
  type: object
  patternProperties:
    "^.+[crs]$":
      $ref: "../../schemas/processes-core/bbox-def-crs.yaml"
explode: true
style: form

where the token {bbox-input-name} represents the identifier of a bbox input parameter and the token {bbox-input-name}[crs] represents the identifier of a corresponding input that indicates which CRS is being used for the coordinates of the {bbox-input-name} parameter.

Example — Bounding box input examples.

An example instance value for a bounding box input named my_bbox might be:

 

my_bbox=-79.63732855116733,43.570691463538644,-79.10227279076784,43.86582298161152

This is the same example as above but in a different CRS. An input parameter named my_bbox[crs] is used to convey the CRS of the my_bbox parameter.

 

my_bbox=43.570691463538644,-79.63732855116733,43.86582298161152,-79.10227279076784&my_bbox[crs]=https://www.opengis.net/def/crs/EPSG/0/4326
15.2.2.3.9.  Input parameters value by reference

Requirement 117

Identifier/req/kvp-execute/input-by-reference
Label/req/kvp-execute/input-by-reference
Conditions
  1. The process input value is specified by reference in an execute request.

A

If the input cardinality is 1 then the input parameter SHALL have the following characteristics:

 

name: {inputID}
in: query
required: false
schema:
  type: object
  required:
    - href
  properties:
    href:
      type: string
    rel:
      type: string
      example: service
    type:
      type: string
      example: application/json
    hreflang:
      type: string
      example: en
    title:
      type: string
style: deepObject
explode: true

where the token {inputID} represented the identifier of the input.

B

If the input cardinality is greater than 1 then the value of the input parameter SHALL be encoded as a link object and appropriately URL-encoded to a string.

Example — Input-by-reference example

 

imageInput[href]=http://www.someserver.com/image.tiff&imageInput[type]=image/tiff;application=geotiff

15.2.2.4.  Input cardinality

Requirement 118

Identifier/req/kvp-execute/input-cardinality
Label/req/kvp-execute/input-cardinality
Conditions
  1. The process input value is specified in-line in an execute request.

  2. A process input, with identifier {inputID}, is defined as having a cardinality greater than one (i.e. minOccurs > 1) in the process description.

  3. The number of input values specified for the {inputID} process input is greater than one.

A

A process input having more than one value SHALL be encoded as a list of values according to the query parameter serialization rules of the OpenAPI Specification v3.0.3. The default list value separator is the comma (“,”) but other values are possible too.

B

The input parameter SHALL have the following characteristics:

 

name: {inputID}
in: query
required: false
schema:
  type: array
  items:
    oneOf:
      - type: string
      - type: number
      - type: integer
      - type: boolean
      - type: null
style: form
explode: false

where the token {inputID} represents the identifier of the input.

C

List elements that are objects SHALL be encoded as URL-encoded strings.

D

List elements that are arrays SHALL be encoded as URL-encoded strings.

Example — Input value with cardinality greater than 1

An example of a string-value input with cardinality greater than 1.

 

...&color=blue,green,red,yellow&...

An example of a object-valued input with cardinality greater than 1. In this case, two geometries are specified as input. The first geometry is encoded as GML object and the second geometry is encoded as GeoJSON object.

 

...&geometryInput=%7B%22value%22%3A%22%3Cgml%3APolygon%20gml%3Aid%3D%5C%22GID1%5C%22%20srsName%3D%5C%22urn%3Aogc%3Adef%3Acrs%3AOGC%3A%3ACRS84%5C%22%3E%3Cgml%3Aexterior%3E%3Cgml%3ALinearRing%3E%3Cgml%3AposList%3E-77.024519%2038.810529%20-77.024635%2038.810973%20-77.024704%2038.810962%20-77.024776%2038.811239%20-77.024957%2038.81121%20-77.024905%2038.811012%20-77.024905%2038.811012%20-77.024865%2038.810857%20-77.025024%2038.810832%20-77.025071%2038.811012%20-77.025203%2038.810992%20-77.02506%2038.810444%20-77.024519%2038.810529%3C%2Fgml%3AposList%3E%3C%2Fgml%3ALinearRing%3E%3C%2Fgml%3Aexterior%3E%3C%2Fgml%3APolygon%3E%22%2C%22mediaType%22%3A%22application%2Fgml%2Bxml%3B%20version%3D3.2%22%7D,%7B%22value%22%3A%7B%22type%22%3A%22Polygon%22%2C%22coordinates%22%3A%5B%5B%5B-176.5814819%2C-44.10896301%5D%2C%5B-176.5818024%2C-44.10964584%5D%2C%5B-176.5844116%2C-44.11236572%5D%2C%5B-176.5935974%2C-44.11021805%5D%2C%5B-176.5973511%2C-44.10743332%5D%2C%5B-176.5950928%2C-44.10562134%5D%2C%5B-176.5858459%2C-44.1043396%5D%2C%5B-176.5811157%2C-44.10667801%5D%2C%5B-176.5814819%2C-44.10896301%5D%5D%5D%7D%2C%22mediaType%22%3A%22application%2Fgeo%2Bjson%22%7D%0A&....

Decoded value is:
geometryInputs=
  {
    "value":"<gml:Polygon gml:id=\"GID1\" srsName=\"urn:ogc:def:crs:OGC::CRS84\"><gml:exterior><gml:LinearRing><gml:posList>-77.024519 38.810529 -77.024635 38.810973 -77.024704 38.810962 -77.024776 38.811239 -77.024957 38.81121 -77.024905 38.811012 -77.024905 38.811012 -77.024865 38.810857 -77.025024 38.810832 -77.025071 38.811012 -77.025203 38.810992 -77.02506 38.810444 -77.024519 38.810529</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>",
    "mediaType":"application/gml+xml; version=3.2"
  },
  {
    "value": {
      "type":"Polygon",
      "coordinates":[[[-176.5814819,-44.10896301],[-176.5818024,-44.10964584],[-176.5844116,-44.11236572],[-176.5935974,-44.11021805],[-176.5973511,-44.10743332],[-176.5950928,-44.10562134],[-176.5858459,-44.1043396],[-176.5811157,-44.10667801],[-176.5814819,-44.10896301]]]
    },
    "mediaType":"application/geo+json"
  }

An example of an array-value input with cardinality greater than 1.

 

...&param1=%5B1%2C2%2C3%5D,%5B6%2C7%2C8%5D&...

Decoded value is:
param1=[1,2,3],[6,7,8]

15.2.2.5.  Process outputs

Requirement 119

Identifier/req/kvp-execute/output
Label/req/kvp-execute/output
Conditions
  1. A process output, with identifier {outputID}, is defined in the process description.

A

The output parameter SHALL have the following characteristics:

 

name: {outputID}
in: query
required: false
schema:
  type: object
  required:
    - include
  properties:
    include
      type: boolean
    mediaType:
      type: string
    encoding:
      type: string
    schema:
      oneOf:
        - type: string
          format: url
        - type: object
style: deepObject
explode: true

where the token {outputID} represents the identifier of the output.

Example — Output examples

 

...&out1[include]=true&out2[include]true&out2[include]true&...

 

...&out1[include]=true&out1[mediaType]=application/geo+tiff&...

15.3.  Response

Whether a process is invoked using a JSON-encoded request that is HTTP POST’ed to the execution endpoint or a URL-encoded request is used, the behavior of the server with regard to the response is the same. The details of the response can be found in Clause 7.12.4.

16.  Media Types

JSON media types that would typically be used in a server that supports JSON are:

  • application/json for all resources.

The typical HTML media type for all “web pages” in a server would be:

  • text/html.

The media type for an OpenAPI 3.0 definition is application/vnd.oai.openapi+json;version=3.0 (JSON) or application/vnd.oai.openapi;version=3.0 (YAML).

NOTE:  The OpenAPI media types have not yet been registered with IANA and may change in the future.

As previously mentioned in the “Content negotiations by profile” clause, in some circumstances the use of generic media types, such as application/json, is too ambiguous. In order to more specifically identify responses generated by a server compliant with this Standard, the following profile URIs are defined:

Table 20 — Profile identifiers

Profile URIDescription
https://www.opengis.net/dev/profile/OGC/0/ogc-process-listA JSON-encoded document that contains a list of processes offered by a server.
https://www.opengis.net/dev/profile/OGC/0/ogc-process-descriptionA JSON-encoded OGC process description as defined in Requirements Class “OGC Process Description”.
https://www.opengis.net/dev/profile/OGC/0/ogc-execute-requestA JSON-encoded document that contains an execute request.
https://www.opengis.net/dev/profile/OGC/0/jobs-listA JSON-encoded document that contains a list of jobs.
https://www.opengis.net/dev/profile/OGC/0/job-descriptionA JSON-encoded document that contains status information about a job.
https://www.opengis.net/dev/profile/OGC/0/ogc-resultsA JSON document that contains processing results (results.yaml).

17.  Requirements Class “Profile query parameter”

The Requirements Class “Profile query parameter” specifies additional provisions for properties that reference another resource.

Requirements class 15

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/2.0/req/query-param-profile
Target typeWeb API
Normative statementsRequirement 120: /req/query-param-profile/definition
Requirement 121: /req/query-param-profile/response

Some properties may be represented in multiple representations in the same format, depending on the intended use of the data. One example are references to another web resource (see the [rc_profile-references]).

RFC 6906 The ‘profile’ Link Relation Type defines the concept of a profile to support such use cases.

A profile is defined not to alter the semantics of the resource representation itself, but to allow clients to learn about additional semantics (constraints, conventions, extensions) that are associated with the resource representation, in addition to those defined by the media type and possibly other mechanisms.

To request one or more profiles, a query parameter “profile” can be used:

Requirement 120

Identifier/req/query-param-profile/definition
Included inRequirements class 15: http://www.opengis.net/spec/ogcapi-processes-1/2.0/req/query-param-profile
A

A server implementation SHALL support the Profile (profile) parameter for the GET operation.

B

The following OpenAPI 3.0 schema fragment SHALL define the characteristics of the profile parameter:

 

name: profile
in: query
required: false
schema:
  type: array
  items:
    type: string
explode: false
style: form
C

Each item SHALL be one of the following:

  • A HTTP(S) URI of a profile, e.g., in the OGC Profile Register (http://www.opengis.net/def/profile);

  • A Safe CURIE of a profile in the OGC Profile Register (e.g., [ogc-profile:my-profile]);

  • A profile identifier (the profileId value in the URI template http://www.opengis.net/def/profile/OGC/0/{profileId})

Permission 23

Identifier/per/query-param-profile/default
A

The server MAY specify a default value for the query parameter “profile”.

Determining the profile(s) of the response is part of the content negotiation process after the proactive content negotiation as specified by the HTTP RFC has been completed. The server determines the applicable profile(s) for the selected media type.

Different media types have different characteristics. A consequence is that it can be impossible to support a profile for a media type or it can be against the design goals of a media type to support a profile.

Permission 24

Identifier/per/query-param-profile/profiles-of-media-type
A

For any media type that can represent a resource, the server MAY support only a subset of the profiles offered for the resource.

B

The subset of supported profiles for a media type MAY be empty, too.

The server will select the profile(s) of the response, if any, from the list of profiles supported for the media type and resource.

Recommendation 36

Identifier/rec/query-param-profile/negotiation
A

If the server supports one or more of the requested profile(s) for the media type and resource, these profiles SHOULD be used for the response.

B

The profile negotiation SHOULD NOT result in an error, e.g., because a requested profile cannot be provided.

Requirement 121

Identifier/req/query-param-profile/response
Included inRequirements class 15: http://www.opengis.net/spec/ogcapi-processes-1/2.0/req/query-param-profile
A

The query parameter is not required, that is, omitting the parameter in a request SHALL not result in an error.

B

If the media type of the response supports web links in accordance with RFC 8288 Web Linking, the response SHALL include links to the selected profile(s) with the link relation type “profile”.

18.  Additional API Building Blocks

The core requirements classes of the OGC API-Processes Standard are designed for the following workflow:

  1. Access the list of available processes;

  2. Access the description of a specific process;

  3. Create an execute JSON request (based on the description) and send it to the server via POST;

  4. Process the status info and/or results.

This workflow is useful for generic clients that are implemented against the JSON schemas and paths specified in this Standard. Generic clients can communicate with any server implementing the OGC API — Processes Standard. However, there may be limitations regarding the handling of input and output formats.

The approach described above requires implementers of clients to have knowledge about the standard.

This Standard uses the OpenAPI specification to define the JSON schemas and OpenAPI MAY also be used to describe the physical implementation of the API (see Clause 7.3). A variety of tools for automatic code generation exist for the OpenAPI specification. This makes it very easy for client and server implementers to work with APIs defined using OpenAPI. However, as the OGC API — Processes Standard defines several JSON schemas and leaves the concrete data types for input and outputs open, the automatic code generation cannot be used to its full extent. To cope with this and thus make the implementation of clients / servers easier for those that are not familiar with OGC (API) Standards, additional alternatives to the process description and the paths to processes and jobs are permitted.

The following permissions do not affect the mandatory core requirements.

Permission 25

Identifier/per/core/alternative-process-description
Label/per/core/alternative-process-description
Statement

Servers MAY support alternative means of describing the inputs and outputs of a process.

The alternative-process-description permission allows server implementations to describe a process, such as by defining the request and response body of a POST request to a process endpoint using the OpenAPI specification directly (see this example).

Permission 26

Identifier/per/core/alternative-process-paths
Label/per/core/alternative-process-paths
Statement

Servers MAY support alternative API paths.

The alternative-process-paths permission allows server implementations to specify alternative paths to processes and jobs.

An example of an OpenAPI document making use of these building blocks is shown in the following:

 

openapi: 3.0.2
info:
  title: Alternative OGC API - Processes
  description: This is an alternative OGC API - Processes
  contact:
    email: you@your-company.com
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  version: 1.0.0
paths:
  /buffer:
    post:
      summary: execute buffer process
      operationId: executeBuffer
      requestBody:
        description: buffer inputs
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/bufferExecute'
      responses:
        "200":
          description: buffer created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bufferResult'
        "400":
          description: invalid input
components:
  schemas:
    bufferExecute:
      required:
        - data
        - width
      type: object
      properties:
        data:
          maxItems: 10
          minItems: 1
          type: array
          description: this is possible to provide the abstract in here
          items:
            oneOf:
              - type: string
                format: application/geo+json
              - type: string
                format: application/gml+xml
        width:
          maximum: 100
          minimum: 1
          type: integer
          default: 20
    bufferResult:
      type: object
      properties:
        outputs:
          type: array
          items:
            oneOf:
              - type: string
                format: application/geo+json
              - type: string
                format: application/gml+xml

Listing 70

The goals of these additional API building blocks are:

  • Enabling a more seamless integration of this API with other OGC API standards and

  • Enabling the use of tools to auto-generate clients / servers from the API description.


Annex A
(normative)
Abstract Test Suite

A.1.  Introduction

OGC Web Application Programming Interfaces (APIs) are not Web Services in the traditional sense. Rather, they define the behavior and content of a set of Resources exposed through a Web API. Therefore, an API may expose resources in addition to those defined by the standard. A test engine must be able to traverse the API, identify and validate test points, and ignore resource paths which are not to be tested.

The following requirement applies for a server implementing the OGC API — Processes — Part 1: Core under test:

Requirement A.1

Identifier/req/core/test-process
Label/req/core/test-process
Statement

If a server implementing the OGC API — Processes — Part 1: Core is tested using CITE tests, the server SHALL offer at least one testable process. Please refer to Recommendation A.1 for further guidance.

Recommendation A.1

Identifier/rec/core/test-process
Label/rec/core/test-process
Statement

If a server implementing the OGC API — Processes — Part 1: Core is tested using CITE tests, the server SHOULD offer one of the following options:

  1. An Echo process that returns any input that is provided, without any actual processing.

  2. Provide example input data for a specific process.

The process logic SHOULD include a delay, whether through actual processing or a simple sleep mechanism, to test asynchronous execution.

A.2.  Conformance Class Core

Conformance class A.1: Core

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core
Subject
Target TypeWeb API
Conformance testsAbstract test A.3: /conf/core/api-definition-op
Abstract test A.4: /conf/core/api-definition-success
Abstract test A.5: /conf/core/conformance-op
Abstract test A.6: /conf/core/conformance-success
Abstract test A.7: /conf/core/http
Abstract test A.35: /conf/core/job-exception-no-such-job
Abstract test A.33: /conf/core/job-op
Abstract test A.36: /conf/core/job-result
Abstract test A.37: /conf/core/job-results
Abstract test A.43: /conf/core/job-results-async-many
Abstract test A.42: /conf/core/job-results-async-one
Abstract test A.44: /conf/core/job-results-exception-no-such-job
Abstract test A.45: /conf/core/job-results-exception-results-not-ready
Abstract test A.46: /conf/core/job-results-failed
Abstract test A.38: /conf/core/job-results-param-outputs
Abstract test A.41: /conf/core/job-results-param-outputs-empty
Abstract test A.40: /conf/core/job-results-param-outputs-omit
Abstract test A.39: /conf/core/job-results-param-outputs-response
Abstract test A.31: /conf/core/job-results-success-sync
Abstract test A.34: /conf/core/job-success
Abstract test A.1: /conf/core/landingpage-op
Abstract test A.2: /conf/core/landingpage-success
Abstract test A.9: /conf/core/pl-limit-definition
Abstract test A.10: /conf/core/pl-limit-response
Abstract test A.12: /conf/core/pl-links
Abstract test A.13: /conf/core/process-description
Abstract test A.14: /conf/core/process-description-success
Abstract test A.15: /conf/core/process-exception-no-such-process
Abstract test A.26: /conf/core/process-execute-auto-execution-mode
Abstract test A.25: /conf/core/process-execute-default-execution-mode
Abstract test A.27: /conf/core/process-execute-default-outputs
Abstract test A.19: /conf/core/process-execute-input-array
Abstract test A.23: /conf/core/process-execute-input-inline-bbox
Abstract test A.22: /conf/core/process-execute-input-inline-binary
Abstract test A.20: /conf/core/process-execute-input-inline-object
Abstract test A.18: /conf/core/process-execute-inputs
Abstract test A.24: /conf/core/process-execute-input-validation
Abstract test A.16: /conf/core/process-execute-op
Abstract test A.17: /conf/core/process-execute-request
Abstract test A.32: /conf/core/process-execute-success-async
Abstract test A.30: /conf/core/process-execute-sync-many-json
Abstract test A.28: /conf/core/process-execute-sync-one
Abstract test A.29: /conf/core/process-execute-sync-one-default-content
Abstract test A.8: /conf/core/process-list
Abstract test A.11: /conf/core/process-list-success
Conformance test A.1-27: /conf/core/process-summary-links
Conformance test A.1-37: /conf/core/process-execute-input-inline-multiple-type
Requirement A.2: /conf/core

A.3.  Abstract test suite

Requirement A.2

Identifier/conf/core
TargetRequirement A.1: /req/core/test-process
Included inConformance class A.1: http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core
Test purpose

Ensure that a testable process is offered by the server being tested.

Test method

If a server implementing the OGC API — Processes — Part 1: Core is tested using CITE tests, the server SHALL offer at least one testable process. Please refer to Recommendation A.1 for further guidance.

A.4.  Retrieve the API landing page

Abstract test A.1

Identifier/conf/core/landingpage-op
RequirementRequirement 1: /req/core/landingpage-op
Test purpose

Validate that a landing page can be retrieved from the expected location.

Test method
  1. Issue an HTTP GET request to the root URL /.

  2. Validate the contents of the returned document using test /conf/core/landingpage-success.

Abstract test A.2

Identifier/conf/core/landingpage-success
RequirementRequirement 2: /req/core/landingpage-success
Test purpose

Validate that the landing page complies with the require structure and contents.

Test method
  1. Validate that a document was returned with an HTTP status code or 200.

  2. Validate the landing page for all supported media types using the resources and tests identified in Table A.1

  3. For formats that require manual inspection, perform the following:

    1. Validate that the landing page includes a “service-desc” and/or “service-doc” link to an API Definition.

    2. Validate that the landing page includes a “http://www.opengis.net/def/rel/ogc/1.0/conformance” link to the conformance class declaration.

    3. Validate that the landing page includes a “http://www.opengis.net/def/rel/ogc/1.0/processes” link to the list of processes.

NOTE:  The landing page may be retrieved in one of two formats. The following table identifies the applicable schema document for each format and the test to be used to validate the landing page against that schema. All supported formats should be exercised.

Table A.1 — Schema and Tests for Landing Pages

FormatSchema DocumentTest ID
HTMLlandingPage.yaml/conf/html/content
JSONlandingPage.yaml/conf/json/content

A.5.  Retrieve an API definition

Abstract test A.3

Identifier/conf/core/api-definition-op
RequirementRequirement 3: /req/core/api-definition-op
Test purpose

Validate that the API Definition document can be retrieved from the expected location.

Test method
  1. Construct a path for the API Definition document that ends with /api.

  2. Issue a HTTP GET request on that path.

  3. Validate the contents of the returned document using test /conf/core/api-definition-success.

Abstract test A.4

Identifier/conf/core/api-definition-success
RequirementRequirement 4: /req/core/api-definition-success
Test purpose

Validate that the API Definition complies with the required structure and contents.

Test method
  1. Validate that a document was returned with a status code 200.

  2. Validate the API Definition document against an appropriate schema document.

A.6.  Declaration of conformance classes

Abstract test A.5

Identifier/conf/core/conformance-op
RequirementRequirement 5: /req/core/conformance-op
Test purpose

Validate that a Conformance Declaration can be retrieved from the expected location.

Test method
  1. Construct a path for each “rel=http://www.opengis.net/def/rel/ogc/1.0/conformance” link on the landing page as well as for the {root}/conformance path.

  2. Issue an HTTP GET request on each path.

  3. Validate the contents of the returned document using test /conf/core/conformance-success.

Abstract test A.6

Identifier/conf/core/conformance-success
RequirementRequirement 6: /req/core/conformance-success
Test purpose

Validate that the Conformance Declaration response complies with the required structure and contents.

Test method
  1. Validate that a document was returned with an HTTP status code of 200.

  2. Validate the response document against OpenAPI 3.0 schema link: confClasses.yaml.

  3. Validate that the document includes the conformance class “http://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/core”.

  4. Validate that the document list all OGC API conformance classes that the API implements.

A.7.  Use of HTTP 1.1

Abstract test A.7

Identifier/conf/core/http
RequirementRequirement 7: /req/core/http
Test purpose

Validate that the resource paths advertised through the API conform with HTTP 1.1 and, where appropriate, TLS.

Test method
  1. All compliance tests SHALL be configured to use the HTTP 1.1 protocol exclusively.

  2. For APIs which support HTTPS, all compliance tests SHALL be configured to use HTTP over TLS (RFC 2818) with their HTTP 1.1 protocol.

A.8.  Retrieve a process list

Abstract test A.8

Identifier/conf/core/process-list
RequirementRequirement 8: /req/core/process-list
Test purpose

Validate that information about the processes can be retrieved from the expected location.

Test method
  1. Issue an HTTP GET request to the URL {root}/processes

  2. Validate the contents of the returned document using test /conf/core/process-list-success.

Abstract test A.9

Identifier/conf/core/pl-limit-definition
RequirementRequirement 9: /req/core/pl-limit-definition
Test purpose

Validate that the limit query parameter is constructed correctly.

Test method

Verify that the limit query parameter complies with its definition in requirement /req/core/pl-limit-definition.

NOTE 1:  An implementation of the Processes API can define different values for “minimum”, “maximum” and “default”.

Abstract test A.10

Identifier/conf/core/pl-limit-response
RequirementRequirement 10: /req/core/pl-limit-response
Test purpose

Validate that the limit query parameter is processed correctly.

Test method
  1. Get a list of processes as per test /conf/core/process-list-op and append the limit query parameter to the request.

  2. Count the number of process summaries listed in the response.

  3. Verify that this count is not greater than the value specified by the limit parameter.

  4. If the API definition specifies a maximum value for limit parameter, verify that the count does not exceed this maximum value.

Abstract test A.11

Identifier/conf/core/process-list-success
RequirementRequirement 11: /req/core/process-list-success
Test purpose

Validate that the process list content complies with the required structure and contents.

Test method
  1. Validate that a document was returned with an HTTP status code of 200.

  2. Validate the process list content for all supported media types using the resources and tests identified in Table A.2

NOTE 2:  The process list may be retrieved in one of two formats. The following table identifies the applicable schema document for each format and the test to be used to validate the against that schema. All supported formats should be exercised.

Table A.2 — Schema and Tests for Lists content

FormatSchema DocumentTest ID
HTMLprocessList.yaml/conf/html/content
JSONprocessList.yaml/conf/json/content

A.9.  Retrieve a process description

Abstract test A.13

Identifier/conf/core/process-description
RequirementRequirement 14: /req/core/process-description
Test purpose

Validate that a process description can be retrieved from the expected location.

Test method
  1. For every Process described in the process list content, issue an HTTP GET request to the URL /processes/{processID} where {processID} is the id property for the process.

  2. Validate the response using the test /conf/core/process-description-success.

Abstract test A.14

Identifier/conf/core/process-description-success
RequirementRequirement 15: /req/core/process-description-success
Test purpose

Validate that the content complies with the required structure and contents.

Test method
  1. Validate that a document was returned with an HTTP status code of 200.

  2. Verify that the content of the response is valid description of the interface of the process for all supported process description models.

NOTE:  The interface of a process may be described using one of a number of different models or process description languages. The following table identifies the applicable schema document for each process description model described in this standard.

Table A.3 — Schema and Tests for Process Description Models

ModelSchema DocumentTest ID
OGC Process Description JSONprocess.yaml/conf/ogc-process-description/json-encoding

A.10.  Process exception

Abstract test A.15

Identifier/conf/core/process-exception-no-such-process
Requirement/req/core/process-exception-no-such-process
Test purpose

Validate that an invalid process identifier is handled correctly.

Test method
  1. Issue an HTTP GET request to a URL that includes the {processID} as a path element using a non-existent process identifier.

  2. Validate that the document was returned with a 404.

  3. Validate that the document contains the exception typehttp://www.opengis.net/def/exceptions/ogcapi-processes-1/1.0/no-such-process”.

  4. Validate the document for all supported media types using the resources and tests identified in Table A.4

NOTE:  An exception response caused by using an invalid process identifier may be retrieved in one of two formats. The following table identifies the applicable schema document for each format and the test to be used to validate the response. All supported formats should be exercised.

Table A.4 — Schema and Tests for Non-existent Process

FormatSchema DocumentTest ID
HTMLexception.yaml/conf/html/content
JSONexception.yaml/conf/json/content

A.11.  Process execution /processes/{processID}/execution

Abstract test A.16

Identifier/conf/core/process-execute-op
RequirementRequirement 17: /req/core/process-execute-op
Test purpose

Validate the execution of a process.

Test method
  1. Issue an HTTP POST request to the URL ‘/processes/{processID}/execution’ for each execution mode according to requirements /conf/core/process-execute-default-execution-mode or /conf/core/process-execute-auto-execution-mode.

  2. Validate that the server supports a POST request for that operation according to the test /conf/core/process-execute-request.

  3. Validate the execution of a process according to the requirements /req/core/process-execute-default-execution-mode, /req/core/process-execute-auto-execution-mode.

Abstract test A.17

Identifier/conf/core/process-execute-request
RequirementRequirement 18: /req/core/process-execute-request
Test purpose

Validate that the server supports a process execution operation complying with the required structure and contents.

Test method

Verify that the server supports a process execution request whose body conforms to the OpenAPI 3.0 schema execute.yaml.

Abstract test A.18

Identifier/conf/core/process-execute-inputs
Requirement/req/core/process-execute-inputs
Test purpose

Validate that servers can accept input values both inline and by reference.

Test method
  1. Verify that the server passes tests /conf/core/process-execute-input-inline-binary, /conf/core/process-execute-input-inline-multiple-types, /conf/core/process-execute-input-inline-object, /conf/core/process-execute-input-inline-bbox .

  2. For each test, specify the input value in-line in the execute request.

  3. For each test, specify the input value by reference using a link in the execute request.

Abstract test A.19

Identifier/conf/core/process-execute-input-array
RequirementRequirement 21: /req/core/process-execute-input-array
Test purpose

Verify that the server correctly recognizes the encoding of parameter values for input parameters with a maximum cardinality greater than one.

Test method
  1. Get a description of each process offered by the server using test /conf/core/process-description.

  2. Inspect the description of each process and identify the list of processes that have inputs with a maximum cardinality greater than one.

  3. For each identified process construct an execute request according to test /conf/core/process-execute-request taking care to encode the inputs with maximum cardinality > 1 according to the requirement /req/core/process-execute-input-array.

  4. Verify that each process executes successfully according to the relevant requirement (one of: /req/core/process-execute-success-async, /req/core/process-execute-sync-many-json, /req/core/process-execute-sync-one, /req/core/process-execute-sync-one-default-content) based on the combination of execute parameters.

Abstract test A.20

Identifier/conf/core/process-execute-input-inline-object
RequirementRequirement 22: /req/core/process-execute-input-inline-object
Test purpose

Validate that inputs with a complex object schema encoded in-line in an execute request are correctly processed.

Test method
  1. Get a description of each process offered by the server using test /conf/core/process-description.

  2. Inspect the description of each process and identify the subset of processes that have inputs with complex object schemas (i.e. inputs of type `object).

  3. For each identified process construct an execute request according to test /conf/core/process-execute-request taking care to encode the identified object inputs in-line in the execute request according to requirement /req/core/process-execute-input-inline-object.

  4. Verify that each process executes successfully according to the relevant requirement (one of: /req/core/process-execute-success-async, /req/core/process-execute-sync-many-json, /req/core/process-execute-sync-one, /req/core/process-execute-sync-one-default-content) based on the combination of execute parameters.

Abstract test A.21

Identifier/conf/core/process-execute-input-inline-multiple-types
Requirement/req/core/process-execute-input-inline-multiple-types
Test purpose

Validate that inputs of multiple types encoded in-line in an execute request are correctly processed.

Test method
  1. Get a description of each process offered by the server using test /conf/core/process-description.

  2. Inspect the description of each process and identify the subset of processes that have inputs of multiple types using the oneOf[] JSON Schema construct to define several alternate input value schemas.

  3. For each identified process construct an execute request according to test /conf/core/process-execute-request taking care to encode the identified mix-content inputs in-line in the execute request according to requirement /req/core/process-execute-input-inline-multiple-types.

  4. Verify that each process executes successfully according to the relevant requirement (one of: /req/core/process-execute-success-async, /req/core/process-execute-sync-many-json, /req/core/process-execute-sync-one, /req/core/process-execute-sync-one-default-content) base on the combination of execute parameters.

Abstract test A.22

Identifier/conf/core/process-execute-input-inline-binary
RequirementRequirement 24: /req/core/process-execute-input-inline-binary
Test purpose

Validate that binary input values encoded as base-64 string in-line in an execute request are correctly processes.

Test method
  1. Get a description of each process offered by the server using test /conf/core/process-description.

  2. Inspect the description of each process and identify the subset of processes that have binary inputs.

  3. For each identified process construct an execute request according to test /conf/core/process-execute-request taking care to encode binary input values in-line in the execute request according to requirement /req/core/process-execute-input-inline-binary.

  4. Verify that each process executes successfully according to the relevant requirement (one of: /req/core/process-execute-success-async, /req/core/process-execute-sync-many-json, /req/core/process-execute-sync-one, /req/core/process-execute-sync-one-default-content) base on the combination of execute parameters.

Abstract test A.23

Identifier/conf/core/process-execute-input-inline-bbox
RequirementRequirement 25: /req/core/process-execute-input-inline-bbox
Test purpose

Validate that inputs with a bounding box schema encoded in-line in an execute request are correctly processed.

Test method
  1. Get a description of each process offered by the server using test /conf/core/process-description.

  2. Inspect the description of each process and identify the subset of processes that have bounding box inputs that are supposed to conform to the bbox.yaml schema.

  3. For each identified process construct an execute request according to test /conf/core/process-execute-request taking care to encode values for the identified bounding box inputs in-line in the execute request.

  4. Verify that each process executes successfully according to the relevant requirement (one of: /req/core/process-execute-success-async, /req/core/process-execute-sync-many-json, /req/core/process-execute-sync-one, /req/core/process-execute-sync-one-default-content) based on the combination of execute parameters.

Abstract test A.24

Identifier/conf/core/process-execute-input-validation
RequirementRequirement 26: /req/core/process-execute-input-validation
Test purpose

Verify that the server correctly validates process input values according to the definition obtained from the process description.

Test method
  1. Get a description of each process offered by the server using test /conf/core/process-description.

  2. Inspect the description of each process taking note of the definition of each process input and specifically the schema of each process input.

  3. For each process construct an execute request according to test /conf/core/process-execute-request taking care to encode the input values according to the schema from the definition of each input.

  4. Verify that each process execute successfully according to the relevant requirement (one of: /req/core/process-execute-success-async, /req/core/process-execute-sync-many-json, /req/core/process-execute-sync-one, /req/core/process-execute-sync-one-default-content) base on the combination of execute parameters.

  5. For each process construct an execute request according to test /conf/core/process-execute-request taking care to encode some of the input values in violation of the schema from the definition of the selected input.

  6. Verify that each process generates an exception report that identifies the improperly specified input value(s).

Abstract test A.25

Identifier/conf/core/process-execute-default-execution-mode
RequirementRequirement 17: /req/core/process-execute-op
Test purpose

Validate that the server correctly handles the default execution mode for a process.

Test method
  1. Get a description of each process offered by the server using test /conf/core/process-description.

  2. Inspect the description of each process and take note of the job control options for the process.

  3. Without setting the HTTP Prefer header, construct an execute request according to test /conf/core/process-execute-request.

  4. For processes that are supposed to execute asynchronously according to the /req/core/process-execute-default-execution-mode requirement, verify the successful execution according to the /conf/core/process-execute-success-async test.

  5. For processes that are supposed to execute synchronously according to the /req/core/process-execute-auto-execution-mode requirement, verify the successful synchronous execution according to the relevant requirement (one of: /req/core/process-execute-sync-many-json, /req/core/process-execute-sync-one, /req/core/process-execute-sync-one-default-content) base on the combination of execute parameters.

Abstract test A.26

Identifier/conf/core/process-execute-auto-execution-mode
RequirementRequirement 17: /req/core/process-execute-op
Test purpose

Validate that the server correctly handles the execution mode for a process.

Test method
  1. Get a description of each process offered by the server using test /conf/core/process-description.

  2. Inspect the description of each process and take note of the job control options for the process.

  3. Setting the HTTP Prefer header to include the respond-sync preference, construct an execute request according to test /conf/core/process-execute-request.

  4. For processes that are supposed to execute asynchronously according to the /req/core/process-execute-auto-execution-mode requirement, verify the successful execution according to the /req/core/process-execute-success-async test.

  5. For processes that are supposed to execute synchronously according to the /req/core/process-execute-auto-execution-mode requirement, verify the successful execution according to the relevant requirement (one of: /req/core/process-execute-sync-many-json, /req/core/process-execute-sync-one, /req/core/process-execute-sync-one-default-content) based on the combination of execute parameters.

  6. For processes that may execute either synchronously or asynchronously according to the /req/core/process-execute-auto-execution-mode requirement, verify the successful execution according to the relevant requirement (one of: /req/core/process-execute-success-async, /req/core/process-execute-sync-many-json, /req/core/process-execute-sync-one, /req/core/process-execute-sync-one-default-content) based on the combination of execute parameters.

Abstract test A.27

Identifier/conf/core/process-execute-default-outputs
RequirementRequirement 17: /req/core/process-execute-op
Test purpose

Validate that the server correctly handles the case where no outputs parameter is specified on an execute request.

Test method
  1. Get a description of each process offered by the server using test /conf/core/process-description.

  2. Inspect the description of each process taking note of the definition of each process output.

  3. For each process construct an execute request according to test /conf/core/process-execute-request taking care to omit the outputs parameter.

  4. Verify that each process executes successfully according to the relevant requirement (one of: /req/core/process-execute-success-async, /req/core/process-execute-sync-many-json, /req/core/process-execute-sync-one, /req/core/process-execute-sync-one-default-content) based on the combination of execute parameters.

  5. Verify that each process includes all the outputs, as defined in the process description, in the response.

Abstract test A.28

Identifier/conf/core/process-execute-sync-one
RequirementRequirement 29: /req/core/process-execute-sync-one
Test purpose

Validate that the correct output is generated upon process execution when a single output is requested.

Test method
  1. Negotiate synchronous process execution as per test /req/core/process-execute-op.

  2. Request a single output with identifier {outputID} as per test /req/core/job-results-param-outputs.

  3. Negotiate an output format that is supported for the requested output according to the process’ description that has been retrieved as per test /req/core/process-description.

  4. Validate that the response conforms to the requirements of /req/core/process-execute-sync-one.

Abstract test A.29

Identifier/conf/core/process-execute-sync-one-default-content
RequirementRequirement 30: /req/core/process-execute-sync-one-default-content
Test purpose

Validate that the default output format is generated upon process execution when a single output is requested but no specific supported format is negotiated.

Test method
  1. Negotiate synchronous process execution as per test /req/core/process-execute-op.

  2. Request a single output with identifier {outputID} as per test /req/core/job-results-param-outputs.

  3. Do not negotiate a specific format for the requested output.

  4. Validate that the response conforms to the requirements of /req/core/process-execute-sync-one-default-content.

Abstract test A.30

Identifier/conf/core/process-execute-sync-many-json
RequirementRequirement 31: /req/core/process-execute-sync-many-json
Test purpose

Validate that the correct output with the correct content type is generated when a process generating multiple responses is synchronously executed.

Test method
  1. Negotiate synchronous process execution as per test /req/core/process-execute-op.

  2. Request at least 2 process outputs as per test /req/core/job-results-param-outputs.

  3. Validate that the response conforms to the requirements of /req/core/process-execute-sync-many-json.

Abstract test A.31

Identifier/conf/core/job-results-success-sync
RequirementRequirement 33: /req/core/job-results-success-sync
Test purpose

Validate that the server responds as expected when getting results from a job for a process that has been executed synchronously.

Test method
  1. Get a description of each process offered by the server using test /conf/core/process-description.

  2. Inspect the description of each process and identify the subset of processes that support the sync-execute job control option.

  3. For each identified process construct an execute request according to test /conf/core/process-execute-request ensuring that synchronous execution is negotiated according to test /conf/core/process-execute-default-execution-mode.

  4. Inspect the headers of the response and see if a Link header is included with rel=monitor.

  5. If the link exists, get the job status as per test /conf/core/job-op and ensure that the job status is set to successful.

Abstract test A.32

Identifier/conf/core/process-execute-success-async
RequirementRequirement 34: /req/core/process-execute-success-async
Test purpose

Validate the results of a job that has been created using the async execution mode.

Test method
  1. Validate that the response returned with an HTTP status code of 201.

  2. Validate that the response includes the HTTP Location header and that the link points to the newly created job.

  3. Validate that the response body conforms to the JSON Schema fragment statusInfo.yaml.

A.12.  Jobs

A.12.1.  Job status /jobs/{jobID}

Abstract test A.33

Identifier/conf/core/job-op
Requirement/req/core/job-op
Test purpose

Validate that the status info of a job can be retrieved.

Test method
  1. Create a job as per /req/core/process-execute-op and note the {jobID} assigned to the job.

  2. Issue an HTTP GET request to the URL ‘/jobs/{jobID}’.

  3. Validate the contents of the returned document using the test /conf/core/job-success.

Abstract test A.34

Identifier/conf/core/job-success
RequirementRequirement 39: /req/core/job-success
Test purpose

Validate that the job status info complies with the require structure and contents.

Test method
  1. Validate that the document was returned with an HTTP status code of 200.

  2. Validate the job status info for all supported media types using the resources and tests identified in Table A.5

NOTE 1:  The status info page for a job may be retrieved in a one of two formats. The following table identifies the applicable schema document for each format and the test to be used to validate the status info against that schema. All supported formats should be exercised.

Table A.5 — Schema and Tests for the Job Status Info

FormatSchema DocumentTest ID
HTMLstatusInfo.yaml/conf/html/content
JSONstatusInfo.yaml/conf/json/content

Abstract test A.35

Identifier/conf/core/job-exception-no-such-job
RequirementRequirement 40: /req/core/job-exception-no-such-job
Test purpose

Validate that an invalid job identifier is handled correctly.

Test method
  1. Issue an HTTP GET request to the URL that includes the {jobID} as a path element using a non-existent job identifier.

  2. Validate that the document was returned with a 404.

  3. Validate that the document contains the exception type “http://www.opengis.net/def/exceptions/ogcapi-processes-1/1.0/no-such-job”.

  4. Validate the document for all supported media types using the resources and tests identified in Table A.6

NOTE 2:  An exception response caused by using an invalid job identifier may be retrieved in one of two formats. The following table identifies the applicable schema document for each format and the test to be used to validate the response. All supported formats should be exercised.

Table A.6 — Schema and Tests for the Job Result for Non-existent Job

FormatSchema DocumentTest ID
HTMLexception.yaml/conf/html/content
JSONexception.yaml/conf/json/content

A.12.2.  Retrieve job results

Abstract test A.36

Identifier/conf/core/job-result
RequirementRequirement 44: /req/core/job-result
Test purpose

Validate that each process output with identifier {outputID} can be retrived from the /jobs/{jobID}/results/{outputID} endpoint.

Test method
  1. Negotiate asynchronous process execution as per test /req/core/process-execute-op.

  2. Validate that each process output can be retrived as per requirement /req/core/job-result.

Abstract test A.37

Identifier/conf/core/job-results
RequirementRequirement 41: /req/core/job-results
Test purpose

Validate that the results of a job can be retrieved.

Test method
  1. Create a job as per /req/core/process-execute-op and note the {jobID} assigned to the job.

  2. Issue an HTTP GET request to the URL ‘/jobs/{jobID}/results’.

  3. Validate that the document was returned with a status code 200.

  4. Depending on the number of outputs requested, the negotiated content type of the response and any client preferences, validate the contents of the returned document using the tests /conf/core/job-results-success-sync, /conf/core/job-results-async-one or /conf/core/job-results-async-many.

Abstract test A.38

Identifier/conf/core/job-results-param-outputs
RequirementRequirement 42: /req/core/job-results-param-outputs
Test purpose

Validate that the outputs parameter is constructed correctly.

Test method
  1. Verify that the outputs parameter complies with its definition in requirement req/core/job-results-param-outputs.

NOTE 1:  The API can define different values for “minimum”, “maximum” and “default”.

Abstract test A.39

Identifier/conf/core/job-results-param-outputs-response
RequirementRequirement 43: /req/core/job-results-param-outputs-response
Test purpose

Validate that only the requested processing results are included in the response when the outputs parameter is specified on a process execution request.

Test method

Include the outputs parameter on a process execution request that enumerates a list of process outputs to include the response. Verify that the response includes the requested process outputs.

Abstract test A.40

Identifier/conf/core/job-results-param-outputs-omit
Requirement/req/core/job-results-param-outputs-omit
Test purpose

Validate that all processing results are included in the response when the outputs parameter is omitted from a process execution request.

Test method

Omit the outputs parameter from a process execution request and verify that all processing results are included in the response.

Abstract test A.41

Identifier/conf/core/job-results-param-outputs-empty
Requirement/req/core/job-results-param-outputs-empty
Test purpose

Validate that no processing results are available when the outputs parameter is present in a process execution request but is empty.

Test method

Verify that the server responds with a 204 HTTP status code and an empty response body when an output is requested.

Abstract test A.42

Identifier/conf/core/job-results-async-one
RequirementRequirement 45: /req/core/job-results-async-one
Test purpose

Validate that only the requested processing result is included in the response when the outputs parameter requesting output with identifier {outputID} is specified on a process execution request.

Test method
  1. Negotiate asynchronous process execution as per test /req/core/process-execute-op.

  2. Request a single process output with output identifier {outputID} as per test /req/core/job-results-param-outputs.

  3. Retrieve the processing response from the /jobs/{jobID}/results/{outputID} endpoint.

  4. Validate that the response conforms to the requirement /req/core/job-results-async-one.

Abstract test A.43

Identifier/conf/core/job-results-async-many
RequirementRequirement 46: /req/core/job-results-async-many
Test purpose

Validate that only the requested processing results are included in the response when the outputs parameter is specified on a process execution request.

Test method
  1. Negotiate asynchronous process execution as per test /req/core/process-execute-op.

  2. Request at least 2 process outputs as per test /req/core/job-results-param-outputs.

  3. Validate that the processing results retrieved from the /jobs/{jobID}/results endpoint conform to requirement /req/core/job-results-async-many.

Abstract test A.44

Identifier/conf/core/job-results-exception-no-such-job
Requirement/req/core/job-results-exception-no-such-job
Test purpose

Validate that the job results retrieved using an invalid job identifier complies with the require structure and contents.

Test method
  1. Issue an HTTP GET request to the URL ‘/jobs/{jobID}/results’ using an invalid {jobID}.

  2. Validate that the document was returned with a 404.

  3. Validate that the document contains the exception type “http://www.opengis.net/def/exceptions/ogcapi-processes-1/1.0/no-such-job”.

  4. Validate the document for all supported media types using the resources and tests identified in Table A.7

NOTE 2:  The job results page for a job may be retrieved in one of two formats. The following table identifies the applicable schema document for each format and the test to be used to validate the job results for a non-existent job against that schema. All supported formats should be exercised.

Table A.7 — Schema and Tests for the Job Result for Non-existent Job

FormatSchema DocumentTest ID
HTMLexception.yaml/conf/html/content
JSONexception.yaml/conf/json/content

Abstract test A.45

Identifier/conf/core/job-results-exception-results-not-ready
Requirement/req/core/job-results-exception-results-not-ready
Test purpose

Validate that the job results retrieved for an incomplete job complies with the require structure and contents.

Test method
  1. Create a job as per /req/core/process-execute-op and note the {jobID} assigned to the job. Ensure that the job is long-running.

  2. Issue an HTTP GET request to the URL ‘/jobs/{jobID}/results’ before the job completes execution.

  3. Validate that the document was returned with a 404.

  4. Validate that the document contains the exception typehttp://www.opengis.net/def/exceptions/ogcapi-processes-1/1.0/result-not-ready”.

  5. Validate the document for all supported media types using the resources and tests identified in Table A.8

NOTE 3:  The job results page for a job may be retrieved in one of two formats. The following table identifies the applicable schema document for each format and the test to be used to validate the job results for an incomplete job against that schema. All supported formats should be exercised.

Table A.8 — Schema and Tests for the Job Result for an Incomplete Job

FormatSchema DocumentTest ID
HTMLexception.yaml/conf/html/content
JSONexception.yaml/conf/json/content

Abstract test A.46

Identifier/conf/core/job-results-failed
RequirementRequirement 51: /req/core/job-results-failed
Test purpose

Validate that the job results for a failed job complies with the require structure and contents.

Test method
  1. Create a job as per /req/core/process-execute-op but arrange a priori that the job will fail. Note the {jobID} assigned to the job.

  2. Ensure that the failed job will not result in an HTTP 404 error code.

  3. Issue an HTTP GET request to the URL ‘/jobs/{jobID}/results’.

  4. Validate that the document was returned with a HTTP error code (4XX or 5XX).

  5. Validate that the document contains an exception type that corresponds to the reason the job failed (e.g. InvalidParameterValue for invalid input data).

  6. Validate the document for all supported media types using the resources and tests identified in Table A.9

NOTE 4:  The job results page for a job may be retrieved in one of two formats. The following table identifies the applicable schema document for each format and the test to be used to validate the job results for a failed job against that schema. All supported formats should be exercised.

Table A.9 — Schema and Tests for the Job Result for a Failed Job

FormatSchema DocumentTest ID
HTMLexception.yaml/conf/html/content
JSONexception.yaml/conf/json/content

A.13.  Conformance Class OGC Process Description

Conformance class A.2

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/ogc-process-description
Subject
Target TypeWeb API
Conformance testsAbstract test A.50: /conf/ogc-process-description/input-def
Abstract test A.51: /conf/ogc-process-description/input-multiple-types
Abstract test A.49: /conf/ogc-process-description/inputs-def
Abstract test A.47: /conf/ogc-process-description/json-encoding
Abstract test A.48: /conf/ogc-process-description/links
Abstract test A.53: /conf/ogc-process-description/output-def
Abstract test A.54: /conf/ogc-process-description/output-multiple-types
Abstract test A.52: /conf/ogc-process-description/outputs-def

Abstract test A.47

Identifier/conf/ogc-process-description/json-encoding
RequirementRequirement 66: /req/ogc-process-description/json-encoding
Test purpose

Verify that a JSON-encoded OGC Process Description complies with the required structure and contents.

Test method
  1. Retrieve a description of each process according to test /conf/core/process-description.

  2. For each process, verify the contents of the response body validate against the JSON Schema: process.yaml.

Abstract test A.49

Identifier/conf/ogc-process-description/inputs-def
RequirementRequirement 68: /req/ogc-process-description/inputs-def
Test purpose

Verify that the definition of inputs for each process complies with the required structure and contents.

Test method
  1. Retrieve a description of each process according to test /conf/core/process-description.

  2. For each process, verify that the definition of the inputs conforms to the JSON Schema: inputDescription.yaml.

Abstract test A.50

Identifier/conf/ogc-process-description/input-def
RequirementRequirement 69: /req/ogc-process-description/input-def
Test purpose

Verify that the definition of each input for each process complies with the required structure and contents.

Test method

For each input identified according to the test /conf/ogc-process-description/inputs-def verify that the value of the schema key, that defines the input, validates according to the JSON Schema: schema.yaml.

Abstract test A.51

Identifier/conf/ogc-process-description/input-multiple-types
RequirementRequirement 71: /req/ogc-process-description/input-multiple-types
Test purpose

Validate that each input of multiple type complies with the required structure and contents.

Test method
  1. Retrieve a description of each process according to test /conf/core/process-description.

  2. For each process identify if the process has one or more inputs of multiple types.

  3. For each sub-schema of each identified input, verify that the definition validates according to the JSON Schema: schema.yaml.

Abstract test A.52

Identifier/conf/ogc-process-description/outputs-def
RequirementRequirement 73: /req/ogc-process-description/outputs-def
Test purpose

Verify that the definition of outputs for each process complies with the required structure and contents.

Test method
  1. Retrieve a description of each process according to test /conf/core/process-description.

  2. For each process, verify that the definition of the outputs conforms to the JSON Schema: outputDescription.yaml.

Abstract test A.53

Identifier/conf/ogc-process-description/output-def
RequirementRequirement 74: /req/ogc-process-description/output-def
Test purpose

Verify that the definition of each output for each process complies with the required structure and contents.

Test method

For each output identified according to the test /conf/ogc-process-description/outputs-def verify that the value of the schema key, that defines the output, validates according to the JSON Schema: schema.yaml.

Abstract test A.54

Identifier/conf/ogc-process-description/output-multiple-types
RequirementRequirement 75: /req/ogc-process-description/output-multiple-types
Test purpose

Validate that each output of multiple types complies with the required structure and contents.

Test method
  1. Retrieve a description of each process according to test /conf/core/process-description.

  2. For each process identify if the process has one or more output of multiple types denoted by using the oneOf JSON Schema keyword.

  3. For each sub-schema or each identified output, verify that the definition validates according to the JSON Schema: schema.yaml.

A.14.  Conformance Class JSON

Conformance class A.3

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/json
Subject
Target TypeWeb API
Conformance testAbstract test A.55: /conf/json/definition

Abstract test A.55

Identifier/conf/json/definition
RequirementRequirement 76: /req/json/definition
Test purpose

Verify support for JSON.

Test method
  1. A resource is requested with response media type of application/json.

  2. All 200 responses SHALL support the following media types: application/json for all resources.

A.15.  Conformance Class HTML

Conformance class A.4

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/html
Subject
PrerequisiteConformance Class “Core”
Target TypeWeb API
Conformance testsAbstract test A.56: /conf/html/content
Abstract test A.57: /conf/html/definition

Abstract test A.56

Identifier/conf/html/content
RequirementRequirement 78: /req/html/content
Test purpose

Verify the content of an HTML document given an input document and schema.

Test method
  1. Validate that the document is an W3C HTML 5 document.

  2. Manually inspect the document and verify that the HTML body contains:

    1. all information in the schemas of the Response Object in the HTML <body/>,

    2. all links in HTML <a/> elements in the HTML <body/>.

Abstract test A.57

Identifier/conf/html/definition
RequirementRequirement 77: /req/html/definition
Test purpose

Verify support for HTML

Test method

Verify that every 200 response for every operation of the Processes API implementation for which HTML was requested is of media type text/html.

A.16.  Conformance Class OpenAPI 3.0

Conformance class A.5

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/oas30
Subject
PrerequisiteConformance Class “Core”
Target TypeWeb API
Conformance testsAbstract test A.58: /conf/oas30/completeness
Abstract test A.59: /conf/oas30/exceptions-codes
Abstract test A.60: /conf/oas30/oas-definition-1
Abstract test A.61: /conf/oas30/oas-definition-2
Abstract test A.62: /conf/oas30/oas-impl
Abstract test A.63: /conf/oas30/security

Abstract test A.58

Identifier/conf/oas30/completeness
RequirementRequirement 82: /req/oas30/completeness
Test purpose

Verify the completeness of an OpenAPI document.

Test method

Verify that for each operation, the OpenAPI document describes all HTTP Status Codes and Response Objects that the API uses in responses.

Abstract test A.59

Identifier/conf/oas30/exceptions-codes
RequirementRequirement 83: /req/oas30/exceptions-codes
Test purpose

Verify that the OpenAPI document fully describes potential exception codes.

Test method

Verify that for each operation, the OpenAPI document describes all HTTP Status Codes that may be generated.

Abstract test A.60

Identifier/conf/oas30/oas-definition-1
RequirementRequirement 79: /req/oas30/oas-definition-1
Test purpose

Verify that JSON and HTML versions of the OpenAPI document are available.

Test method
  1. Verify that an OpenAPI definition in JSON is available using the media type application/vnd.oai.openapi+json;version=3.0 and link relation service-desc

  2. Verify that an HTML version of the API definition is available using the media type text/html and link relation service-doc.

Abstract test A.61

Identifier/conf/oas30/oas-definition-2
RequirementRequirement 80: /req/oas30/oas-definition-2
Test purpose

Verify that the OpenAPI document is valid JSON.

Test method

Verify that the JSON representation conforms to the OpenAPI Specification, version 3.0.

Abstract test A.62

Identifier/conf/oas30/oas-impl
RequirementRequirement 81: /req/oas30/oas-impl
Test purpose

Verify that all capabilities specified in the OpenAPI definition are implemented by the API.

Test method
  1. Construct a path from each URL template including all server URL options and all enumerated path parameters.

  2. For each path defined in the OpenAPI document, validate that the path performs in accordance with the API definition and the OGC API — Processes standard.

Abstract test A.63

Identifier/conf/oas30/security
RequirementRequirement 84: /req/oas30/security
Test purpose

Verify that any authentication protocols implemented by the API are documented in the OpenAPI document.

Test method
  1. Identify all authentication protocols supported by the API.

  2. Validate that each authentication protocol is described in the OpenAPI document by a Security Schema Object and its use is specified by a Security Requirement Object.

A.17.  Conformance Class Job list

Conformance class A.6

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/job-list
Subject
Target TypeWeb API
Conformance testsAbstract test A.72: /conf/job-list/datetime-definition
Abstract test A.73: /conf/job-list/datetime-response
Abstract test A.74: /conf/job-list/duration-definition
Abstract test A.75: /conf/job-list/duration-response
Abstract test A.64: /conf/job-list/job-list-op
Abstract test A.79: /conf/job-list/job-list-success
Abstract test A.76: /conf/job-list/limit-definition
Abstract test A.77: /conf/job-list/limit-response
Abstract test A.78: /conf/job-list/links
Abstract test A.68: /conf/job-list/processID-definition
Abstract test A.67: /conf/job-list/processID-mandatory
Abstract test A.69: /conf/job-list/processID-response
Abstract test A.70: /conf/job-list/status-definition
Abstract test A.71: /conf/job-list/status-response
Abstract test A.65: /conf/job-list/type-definition
Abstract test A.66: /conf/job-list/type-response

Abstract test A.64

Identifier/conf/job-list/job-list-op
RequirementRequirement 85: /req/job-list/job-list-op
Test purpose

Validate that information about jobs can be retrieved from the expected location.

Test method
  1. Issue an HTTP GET request to the URL /jobs.

  2. Validate the contents of the returned document using test /conf/job-list/job-list-success.

Abstract test A.65

Identifier/conf/job-list/type-definition
RequirementRequirement 86: /req/job-list/type-definition
Test purpose

Validate that the type query parameter is constructed correctly.

Test method

Verify that the type query parameter complies with its definition in requirement /req/job-list/type-definition.

Abstract test A.66

Identifier/conf/job-list/type-response
RequirementRequirement 87: /req/job-list/type-response
Test purpose

Validate that the type query parameter is processed correctly.

Test method
  1. Get a list of jobs as per test /conf/job-list/job-list-op and append the type query parameter to the request.

  2. Inspect the value of the type property for each job listed in the response.

  3. Verify that that value of the type property matches one of the values specified for the type query parameter.

Abstract test A.67

Identifier/conf/job-list/processID-mandatory
RequirementRequirement 88: /req/job-list/processID-mandatory
Test purpose

Validate that the processID property is present in every job.

Test method
  1. Get a list of jobs as per test /conf/job-list/job-list-op.

  2. Verify that each job includes a processID property.

Abstract test A.68

Identifier/conf/job-list/processID-definition
RequirementRequirement 89: /req/job-list/processID-definition
Test purpose

Validate that the processID query parameter is constructed correctly.

Test method

Verify that the processID query parameter complies with its definition in requirement /req/job-list/processID-definition.

Abstract test A.69

Identifier/conf/job-list/processID-response
Requirement/req/job-list/processID-response
Test purpose

Validate that the processID query parameter is processed correctly.

Test method
  1. Get a list of jobs as per test /conf/job-list/job-list-op and append the processID parameter to the request.

  2. Inspect the value of the processID property for each job listed in the response.

  3. Verify that that value of the processID property matches one of the values specified for the processID query parameter.

Abstract test A.70

Identifier/conf/job-list/status-definition
RequirementRequirement 91: /req/job-list/status-definition
Test purpose

Validate that the status query parameter is constructed correctly.

Test method

Verify that the status query parameter complies with its definition in requirement /req/job-list/status-definition.

Abstract test A.71

Identifier/conf/job-list/status-response
RequirementRequirement 92: /req/job-list/status-response
Test purpose

Validate that the status query parameter is processed correctly.

Test method
  1. Get a list of jobs as per test /conf/job-list/job-list-op and append the status query parameter to the request.

  2. Inspect the value of the status property (see: statusInfo.yaml) for each job listed in the response.

  3. Verify that the value of the status property matches one of the values specified for the status query parameter.

Abstract test A.72

Identifier/conf/job-list/datetime-definition
RequirementRequirement 93: /req/job-list/datetime-definition
Test purpose

Validate that the datetime query parameter is constructed correctly.

Test method

Verify that the datetime query parameter complies with its definition in requirement /req/job-list/datetime-definition.

Abstract test A.73

Identifier/conf/job-list/datetime-response
RequirementRequirement 94: /req/job-list/datetime-response
Test purpose

Validate that the datetime query parameter is processed correctly.

Test method
  1. Get a list of jobs as per test /conf/job-list/job-list-op and append the datetime query parameter to the request.

  2. Inspect the value of the created (see: statusInfo.yaml) property for each job listed in the response.

  3. Verify that the value of the created temporally intersects with the value specified for the datetime query parameter.

Abstract test A.74

Identifier/conf/job-list/duration-definition
RequirementRequirement 95: /req/job-list/duration-definition
Test purpose

Validate that the minDuration and maxDuration query parameter are constructed correctly.

Test method
  1. Verify that the minDuration query parameter complies with its definition in requirement /req/job-list/duration-definition, A.

  2. Verify that the maxDuration query parameter complies with its definition in requirement /req/job-list/duration-definition, B.

Abstract test A.75

Identifier/conf/job-list/duration-response
RequirementRequirement 96: /req/job-list/duration-response
Test purpose

Validate that the minDuration and maxDuration query parameter are processed correctly.

Test method
  1. Get a list of jobs as per test /conf/job-list/job-list-op and append the minDuration query parameter to the request.

  2. Compute the duration of each job listed in the response document as per requirements /req/job-list/status-response, E or F depending on the current status of the job.

  3. Verify that the computed duration of each job listed in the response is at least as long as the specified value of the minDuration query parameter.

  4. Get a list of jobs as per test /conf/job-list/job-list-op and append the maxDuration query parameter to the request.

  5. Compute the duration of each job listed in the response document as per requirements /req/job-list/status-response, E or F depending on the current status of the job.

  6. Verify that the computed duration of each job listed in the response is no longer than the specified value of the maxDuration query parameter.

  7. Get a list of jobs as per test /conf/job-list/job-list-op and append the minDuration and maxDuration query parameters to the request.

  8. Compute the duration of each job listed in the response document as per requirements /req/job-list/status-response, E or F depending on the current status of the job.

  9. Verify that the computed duration of each job listed in the response is at least as long as the specified value of the minDuration query parameter AND no longer than the value of the maxDuration query parameter.

Abstract test A.76

Identifier/conf/job-list/limit-definition
RequirementRequirement 97: /req/job-list/limit-definition
Test purpose

Validate that the limit query parameter is constructed correctly.

Test method

Verify that the limit query parameter complies with its definition in requirement /req/job-list/limit-definition.

NOTE 1:  An implementation of the Processes API can define different values for “minimum”, “maximum” and “default”.

Abstract test A.77

Identifier/conf/job-list/limit-response
RequirementRequirement 98: /req/job-list/limit-response
Test purpose

Validate that the limit query parameter is processed correctly.

Test method
  1. Get a list of jobs as per test /conf/job-list/job-list-op and append the limit query parameter to the request.

  2. Count the number of jobs listed in the response.

  3. Verify that this count is not greater than the value specified by the limit parameter.

  4. If the API definition specifies a maximum value for limit parameter, verify that the count does not exceed this maximum value.

NOTE 2:  A job list may be retrieved in one of two formats. The following table identifies the applicable schema document for each format and the test to be used to validate the against that schema. All supported formats should be exercised.

Table A.10 — Schema and Tests for Job List Content

FormatSchema DocumentTest ID
HTMLjobList.yaml/conf/html/content
JSONjobList.yaml/conf/json/content

Abstract test A.79

Identifier/conf/job-list/job-list-success
RequirementRequirement 99: /req/job-list/job-list-success
Test purpose

Validate that the job list content complies with the required structure and contents.

Test method
  1. Validate that a document was returned with an HTTP status code of 200.

  2. Validate the job list content for all supported media types using the resources and tests identified in Table A.10

A.18.  Conformance Class Callback

Conformance class A.7

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/callback
Subject
Target TypeWeb API
Conformance testAbstract test A.80: /conf/callback/job-callback

Abstract test A.80

Identifier/conf/callback/job-callback
RequirementRequirement 101: /req/callback/job-callback
Test purpose

Validate the passing of a subscriber-URL in an execute request.

Test method
  1. Configure a URL endpoint to accept a message body from the server.

  2. Create an asynchronous execute request that includes the optional subscriber key (see execute.yaml.

  3. Execute the asynchronous job using test /conf/core/process-execute-request.

  4. Validate the job results are received by the specified callback URL.

A.19.  Conformance Class Dismiss

Conformance class A.8

Identifierhttp://www.opengis.net/spec/ogcapi-processes-1/1.0/conf/dismiss
Subject
Target TypeWeb API
Conformance testsAbstract test A.81: /conf/dismiss/job-dismiss-op
Abstract test A.82: /conf/dismiss/job-dismiss-success

Abstract test A.81

Identifier/conf/dismiss/job-dismiss-op
RequirementRequirement 102: /req/dismiss/job-dismiss-op
Test purpose

Validate that a running job can be dismissed.

Test method
  1. Create an asynchronous job as per test /conf/core/process-execute-op; not the job identifier, {jobID}, assigned to the job.

  2. Issue an HTTP DELETE operation to the URL /jobs/{jobID}.

  3. Validate the contents of the returned document using test /conf/dismiss/job-dismiss-success.

Abstract test A.82

Identifier/conf/dismiss/job-dismiss-success
RequirementRequirement 104: /req/dismiss/job-dismiss-success
Test purpose

Validate that the content returned when dismissing a job complies with the required structure and contents.

Test method
  1. Validate that a document was returned with an HTTP status code of 200.

  2. Validate that the status is the response is set to “dismissed”.

  3. Validate the process list content for all supported media types using the resources and tests identified in Table A.11.

NOTE:  The response to dismissing a job can be presented in one of two formats. The following table identifies the applicable schema document for each format and the test to be used to validate against that schema. All supported formats should be exercised.

Table A.11 — Schema and Tests for Dismissing a Job

FormatSchema DocumentTest ID
HTMLstatusInfo.yaml/conf/html/content
JSONstatusInfo.yaml/conf/json/content

Annex B
(informative)
Revision history

DateReleaseEditorPrimary clauses modifiedDescription
2017-03-070.1Benjamin Prossallinitial version
2018-05-160.1Stan Tillman1-5Update section 1-5
2018-07-251.0-draftBenjamin Prossall1.0-draft
2018-08-151.0-draftBenjamin ProssallRestructuring, added requirements classes
2018-11-291.0-draftBenjamin Pross7Update schemas and examples
2019-02-201.0-draftBenjamin Pross7Fix for #3
2019-03-211.0-draftBenjamin Pross6,7,8,9,10Alignment with OAPI Common, adjust schemas
2019-03-271.0-draftTom Kralidis, Benjamin Pross6,7,8,9,10Fix for #7, align bbox schema to WFS
2019-03-281.0-draftBenjamin Pross7Formatting
2019-03-291.0-draftBenjamin Pross7Adjust schemas and examples
2019-04-161.0-draftBenjamin Pross7Adjust schemas, fix validation errors, add more data types
2019-06-051.0-draftGérald Fenoy7Allow unbounded for maxOccurs, Fix issue with ValueDefinition references
2019-06-121.0-draftBenjamin Pross7Possible solution for #26
2019-06-191.0-draftGérald Fenoy7Add additionalParameter.yaml, update metadata.yaml and, descriptionType.yaml, fix indentation
2019-06-201.0-draftBrad Hards6,7Fix typo noted during OGC API presentation, fix for #34
2019-08-091.0-draft.2Benjamin Pross71.0-draft.2, use plural for results path, remove wrapper
2019-08-211.0-draft.2Benjamin Pross7adjust schemas, examples and figures, remove section about web caching
2019-10-011.0-draft.3Benjamin Pross71.0-draft.3, minor edits
2019-10-101.0-draft.3Gérald Fenoy, Tom Kralidis7Add implementations, Use status in place of infos in jobInfo definition
2019-10-221.0-draft.3Benjamin Pross7Remove mandatory path /api, fix for #50
2020-01-061.0-draft.3Francis Charette7Add implementation
2020-01-281.0-draft.3Gérald Fenoy7Adjust schemas and examples
2020-02-031.0-draft.3Benjamin Pross7Fix for #63
2020-02-181.0-draft.3Chris Durbin7Fix for #61
2020-04-011.0-draft.3Benjamin Pross7Add optional subscriber property to execute request, avoid duplication, create own type for entities with properties name and reference
2020-04-061.0-draft.3Benjamin Pross5,7Abbreviate process-description link relation to process-desc, update example, alphabetical ordering of link relations
2020-04-091.0-draft.3Benjamin Pross7Rename root.yaml to landingPage.yaml, add title and description to root.yaml
2020-04-281.0-draft.3Benjamin Pross7Move examples, responses and parameters from core asciidoc to external files
2020-04-291.0-draft.3Benjamin Pross11Add Requirements Class ‘Callback’
2020-04-301.0-draft.3Benjamin Pross6,11Move overview table to abstract, allow multiple URIs for callbacks
2020-05-051.0-draft.3Gérald Fenoy12Add Requirements Class ‘Dismiss’, fix includes and section headers
2020-05-81.0-draft.3Benjamin Pross14Add section with info about additional/alternative building blocks
2020-05-111.0-draft.3Benjamin Pross12Move ‘Job List’ from core to separate Requirements Class
2020-05-121.0-draft.3Panagiotis (Peter) A. VretanosN/ACreate a home for extensions to the core, initial check in of draft transactions extension, add placeholders for the quotation and billing APIs
2020-05-121.0-draft.3Stan Tillman6,7,8,9,10Review
2020-05-201.0-draft.3Panagiotis (Peter) A. Vretanos2,7Separate the OGC process description into its own conformance class.
2020-07-211.0-draft.4Benjamin Pross2,6,10, Annex AEditorial fixes, incorporated comments from Carl Reed, updated example
2020-07-231.0-draft.4Benjamin Pross7,10,11Add dependency to API Common
2020-07-271.0-draft.4Benjamin Pross9Add security considerations section
2020-07-301.0-draft.4Benjamin Pross7,9Add section about HTTP and HTTPS, fix links to RFCs, add additional guidance to security considerations section
2020-08-101.0-draft.4Panagiotis (Peter) A. VretanosallAdd ATS, adjust links throughout the document
2020-08-131.0-draft.4Benjamin Pross9Work on security considerations section
2020-09-021.0-draft.4Benjamin Pross9Incorporated further comments from Andreas Matheus
2020-10-081.0-draft.5Benjamin ProssAllTag version 1.0-draft.4, continue work on version 1.0-draft.5
2020-10-221.0-draft.5Benjamin ProssAnnex AContinued to rename collection to list
2020-11-021.0-draft.5Benjamin Pross7Fix issue #100
2020-11-131.0-draft.5Benjamin Pross7Fix issue #103
2021-01-151.0-draft.5Benjamin Pross7, 12Move /jobs endpoint to root level, changes in execute and result schema
2021-01-191.0-draft.6Benjamin Pross-Set version to 1.0-draft.6-SNAPSHOT
2021-01-191.0-draft.6Benjamin Pross7Adjust example paths
2021-01-191.0-draft.6Benjamin Pross7Part B.x
2021-01-251.0-draft.6Benjamin Pross7Fix issue 3
2021-01-251.0-draft.6Benjamin Pross7Adjust links and replace WPS 2.0 SWG with OGC API — Processes SWG
2021-01-251.0-draft.6Benjamin Pross7Fix CNR3
2021-01-251.0-draft.6Benjamin Pross7CNR13
2021-01-251.0-draft.6Benjamin Pross7CNR19
2021-01-251.0-draft.6Benjamin Pross7CNR21
2021-01-251.0-draft.6Benjamin Pross7CNR23
2021-01-251.0-draft.6Benjamin Pross7CNR24
2021-02-011.0-draft.6Benjamin Pross7Fixes #87
2021-02-011.0-draft.6Benjamin Pross7Fixes #118
2021-02-021.0-draft.6Benjamin Pross7Adjust text for additional api building blocks
2021-02-021.0-draft.6Benjamin Pross7CNR9
2021-02-021.0-draft.6Benjamin Pross7Replace term Web Processing Service in core
2021-02-091.0-draft.6Benjamin Pross7CNR7, CNR14
2021-02-091.0-draft.6Benjamin Pross7CNR8
2021-02-091.0-draft.6Benjamin Pross7CNR25
2021-02-091.0-draft.6Benjamin Pross7CNR20]
2021-02-091.0-draft.6Benjamin Pross7CNR26
2021-02-221.0-draft.6Benjamin Pross7Editorial fixes
2021-02-221.0-draft.6Benjamin Pross7Fixes #130
2021-03-011.0-draft.6Benjamin Pross7Adjust texts to moved execute endpoint
2021-03-081.0-draft.6Gérald Fenoy10Fix old syntaxes in JobList example used from the file: clause_10_job_list.adoc
2021-03-081.0-draft.6Panagiotis (Peter) A. VretanosXModify process description to allow JSON-Schema to be used to describe inputs and outputs. As a result of this change, a lot of the current structures, boundingBoxData, complexData, literalData, etc. can all be removed since these can be adequately described using JSON-Schema.
2021-03-111.0-draft.6Benjamin ProssXFix issue #143
2021-03-111.0-draft.6Benjamin ProssXFix links
2021-03-111.0-draft.6Benjamin ProssXFixes #148
2021-03-111.0-draft.6Benjamin ProssXFix #145
2021-03-171.0-draft.6Panagiotis (Peter) A. VretanosXRefine the use of JSON Schema to describe input and output process parameters.
2021-03-171.0-draft.6Panagiotis (Peter) A. VretanosXUpdate input/output description schema to convert the inputs and outputs keys in the process description from arrays to objects. Each key in the updated inputs/outputs object is the identified for the corresponding process input/output.
2021-03-191.0-draft.6Panagiotis (Peter) A. VretanosXMerge pull request #6 from opengeospatial/master
2021-03-241.0-draft.6Benjamin Pross-Update UML
2021-03-241.0-draft.6Benjamin Pross-Add eap and xmi files
2021-03-281.0-draft.6Panagiotis (Peter) A. VretanosXRemove the ability to infinitely nest inputs.
2021-03-291.0-draft.6Panagiotis (Peter) A. VretanosX* Remove unnecessary schemas that can now be defined using JSON Schema and propagate those changes to the other schemas. * Update some of the indentation in the yaml files so the yamllint does not complain. * Further refine the examples. * Update the text of the specification accordingly.
2021-03-291.0-draft.6Panagiotis (Peter) A. VretanosXMove additionalProperties from output.yaml to execute.yaml to be consistent with what was done with input.yaml.
2021-03-291.0-draft.6Panagiotis (Peter) A. VretanosXAllow simple values to be encoded directly. So, "key": {"value":10} becomes "key": 10.
2021-03-291.0-draft.6Panagiotis (Peter) A. VretanosXAdd array, in additiona to string, number & boolean, to possible direct input types.
2021-04-091.0-draft.6Panagiotis (Peter) A. VretanosXUpdate example to use new, more compact form for specifying simple scalar values.
2021-04-091.0-draft.6Panagiotis (Peter) A. VretanosX1. Make mediateType optional 2. Modify the schema tag to be a reference to a schema or be an inline JSON schema. 3. Change name of “encoding” tag to “characterEncoding” to make more clear what it means.
2021-04-091.0-draft.6Panagiotis (Peter) A. VretanosXAdd missing input type array.
2021-04-091.0-draft.6Panagiotis (Peter) A. VretanosXPatch merge inconsistency between issues #122, #152 and #155.
2021-04-091.0-draft.6Panagiotis (Peter) A. VretanosXFix some spacing issues with the yaml files.
2021-04-091.0-draft.6Panagiotis (Peter) A. VretanosXPatch dangling reference in result.yaml.
2021-04-121.0-draft.6Benjamin ProssXThis should fix #142
2021-04-121.0-draft.6Benjamin ProssXUse upper case in bullet point list
2021-04-121.0-draft.6Benjamin ProssXAdd new requirement for inputs, this should fix #129
2021-04-121.0-draft.6Benjamin ProssXRemove id from execute JSON schema
2021-04-121.0-draft.6Benjamin ProssXAdjust requirement to new execute endpoint
2021-04-121.0-draft.6Benjamin ProssXAdjust examples
2021-04-121.0-draft.6Benjamin ProssXAdjust execute endpoint in ATS
2021-04-121.0-draft.6Benjamin ProssXAdd recommendation regarding access control for the /jobs endpoint
2021-04-131.0-draft.6Gérald FenoyXUpdate execute.yaml
2021-04-131.0-draft.6Gérald FenoyXUpdate format.yaml
2021-04-131.0-draft.6Gérald FenoyXCreate referenceData.yaml
2021-04-131.0-draft.6Panagiotis (Peter) A. VretanosXPatch JSON schema fragments in some of the example inputs. All add a units of measure input example.
2021-04-131.0-draft.6Panagiotis (Peter) A. VretanosXA review after the merge of #122, #152 and #155 revealed an inconsistency in the input definition. Specifically the merge overwrote the change that allow direct input values (i.e. “key”: “value”). This commit fixes these inconsistencies.
2021-04-131.0-draft.6Panagiotis (Peter) A. VretanosXRemove include path fragment that appears in clause 7. For some reason it was commented out. I uncommented it and clean up the format of the permission.
2021-04-131.0-draft.6Panagiotis (Peter) A. VretanosXAdd some additional requirements around process inputs. Specifically an input can be specified inline or by reference. It it is specified inline than it shall conform to its schema in the process description. If by reference then a link.yaml link shall be used.
2021-04-141.0-draft.6Panagiotis (Peter) A. VretanosXAdd requirements for input cardinality and for inlining or referencing input values.
2021-04-141.0-draft.6Panagiotis (Peter) A. VretanosXAdd the schema for a standard bbox definition that process descriptions can reference. This was everyone can uses the same bbox definition.
2021-04-141.0-draft.6Panagiotis (Peter) A. VretanosXUpdate the bbox schema to enforce either 4 or 6 items (i.e. 5 is not allowed).
2021-04-141.0-draft.6Panagiotis (Peter) A. VretanosXAdd a description indicating how this file can be used.
2021-04-151.0-draft.6Benjamin ProssXRemove unnecessary oneOf
2021-04-151.0-draft.6Benjamin ProssXRemove dash
2021-04-151.0-draft.6Benjamin ProssXUse additionalProperties instead of patternProperties
2021-04-151.0-draft.6Panagiotis (Peter) A. VretanosXRemove observedProperty as per SWG resolution of 29MAR2021. The observedProperty is useful for certain domains but seems out of scope for the core.
2021-04-151.0-draft.6Panagiotis (Peter) A. VretanosXRemove file that does not seem to be referenced anywhere.
2021-04-151.0-draft.6Panagiotis (Peter) A. VretanosXPatch reference to input and output descriptions.
2021-04-151.0-draft.6Panagiotis (Peter) A. VretanosXAdd an additional requirement that if a value is specified by reference then its value type must match the type or types specified in the process description. I suppose that an allOf could be used to constrain the type property of the link but that seem a bit heavy.
2021-04-151.0-draft.6Panagiotis (Peter) A. VretanosXRename the file name of the ATS so that it matched the requirement file name.
2021-04-151.0-draft.6Panagiotis (Peter) A. VretanosXUpdate the description example.
2021-04-151.0-draft.6Panagiotis (Peter) A. VretanosXPatch the $ref.
2021-04-151.0-draft.6Panagiotis (Peter) A. VretanosXClarify the language of the requirement a bit (I think).
2021-04-151.0-draft.6Panagiotis (Peter) A. VretanosXSplit the /req/core/job-creation-input-cardinality requirement into two requirements to make it easier to test in the ATS.
2021-04-151.0-draft.6Panagiotis (Peter) A. VretanosXAdd tests for input cardinality handing.
2021-04-161.0-draft.6Panagiotis (Peter) A. VretanosXClarify the text of the requirements and the ATS about input multiplicity (i.e. issue #129).
2021-04-161.0-draft.6Panagiotis (Peter) A. VretanosXRemove obsolete note.
2021-04-161.0-draft.6Panagiotis (Peter) A. VretanosXFix formatting.
2021-04-191.0-draft.6Benjamin ProssXAdd requirement and recommendation for testing. Should fix #157
2021-04-191.0-draft.6Benjamin ProssXAdjust wording
2021-04-191.0-draft.6Panagiotis (Peter) A. VretanosX- Get rid on minOccurs/maxOccurs and rely instead on JSON Schema structures to define the cardinality of a process input. — The schema object in the process description is too generic so add three levels of JSON Schema conformance ranging from very simple to full JSON schema.
2021-04-191.0-draft.6Panagiotis (Peter) A. VretanosXPatch small $ref issues.
2021-04-201.0-draft.6Benjamin ProssXAdjust path of execution endpoint
2021-04-201.0-draft.6Benjamin ProssXRemove unused schema, fixes #173
2021-04-201.0-draft.6Benjamin ProssXRemove link to execute endpoint from landing page
2021-04-201.0-draft.6Benjamin ProssXAdd recommendation to add link to job monitoring endpoint to the landing page
2021-04-251.0-draft.6Panagiotis (Peter) A. VretanosXRemove the patternProperties key that allow JSON Schema extensions keys that begin with “x-”. Two point about this extension mechanism…​ (1) it breaks compatablity with swagger which is bad; (2) I can’t really think of a good reason right now that we would want to extend the syntax of JSON Schema using this mechanism and so I think removing it is OK.
2021-04-261.0-draft.6Panagiotis (Peter) A. VretanosX- Update ATS to handle JSON Schema compliance levels. — Update examples to add a multi-type feature collection input. — Add a general inline value structure (qualifiedValue.yaml) that allows selection of a specified input type of a multi-type input.
2021-04-261.0-draft.6Panagiotis (Peter) A. VretanosXRemove duplicate facet definitions.
2021-04-291.0-draft.6Panagiotis (Peter) A. VretanosXRemove the various schema levels and only support the full OpenApi 3.0 compatible version of JSON Schema (formerly called schemaLevel3.yaml).
2021-05-031.0-draft.6Benjamin ProssXMerge pull request #172 from pvretano/issue-170
2021-05-031.0-draft.6Panagiotis (Peter) A. VretanosXPatch invalid references the schemaFull.yaml/schemaLevel3.yaml. All should be references to schema.yaml.
2021-05-051.0-draft.6Gérald FenoyXFix typo
2021-05-051.0-draft.6Gérald FenoyXUse relative urls.
2021-05-051.0-draft.6Gérald FenoyXUe correct reference for bbox
2021-05-051.0-draft.6Gérald FenoyXFix typo
2021-05-051.0-draft.6Gérald FenoyXFew typo
2021-05-051.0-draft.6Gérald FenoyXFix typo
2021-05-061.0-draft.6Gérald FenoyXRemove link.yaml references when schema.yaml is already referenced.
2021-05-061.0-draft.6Gérald FenoyXGet back enum items, default and, example.
2021-05-061.0-draft.6Gérald FenoyXKeep only items.
2021-05-061.0-draft.6Gérald FenoyXFix typo
2021-05-061.0-draft.6Gérald FenoyXGo bak
2021-05-061.0-draft.6UbuntuXMake Swagger-UI working again and the api able to validate.
2021-05-101.0-draft.6Panagiotis (Peter) A. VretanosXRemove the concept of Level 0,1,2,3 JSON schema and simply use what was called Level 3 which is the full JSON Schema.
2021-05-101.0-draft.6Panagiotis (Peter) A. VretanosXMake the mode on execute options with the default being specified in the process description.
2021-05-101.0-draft.6UbuntuXRemove uneeded yaml file.
2021-05-111.0-draft.6UbuntuXGet the not, allOf, oneOf, anyOf, items and contentSchema available in the meta-schema.
2021-05-111.0-draft.6Gérald FenoyXReset example despite warnings messages.
2021-05-111.0-draft.6Gérald FenoyXReset additionalProperties in schema.yaml
2021-05-111.0-draft.6Gérald FenoyXFix indentation
2021-05-111.0-draft.6Gérald FenoyXReset properties/additionalProperties
2021-05-111.0-draft.6Gérald FenoyXRemove schema.yaml references from schema.yaml
2021-05-111.0-draft.6Panagiotis (Peter) A. VretanosXAdd optional date-time fields that track milestones in the lifecycle of a job.
2021-05-111.0-draft.6Panagiotis (Peter) A. VretanosXFix small inconsistencies in the sequence diagrams.
2021-05-111.0-draft.6Panagiotis (Peter) A. VretanosXMake sure result/results is consistently applied everywhere. The schemas and the resource endpoints should be ‘results’ (plural).
2021-05-121.0-draft.6Gérald FenoyXFix typo in example definition for ProcessDescription
2021-05-121.0-draft.6Panagiotis (Peter) A. VretanosXClarify some requirements that where flagged as ambiguous in issue 178.
2021-05-131.0-draft.6Gérald FenoyXAdd schema_swagger.yaml for a minimal schema definition to be used from swagger-ui and schema.yaml for the full featured schema.
2021-05-141.0-draft.6Gérald FenoyXAdd swagger relevant files for giving the opportunity to use the schema_swagger.yaml finally and be able to using your API from swagger-ui
2021-05-171.0-draft.6Panagiotis (Peter) A. VretanosXRemove the ambiguity introduced by allowing process input values to be any object type. If the process input schema is similar to one of the builtin schemas (link.yaml, qualifiedValue.yaml, etc.) a server may not be able ti disambiguate the input intent.
2021-05-181.0-draft.6Panagiotis (Peter) A. VretanosXUpdate Execute.json
2021-05-181.0-draft.6Panagiotis (Peter) A. VretanosXUpdate Result.json
2021-05-191.0-draft.6Panagiotis (Peter) A. VretanosXClarify the behavior for all the combinations of mode/response/transmissionMode/# of outputs.
2021-05-191.0-draft.6Panagiotis (Peter) A. VretanosAnnex AAlign ATS with all the changes made for issue #178.
2021-05-201.0-draft.6Panagiotis (Peter) A. Vretanos7Update clause_7_core.adoc
2021-05-221.0-draft.6Panagiotis (Peter) A. VretanosXChange the job status “completed” to “successful”. The job status “completed” is not a value status.
2021-05-221.0-draft.6Panagiotis (Peter) A. VretanosXChange the job status “completed” to “successful”. The job status “completed” is not a valid job status.
2021-05-221.0-draft.6Panagiotis (Peter) A. VretanosXUpdate exception reporting to align with common which uses RFC 7807.
2021-05-221.0-draft.6Panagiotis (Peter) A. VretanosXAdd OpenAPI example. I following the pattern used in OGG API Features for the example OpenAPI files found there.
2021-05-221.0-draft.6Panagiotis (Peter) A. VretanosXSimplify the response tables, for sync and async execution, by collapsing similarly responding paths into fewer rows.
2021-05-221.0-draft.6Panagiotis (Peter) A. VretanosXUpdate the exception status codes referenced in the ATS to be the URIs defined as a result of RFC 7807.
2021-05-221.0-draft.6Panagiotis (Peter) A. VretanosXClarify that server must implement support for both in-line process input values and process input values specified by reference.
2021-05-221.0-draft.6Panagiotis (Peter) A. VretanosXAdd abstract tests for verifying that a server can handle inputs by value and by reference.
2021-05-251.0-draft.6Panagiotis (Peter) A. VretanosXRefactor the schemas execute.yaml, inlineOrRefData.yaml and qualifiedValue.yaml to better emphasize the validation relationship between the definition of a process input in the process description and an process input value in an execute request. This, of course, cascaded into a whole bunch of other related clarifications.
2021-05-251.0-draft.6Panagiotis (Peter) A. VretanosXLint all the yaml and json files.
2021-05-261.0-draft.6Benjamin ProssXAdd Panagiotis (Peter) A. Vretanos as editor
2021-05-261.0-draft.6Panagiotis (Peter) A. VretanosXMove bbox.yaml from inlineOrRefData.yaml to inputValue.yaml so that it is also a validation target.
2021-05-261.0-draft.6Panagiotis (Peter) A. VretanosXThe intent was to add bbox.yaml to inputValueNoObject.yaml but not inputValue.yaml.
2021-05-261.0-draft.6Panagiotis (Peter) A. VretanosXRemove references to the now obsolete Level 0, Level 1, etc. schema conformance classes.
2021-05-281.0-draft.6Panagiotis (Peter) A. VretanosXRemove the mode parameter and instead rely on the HTTP Prefer header and defined default execution mode behavior.
2021-05-281.0-draft.6Panagiotis (Peter) A. VretanosXAdd a recommendation to included the Preference-Applied header in the response if the request was accompanied with the HTTP Prefer header.
2021-06-021.0-draft.6Jerome St-Louisi. AbstractFixed mismatched sections in i. Abstract
2021-06-031.0-draft.6Gérald FenoyXInitial integration of files require for use with swagger-ui
2021-06-031.0-draft.6Gérald FenoyXFix path for reference.yaml file
2021-06-031.0-draft.6Gérald FenoyXFix typos in process and exception. Try fixing the example ProcessDescription.
2021-06-031.0-draft.6Gérald FenoyXReplace tabs with spaces, fix URLs for geometryGeoJSON schema which is available in yaml, add nullable and remove
2021-06-031.0-draft.6Gérald FenoyXReplace tabs with spaces.
2021-06-031.0-draft.6Gérald FenoyXMove ref to binaryInputValue.yaml from inlineOrRefData.yaml to inputValueNoObject.yaml
2021-06-031.0-draft.6Gérald FenoyXFix use of externalValue
2021-06-031.0-draft.6Gérald FenoyXFix 2 use of externalValue
2021-06-031.0-draft.6Gérald FenoyXTry fixing issue with example ProcessDescription
2021-06-031.0-draft.6Gérald FenoyXFix issue with binaryInputValue.yaml
2021-06-031.0-draft.6Gérald FenoyXGeneral fix in ogcapi-process-1.yaml. Fix responses/Results to use relative path.
2021-06-031.0-draft.6Gérald FenoyXSmall fix in path.
2021-06-031.0-draft.6Gérald FenoyXTry fixing issue with ProcessDescription example
2021-06-031.0-draft.6Gérald FenoyXTry fixing issue with ProcessDescription example using allOf for value
2021-06-031.0-draft.6Gérald FenoyXTry fixing issue with ProcessDescription example using basic object and a ref
2021-06-031.0-draft.6Gérald FenoyXFix the ProcessDescription example issue by using externalValue
2021-06-031.0-draft.6Gérald FenoyXAdd the Preference-Applied header information’s.
2021-06-081.0-draft.6Panagiotis (Peter) A. VretanosXPath invalid reference to component file.
2021-06-081.0-draft.6Panagiotis (Peter) A. VretanosXPatch type that is preventing swagger validation of example OpenAPI file.
2021-06-081.0-draft.6Panagiotis (Peter) A. VretanosX(1) Remove the consolidated building blocks YAML file. (2) Update the example OpenAPI definition file to reference each component individually from its corresponding schema file instead of referencing the component from the now-deleted building blocks YAML file.
2021-06-091.0-draft.6Steve McDanielXIndentation issue in process.yaml, outputs should be at the same level as inputs
2021-06-101.0-draft.6Panagiotis (Peter) A. Vretanos7Minor typo.
2021-06-101.0-draft.6Panagiotis (Peter) A. VretanosXAdd missing default value for response parameter. Should be raw.
2021-06-101.0-draft.6Panagiotis (Peter) A. VretanosXAdd an informative statement about the default value for the response parameters. This is normatively defined in the schema.
2021-06-101.0-draft.6Panagiotis (Peter) A. VretanosXUpdate server URL to point to the correct endpoint.
2021-06-101.0-draft.6Panagiotis (Peter) A. VretanosXFix invalid reference to transmissionMode=ref. Should be reference.
2021-06-101.0-draft.6Panagiotis (Peter) A. VretanosXMake explicit the fact that omitting the “outputs” parameter in an execute request means that all defined outputs are being requested.
2021-06-101.0-draft.6Panagiotis (Peter) A. VretanosXRemove file to conform to ATS file name pattern.
2021-06-101.0-draft.6Panagiotis (Peter) A. VretanosXUpdate all OAPIR-specific link relations to use the pattern http://www.opengis.net/def/rel/ogc/1.0/{rel}. Eventually there will be registered with the OGC-NA.
2021-06-101.0-draft.6Panagiotis (Peter) A. VretanosXRemove unused link relation.
2021-06-111.0-draft.6Jerome St-LouisXresults.yaml: Removed array (#219)
2021-06-131.0-draft.6Panagiotis (Peter) A. VretanosXAdd a light-weight query capability to the jobs list. Add paging to the jobs list. Add paging to the process list.
2021-06-131.0-draft.6Panagiotis (Peter) A. VretanosXAdd requirements and abstract tests to handle the case where the negotiated execution mode is sync or async, the response mode is raw, more than one output is requested and a mix of transmission modes (value or reference) are requested.
2021-06-131.0-draft.6Panagiotis (Peter) A. VretanosXAdd requirements and abstract tests to handle the case where the negotiated execution mode is sync or async, the requested response is raw, more that 1 output is requested and a mix of transmission modes (value or reference) are requested.
2021-06-141.0-draft.6Panagiotis (Peter) A. VretanosXChange “processList” to “processes” and “jobsList” to “jobs” so that the key name matches the resource endpoint name.
2021-06-151.0-draft.6Panagiotis (Peter) A. VretanosXRemove default value for job control options. In the OGC process description the supported execution modes must be explicitly listed so there is no need for a default.
2021-06-151.0-draft.6Panagiotis (Peter) A. VretanosXAdd the contentMediaType facet to the GeoJSON feature collection inputs/outputs. Although this is not strictly necessary is makes parsing and interpreting the input/output easier.
2021-06-161.0-draft.6Panagiotis (Peter) A. VretanosXRel value should be ‘job-list’ not ‘jobs-list’.
2021-06-171.0-draft.6Panagiotis (Peter) A. VretanosXExtend the list of “format” values to provide semantic hints inputs and outputs.
2021-06-171.0-draft.6Panagiotis (Peter) A. VretanosXReword requirement for clarity.
2021-06-171.0-draft.6Panagiotis (Peter) A. VretanosXFix missing allOf[] in one of the examples outputs.
2021-06-181.0-draft.6Panagiotis (Peter) A. VretanosXOopsie! Forgot to make processID mandatory if the server supports the Job List conformance class.
2021-06-181.0-draft.7Benjamin ProssXAdjust version
2021-06-221.0-draft.7Panagiotis (Peter) A. VretanosXHousekeeping.
2021-06-281.0-draft.7Benjamin ProssXMerge pull request #235 from pvretano/housekeeping
2021-07-051.0-draft.7Benjamin ProssXRevert “Adjust version”
2021-07-211.0-draft.7Gérald FenoyXSmall fix about parameters
2021-07-211.0-draft.7Gérald FenoyXFix title headers
2021-07-211.0-draft.7Gérald Fenoy-Update clause_0_front_material.adoc
2021-07-281.0-draft.7Benjamin Pross12Fix issue with empty chapter 12
2021-08-061.0-draft.7Gérald FenoyXAdd enum to status.yaml
2021-08-061.0-draft.7Gérald FenoyXAdd statuses.yaml in schema
2021-08-061.0-draft.7Gérald FenoyXDelete statuses.yaml
2021-08-061.0-draft.7Gérald FenoyXCreate status.yaml
2021-08-061.0-draft.7Gérald FenoyXAdd status.yaml
2021-08-061.0-draft.7Gérald FenoyXTry using status.yaml reference
2021-08-061.0-draft.7Gérald FenoyXRevert changes
2021-08-091.0-draft.7Gérald FenoyXUpdate status.yaml
2021-08-091.0-draft.7Gérald FenoyXUpdate statusInfo.yaml
2021-08-091.0-draft.7Gérald FenoyXRename status.yaml to statusCode.yaml
2021-08-091.0-draft.7Gérald FenoyXUpdate status.yaml
2021-08-091.0-draft.7Gérald FenoyXUpdate statusInfo.yaml
2021-08-091.0-draft.7Gérald FenoyXRename processId.yaml and processid.yaml to processIDPathParam.yaml and processIDQueryParam.yaml respectively
2021-08-091.0-draft.7Gérald FenoyXAdd missing parameters to OpenAPI example
2021-08-191.0-draft.7Gérald FenoyXAdd process value
2021-08-231.0-draft.7Gérald FenoyXSet format to date-time for more clarity
2021-08-231.0-draft.7Gérald FenoyXUpdate datetime.yaml
2021-08-241.0-draft.7Benjamin ProssXUse HTTP GET method (instead of operation) throughout the document
2021-08-251.0-draft.7Benjamin ProssXAdd informative texts
2021-08-251.0-draft.7Benjamin ProssXMerge branch ‘comments-emmanuel-devys’ into comments-amy-youmans
2021-08-251.0-draft.7Benjamin ProssXFix ordering of requirements
2021-08-261.0-draft.7Benjamin Pross7Revert changes — replace GET method with GET operation
2021-09-031.0-draft.7Benjamin Pross7Add informative text about execution paths

Bibliography

[1]  Andreas Matheus: OGC 15-022, OGC® Testbed 11 Engineering Report: Implementing Common Security Across the OGC Suite of Service Standards. Open Geospatial Consortium (2015). http://www.opengis.net/doc/PER/t11-common-security.

[2]  Panagiotis (Peter) A. Vretanos: OGC 09-025r2, OGC® Web Feature Service 2.0 Interface Standard — With Corrigendum. Open Geospatial Consortium (2014). http://www.opengis.net/doc/IS/wfs/2.0.2.

[3]  https://www.w3.org/TR/html5/

[4]  Hutton, B.: JSON Schema: A Media Type for Describing JSON Documents, https://json-schema.org/draft/2020-12/json-schema-core.html

[5]  Hutton, B.: JSON Schema Validation: A Vocabulary for Structural Validation of JSON, https://json-schema.org/draft/2020-12/json-schema-validation.html

[6]  Hutton, B.: Relative JSON Pointers, https://json-schema.org/draft/2020-12/relative-json-pointer.html

[7]  Open API Initiative. OpenAPI Specification 3.0.2. Available at: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md.