Draft

OGC Standard

OGC API - Joins - Part 1: Core
Pekka Latvala Editor
Version: 1.0.0
Additional Formats: PDF
OGC Standard

Draft

Document number:22-026
Document type:OGC Standard
Document subtype:Implementation
Document stage:Draft
Document language:English

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

This document specifies the core module of the OGC API — Joins Standard. This Standard can be used for online joining of tabular data with some other data, such as geospatial data. The data joining process is executed through common key values that are available in both datasets.

The core module specifies requirements for a Web API that supports following use cases:

  • Getting metadata on available collections, their key fields and key values.

  • Executing joins between input tabular data files and collections available on some server.

  • Accessing the created joins.

  • Deleting joins.

  • Executing joins between two input files.

The input data files can be either uploaded to the server with the join query or provided by referencing them via URL addresses. The server implementations have a mandatory requirement to support the GeoJSON format for the joined data, and in addition, they can support any other file formats. The core module supports CSV format for the input tabular data files. The joining between two input data files is supported between GeoJSON and CSV formats.

Please note that for the purposes of brevity, the OGC API – Joins: Core Standard may be referend to as “the OGC Joins API” or “this document” or “this “Standard”.

II.  Keywords

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

ogcdoc, OGC Standard, API, openapi, JSON, HTML, GeoJSON, Joins, data joining


III.  Preface

This document defines the OGC API — Joins — Part 1: Core Standard. The OGC API — Joins Standard is a multi-part document that can be extended by specifying extensions modules to the core module.

This Standard originates from the OGC Standard: OpenGIS® Georeferenced Table Joining Service (TJS) Implementation Standard (document nr. 10-070r2), specified in 2010.

Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights.

Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation.

IV.  Security Considerations

The part 1 of the OGC API — Joins Standard defines HTTP GET, POST and DELETE operations that can be used for accessing data on the server, sending data to the server and deleting data from the server. Some server implementations may have also the ability to retrieve data from other sources. Some OGC API — Joins implementations may assign different roles to different users that may result in different abilities to access, create and delete data. The access control can be described in the OpenAPI definition as discussed in OGC API — Common (https://docs.ogc.org/is/19-072/19-072.html#rc_oas30-security).

The requests made to the server implementations of the OGC API — Joins Standard may take some time to resolve, especially when the input data files are large. If several of these requests are processed simultaneously, the server implementations can become slow or unresponsive. Servers should set and apply reasonable limits to the sizes of the input data files to prevent Denial of Service attacks.

V.  Submitting Organizations

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

  • Finnish Geospatial Research Institute FGI, National Land Survey of Finland.

VI.  Submitters

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

NameAffiliation
Pekka Latvala (editor)Finnish Geospatial Research Institute FGI, National Land Survey of Finland
Panu MuhliFinnish Geospatial Research Institute FGI, National Land Survey of Finland

1.  Scope

The OGC API — Joins specifies the behavior of Web APIs that join data from specified input data files either with feature collections that are available on some server or directly with other specified input data files. The core module defines three sets of operation: discovery operations, data joining operations and file joining operations.

The discovery operations specify operations for obtaining general information on the service implementation of the server that supports a join capability. It includes operations for accessing the Joins API landing page, the API definition document and information on the service’s conformance to the Joins API standard.

The data joining operations specify operations for retrieving metadata, key field information and key values on the feature collections available on some server. Data joining also includes an operation for joining data from specified input data files with the feature collections and operations for accessing and deleting the created joins.

The file joining operations specifies an operation for joining data from specified input data files directly with other specified input data files.

The core module specifies requirements for using CSV and GeoJSON input files. The support for other input file formats may be defined in extension modules.

2.  Conformance

This standard defines the OGC API — Joins core module. The core module specifies three operation sets: discovery operations, data joining operations and file joining operations. The server implementations are required to support the discovery operations and they must support either one or both of the data joining operations and/or file joining operations.

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

The discovery operations operation set is represented by the requirements class “core”.

The data joining operations operation set is represented by the requirements classes: “data joining” and “join delete”. The implementation of the “data joining” requirements class is mandatory, and the implementation of the “join delete” is optional for this operation set.

The file joining operations operation set is represented by the requirements class “file joining”.

The imput and output functionalities are represented by the requirement classes: “Input File Upload”, “File Referencing with URL”, “CSV File Input”, “GeoJSON File Input”, “GeoJSON Output for Joined Data” and “Direct GeoJSON Output for Joined Data”. The support for CSV input file format is mandatory for the data joining operations and file joining operations. The support for the GeoJSON input file format is mandatory for the file joining operations.

The encoding formats are represented by requirements classes: “JSON”, “HTML” and “GeoJSON”.

The JSON encoding format support is mandatory, and the HTML encoding support is recommended for the service responses in the discovery operations and data joining operations operation sets.

The GeoJSON encoding format is mandatory for the joined data output in the data joining operations and as a general output for the file joining operations.

The Core requirements class does not mandate any encoding or format for the formal definition of the API. One option is to use the OpenAPI 3.0 specification and OpenAPI 3.0 Requirements Class as defined in the OGC API — Common — Part 1 document.

2.1.  Summary of conformance URIs

The conformance class URIs defined in this core module are listed in Table 1.

Table 1 — Conformance class URIs.

Conformance classURI
Core

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/core

Data Joining

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/data-joining

Join Delete

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/join-delete

File Joining

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/file-joining

Input
Input File Upload

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-file-upload

File Referencing with URL

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-http-ref

CSV File Input

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv

GeoJSON File Input

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-geojson

Output
GeoJSON Output for Joined Data

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson

Direct GeoJSON Output for Joined Data

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson-direct

Encodings
HTML

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/html

JSON

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/json

GeoJSON

http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/geojson

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.

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.

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.

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

G. Klyne, C. Newman: IETF RFC 3339, Date and Time on the Internet: Timestamps. RFC Publisher (2002). https://www.rfc-editor.org/info/rfc3339.

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.

J. Reschke: IETF RFC 6266, Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP). RFC Publisher (2011). https://www.rfc-editor.org/info/rfc6266.

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.

L. Masinter: IETF RFC 7578, Returning Values from Forms: multipart/form-data. RFC Publisher (2015). https://www.rfc-editor.org/info/rfc7578.

M. Nottingham, E. Wilde: IETF RFC 7807, Problem Details for HTTP APIs. RFC Publisher (2016). https://www.rfc-editor.org/info/rfc7807.

H. Butler, M. Daly, A. Doyle, S. Gillies, S. Hagen, T. Schaub: IETF RFC 7946, The GeoJSON Format. RFC Publisher (2016). https://www.rfc-editor.org/info/rfc7946.

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

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

S. Gössner, G. Normington, C. Bormann (eds.): IETF RFC 9535, JSONPath: Query Expressions for JSON. RFC Publisher (2024). https://www.rfc-editor.org/info/rfc9535.

json-schema.org: JSON Schema, December 2020. Available at: https://json-schema.org/specification.html

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.

Charles Heazel: OGC 19-072, OGC API — Common — Part 1: Core. Open Geospatial Consortium (2023). http://www.opengis.net/doc/is/ogcapi-common-1/1.0.0.

OGC: OGC 20-024, OGC API — Common — Part 2: Geospatial Data (draft in development), 2021. Available at: https://docs.opengeospatial.org/DRAFTS/20-024.pdf

Open API Initiative (OAI): The OpenAPI specification 3.0, 2020. Available at: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/

Schema.org: https://schema.org/docs/schemas.html

W3C: HTML5, W3C Recommendation. Available at: https://www.w3.org/TR/html5/

4.  Terms and definitions

No terms and definitions are listed in this document.

This document uses the terms defined in Sub-clause 5.3 of OGC 06-121r9, 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 standard.

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-joins-1/1.0.

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

5.2.  Link relations

The link relation types that are used in this document are listed in Table 2.

Table 2 — Link Relations.

5.2.1.  Response Schema for the Link Object

 

Listing 1 — Hyperlink Schema

5.3.  Use of HTTPS

For simplicity, this document generally only refers to the HTTP protocol. This is not meant to exclude the use of HTTPS and simply is 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 that are not in common use could be an impediment to interoperability.

6.  Overview

The OGC API — Joins core module specifies three operation sets: discovery operations, data joining operations and file joining operations. Table 3 contains an overview of the operations specified in the core module. The implementation of discovery operations is mandatory together with the implementations of either data joining operations and/or file joining operations operation set.

6.1.  Discovery operations

Discovery operations defines operations for accessing the API landing page, the API definition document, and the information on the server implementation’s conformance to the Joins API Standard. The implementation of the discovery operations is mandatory and it is defined in the requirements class “Core”.

The Landing page (path /) provides an entry point to the API. It contains links to:

The API definition 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 API definition using HTTP GET returns a description of the deployed API implementation instance. The API definition can be hosted on the API server(s) or on a separate server.

The Conformance declaration states the conformance classes from standards or community specifications, identified by a URI, that the API implementation instance conforms to. Clients can — but are not required to use this information. Accessing the Conformance declaration using HTTP GET returns the list of URIs of conformance classes implemented by the server. The conformance class values defined in this document are listed in Table 1.

6.2.  Data Joining Operations

Data joining operations defines operations for accessing metadata, key fields and key values on the feature collections that are available on the server, operations for joining data from input data files with the collections, and operations for accessing and deleting the created joins. The data joining operations is defined in the requirements classes “Data Joining” and “Join Delete”. For this operation set, the implementation of the “Data Joining” requirements class is mandatory and the “Join Delete” requirements class is optional.

The data joining operations contains following functionalities:

  • Accessing the Collections using HTTP GET returns a list of feature collections that are available on the server.

  • Each Collection element in the Collections list can be accessed further in order to get the metadata on each individual Collection by making an HTTP GET request at path /collections/{collectionId}.

  • Accessing the Collection’s Key Fields using HTTP GET at path /collections/{collectionId}/keys provides information on the key fields of a Collection.

  • Accessing the Collection’s Key Field using HTTP GET at path /collections/{collectionId}/keys/{keyFieldId} provides the key values of the specific key field. The data joining is executed through these key values.

  • Accessing the Joins using HTTP GET returns a list of Joins that are available on the server.

  • New Joins can be created by making a HTTP POST query at path /joins. This is done by joining data from an input data file with a Collection available on the server. This standard contains suppport for the CSV input files, defined in the requirements class “CSV File Input” The input files can be either uploaded to the server, represented by the requirements claas “Input File Upload” or they can be referenced via URL links, represented by the requirements class “File Referencing with URL”. The Join Creation operation is required to support the GeoJSON format for the joined data, represented by the requirements class “GeoJSON Output for Joined Data”. The operation may also support a direct GeoJSON output by implementing the requirements class “Direct GeoJSON Output for Joined Data”.

  • Each Join element in the Joins list can be accessed further in order to get the metadata on each individual Join by making an HTTP GET request at path /joins/{joinId}.

  • Each Join can be deleted by making a HTTP DELETE request at path /joins/{joinId}.

6.3.  File Joining Operations

File joining operations defines functionality for joining data from input data files directly with other input data files.

  • Data join between two input files can be created by making a HTTP POST query at path /filejoin. This standard contains suppport for joining data from CSV files, defined in the requirements class “CSV File Input”, to GeoJSON files, defined in the requirements class “GeoJSON File Input”. The result of the filejoin operation is the GeoJSON document that contains also the joined attributes from the CSV file. The input files can be either uploaded to the server, represented by the requirements class “Input File Upload” or they can be referenced via URL links, represented by the requirements class File Referencing with URL”.

6.4.  Encodings

The use of a “JSON” encoding is mandatory for service responses in operation sets discovery operations and data joining operations. In addition, support for “HTML” encoding is recommended.

Support for the “GeoJSON” encoding is mandatory for the joined data outputs in data joining operations and file joining operations.

6.5.  Overview on the functionalities

The data from the input data file can be joined directly with other input data file(s) by making a HTTP POST request at path /filejoin.

Table 3 — Overview of the resources defined in the OGC API — Joins core module.

PathHTTP methodDescription
Discovery Operations
/GETAPI landing page.
/api (recommended path)GETAPI definition.
/conformanceGETAPI conformance declaration.
Data Joining Operations
/collectionsGETReturns metadata on the collections available on the server.
/collections/{collectionId}GETReturns metadata on a specific collection available on the server.
/collections/{collectionId}/keysGETReturns the key fields of a specific collection.
/collections/{collectionId}/keys/{keyFieldId}GETReturns the key values of a specific key field of a specific collection.
/joinsGETReturns a list of the joins available on the server.
/joinsPOSTCreates a new join by joining tabular data from an input data file with a specific collection.
/joins/{joinId}GETReturns metadata on a specific join.
/joins/{joinId}DELETEDeletes a specific join.
File Joining Operations
/filejoinPOSTJoins data between two input files.

7.  Requirements Class “Core”

7.1.  Overview

Requirements class 1: Core

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core
Target typeWeb API
Conformance classConformance class A.1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/core
PrerequisitesOGC 19-072 (OGC — API — Common: Part 1)
RFC 2616 (HTTP/1.1)
RFC 2818 (HTTP over TLS)
Normative statementsRequirement 1: /req/core/operations
Requirement 2: /req/core/http
Requirement 3: /req/core/root-op
Requirement 4: /req/core/root-success
Requirement 5: /req/core/api-definition-op
Requirement 6: /req/core/api-definition-success
Requirement 7: /req/core/conformance-op
Requirement 8: /req/core/conformance-success

The OGC API — Joins Core requirements class specifies operations for accessing the API landing page, the API definition document, and the information on the server implementation’s conformance to the Joins API Standard.

7.2.  Operations

Requirement 1

Identifier/req/core/operations
Included inRequirements class 1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core
A

The server implementations SHALL support the discovery operations.

B

The server implementations SHALL support at least one of the: data joining operations, and/or file joining operations.

C

If a server supports a particular operation set it SHALL implement all mandatory operations that belong to it.

7.3.  HTTP 1.1

Requirement 2

Identifier/req/core/http
Included inRequirements class 1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core
A

The server SHALL conform to HTTP 1.1.

B

If the API implementation supports HTTPS, then the API implementation SHALL also conform to HTTP over TLS.

7.4.  HTTP Status Codes

HTTP status codes lists the main HTTP status codes that clients should be prepared to receive. This includes support for specific security schemes or URI redirection. In addition, other error situations may occur in the transport layer outside of the server.

Table 4 — Typical HTTP status codes.

Status codeDescription
200A successful request.
201The request was executed successfully and it resulted in one or more resources that were created.
204A request was executed successfully and there is no additional content in the response payload body.
302The target resource was found but resides temporarily under a different URI. A 302 response is not evidence that the operation has been successfully completed.
303The server is redirecting the user agent to a different resource. A 303 response is not evidence that the operation has been successfully completed.
304An entity tag was provided in the request and the resource has not changed since the previous request.
307The target resource resides temporarily under a different URI and the user agent MUST NOT change the request method if it performs an automatic redirection to that URI.
308Indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs.
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.
406Content negotiation failed. For example, the Accept header submitted in the request did not support any of the media types supported by the server for the requested resource.
500An internal error occurred in the server.

The return status codes described in HTTP status codes do not cover all possible conditions. See IETF RFC 7231 for a complete list of HTTP status codes.

Permission 1

Identifier/per/core/additional-status-codes
A

Servers MAY implement additional capabilities provided by the HTTP protocol. Therefore, they MAY return status codes in addition to those listed in HTTP status codes.

When a server encounters an error in the processing of the request, the server 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. IETF RFC 7807 addresses this need by providing “Problem Details” response schemas for both JSON and XML.

Recommendation 1

Identifier/rec/core/problem-details
A

The server SHOULD include a “problem details” report in any error response in accordance with IETF RFC 7807.

7.5.  Support for Cross-Origin Requests

If the data is located on another host than the webpage (“same-origin policy”), access to data from a HTML page is by default prohibited for security reasons. A typical example is a web-application accessing feature data from multiple distributed datasets.

Recommendation 2

Identifier/rec/core/cross-origin
A

If the server is intended to be accessed from a 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:

7.6.  Asynchronous queries

The OGC API — Joins standard doesn’t specify a way to handle asynchronous queries. Different services may use different practices for performing them in situations where synchronous responding is not possible.

One option for asynchronous query handling is to send an HTTP 308 response that includes a Location response header field with the URI of the location of the data where it will be located once the query has completed. If the user makes queries to the URI of the end-product before the data is available, the responses should use an HTTP code 202 and it they should include Retry-after response header field with a suggested interval in seconds to retry the data retrieval.

7.7.  API Landing Page

The HTTP GET operation at service root path {root}/ returns the API landing page document. The API landing page provides a starting point for the use of the API implementation instance and contains links to the:

  • API definition document.

  • Conformance information.

  • Metadata on collections available on the server.

  • Joins available on the server.

7.7.1.  Request

Requirement 3

Identifier/req/core/root-op
Included inRequirements class 1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core
A

The server SHALL support the HTTP GET operation on the URI {root}/.

B

The response to the HTTP GET request issued in A SHALL satisfy requirement /req/core/root-success.

7.7.2.  Response

Requirement 4

Identifier/req/core/root-success
Included inRequirements class 1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core
A

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

B

The content of that response SHALL be based upon the landingPage.yaml.

Statement

The response can include links to following resources:

7.7.2.1.  Response Schema for the Landing Page

The landing page response is based on the Landing Page Schema, originally defined in the OGC — API — Common — Part 1.

 

type: object
required:
  - links
properties:
  title:
    type: string
    title: The title of the API.
    description: While a title is not required, implementers are strongly advised to include one.
    example: Buildings in Bonn
  description:
    type: string
    example: Access to data about buildings in the city of Bonn via a Web API that conforms to the OGC API Common specification.
  attribution:
    type: string
    title: attribution for the 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 2 — Landing Page Schema

In addition to the required resources, links to additional resources may be included in the Landing Page.

7.7.3.  Error Situations

See HTTP status codes for general guidance.

7.8.  API Definition

Every API implementation should provide an API Definition resource that describes the capabilities provided by that API. This resource can be used by client developers to understand the supported services, by software clients to connect to the server, and by development tools to support the implementation of servers and clients.

7.8.1.  Request

Requirement 5

Identifier/req/core/api-definition-op
Included inRequirements class 1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core
A

The server SHALL support the HTTP GET operation on all links from the landing page that have the relation type service-desc.

B

The server SHALL support the HTTP GET operation on all links from the landing page that have the relation type service-doc.

C

The responses to all HTTP GET requests issued in A and B SHALL satisfy the requirement /req/core/api-definition-success.

Recommendation 3

Identifier/rec/core/api-definition-op
A

The server SHOULD support the HTTP GET operation on the URI {root}/api.

B

The response to the HTTP GET request issued in A SHOULD satisfy the requirement /req/core/api-definition-success.

7.8.2.  Response

Requirement 6

Identifier/req/core/api-definition-success
Included inRequirements class 1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core
A

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

B

The content of that response SHALL be an API Definition document.

C

The API Definition document SHALL be consistent with the media type identified through HTTP content negotiation.

NOTE:  The -f parameter MAY be used to satisfy this requirement.

Recommendation 4

Identifier/rec/core/api-definition-oas
A

If the API definition document uses the OpenAPI Specification 3.0, THEN The document SHOULD conform to the OpenAPI Specification 3.0 requirements class http://www.opengis.net/spec/ogcapi-common-1/1.0/req/oas30 (defined in the OGC API — Common — Part 1 document).

7.8.3.  Error Situations

See HTTP status codes for general guidance.

7.9.  Declaration of Conformance Classes

The HTTP GET operation at path {root}/conformance returns a list of conformance classes that the server supports.

7.9.1.  Request

Requirement 7

Identifier/req/core/conformance-op
Included inRequirements class 1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core
A

The server SHALL support the HTTP GET operation at the URI {root}/conformance.

B

The server SHALL support the HTTP GET operation on all links from the landing page that have the relation type http://www.opengis.net/def/rel/ogc/1.0/conformance.

C

The responses to all HTTP GET requests issued in A and B SHALL satisfy requirement /req/core/conformance-success.

7.9.2.  Response

Requirement 8

Identifier/req/core/conformance-success
Included inRequirements class 1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core
A

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

B

The content of that response SHALL be based upon the schema confClasses.yaml and list all OGC API conformance classes that the API conforms to.

7.9.2.1.  Response Schema for the Conformance Declaration

The schema for the conformance response is based on the Conformance Declaration Schema (from OGC API — Common — Part 1).

 

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

Listing 3 — Conformance Declaration Schema

7.9.3.  Error Situations

See HTTP status codes for general guidance.

8.  Requirements Class “Data Joining”

8.1.  Overview

Requirements class 2: Data Joining

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
Target typeWeb API
Conformance classConformance class A.2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/data-joining
PrerequisitesRequirements Class: Core
Requirements Class: Input File Upload
Requirements Class: File Referencing with URL
Requirements Class: CSV File Input
Requirements Class: GeoJSON Output for Joined Data
Requirements Class: Direct GeoJSON Output for Joined Data
OGC 20-024 (OGC — API — Common: Part 2)
RFC 2616 (HTTP/1.1)
RFC 2818 (HTTP over TLS)
RFC 3339 (Date and Time on the Internet: Timestamps)
RFC 7578 Returning Values from Forms: multipart/form-data
RFC 8288 (Web Linking)
Normative statementsRequirement 9: /req/data-joining/collections-get-op
Requirement 10: /req/data-joining/collections-get-success
Requirement 11: /req/data-joining/collections-get-success-links
Requirement 12: /req/data-joining/collections-get-success-items
Requirement 13: /req/data-joining/collections-collectionid-get-op
Requirement 14: /req/data-joining/collections-collectionid-get-success
Requirement 15: /req/data-joining/collections-collectionid-get-success-extent
Requirement 16: /req/data-joining/collections-collectionid-get-success-links
Requirement 17: /req/data-joining/collections-collectionid-keys-get-op
Requirement 18: /req/data-joining/collections-collectionid-keys-get-success
Requirement 19: /req/data-joining/collections-collectionid-keys-get-success-default-key
Requirement 20: /req/data-joining/collections-collectionid-keys-get-success-links
Requirement 21: /req/data-joining/collections-collectionid-keys-get-success-items-links
Requirement 22: /req/data-joining/collections-collectionid-keys-keyfieldid-get-op
Requirement 23: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success
Requirement 24: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit
Requirement 25: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit-unsupported
Requirement 26: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-paged-response
Requirement 27: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberMatched
Requirement 28: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberReturned
Requirement 29: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-links
Requirement 30: /req/data-joining/joins-get-op
Requirement 31: /req/data-joining/joins-get-success
Requirement 32: /req/data-joining/joins-get-success-limit
Requirement 33: /req/data-joining/joins-get-success-limit-unsupported
Requirement 34: /req/data-joining/joins-get-success-datetime
Requirement 35: /req/data-joining/joins-get-success-paged-response
Requirement 36: /req/data-joining/joins-get-success-numberMatched
Requirement 37: /req/data-joining/joins-get-success-numberReturned
Requirement 38: /req/data-joining/joins-get-success-items
Requirement 39: /req/data-joining/joins-get-success-links
Requirement 40: /req/data-joining/joins-get-success-items-links
Requirement 41: /req/data-joining/joins-get-success-timeStamp
Requirement 42: /req/data-joining/joins-post-op
Requirement 43: /req/data-joining/joins-post-op-additional-output-formats
Requirement 44: /req/data-joining/joins-post-success
Requirement 45: /req/data-joining/joins-post-success-input-data-file-csv-multiple-keys
Requirement 46: /req/data-joining/joins-post-success-input-data-file-csv-attribute-names
Requirement 47: /req/data-joining/joins-joinid-get-op
Requirement 48: /req/data-joining/joins-joinid-get-success
Requirement 49: /req/data-joining/joins-joinid-get-success-links
Requirement 50: /req/data-joining/joins-joinid-get-success-links-collection
Requirement 51: /req/data-joining/joins-joinid-get-success-links-outputs

8.2.  Collections

The HTTP GET operation at path {root}/collections returns metadata on the collections that are available on the server.

8.2.1.  Request

Requirement 9

Identifier/req/data-joining/collections-get-op
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the server implements data joining operations, it SHALL support the HTTP GET operation at path {root}/collections.

8.2.2.  Response

Requirement 10

Identifier/req/data-joining/collections-get-success
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

A successful execution of the operation SHALL be responded with an HTTP status code 200.

B

The content of the response SHALL validate against the Collections schema.

8.2.2.1.  Response Schema for the Collections

The response is based on the Collections Schema (from OGC — API — Common — Part 2).

 

type: object
required:
  - links
  - collections
properties:
  links:
    type: array
    items:
      $ref: 'link.yaml'
  numberMatched:
    $ref: 'numberMatched.yaml'
  numberReturned:
    $ref: 'numberReturned.yaml'
  collections:
    type: array
    items:
      $ref: 'collectionDesc.yaml'

Listing 4 — Collections Schema

 

description: |-
  The number of elements in the response that match the selection parameters like `bbox`.
type: integer
minimum: 0
example: 127

Listing 5 — numberMatched.yaml

 

description: |-
  The number of elements in the response.
  A server may omit this information, if the information about the
  number of elements is not known or difficult to compute.
  If the value is provided, the value shall be identical to the number
  of elements in the response.
type: integer
minimum: 0
example: 10

Listing 6 — numberReturned.yaml

This schema is further constrained by the following requirements and recommendations.

To support hypermedia navigation, the links property must be populated with sufficient hyperlinks to navigate through the whole dataset.

Additional information may be available to assist in understanding and using this dataset. Links to those resources should be provided as well.

Recommendation 5

Identifier/rec/data-joining/collections-get-success-describedby
A

If external schemas or descriptions exist that provide additional information about the structure or semantics for the resource, a 200-response SHOULD include links to each of those resources in the links property of the response (relation: describedby).

B

The type link parameter SHOULD be provided for each link. This applies to resources that describe the whole dataset.

The collections property of the Collections response provides a description of each individual collection hosted by the server. These descriptions are based on the Collection Schema.

Requirement 12

Identifier/req/data-joining/collections-get-success-items
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

For each dataset collection provided by the server, metadata describing that collection SHALL be provided in the collections property of the Collections response.

The array items included in the collection property are described in the Collection Resource section of this Requirements Class.

This Requirements Class does not define any parameters for use against a collections resource.

8.2.3.  Error Situations

See HTTP status codes for general guidance.

8.3.  Collection

The HTTP GET operation at path {root}/collections/{collectionId} returns metadata on a specific collection available on the server.

8.3.1.  Request

Requirement 13

Identifier/req/data-joining/collections-collectionid-get-op
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the server implements data joining operations, it SHALL support the HTTP GET operation at path {root}/collections/{collectionId}.

B

The parameter collectionId is each id property in the collections response (JSONPath: $.collections[*].id).

8.3.2.  Response

Requirement 14

Identifier/req/data-joining/collections-collectionid-get-success
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

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

B

The content of that response SHALL be based upon the Response Schema for the Collection.

8.3.2.1.  Response Schema for the Collection

The Collection response is based on the collectionDesc Schema (from OGC — API — Common — Part 2).

 

type: object
required:
  - id
  - links
properties:
  id:
    type: string
    description: identifier of the collection used, for example, in URIs
    example: dem
  title:
    type: string
    description: human readable title of the collection
    example: Digital Elevation Model
  description:
    type: string
    description: a description of the data in the collection
    example: A Digital Elevation Model.
  attribution:
    type: string
    title: attribution for the collection
  accessConstraints:
    description: |-
       Restrictions on the availability of the collection that the user needs to be aware of before using or redistributing the data:

       * unclassified: Available for general disclosure
       * restricted: Not for general disclosure
       * confidential: Available for someone who can be entrusted with information
       * secret: Kept or meant to be kept private, unknown, or hidden from all but a select group of people
       * topSecret: Of the highest secrecy
    enum:
    - unclassified
    - restricted
    - confidential
    - secret
    - topSecret
  publisher:
    type: string
    description: Organization or individual responsible for making the data available
  license:
    type: string
    description: The legal provisions under which the data ofthis collection is made available.
  rights:
    type: string
    description: A statement that concerns all rights not addressed by the license such as a copyright statement.
  formats:
    description: A list of formats in which the data of this collection is distributed
    type: array
    items:
      $ref: 'format.yaml'
  keywords:
    type: array
    description: The topic or topics of the resource. Typically represented using free-form keywords, tags, key phrases, or classification codes.
    items:
      type: string
  themes:
    type: array
    description:
      A knowledge organization system used to classify the resource.
    minItems: 1
    items:
      $ref: 'theme.yaml'
  contacts:
    type: array
    description:
      A list of contacts qualified by their role(s) in association to the collection.
    minItems: 1
    items:
      $ref: 'contact.yaml'
  resourceLanguages:
    type: array
    description: The list of languages in which the data of this collection is available.
    items:
      $ref: 'language.yaml'
  links:
    type: array
    example:
      - href: http://data.example.org/collections/dem?f=json
        rel: self
        type: application/json
        title: Digital Elevation Model
      - href: http://data.example.org/collections/dem?f=html
        rel: alternate
        type: application/json
        title: Digital Elevation Model
      - href: http://data.example.org/collections/dem/coverage
        rel: coverage
        type: image/tiff; application=geotiff
        title: Digital Elevation Model
      - href: http://data.example.org/collections/dem/coverage/domainset
        rel: domainset
        type: application/json
        title: Digital Elevation Model
      - href: http://data.example.org/collections/dem/coverage/rangetype
        rel: rangetype
        type: application/json
        title: Digital Elevation Model
      - href: http://data.example.org/collections/dem/coverage/metadata
        rel: metadata
        type: application/json
        title: Digital Elevation Model
    items:
      $ref: 'link.yaml'
  itemType:
    description: indicator about the type of the items in the collection if the collection has an accessible /collections/{collectionId}/items endpoint
    type: string
    default: feature
  crs:
    description: the list of coordinate reference systems supported by the API; the first item is the default coordinate reference system
    type: array
    items:
      type: string
    default:
      - http://www.opengis.net/def/crs/OGC/1.3/CRS84
    example:
      - http://www.opengis.net/def/crs/OGC/1.3/CRS84
      - http://www.opengis.net/def/crs/EPSG/0/4326
  storageCrs:
    description: the native coordinate reference system (i.e., the most efficient CRS in which to request the data, possibly how the data is stored on the server); this is the default output coordinate reference system for Maps and Coverages
    type: string
    default: http://www.opengis.net/def/crs/OGC/1.3/CRS84
    example: http://www.opengis.net/def/crs/OGC/1.3/CRS84
  epoch:
    description: Epoch of the native (storage) Coordinate Reference System (CRS)
    type: number
    example: 2021.33
  dataType:
    allOf:
      - description: Type of data represented in the collection
      - $ref: 'dataType.yaml'
  geoDataClasses:
     description: URIs identifying a class of data contained in the geospatial data (useful for example to determine compatibility with styles or processes)
     type: array
     items:
       type: string
       format: uri
  geometryDimension:
    description: 'The geometry dimension of the features shown in this layer (0: points, 1: curves, 2: surfaces, 3: solids), unspecified: mixed or unknown'
    type: integer
    minimum: 0
    maximum: 3
  minScaleDenominator:
    description: Minimum scale denominator for usage of the collection
    type: number
  maxScaleDenominator:
    description: Maximum scale denominator for usage of the collection
    type: number
  minCellSize:
    description: Minimum cell size for usage of the collection
    type: number
  maxCellSize:
    description: Maximum cell size for usage of the collection
    type: number
  created:
    description: Timestamp indicating when the collection was first produced
    type: string
    format: date-time
  updated:
    description: Timestamp of the last change/revision to the collection
    type: string
    format: date-time
  extent:
    $ref: 'extent.yaml'

Listing 7 — collectionDesc Schema

 

type: object
anyOf:
- required:
  - name
- required:
  - mediaType
properties:
  name:
    type: string
  mediaType:
    type: string

Listing 8 — format.yaml

 

type: object
required:
  - concepts
  - scheme
properties:
  concepts:
    type: array
    description:
      One or more entity/concept identifiers from this knowledge
      system. it is recommended that a resolvable URI be used for
      each entity/concept identifier.
    minItems: 1
    items:
      type: object
      required:
        - id
      properties:
        id:
          type: string
          description: An identifier for the concept.
        title:
          type: string
          description: A human readable title for the concept.
        description:
          type: string
          description: A human readable description for the concept.
        url:
          type: string
          format: uri
          description: A URI providing further description of the concept.
  scheme:
    type: string
    description:
      An identifier for the knowledge organization system used
      to classify the resource.  It is recommended that the
      identifier be a resolvable URI.  The list of schemes used
      in a searchable catalog can be determined by inspecting
      the server's OpenAPI document or, if the server implements
      CQL2, by exposing a queryable (e.g. named `scheme`) and
      enumerating the list of schemes in the queryable's schema
      definition.

Listing 9 — theme.yaml

 

type: object
description: |-
  Identification of, and means of communication with, person responsible
  for the resource.
anyOf:
  - required:
    - name
  - required:
    - organization
properties:
  identifier:
    type: string
    description: |-
      A value uniquely identifying a contact.
  name:
    type: string
    description: |-
      The name of the responsible person.
  position:
    type: string
    description:
      The name of the role or position of the responsible person taken
      from the organization's formal organizational hierarchy or chart.
  organization:
    type: string
    description:
      Organization/affiliation of the contact.
  logo:
    description:
      Graphic identifying a contact. The link relation should be `icon`
      and the media type should be an image media type.
    allOf:
      - $ref: '../common-core/link.yaml'
      - type: object
        required:
          - rel
          - type
        properties:
          rel:
            enum:
              - icon
  phones:
    type: array
    description: Telephone numbers at which contact can be made.
    items:
      type: object
      required:
        - value
      properties:
        value:
          type: string
          description: The value is the phone number itself.
          pattern: "^\\+[1-9]{1}[0-9]{3,14}$"
          example: "+14165550142"
        roles:
          description:
            The type of phone number (e.g. home, work, fax, etc.).
          $ref: 'roles.yaml'
  emails:
    type: array
    description: Email addresses at which contact can be made.
    items:
      type: object
      required:
        - value
      properties:
        value:
          type: string
          description: The value is the email number itself.
          format: email
        roles:
          description:
            The type of email (e.g. home, work, etc.).
          $ref: 'roles.yaml'
  addresses:
    type: array
    description: Physical location at which contact can be made.
    items:
      type: object
      properties:
        deliveryPoint:
          type: array
          description: Address lines for the location.
          items:
            type: string
        city:
          type: string
          description: City for the location.
        administrativeArea:
          type: string
          description: State or province of the location.
        postalCode:
          type: string
          description: ZIP or other postal code.
        country:
          type: string
          description: Country of the physical address.  ISO 3166-1 is recommended.
        roles:
          description:
            The type of address (e.g. office, home, etc.).
          $ref: 'roles.yaml'
  links:
    type: array
    description: On-line information about the contact.
    items:
      allOf:
        - $ref: '../common-core/link.yaml'
        - type: object
          required:
            - type
  hoursOfService:
    type: string
    description: Time period when the contact can be contacted.
    example: "Hours: Mo-Fr 10am-7pm Sa 10am-22pm Su 10am-21pm"
  contactInstructions:
    type: string
    description: |-
      Supplemental instructions on how or when to contact the
      responsible party.
  roles:
    description:
      The set of named duties, job functions and/or permissions
      associated with this contact.
      (e.g. developer, administrator, etc.).
    $ref: 'roles.yaml'

Listing 10 — contact.yaml

 

description:
  The list of duties, job functions or permissions assigned by the system
  and associated with the context of this member.
type: array
minItems: 1
items:
  type: string

Listing 11 — roles.yaml

 

type: object
description:
  The language used for textual values in this record.
required:
  - code
properties:
  code:
    type: string
    description:
      The language tag as per RFC-5646.
    example: el
  name:
    type: string
    minLength: 1
    description:
      The untranslated name of of the language.
    example: Ελληνικά
  alternate:
    type: string
    description:
      The name of the language in another well-understood language,
      usually English.
    example: Greek
  dir:
    type: string
    description:
      The direction for text in this language. The default, `ltr`
      (left-to-right), represents the most common situation.
      However, care should be taken to set the value of `dir`
      appropriately if the language direction is not `ltr`.
      Other values supported are `rtl` (right-to-left), `ttb`
      (top-to-bottom), and `btt` (bottom-to-top).
    enum:
      - ltr
      - rtl
      - ttb
      - btt
    default:
      ltr

Listing 12 — language.yaml

 

anyOf:
 - type: string
 - type: string
   enum:
   - map
   - vector
   - coverage

Listing 13 — dataType.yaml

 

title: Extent with (optional) Uniform Additional Dimensions Schema
description: |-
   This extent schema includes optional additional dimensions, but will still validate for
   objects not conforming to UAD.
allOf:
   - type: object
     description: |-
        The extent of the data in the collection. In the Core only spatial and temporal
        extents are specified. Extensions may add additional members to represent other
        extents, for example, thermal or pressure ranges.

        The first item in the array describes the overall extent of
        the data. All subsequent items describe more precise extents,
        e.g., to identify clusters of data.
        Clients only interested in the overall extent will only need to
        access the first item in each array.
     properties:
        spatial:
          description: The spatial extent of the data in the collection.
          type: object
          properties:
            bbox:
              description: |-
                One or more bounding boxes that describe the spatial extent of the dataset.

                The first bounding box describes the overall spatial
                extent of the data. All subsequent bounding boxes describe
                more precise bounding boxes, e.g., to identify clusters of data.
                Clients only interested in the overall spatial extent will
                only need to access the first item in each array.
              type: array
              minItems: 1
              items:
                description: |-
                  Each 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 `crs` property.

                  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 `crs` property.

                  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.
                type: array
                oneOf:
                - minItems: 4
                  maxItems: 4
                - minItems: 6
                  maxItems: 6
                items:
                  type: number
                example:
                  - -180
                  - -90
                  - 180
                  - 90
            storageCrsBbox:
              description: |-
                One or more bounding boxes that describe the spatial extent of the dataset in the storage (native) CRS (`storageCrs` property).

                The first bounding box describes the overall spatial
                extent of the data. All subsequent bounding boxes describe
                more precise bounding boxes, e.g., to identify clusters of data.
                Clients only interested in the overall spatial extent will
                only need to access the first item in each array.
              type: array
              minItems: 1
              items:
                description: |-
                  Each 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)
                type: array
                oneOf:
                - minItems: 4
                  maxItems: 4
                - minItems: 6
                  maxItems: 6
                items:
                  type: number
                example:
                  - -180
                  - -90
                  - 180
                  - 90
            crs:
              description: |-
                Coordinate reference system of the coordinates of the `bbox` property.
                The default reference system is WGS 84 longitude/latitude.
                WGS 84 longitude/latitude/ellipsoidal height for coordinates with height.
                For non-terrestrial coordinate reference system, another CRS may be specified.
              type: string
              enum:
                - 'http://www.opengis.net/def/crs/OGC/1.3/CRS84'
                - 'http://www.opengis.net/def/crs/OGC/0/CRS84h'
              default: 'http://www.opengis.net/def/crs/OGC/1.3/CRS84'
            grid:
              description: |-
                 Provides information about the limited availability of data within the collection organized
                 as a grid (regular or irregular) along each spatial dimension.
              type: array
              minItems: 2
              maxItems: 3
              items:
                $ref: 'grid.yaml'
        temporal:
          description: |-
            The temporal extent of the features in the collection.
          type: object
          properties:
            interval:
              description: |-
                One or more time intervals that describe the temporal extent of the dataset.
                In the Core only a single time interval is supported.

                Extensions may support multiple intervals.
                The first time interval describes the overall
                temporal extent of the data. All subsequent time intervals describe
                more precise time intervals, e.g., to identify clusters of data.
                Clients only interested in the overall extent will only need
                to access the first item in each array.
              type: array
              minItems: 1
              items:
                description: |-
                  Begin and end times of the time interval. The timestamps are in the
                  temporal coordinate reference system specified in `trs`. By default
                  this is the Gregorian calendar, expressed using RFC 3339 section 5.6.
                  Note that these times may be specified using time zone offsets to UTC time other than zero.

                  The value `null` for start or end time is supported and indicates a half-bounded time interval.
                type: array
                minItems: 2
                maxItems: 2
                items:
                  type: string
                  format: date-time
                  nullable: true
                example:
                  - '2011-11-11T12:22:11Z'
                  - '2011-11-11T08:22:11-04:00'
                  - null
            trs:
              description: |-
                Coordinate reference system of the coordinates in the temporal extent
                (property `interval`). The default reference system is the Gregorian calendar.
                In the Core this is the only supported temporal coordinate reference system.
                Extensions may support additional temporal coordinate reference systems and add
                additional enum values.
              type: string
              enum:
                - 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian'
              default: 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian'
            grid:
              $ref: 'grid.yaml'
   - anyOf:
     # To validate against the Uniform Additional Dimensions requirements class, remove or comment out the following line
     - type: object
     - type: object
       additionalProperties:
          description: |-
            The domain intervals for any additional dimensions of the extent (envelope) beyond those described in temporal and spatial.
          type: object
          oneOf:
            - required: [ interval, definition ]
            - required: [ interval, trs ]
            - required: [ interval, vrs ]
          properties:
            interval:
              description: |-
                One or more intervals that describe the extent for this dimension of the dataset.
                The value `null` is supported and indicates an unbounded or half-bounded interval.
                The first interval describes the overall extent of the data for this dimension.
                All subsequent intervals describe more precise intervals, e.g., to identify clusters of data.
                Clients only interested in the overall extent will only need
                to access the first item (a pair of lower and upper bound values).
              type: array
              minItems: 1
              items:
                description: |-
                  Lower and upper bound values of the interval. The values
                  are in the coordinate reference system specified in `crs`, `trs` or `vrs`.
                type: array
                minItems: 2
                maxItems: 2
                items:
                  oneOf:
                     - type: string
                       nullable: true
                     - type: number
                example:
                  - '2011-11-11T12:22:11Z'
                  - '2011-11-11T08:22:11-04:00'
                  - 32.5
                  - null
            trs:
              type: string
              description: temporal coordinate reference system (e.g. as defined by Features for 'temporal')
            vrs:
              type: string
              description: vertical coordinate reference system (e.g. as defined in EDR for 'vertical')
            grid:
              $ref: 'grid.yaml'
            definition:
              type: string
              format: uri
              description: A URI to the definition of the measured or observed property corresponding to this dimension.
            unit:
              type: string
              description: The unit of measure in which the interval and/or grid values are expressed.
            unitLang:
              type: string
              default: UCUM
              description: The language (or vocabulary) in which the unit is expressed (defaults to "UCUM" if not specified).
            variableType:
              description: The type of variable which may inform correct interpretation and interpolation methods
              type: string
              enum:
                - continuous
                - numericalOrdinal
                - numericalNominal
                - categoricalOrdinal
                - categoricalNominal

Listing 14 — extent.yaml

 

type: object
description: |-
  Provides information about the limited availability of data within the collection organized as a grid (regular or irregular) along the dimension.
allOf:
  - type: object
    required: [ cellsCount ]
    properties:
      cellsCount:
        description: Number of samples available along the dimension for data organized as a regular or irregular grid.
        type: integer
        example: 50
  - oneOf:
    - $ref: 'regularGrid.yaml'
    - $ref: 'irregularGrid.yaml'

Listing 15 — grid.yaml

 

type: object
description: Regular grid with samples spaced at equal intervals
required: [ resolution, firstCoordinate ]
properties:
  resolution:
    description: |-
      Resolution of regularly gridded data along the dimension in the collection
    oneOf:
      - type: string
        nullable: true
      - type: number
    example:
      - 0.0006866455078
      - "PT1H"
  firstCoordinate:
    description: |-
      First coordinate where a regular grid begins, with subsequent coordinates adding `resolution` unit at each step
    oneOf:
      - type: string
        nullable: true
      - type: number
    example: -180
  relativeBounds:
    description: |-
      Distance in units from coordinate to the lower and upper bounds of each cell for regular grids, describing the geometry of the cells
    type: array
    minItems: 2
    maxItems: 2
    items:
      oneOf:
        - type: string
          nullable: true
        - type: number
    example: [ -0.5, 0.5 ]

Listing 16 — regularGrid.yaml

 

type: object
description: Irregular grid with samples spaced at different intervals
required: [ coordinates ]
properties:
  coordinates:
    description: |-
      List of coordinates along the dimension for which data organized as an irregular grid in the collection is available
      (e.g., 2, 10, 80, 100).
    type: array
    minItems: 1
    items:
      oneOf:
        - type: string
          nullable: true
        - type: number
    example:
      - [2, 10, 80, 100]
      - ["2020-11-12T12:15:00Z","2020-11-12T12:30:00Z","2020-11-12T12:45:00Z"]
  boundsCoordinates:
    description: |-
      Coordinates of the lower and upper bounds of each cell in absolute units for irregular grids describing the geometry each cell
    type: array
    minItems: 1
    items:
       type: array
       minItems: 2
       maxItems: 2
       items:
         oneOf:
           - type: string
             nullable: true
           - type: number
    example: [ [ -180, -179 ], [ -179, -178 ] ]

Listing 17 — irregularGrid.yaml

8.3.2.1.1.  Extent

Requirement 15

Identifier/req/data-joining/collections-collectionid-get-success-extent
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

For each geospatial collection resource, the extent property, if provided, SHALL define boundaries that encompass the spatial and temporal properties of all of the resources in this collection. The temporal extent may use null values to indicate an open time interval.

B

If a spatial resource has multiple properties with spatial or temporal information, it is the decision of the API implementation whether only a single spatial or temporal geometry property is used to determine the extent or all relevant geometries.

Recommendation 6

Identifier/rec/data-joining/collections-collectionid-get-success-extent
A

If an extent contains multiple spatial boundaries (multiple bounding boxes [bbox], etc.), then the extent SHOULD include in the first bbox a boundary which represents the union of all of the other boundaries.

B

If an extent contains multiple temporal intervals, then the extent SHOULD include as the first interval an interval which represents the union of all of the other intervals.

Recommendation 7

Identifier/rec/data-joining/collections-collectionid-get-success-extent-single
A

While the spatial and temporal extents support multiple bounding boxes (bbox array) and time intervals (interval array) for advanced use cases, implementations SHOULD provide only a single bounding box or time interval unless the use of multiple values is important for the use of the dataset and agents using the API are known to be support multiple bounding boxes or time intervals.

8.3.2.1.2.  Item Type

The collections defined by this core module provide information on their key fields and key values.

Recommendation 8

Identifier/rec/data-joining/collections-collectionid-get-success-item-type
A

If the key field metadata and the key values of the key fields of the collection can be accessed by a client, then the itemType property SHOULD be included in the collection resource to indicate the type of the collection. The value of the itemType property SHOULD be dataset.

8.3.2.1.3.  Links

To support hypermedia navigation, the links property must be populated with sufficient hyperlinks to navigate through the whole dataset.

Additional information may be available to assist in understanding and using this dataset. Links to those resources should be provided as well.

8.3.2.1.4.  Describedby

Recommendation 9

Identifier/rec/data-joining/collections-collectionid-get-success-describedby
A

If external schemas or descriptions exist that provide additional information about the structure or semantics of the collection, a 200-response SHOULD include links to each of those resources in the links property of the response (relation: describedby).

B

The type link parameter SHOULD be provided for each link.

8.3.3.  Error Situations

See HTTP status codes for general guidance.

If the parameter collectionId does not exist on the server, the status code of the response will be 404. (see Table 4).

8.4.  Collection’s Key Fields

The HTTP GET operation at path {root}/collections/{collectionId}/keys returns a list of key fields of a specific collection.

8.4.1.  Request

Requirement 17

Identifier/req/data-joining/collections-collectionid-keys-get-op
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the server implements data joining operations, it SHALL support the HTTP GET operation at the path {root}/collections/{collectionId}/keys.

B

The parameter collectionId SHALL be each id property in the collections response (JSONPath: $.collections[*].id).

8.4.2.  Response

Requirement 18

Identifier/req/data-joining/collections-collectionid-keys-get-success
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

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

B

The content of that response SHALL be based on the Collection’s Key Fields Schema.

8.4.2.1.  Response Schema for the Collection’s Key Fields

 

schema:
  $ref: '#/components/schemas/CollectionKeysResponseObject'

CollectionKeysResponseObject:
  required:
  - keys
  - links
  type: object
  properties:
    links:
      type: array
      items:
        $ref: '#/components/schemas/Link'
    keys:
      type: array
      items:
        $ref: '#/components/schemas/CollectionKeysObject'

CollectionKeysObject:
  required:
  - id
  - isDefault
  - links
  type: object
  properties:
    isDefault:
      type: boolean
    language:
      type: string
    id:
      type: string
    links:
      type: array
      items:
        $ref: '#/components/schemas/Link'

Listing 18 — Collection’s Key Fields Schema

8.4.2.1.1.  isDefault

isDefault property contains information on the Collection’s default key field to be used in the data joins. Value true indicates the default key field.

Requirement 19

Identifier/req/data-joining/collections-collectionid-keys-get-success-default-key
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

Exactly one object in the response’s keys array SHALL have the isDefault property value true.

8.4.2.1.2.  language

Language in which the key field’s key values are written (if applicable to the key field). The format of the language field follows the ISO 639-1 language code values.

8.4.2.1.3.  id

Identifier of the key field.

8.4.2.1.4.  links

To support hypermedia navigation, the links property must be populated with sufficient hyperlinks to navigate through the collection’s key fields’ key values.

Description of links property of the CollectionKeysObject:

8.4.3.  Error Situations

See HTTP status codes for general guidance.

If the parameter collectionId does not exist on the server, the status code of the response will be 404. (see Table 4).

8.5.  Collection’s Key Field

The HTTP GET operation at path {root}/collections/{collectionId}/keys/{keyFieldId} returns a list of key values of a specific key field of a specific collection.

8.5.1.  Request

Requirement 22

Identifier/req/data-joining/collections-collectionid-keys-keyfieldid-get-op
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the server implements data joining operations, it SHALL support the HTTP GET operation at the path {root}/collections/{collectionId}/keys/{keyFieldId}.

B

The parameter collectionId SHALL be each id property in the collections response (JSONPath: $.collections[*].id).

C

The parameter keyFieldId SHALL be each id property in the collection’s key fields response (JSONPath: $.keys[*].id).

Permission 2

Identifier/per/data-joining/collections-collectionid-keys-keyfieldid-get-op-key-param
A

The server MAY support the query parameter key to filter the results by key value. The key parameter SHALL possess the following characteristics (using an OpenAPI Specification 3.0 fragment):

Statement

 

name: key
in: query
required: false
schema:
  type: string

Permission 3

Identifier/per/data-joining/collections-collectionid-keys-keyfieldid-get-op-limit-param
A

The server MAY support the query parameter limit to limit the number of key values that can be returned in a single response. The limit parameter SHALL possess the following characteristics (using an OpenAPI Specification 3.0 fragment):

Statement

 

name: limit
in: query
required: false
schema:
  type: integer
  minimum: 1
  maximum: 10000
  default: 1000

Note The values for minimum, maximum and default are only examples and MAY be changed.

8.5.2.  Response

Requirement 23

Identifier/req/data-joining/collections-collectionid-keys-keyfieldid-get-success
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

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

B

The content of that response SHALL be based on the Collection’s Key Field Schema.

8.5.2.1.  Parameter Limit

The number of returned key values depends on the server and the value of the limit parameter.

The client can request a limit to the number of key values returned in a response by using the limit parameter. The limit parameter indicates the maximum number of key values which should be included in a single response.

The server may have a default value for the limit and a maximum limit.

Requirement 24

Identifier/req/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the limit parameter is provided by the client and supported by the server, then the response SHALL not contain more resources than specified by the limit parameter.

B

If the service specifies a maximum value for the limit parameter, the response SHALL not contain more resources than this maximum value.

Requirement 25

Identifier/req/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit-unsupported
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the limit parameter is provided by the client but it is not supported by the server, then the server SHALL process the request as if the parameter had not been provided.

8.5.2.2.  Paged response

If the number of items in the keys array of the response is less than or equal to the requested/default/maximum limit then the server will include a link to the next set of results.

Permission 4

Identifier/per/data-joining/collections-collectionid-keys-keyfieldid-get-success-server-limit
A

If a server is configured with a maximum response size, then the server MAY page responses which exceed that threshold.

Recommendation 10

Identifier/rec/data-joining/collections-collectionid-keys-keyfieldid-get-success-server-limit
A

Clients SHOULD be prepared to handle a paged response even if they have not specified a limit parameter in their query.

The effect of the limit parameter is to divide the response into a number of pages. Each page (except for the last) contains the specified number of entities. The response contains the first page. Additional pages can be accessed through hyperlink navigation.

Recommendation 11

Identifier/rec/data-joining/collections-collectionid-keys-keyfieldid-get-success-next-1
A

A 200-response SHOULD include a link to the next “page” (relation: next), if more resources have been selected than returned in the response.

Recommendation 12

Identifier/rec/data-joining/collections-collectionid-keys-keyfieldid-get-success-next-2
A

Dereferencing a next link SHOULD return additional resources from the set of selected resources that have not yet been returned.

Recommendation 13

Identifier/rec/data-joining/collections-collectionid-keys-keyfieldid-get-success-next-3
A

The number of resources in a response to a next link SHOULD follow the same rules as for the response to the original query and again include a next link, if there are more resources in the selection that have not yet been returned.

Providing prev links supports navigating back and forth between pages, but depending on the implementation approach it may be too complex to implement.

Permission 5

Identifier/per/data-joining/collections-collectionid-keys-keyfieldid-get-success-prev
A

A response to a next link MAY include a prev link to the resource that included the next link.

If the server response does not contain all of the key values that match the selection parameters, then the client must be informed of that fact.

Requirement 26

Identifier/req/data-joining/collections-collectionid-keys-keyfieldid-get-success-paged-response
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the number of key values in the keys element is less than the number that match the selection parameters, then the numberMatched and numberReturned properties SHALL be included in the response.

The numberMatched property of the response indicates the number of key values that are available in the server that match the selection parameters in the request.

Requirement 27

Identifier/req/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberMatched
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If a property numberMatched is included in the response, the value SHALL be identical to the number of hosted key values that meet the selection parameters provided by the client.

Permission 6

Identifier/per/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberMatched
A

A server MAY omit the numberMatched information in a response, if the information about the number of matching resources is not known or difficult to compute.

The number of key values included in a response may be a subset of the number matched. In that case, the numberReturned property of the response indicates the number of key values returned in this “page” of the response.

Requirement 28

Identifier/req/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberReturned
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If a property numberReturned is included in the response, the value SHALL be identical to the number of items in the keys array in the response document.

Permission 7

Identifier/per/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberReturned
A

A server MAY omit the numberReturned information in a response, if the information about the number of resources in the response is not known or difficult to compute.

8.5.2.3.  Response Schema for the Collection’s Key Field

 

schema:
  $ref: '#/components/schemas/CollectionKeysKeyFieldResponseObject'

CollectionKeysKeyFieldResponseObject:
  required:
  - keys
  - links
  type: object
  properties:
    links:
      type: array
      items:
        $ref: '#/components/schemas/Link'
    keys:
      type: array
      items:
        $ref: '#/components/schemas/KeyObject'
    numberMatched:
      type: integer
    numberReturned:
      type: integer

KeyObject:
  required:
  - key
  type: object
  properties:
    key:
      type: string
    title:
      type: string

Listing 21 — Collection’s Key Field Schema

8.5.2.3.1.  keys

Array of key objects.

8.5.2.3.2.  numberMatched

The number of key values that are available in the server that match the selection parameters in the request.

8.5.2.3.3.  numberReturned

The number of key values returned in the response.

8.5.2.3.4.  key

Key value.

8.5.2.3.5.  links

To support hypermedia navigation, the links property must be populated with sufficient hyperlinks.

8.5.2.3.6.  title

Human-readable description of the key value.

8.5.3.  Error Situations

See HTTP status codes for general guidance.

If the parameter collectionId does not exist on the server, the status code of the response will be 404. (see HTTP status codes).

If the parameter keyFieldId does not exist on the server, the status code of the response will be 404. (see HTTP status codes).

8.6.  Joins

The HTTP GET operation at path {root}/joins returns a list of joins that are available on the server.

8.6.1.  Request

Requirement 30

Identifier/req/data-joining/joins-get-op
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the server implements data joining operations, it SHALL support the HTTP GET operation at the path {root}/joins.

Permission 8

Identifier/per/data-joining/joins-get-op-limit-parameter
A

The server MAY support the query parameter limit to limit the number of resources that can be returned in a single response. The limit parameter SHALL possess the following characteristics (using an OpenAPI Specification 3.0 fragment):

Statement

 

name: limit
in: query
required: false
schema:
  type: integer
  minimum: 1
  maximum: 1000
  default: 10

Note: The values for minimum, maximum and default are only examples and MAY be changed.

Permission 9

Identifier/per/data-joining/joins-get-op-datetime-parameter
A

The server MAY support the query parameter datetime to filter the returned joins by their execution timestamp. The datetime parameter SHALL possess the following characteristics (using an OpenAPI Specification 3.0 fragment):

Statement

 

name: datetime
in: query
required: false
schema:
  type: string

Temporal geometries are either a date-time value or a time interval. The 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

The syntax of date-time is specified by RFC 3339, 5.6.

Open ranges in time intervals at the start or end are supported using a double-dot (..) or an empty string for the start/end..

8.6.2.  Response

Requirement 31

Identifier/req/data-joining/joins-get-success
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

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

B

The content of that response SHALL be based on the Joins Schema.

8.6.2.1.  Parameter Limit

The number of returned joins depends on the server and the value of the limit parameter.

The client can request a limit to the number of joins returned in a response by using the limit parameter. The limit parameter indicates the maximum number of joins which should be included in a single response.

The server may have a default value for the limit and a maximum limit.

Requirement 32

Identifier/req/data-joining/joins-get-success-limit
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the limit parameter is provided by the client and supported by the server, then the response SHALL not contain more resources than specified by the limit parameter.

B

If the service specifies a maximum value for the limit parameter, the response SHALL not contain more resources than this maximum value.

Requirement 33

Identifier/req/data-joining/joins-get-success-limit-unsupported
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the limit parameter is provided by the client but it is not supported by the server, then the server SHALL process the request as if the parameter had not been provided.

8.6.2.2.  Parameter datetime

Requirement 34

Identifier/req/data-joining/joins-get-success-datetime
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the datetime parameter is provided by the client and supported by the server, then only joins that have a timeStamp property that intersects the temporal information in the datetime parameter SHALL be part of the result set.

8.6.2.3.  Paged response

If the number of items in the joins array of the response is less than or equal to the requested/default/maximum limit then the server will include a link to the next set of results.

Permission 10

Identifier/per/data-joining/joins-get-success-server-limit
A

If a server is configured with a maximum response size, then the server MAY page responses which exceed that threshold.

Recommendation 14

Identifier/rec/data-joining/joins-get-success-server-limit
A

Clients SHOULD be prepared to handle a paged response even if they have not specified a limit parameter in their query.

The effect of the limit parameter is to divide the response into a number of pages. Each page (except for the last) contains the specified number of entities. The response contains the first page. Additional pages can be accessed through hyperlink navigation.

Recommendation 15

Identifier/rec/data-joining/joins-get-success-next-1
A

A 200-response SHOULD include a link to the next “page” (relation: next), if more resources have been selected than returned in the response.

Recommendation 16

Identifier/rec/data-joining/joins-get-success-next-2
A

Dereferencing a next link SHOULD return additional resources from the set of selected resources that have not yet been returned.

Recommendation 17

Identifier/rec/data-joining/joins-get-success-next-3
A

The number of resources in a response to a next link SHOULD follow the same rules as for the response to the original query and again include a next link, if there are more resources in the selection that have not yet been returned.

Providing prev links supports navigating back and forth between pages, but depending on the implementation approach it may be too complex to implement.

Permission 11

Identifier/per/data-joining/joins-get-success-prev
A

A response to a next link MAY include a prev link to the resource that included the next link.

If the server response does not contain all of the joins that match the selection parameters, then the client must be informed of that fact.

Requirement 35

Identifier/req/data-joining/joins-get-success-paged-response
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the number of joins in the joins element is less than the number that match the selection paarameters, then the numberMatched and numberReturned properties SHALL be included in the response.

The numberMatched property of the response indicates the number of joins that are available in the server that match the selection parameters in the request.

Requirement 36

Identifier/req/data-joining/joins-get-success-numberMatched
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If a property numberMatched is included in the response, the value SHALL be identical to the number of joins that meet the selection parameters provided by the client.

Permission 12

Identifier/per/data-joining/joins-get-success-numberMatched
A

A server MAY omit the numberMatched information in a response, if the information about the number of matching resources is not known or difficult to compute.

The number of joins included in a response may be a subset of the number matched. In that case, the numberReturned property of the response indicates the number of joins returned in this “page” of the response.

Requirement 37

Identifier/req/data-joining/joins-get-success-numberReturned
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If a property numberReturned is included in the response, the value SHALL be identical to the number of items in the joins array in the response document.

Permission 13

Identifier/per/data-joining/joins-get-success-numberReturned
A

A server MAY omit the numberReturned information in a response, if the information about the number of resources in the response is not known or difficult to compute.

8.6.2.4.  Response schema for the Joins

 

schema:
  $ref: '#/components/schemas/JoinsResponseObject'

JoinsResponseObject:
  required:
  - joins
  - links
  type: object
  properties:
    links:
      type: array
      items:
        $ref: '#/components/schemas/Link'
    joins:
      type: array
      items:
        $ref: '#/components/schemas/JoinsObject'
    numberMatched:
      type: integer
    numberReturned:
      type: integer
    timeStamp:
      type: string
      format: date-time

JoinsObject:
  required:
  - id
  - links
  - timeStamp
  type: object
  properties:
    id:
      type: string
    timeStamp:
      type: string
      format: date-time
    links:
      type: array
      items:
        $ref: '#/components/schemas/Link'

Listing 25 — Joins Schema

8.6.2.4.1.  joins

The joins property of the response provides a description of each individual join hosted by the server.

Requirement 38

Identifier/req/data-joining/joins-get-success-items
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

For each join resource accessible through the server, metadata describing that join SHALL be provided in the property joins.

8.6.2.4.2.  links

To support hypermedia navigation, the links property must be populated with sufficient hyperlinks to navigate through the joins.

Property links in the JoinsResponseObject:

Property links in the JoinsObject:

8.6.2.4.3.  id

Identifier of the join.

8.6.2.4.4.  numberMatched

The number of joins that are available in the server that match the selection parameters in the request.

8.6.2.4.5.  numberReturned

The number of joins returned in the response.

8.6.2.4.6.  timeStamp

Property timeStamp in the JoinsResponseObject:

Requirement 41

Identifier/req/data-joining/joins-get-success-timeStamp
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If a property timeStamp is included in the response, the value SHALL be set to the time when the response was generated.

Property timeStamp in the JoinsObject:

The time when the join was generated.

8.6.3.  Error Situations

See HTTP status codes for general guidance.

8.7.  Join Creation

The HTTP POST operation at path {root}/joins creates a new join.

The operation joins data from an input data file with a collection hosted on the server.

The input data file can either be uploaded to the server with the query, represented by the requirements class “Input File Upload” or referenced via URL links, represented by the requirements class “File Referencing with URL”.

The core module contains support for the CSV format for the input data files, defined in the requirements class “CSV File Input”. The CSV files must have a column that contains the key values that will be used in the join operation and a separate column for each joined attribute.

The joins are executed via common key values that are available in both datasets. If the input data file contains additional key values that are not available in the collection, they will not be included to the joined output. The extension modules may alter this behavior.

The operation is required to support the GeoJSON format for the joined data, represented by the requirements class “GeoJSON Output for Joined Data” and it may support direct GeoJSON output, represented by the requirements class “Direct GeoJSON Output for Joined Data”. In addition, the operation may support any other output format for the joined data.

8.7.1.  Request

Requirement 42

Identifier/req/data-joining/joins-post-op
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the server implements data joining operations, it SHALL support the HTTP POST operation at path {root}/joins.

B

The request is made as a multipart/form-data request. The request SHALL contain the header: Content-Type: multipart/form-data;

C

If the attribute dataset file is uploaded with the query, it SHALL contain the header: Content-Disposition: form-data; filename=”[right dataset file’s name]”; name=”right-dataset-file”;

D

The input data files SHALL be encoded with the UTF-8 encoding.

E

The server SHALL support the GeoJSON output format for the joined data.

F

The Form Data parameters of the query are listed in a Table 5:

Table 5 — The Form Data parameters of the Join Creation query.

NameDescriptionType and valuesRequired
collection-idThe value of the id attribute of the collection available on the server, to which the attribute data will be joined.StringMandatory
collection-keyThe value of the id attribute of the key field of the collection that will be used in the join operation.StringOptionala
right-dataset-formatThe format of the attribute dataset.StringMandatoryb
right-dataset-fileThe attribute dataset file (uploaded file).FileOptionalc
right-dataset-urlThe attribute dataset URL.URLOptionalc
right-dataset-keyThe key field in the attribute dataset that contains the key values.StringMandatoryd
right-dataset-data-value-listFields in the attribute dataset that contain the attribute values that will be joined.String, separated by commasMandatorye
csv-file-delimiterThe delimiter character used in the CSV file.StringOptionalf
csv-file-header-row-numberThe row number of CSV file’s header row (counting starts from 1).IntegerOptionalg
csv-file-data-start-row-numberThe row number where the data values start in the CSV file. (counting starts from 1)IntegerOptionalh
output-formatsList of output formats for the joined data that will be included to the response document.String, separated by commasOptionali
include-join-metadataIncludes the joinInformation element to the response document.Boolean, values: {true, false}Optionalj
a If the collection-key parameter is not provided in the request, a default key field value of the collection is used in the join operation.
b The core module contains support for the format: ‘http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv‘.
c One of the parameters: right-dataset-file or right-dataset-url is mandatory to be used with the operation. The right-dataset-file parameter can be used for uploading an attribute dataset file to the server. The right-dataset-url parameter can be used for providing the attribute dataset file via a URL link. If both parameters are provided in the query, the server will response with an HTTP exception 400.
d The key field in the attribute dataset that contains the key values. For CSV format, this value is the column number that contains the key values (counting starts from 0).
e For CSV format, the values are the column numbers that contain the attribute values that will be joined with the collection (counting starts from 0).
f The csv-file-delimiter parameter is mandatory to be used with the right-dataset-format parameter value: ‘http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv‘. The parameter is not required for other formats that may be defined in the extension modules.
g If omitted, the header row is expected to be at the first row of the CSV file. The names of the joined attributes in the result dataset are the names of the columns from the CSV file header row.
h If omitted, the data start row is expected to be at the second row of the CSV file.
i A comma-separated list of the outputs for the joined data. If the parameter value is not provided in the request, a default value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson is used.
j If parameter is not provided in the request, a default value false is used. The parameter is not used with the output-formats parameter value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson-direct

Permission 14

Identifier/per/data-joining/joins-post-op-additional-output-formats
A

The server MAY support any other output formats for the joined data besides GeoJSON.

Requirement 43

Identifier/req/data-joining/joins-post-op-additional-output-formats
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the server supports any additional joined data output formats for the Join Creation operation, they SHALL be listed in the conformance response document.

8.7.2.  Response

Requirement 44

Identifier/req/data-joining/joins-post-success
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

A successful execution of the operation with other output-format parameter values than http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson-direct SHALL be reported as a response with a HTTP status code 201.

B

The content of the response in A SHALL be based on the Join Schema.

C

A successful execution of the operation for the output format http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson-direct SHALL be reported as a response with a HTTP status code 200.

D

The content of the response in C SHALL be the joined data in the GeoJSON format.

Requirement 45

Identifier/req/data-joining/joins-post-success-input-data-file-csv-multiple-keys
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the input data file is in CSV format and it contains multiple rows with the same key value, the value is used in the join operation from the row where it is encountered first.

Requirement 46

Identifier/req/data-joining/joins-post-success-input-data-file-csv-attribute-names
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the input data file is in CSV format, the names for the joined attributes SHALL be the CSV file header row values of the joined columns.

8.7.2.1.  Response schema for the Join Creation

The response schema for queries that create a join resource is expressed with the Join Schema.

For responses that produce a direct GeoJSON output, the response is a GeoJSON file that contains also the joined attributes from the input data file.

8.7.3.  Error Situations

See HTTP status codes for general guidance.

8.8.  Join

The HTTP GET operation at path {root}/joins/{joinId} returns metadata on a specific join that is available on the server.

8.8.1.  Request

Requirement 47

Identifier/req/data-joining/joins-joinid-get-op
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

If the server implements data joining operations, it SHALL support the HTTP GET operation at the path /joins/{joinId}.

B

The parameter joinId SHALL be each id property in the joins response (JSONPath: $.joins[*].id).

8.8.2.  Response

Requirement 48

Identifier/req/data-joining/joins-joinid-get-success
Included inRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
A

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

B

The content of that response SHALL be based on the Join Schema.

8.8.2.1.  Response Schema for the Join

 

schema:
  $ref: '#/components/schemas/JoinResponseObject'

JoinResponseObject:
  required:
  - join
  - links
  type: object
  properties:
    links:
      type: array
      items:
        $ref: '#/components/schemas/Link'
    join:
      $ref: '#/components/schemas/JoinObject'

JoinObject:
  required:
  - id
  - inputs
  - outputs
  - timeStamp
  type: object
  properties:
    id:
      type: string
    timeStamp:
      type: string
      format: date-time
    inputs:
      $ref: '#/components/schemas/JoinInputsObject'
    outputs:
      type: array
      items:
        $ref: '#/components/schemas/Link'
    joinInformation:
      $ref: '#/components/schemas/JoinInformationObject'

JoinInputsObject:
  required:
  - attributeDataset
  - collection
  type: object
  properties:
    attributeDataset:
      type: string
    collection:
      type: array
      items:
        $ref: '#/components/schemas/Link'

JoinInformationObject:
  type: object
  properties:
    numberOfMatchedCollectionKeys:
      type: integer
    numberOfUnmatchedCollectionKeys:
      type: integer
    numberOfAdditionalAttributeKeys:
      type: integer
    matchedCollectionKeys:
      type: array
      items:
        type: string
    unmatchedCollectionKeys:
      type: array
      items:
        type: string
    additionalAttributeKeys:
      type: array
      items:
        type: string
    duplicateAttributeKeys:
      type: array
      items:
        type: string
    numberOfDuplicateAttributeKeys:
      type: integer

Listing 26 — Join Schema

8.8.2.1.1.  links

To support hypermedia navigation, the links property must be populated with sufficient hyperlinks.

8.8.2.1.2.  join

The metadata on the join.

8.8.2.1.3.  id

Unique identifier for the join resource.

8.8.2.1.4.  timeStamp

The time when the join was generated.

8.8.2.1.5.  inputs

Input datasets that were used in the join operation.

8.8.2.1.6.  attributeDataset

Name or URL of the input attribute data file.

8.8.2.1.7.  collection

A link object that contains information on the collection that was used in the join operation.

8.8.2.1.8.  outputs

Links to the produced outputs that contain the joined data.

8.8.2.1.9.  joinInformation

Information on the execution of the data join operation

8.8.2.1.10.  numberOfMatchedCollectionKeys

The number of collection’s key values, to which attribute data was joined successfully.

8.8.2.1.11.  numberOfUnmatchedCollectionKeys

The number of collection’s key values, to which attribute data couldn´t be joined.

8.8.2.1.12.  numberOfAdditionalAttributeKeys

The number of additional key values in the attribute dataset that were not available in the collection.

8.8.2.1.13.  matchedCollectionKeys

List of collection’s key values that were successfully joined with attribute data

8.8.2.1.14.  unmatchedCollectionKeys

List of collection’s key values, to which attribute data couldn´t be joined.

8.8.2.1.15.  additionalAttributeKeys

List of key values in the attribute data file that were not available in the collection’s key field.

8.8.2.1.16.  duplicateAttributeKeys

List of duplicate keys in the attribute data file.

8.8.2.1.17.  numberOfDuplicateAttributeKeys

The number of keys in the attribute data file that had duplicate entries.

8.8.3.  Error Situations

See HTTP status codes for general guidance.

If the parameter joinId does not exist on the server, the status code of the response will be 404. (see HTTP status codes).

9.  Requirements Class “Join Delete”

9.1.  Overview

Requirements class 3: Join Delete

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/join-delete
Target typeWeb API
Conformance classConformance class A.3: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/join-delete
PrerequisitesRequirements Class: Core
Requirements Class: Data Joining
RFC 2616 (HTTP/1.1)
RFC 2818 (HTTP over TLS)
Normative statementsRequirement 52: /req/join-delete/joins-joinid-delete-op
Requirement 53: /req/join-delete/joins-joinid-delete-success

9.2.  Join Delete

The HTTP DELETE operation at path {root}/joins/{joinId} deletes the specific join from the server.

9.2.1.  Request

Requirement 52

Identifier/req/join-delete/joins-joinid-delete-op
Included inRequirements class 3: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/join-delete
A

If the server implements the data joining operations and the Join Delete requirements class, it SHALL support the HTTP DELETE operation at the path {root}/joins/{joinId}.

B

The parameter joinId is the id property of a join in the joins response (JSONPath: $.joins.id).

9.2.2.  Response

Requirement 53

Identifier/req/join-delete/joins-joinid-delete-success
Included inRequirements class 3: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/join-delete
A

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

B

The body of the response body SHALL be empty.

9.2.2.1.  Response schema for the Join Delete

The response of the operation is empty.

9.2.3.  Error Situations

See HTTP status codes for general guidance.

If the parameter joinId does not exist on the server, the status code of the response will be 404. (see HTTP status codes).

10.  Requirements Class “File Joining”

10.2.  File Joining

The HTTP POST operation at path {root}/filejoin joins data from an input data file directly with another input data file.

The input data files can be either uploaded to the server with the query, represented by the requirements class “Input File Upload” or referenced via URL links, represented by the requirements class “File Referencing with URL”.

The core module supports data joining from the right dataset to the left dataset.

The core module contains the following format support:

  • The CSV format for the right dataset, defined in the requirements class “CSV File Input”.

  • The GeoJSON format for the left dataset, defined in the requirements class “GeoJSON File Input”.

The CSV files must have a column that contains the key values that will be used in the join operation and a separate column for each joined attribute.

The joins are executed via common key values that are available in both datasets. If the right dataset contains additional key values that are not available in the left dataset, they will not be included in the joined output. Extension modules may alter this behavior.

The result of the operation is the left dataset that contains also the joined attributes from the right dataset.

10.2.1.  Request

Requirement 54

Identifier/req/file-joining/filejoin-post-op
Included inRequirements class 4: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/file-joining
A

If the server implements file joining operations the implementation SHALL support the HTTP POST operation at path {root}/filejoin.

B

The request is made as a multipart/form-data request. The request SHALL contain the header:

  • Content-Type: multipart/form-data;

C

If the left dataset file is uploaded with the query, it SHALL contain the header:

  • Content-Disposition: form-data; filename=”[left dataset file’s name]”; name=”left-dataset-file”;

D

The server SHALL support the GeoJSON format for the left dataset.

E

If the right dataset file is uploaded with the query, it SHALL contain the header

  • Content-Disposition: form-data; filename=”[right dataset file’s name]”; name=”right-dataset-file”;

F

The server SHALL support the CSV format for the right dataset.

G

The input data files SHALL be encoded with the UTF-8 encoding.

H

The Form Data parameters of the query are listed in a Table 6:

Table 6 — The Form Data parameters of the File Joining query.

NameDescriptionType and valuesRequired
left-dataset-formatThe format of the left dataset.StringMandatorya
left-dataset-fileThe left dataset file (uploaded file)FileOptionalb
left-dataset-urlA URL link to the left dataset fileURLOptionalb
left-dataset-keyThe key field in the left dataset file that contains the key values.StringMandatoryc
right-dataset-formatThe format of the right dataset.StringMandatoryd
right-dataset-fileThe right dataset file (uploaded file).FileOptionale
right-dataset-urlThe right dataset URL.URLOptionale
right-dataset-keyThe key field in the right dataset that contains the key values.StringMandatoryf
right-dataset-data-value-listFields in the right dataset that contain the attribute values that will be joined with the left dataset.String, separated by commasMandatoryg
csv-file-delimiterThe delimiter character used in the CSV file.StringOptionalh
csv-file-header-row-numberThe row number of CSV file’s header row (counting starts from 1).IntegerOptionali
csv-file-data-start-row-numberThe row number where the data values start in the CSV file. (counting starts from 1)IntegerOptionalj
a The core module contains support for the format: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-geojson.
b One of the parameters: left-dataset-file or left-dataset-url is mandatory to be used with the operation. The left-dataset-file parameter can be used for uploading the left dataset file to the server. The left-dataset-url parameter can be used for providing the left dataset file via a URL link. If both parameters are provided in the query, the server will response with HTTP exception 400.
c For GeoJSON format, the value of the left-dataset-key parameter is the JSONPath string to the field that contains the key values.
d The core module contains support for the format: ‘http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv‘.
e One of the parameters: right-dataset-file or right-dataset-url is mandatory to be used with the operation. The right-dataset-file parameter can be used for uploading the right dataset file to the server. The right-dataset-url parameter can be used for providing the right dataset file via a URL link. If both parameters are provided in the query, the server will response with HTTP exception 400.
f For CSV format, the value of the right-dataset-key parameter is the column number that contains the key values (counting starts from 0).
g For CSV format, the values are the column numbers that that will be joined with the left dataset (counting starts from 0).
h The csv-file-delimiter parameter is mandatory to be used with the right-dataset-format parameter value: ‘http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv‘. The parameter is not required for other formats that may be defined in the extension modules.
i If omitted, the header row is expected to be at the first row of the CSV file. The names of the joined attributes in the result dataset are the names of the columns from the CSV file header row.
j If omitted, the data start row is expected to be at the second row of the CSV file.

10.2.2.  Response

Requirement 55

Identifier/req/file-joining/filejoin-post-success
Included inRequirements class 4: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/file-joining
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 in A SHALL be the joined dataset in the format indicated by request’s left-dataset-format parameter.

Requirement 56

Identifier/req/file-joining/filejoin-post-success-attribute-data-file-csv-multiple-keys
Included inRequirements class 4: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/file-joining
A

If the right-dataset-file is in CSV format and contains multiple rows with the same key value, the value is used in the join from the row where it is encountered first.

Requirement 57

Identifier/req/file-joining/filejoin-post-success-attribute-data-file-csv-attribute-names
Included inRequirements class 4: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/file-joining
A

If the right-dataset-file is in CSV format, the names of the joined attributes SHALL be the values of the joined columns from the CSV file header row.

10.2.2.1.  Response schema for the File Joining

The response is a GeoJSON file that contains also the joined attributes.

11.  Requirements Class “Input File Upload”

11.1.  Overview

Requirements class 5

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-file-upload
Target typeWeb API
Conformance classConformance class A.5: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-file-upload
PrerequisitesRequirement 42: /req/data-joining/joins-post-op
Requirement 54: /req/file-joining/filejoin-post-op
Normative statementsRequirement 58: /req/input-file-upload/right-dataset-file-join-creation
Requirement 59: /req/input-file-upload/right-dataset-file-file-joining
Requirement 60: /req/input-file-upload/left-dataset-file-file-joining

11.2.  Join Creation Operation

The Join Creation operation of the Data Joining requirement class defines how to create a join with a collection. The Input File Upload requirements class specifies mechanisms for specifying support for input file uploading to the server.

11.2.1.  Form Data Parameter right-dataset-file

Requirement 58

Identifier/req/input-file-upload/right-dataset-file-join-creation
Included inRequirements class 5: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-file-upload
A

If the server supports input file uploading to the server with the Join Creation query, the Join Creation operation SHALL support the form data parameter right-dataset-file.

11.3.  File Joining Operation

The File Joining operation of the File Joining requirement class defines how to create a join between two input files. The Input File Upload requirements class specifies mechanisms for specifying support for input file uploading to the server.

11.3.1.  Form Data Parameter right-dataset-file

Requirement 59

Identifier/req/input-file-upload/right-dataset-file-file-joining
Included inRequirements class 5: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-file-upload
A

If the server supports input file uploading to the server with the File Joining query, the File Joining operation SHALL support the form data parameter right-dataset-file.

11.3.2.  Form Data Parameter left-dataset-file

Requirement 60

Identifier/req/input-file-upload/left-dataset-file-file-joining
Included inRequirements class 5: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-file-upload
A

If the server supports input file uploading to the server with the File Joining query, the File Joining operation SHALL support the form data parameter left-dataset-file.

12.  Requirements Class “File Referencing with URL”

12.1.  Overview

Requirements class 6

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-http-ref
Target typeWeb API
Conformance classConformance class A.6: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-http-ref
PrerequisitesRequirement 42: /req/data-joining/joins-post-op
Requirement 54: /req/file-joining/filejoin-post-op
Normative statementsRequirement 61: /req/input-http-ref/right-dataset-url-join-creation
Requirement 62: /req/input-http-ref/right-dataset-url-file-joining
Requirement 63: /req/input-http-ref/left-dataset-url-file-joining

12.2.  Join Creation Operation

The Join Creation operation of the Data Joining requirement class defines how to create a join with a collection. The File Referencing with URL requirements class specifies mechanisms for specifying support for referencing input files via URL links.

12.2.1.  Form Data Parameter right-dataset-url

Requirement 61

Identifier/req/input-http-ref/right-dataset-url-join-creation
Included inRequirements class 6: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-http-ref
A

If the server supports the input file referencing via URL links in the Join Creation query, the Join Creation operation SHALL support the form data parameter right-dataset-url.

12.3.  File Joining Operation

The File Joining operation of the File Joining requirement class defines how to create a join between two input files. The File Referencing with URL requirements class specifies mechanisms for specifying support for referencing input files via URL links.

12.3.1.  Form Data Parameter right-dataset-url

Requirement 62

Identifier/req/input-http-ref/right-dataset-url-file-joining
Included inRequirements class 6: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-http-ref
A

If the server supports the input file referencing via URL links in the File Joining query, the File Joining operation SHALL support the form data parameter right-dataset-url.

12.3.2.  Form Data Parameter left-dataset-url

Requirement 63

Identifier/req/input-http-ref/left-dataset-url-file-joining
Included inRequirements class 6: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-http-ref
A

If the server supports the input file referencing via URL links in the File Joining query, the File Joining operation SHALL support the form data parameter left-dataset-url.

13.  Requirements Class “CSV File Input”

13.1.  Overview

Requirements class 7: CSV File Input

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-csv
Target typeWeb API
Conformance classConformance class A.7: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv
PrerequisitesRequirement 42: /req/data-joining/joins-post-op
Requirement 54: /req/file-joining/filejoin-post-op
Normative statementsRequirement 64: /req/input-csv/right-dataset-format-join-creation
Requirement 65: /req/input-csv/right-dataset-format-file-joining

13.2.  Join Creation Operation

The Join Creation operation of the Data Joining requirement class defines how to create a join with a collection. The CSV File Input requirements class specifies mechanisms for specifying support for CSV input data format.

13.3.  File Joining Operation

The File Joining operation of the File Joining requirement class defines how to create a join between two input files. The CSV File Input requirements class specifies mechanisms for specifying support for CSV input data format.

14.  Requirements Class “GeoJSON File Input”

14.1.  Overview

Requirements class 8: GeoJSON File Input

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-geojson
Target typeWeb API
Conformance classConformance class A.8: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-geojson
PrerequisiteRequirement 54: /req/file-joining/filejoin-post-op
Normative statementRequirement 66: /req/input-geojson/left-dataset-format-file-joining

14.2.  File Joining Operation

The File Joining operation of the File Joining requirement class defines how to create a join between two input files. The GeoJSON File Input requirements class specifies mechanisms for specifying support for GeoJSON input data format.

15.  Requirements Class “GeoJSON Output for Joined Data”

15.1.  Overview

Requirements class 9: GeoJSON Output for Joined Data

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/output-geojson
Target typeWeb API
Conformance classConformance class A.9: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson
PrerequisiteRequirement 42: /req/data-joining/joins-post-op
Normative statementRequirement 67: /req/output-geojson/output-formats-join-creation

15.2.  Join Creation Operation

The Join Creation operation of the Data Joining requirement class defines how to create a join with a collection. The GeoJSON Output for Joined Data requirements class specifies mechanisms for specifying support for GeoJSON output for the joined data.

16.  Requirements Class “Direct GeoJSON Output for Joined Data”

16.1.  Overview

Requirements class 10: Direct GeoJSON Output for Joined Data

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/output-geojson-direct
Target typeWeb API
Conformance classConformance class A.10: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson-direct
PrerequisiteRequirement 42: /req/data-joining/joins-post-op
Normative statementRequirement 68: /req/output-geojson-direct/output-formats-join-creation

16.2.  Join Creation Operation

The Join Creation operation of the Data Joining requirement class defines how to create a join with a collection. The Direct GeoJSON Output for Joined Data requirements class specifies mechanisms for specifying support for direct GeoJSON output for the joined data instead of getting the link via join creation response document.

16.2.1.  Parameter output-formats

Requirement 68

Identifier/req/output-geojson-direct/output-formats-join-creation
Included inRequirements class 10: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/output-geojson-direct
A

If the server supports the Join Creation query, the Join Creation operation SHALL support the form data parameter output-formats value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson-direct.

B

In direct GeoJSON output, the server returns the joined data directly to the client in the GeoJSON format instead of returning a join response document.

17.  Encoding Requirements Classes

17.1.  Overview

This clause specifies three requirements classes for encodings to be used by implementations of the OGC API — Joins Standard.

Support for the JSON encoding class is mandatory. Support for HTML encoding class is recommended. Support for the GeoJSON format for the joined data output is mandatory.

17.3.  Overview

Sharing data on the Web should include publication in HTML. To be consistent with the Web, it should be done in a way that enables users and search engines to access all data.

This is discussed in detail in document Spatial Data on the Web Best Practices. The OGC API — Joins Standard therefore recommends supporting HTML as an encoding.

Requirements class 11: HTML

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/html
Target typeWeb API
Conformance classConformance class A.11: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/html
PrerequisitesRequirements Class: “Core”
Requirements Class: “Data Joining”
HTML5
Schema.org
Normative statementsRequirement 69: /req/html/definition
Requirement 70: /req/html/content

Requirement 69

Identifier/req/html/definition
Included inRequirements class 11: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/html
A

Every 200-response of an operation of the server SHALL support the media type text/html.

Requirement 70

Identifier/req/html/content
Included inRequirements class 11: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/html
A

Every 200-response of the API with the media type “text/html” SHALL be a HTML5 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/>.

Recommendation 18

Identifier/rec/html/schema-org
A

A 200-response with the media type text/html, SHOULD include Schema.org annotations.

17.5.  Overview

JSON is a lightweight data-interchange format designed to facilitate structured data interchange between applications. JSON is commonly used for Web-based software-to-software interchanges. Most Web developers are comfortable with using a JSON-based format. Therefore, support for JSON is recommended for machine-to-machine interactions.

Requirements class 12

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/json
Target typeWeb API
Conformance classConformance class A.12: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/json
PrerequisitesRequirements Class: “Core”
Requirements Class: “Data Joining”
IETF RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format
JSON Schema
Normative statementsRequirement 71: /req/json/json-definition
Requirement 72: /req/json/json-content

Requirement 71

Identifier/req/json/json-definition
Included inRequirements class 12: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/json
A

Every 200-response of an operation of the server SHALL support the media type application/json.

Requirement 72

Identifier/req/json/json-content
Included inRequirements class 12: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/json
A

Every 200-response with the media type application/json SHALL include, or link to, a payload encoded according to the JSON Interchange Format.

B

The schema of all responses with the media type application/json SHALL conform with the JSON Schema specified for that resource.

Recommendation 19

Identifier/rec/json/json-problem-details
A

Any OGC Web API implementation instance returning an RFC 7807 “Problem Details” report in JSON SHOULD set the Content-Type header to application/problem+json and structure the report using the JSON Schema here.

17.6.  Requirements Class “GeoJSON”

GeoJSON is a commonly used format that is simple to understand and well supported by tools and software libraries. The support for the GeoJSON format is mandatory.

17.7.  Overview

Requirements class 13: GeoJSON

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/req/geojson
Target typeWeb API
Conformance classConformance class A.13: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/geojson
PrerequisitesRequirements Class: “Data Joining”
Requirements Class: “File Joining”
The GeoJSON Format
Normative statementsRequirement 73: /req/geojson/geojson-join-creation
Requirement 74: /req/geojson/geojson-file-joining

Requirement 73

Identifier/req/geojson/geojson-join-creation
Included inRequirements class 13: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/geojson
A

The server SHALL support the GeoJSON format for the joined data output.

18.  Media Types for any data encoding(s)

JSON media types that would typically be supported by a server that supports JSON are:

  • application/geo+json for joined data outputs, and

  • application/json for all resources.

The typical HTML media type for all “web pages” in a server would be text/html.

18.1.  Joined Data Outputs

Server implementations are required to support the media type application/geo+json for the joined data outputs.

Server implementations may support any other media types for the joined data outputs.

18.2.  Problem Details Media Types

The media type that would typically be supported by a server that supports the Problem Details response defined in RFC 7807 is application/problem+json.


Annex A
(informative)
Abstract Test Suite (Normative)

A.1.  Conformance Class “Core”

Conformance class A.1

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/core
Requirements classRequirements class 1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core
Target TypeWeb API
Conformance testsAbstract test A.1: /conf/core/operations
Abstract test A.2: /conf/core/http
Abstract test A.3: /conf/core/root-op
Abstract test A.4: /conf/core/root-success
Abstract test A.5: /conf/core/api-definition-op
Abstract test A.6: /conf/core/api-definition-success
Abstract test A.7: /conf/core/conformance-op
Abstract test A.8: /conf/core/conformance-success

A.1.1.  General Tests

A.1.1.1.  Operations

Abstract test A.1

Identifier/conf/core/operations
RequirementRequirement 1: /req/core/operations
Test purpose

Validate that the server implementation contains supports for the operations sets.

Test method
  1. Validate that the server implementation supports the landing page operation by using test /conf/core/root-op

  2. Validate that the server implementation supports the conformance operation by using test /conf/core/conformance-op

  3. If the server implementation supports the data joining operations operation set, validate the support by using tests in the conformance classes Data Joining and Join Delete.

  4. If the server implementation supports the file joining operations operation set, validate the support by using tests in the conformance class File Joining.

A.1.1.2.  HTTP

Abstract test A.2

Identifier/conf/core/http
RequirementRequirement 2: /req/core/http
Test purpose

Validate that the resources advertised through the API can be accessed using the HTTP 1.1 protocol and, where appropriate, TLS.

Test method
  1. All compliance tests shall be configured to use the HTTP 1.1 protocol exclusively.

  2. For APIs that support HTTPS, all compliance tests shall be configured to use HTTP over TLS (RFC 2818) with their HTTP 1.1 protocol.

A.1.2.  Landing Page {root}/

Abstract test A.3

Identifier/conf/core/root-op
RequirementRequirement 3: /req/core/root-op
Test purpose

Validate that the landing page can be retrieved from the expected location.

Test method
  1. Issue an HTTP GET request to the URL {root}/.

  2. Validate that the document was returned with a status code 200.

  3. Validate the contents of the returned document using test /conf/core/root-success.

Abstract test A.4

Identifier/conf/core/root-success
RequirementRequirement 4: /req/core/root-success
Test purpose

Validate that a landing page complies with the required structure and contents.

Test method

Validate the landing page for all supported media types using the landing page schema.

  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.

If the server supports the data joining operations operation set:

  1. Validate that the landing page includes a http://www.opengis.net/def/rel/ogc/1.0/data link to the metadata on collections.

  2. Validate that the landing page includes a joins link to the joins metadata.

A.1.3.  API Definiton path {root}/api (link)

Abstract test A.5

Identifier/conf/core/api-definition-op
RequirementRequirement 5: /req/core/api-definition-op
Test purpose

Validate that the API definition document can be retrieved from the expected location.

Test method

DO FOR EACH service-desc and service-doc link on the landing page:

  1. Issue a HTTP GET request to the link.

  2. Validate that a document was returned with a status code 200.

  3. Validate the contents of the returned document using test /conf/core/api-definition-success

DONE

Abstract test A.6

Identifier/conf/core/api-definition-success
RequirementRequirement 6: /req/core/api-definition-success
Test purpose

Validate that the API definition complies with the required structure and contents.

Test method

Validate the API definition document against an appropriate schema document.

A.1.4.  Conformance {root}/conformance

Abstract test A.7

Identifier/conf/core/conformance-op
RequirementRequirement 7: /req/core/conformance-op
Test purpose

Validate that a conformance declaration can be retrieved from the expected locations.

Test method

DO FOR EACH http://www.opengis.net/def/rel/ogc/1.0/conformance link on the landing page:

  1. Issue an HTTP GET request for the link.

  2. Validate that a document was returned with a status code 200.

  3. Validate the contents of the returned document using test /conf/core/conformance-success.

DONE

  1. Issue an HTTP GET request to the path {root}/conformance.

  2. Validate that a document was returned with a status code 200.

  3. Validate the contents of the returned document using test /conf/core/conformance-success.

Abstract test A.8

Identifier/conf/core/conformance-success
RequirementRequirement 8: /req/core/conformance-success
Test purpose

Validate that the conformance declaration response complies with the required structure and contents.

Test method
  1. Validate the response document against confClasses.yaml.

  2. Validate that the document lists all OGC API conformance classes that the API implements.

A.2.  Conformance Class “Data Joining”

Conformance class A.2

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/data-joining
Requirements classRequirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining
Target TypeWeb API
Conformance testsAbstract test A.9: /conf/data-joining/collections-get-op
Abstract test A.10: /conf/data-joining/collections-get-success
Abstract test A.11: /conf/data-joining/collections-get-success-links
Abstract test A.12: /conf/data-joining/collections-get-success-items
Abstract test A.13: /conf/data-joining/collections-collectionid-get-op
Abstract test A.14: /conf/data-joining/collections-collectionid-get-success
Abstract test A.15: /conf/data-joining/collections-collectionid-get-success-extent
Abstract test A.16: /conf/data-joining/collections-collectionid-get-success-links
Abstract test A.17: /conf/data-joining/collections-collectionid-keys-get-op
Abstract test A.18: /conf/data-joining/collections-collectionid-keys-get-success
Abstract test A.19: /conf/data-joining/collections-collectionid-keys-get-success-default-key
Abstract test A.20: /conf/data-joining/collections-collectionid-keys-get-success-links
Abstract test A.21: /conf/data-joining/collections-collectionid-keys-get-success-items-links
Abstract test A.22: /conf/data-joining/collections-collectionid-keys-keyfieldid-get-op
Abstract test A.23: /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success
Abstract test A.24: /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit
Abstract test A.25: /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit-unsupported
Abstract test A.26: /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-paged-response
Abstract test A.27: /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberMatched
Abstract test A.28: /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberReturned
Abstract test A.29: /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-links
Abstract test A.30: /conf/data-joining/joins-get-op
Abstract test A.31: /conf/data-joining/joins-get-success
Abstract test A.32: /conf/data-joining/joins-get-success-limit
Abstract test A.33: /conf/data-joining/joins-get-success-limit-unsupported
Abstract test A.34: /conf/data-joining/joins-get-success-datetime
Abstract test A.35: /conf/data-joining/joins-get-success-paged-response
Abstract test A.36: /conf/data-joining/joins-get-success-numberMatched
Abstract test A.37: /conf/data-joining/joins-get-success-numberReturned
Abstract test A.38: /conf/data-joining/joins-get-success-items
Abstract test A.39: /conf/data-joining/joins-get-success-links
Abstract test A.40: /conf/data-joining/joins-get-success-items-links
Abstract test A.41: /conf/data-joining/joins-get-success-timeStamp
Abstract test A.42: /conf/data-joining/joins-post-op
Abstract test A.43: /conf/data-joining/joins-post-op-additional-output-formats
Abstract test A.44: /conf/data-joining/joins-post-success
Abstract test A.45: /conf/data-joining/joins-post-success-input-data-file-csv-multiple-keys
Abstract test A.46: /conf/data-joining/joins-post-success-input-data-file-csv-attribute-names
Abstract test A.47: /conf/data-joining/joins-joinid-get-op
Abstract test A.48: /conf/data-joining/joins-joinid-get-success
Abstract test A.49: /conf/data-joining/joins-joinid-get-success-links
Abstract test A.50: /conf/data-joining/joins-joinid-get-success-links-collection
Abstract test A.51: /conf/data-joining/joins-joinid-get-success-links-outputs

A.2.1.  Collections {root}/collections

Abstract test A.9

Identifier/conf/data-joining/collections-get-op
RequirementRequirement 9: /req/data-joining/collections-get-op
Test purpose

Validate that the information about collections can be retrieved from the expected location.

Test method
  1. Issue an HTTP GET request wihout query parameters to the URL {root}/collections.

  2. Validate that a document was returned with a status code 200.

  3. Validate the contents of the returned document using test /conf/data_joining/collections-get-success

Abstract test A.10

Identifier/conf/data-joining/collections-get-success
RequirementRequirement 10: /req/data-joining/collections-get-success
Test purpose

Validate that the Collections content complies with the required structure and contents.

Test method
  1. Validate that the response document complies with test /conf/data-joining/collections-get-success-links

  2. Validate that the response document complies with test /conf/data-joining/collections-get-success-items

  3. Validate the Collections resource for all supported media types using the schema Collections schema.

Abstract test A.12

Identifier/conf/data-joining/collections-get-success-items
RequirementRequirement 12: /req/data-joining/collections-get-success-items
Test purpose

Validate that each collection accessible through the API is described in the Collections document.

Test method
  1. Verify that the Collections document includes a collections property.

  2. Verify that the collections property is an array.

  3. Verify that there is an entry in the collections property for each resource collection accessible through the API.

  4. Verify that each entry in the collections array is valid according to /conf/data-joining/collections-collectionid-get-success.

A.2.2.  Collection {root}/collections/{collectionId}

Abstract test A.13

Identifier/conf/data-joining/collections-collectionid-get-op
RequirementRequirement 13: /req/data-joining/collections-collectionid-get-op
Test purpose

Validate that a collection information can be retrieved from the expected location.

Test method
  1. For every Collection described in the Collections content, issue a HTTP GET request to the URL {root}/collections/{collectionId} where {collectionId} is the id property of a collection.

  2. Validate that a Collection was returned with a status code 200.

  3. Validate the contents of the returned document using test /conf/data-joining/collections-collectionid-get-success.

Abstract test A.14

Identifier/conf/data-joining/collections-collectionid-get-success
RequirementRequirement 14: /req/data-joining/collections-collectionid-get-success
Test purpose

Validate that the Collection content complies with the required structure and contents.

Test method

FOR each Collection document, validate:

  1. That the Collection document includes an id property.

  2. Validate that any extent properties included in the Collection document complies with test /conf/data-joining/collections-collectionid-get-success-extent.

  3. Validate that the Collection document complies with test /conf/data-joining/collections-collectionid-get-success-links

  4. Validate the content of the Collection document for all supported media types using the collectionDesc Schema and test /conf/json/json-content.

  5. Verify that the content of the response is consistent with the content for this Resource Collection in the /collections response. That is, the values for id, title, description and extent are identical.

Abstract test A.15

Identifier/conf/data-joining/collections-collectionid-get-success-extent
RequirementRequirement 15: /req/data-joining/collections-collectionid-get-success-extent
Test purpose

Validate the extent property if it is present.

Test method

IF the extent property is present, THEN:

  1. Verify that the extent provides bounding boxes that include all spatial geometries in this resource.

  2. Verify that the extent provides time intervals that include all temporal geometries in this resource.

NOTE:  A temporal extent of null indicates an open time interval.

A.2.3.  Collection Key Fields {root}/collections/{collectionId}/keys

Abstract test A.17

Identifier/conf/data-joining/collections-collectionid-keys-get-op
RequirementRequirement 17: /req/data-joining/collections-collectionid-keys-get-op
Test purpose

Validate that the information on Collection’s key fields’ can be retrieved from the expected location.

Test method
  1. For each Collection (path {root}/collections/{collectionId}), issue an HTTP GET request to the URL {root}/collections/{collectionId}/keys where {collectionId} is the id property of a Collection.

  2. Validate that a document was returned with a status code 200.

  3. Validate the contents of the returned document using test /conf/data-joining/collections-collectionid-keys-get-success

Abstract test A.18

Identifier/conf/data-joining/collections-collectionid-keys-get-success
RequirementRequirement 18: /req/data-joining/collections-collectionid-keys-get-success
Test purpose

Validate that the response complies with the required structure and contents.

Test method
  1. Validate that the response document complies with test /conf/data-joining/collections-collectionid-keys-get-success-default-key

  2. Validate that the response document complies with test /conf/data-joining/collections-collectionid-keys-get-success-links

  3. Validate that the response document complies with test /conf/data-joining/collections-collectionid-keys-get-success-items-links

  4. Validate that the response document complies with Collection’s Key Fields schema.

Abstract test A.19

Identifier/conf/data-joining/collections-collectionid-keys-get-success-default-key
RequirementRequirement 19: /req/data-joining/collections-collectionid-keys-get-success-default-key
Test purpose

Validate that the response isDefault value of the response.

Test method
  1. Validate that the response’s keys array contains exatly one object that has the isDefault property value true.

A.2.4.  Collection Key Field {root}/collections/{collectionId}/keys/{keyFieldId}

Abstract test A.22

Identifier/conf/data-joining/collections-collectionid-keys-keyfieldid-get-op
RequirementRequirement 22: /req/data-joining/collections-collectionid-keys-keyfieldid-get-op
Test purpose

Validate that the key values of a Collection’s key field can be retrieved from the expected location.

Test method

For each Collection (path {root}/collections/{collectionId}), validate:

  1. For each key field of a Collection described in the Collection’s key fields response {root}/collections/{collectionId}/keys/, issue an HTTP GET request to the URL {root}/collections/{collectionId}/keys/{keyFieldId} where {collectionId} is the id property of a Collection and {keyFieldId} is the id property of a collection’s key field.

  2. Validate that a document was returned with a status code 200.

  3. Validate the contents of the returned document using test: /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success.

Abstract test A.23

Identifier/conf/data-joining/collections-collectionid-keys-keyfieldid-get-success
RequirementRequirement 23: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success
Test purpose

Validate that the Collection key field’s response complies with the required structure and contents.

Test method
  1. Validate that the response document complies with Collection Key Field schema Collection Key Field schema.

  2. Validate that the response document complies with test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit.

  3. Validate that the response document complies with test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit-unsupported.

  4. Validate that the response document complies with test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-paged-response.

  5. Validate that the response document complies with test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberMatched.

  6. Validate that the response document complies with test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberReturned.

  7. Validate that the response document complies with test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-links.

Abstract test A.24

Identifier/conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit
RequirementRequirement 24: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit
Test purpose

Validate that the Collection key field’s response complies with the limit parameter.

Test method
  1. If the server supports the limit parameter, execute the test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-op with a limit parameter value that is supported by the server.

  2. Verify that the response contains no more resources than the value of the limit parameter.

  3. If the server specifies the maximum value for the limit parameter, execute the test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-op with a limit parameter value that exceeds the maximum value.

  4. Verify that the response contains no more resources than the maximum value.

Abstract test A.25

Identifier/conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit-unsupported
RequirementRequirement 25: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit-unsupported
Test purpose

Validate that the Collection key field’s response complies with the unsupported limit parameter.

Test method
  1. If the server does not support the limit parameter, execute the test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-op with a set limit parameter value.

  2. Execute the test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-op without a limit parameter.

  3. Verify that both queries return the same response.

Abstract test A.26

Identifier/conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-paged-response
RequirementRequirement 26: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-paged-response
Test purpose

Validate that the Collection key field’s response complies with the required structure and contents.

Test method
  1. Execute the test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-op with a set of selection parameters that result in response where the number of key values in the keys element is less than the number that match the selection parameters.

  2. Verify that the numberMatched and numberReturned properties are included in the response.

Abstract test A.27

Identifier/conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberMatched
RequirementRequirement 27: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberMatched
Test purpose

Validate that the Collection key field’s response complies with the required structure and contents.

Test method
  1. Execute the test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-op with selected filtering parameters.

  2. Verify that the numberMatched property is identical to the number of keys that match the selection criteria.

Abstract test A.28

Identifier/conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberReturned
RequirementRequirement 28: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberReturned
Test purpose

Validate that the Collection key field’s response complies with the required structure and contents.

Test method
  1. Execute the test /conf/data-joining/collections-collectionid-keys-keyfieldid-get-op with selected filtering parameters.

  2. If the response document contains a numberRetuned property, verify that it is identical to the number of items in the keys array.

A.2.5.  Joins {root}/joins

Abstract test A.30

Identifier/conf/data-joining/joins-get-op
RequirementRequirement 30: /req/data-joining/joins-get-op
Test purpose

Validate that the information about Joins can be retrieved from the expected location.

Test method
  1. 1. Issue an HTTP GET request to the URL {root}/joins.

  2. 2. Validate that a document was returned with a status code 200.

  3. 3. Validate the contents of the returned document using test /conf/data-joining/joins-get-success

Abstract test A.31

Identifier/conf/data-joining/joins-get-success
RequirementRequirement 31: /req/data-joining/joins-get-success
Test purpose

Validate that the joins content complies with the required structure and contents.

Test method
  1. Validate that the response document complies with Joins Schema.

  2. Validate that the response document complies with test /conf/data-joining/joins-get-success-limit

  3. Validate that the response document complies with test /conf/data-joining/joins-get-success-limit-unsupported

  4. Validate that the response document complies with test /conf/data-joining/joins-get-success-datetime

  5. Validate that the response document complies with test /conf/data-joining/joins-get-success-paged-response

  6. Validate that the response document complies with test /conf/data-joining/joins-get-success-numberMatched

  7. Validate that the response document complies with test /conf/data-joining/joins-get-success-numberReturned

  8. Validate that the response document complies with test /conf/data-joining/joins-get-success-items

  9. Validate that the response document complies with test /conf/data-joining/joins-get-success-links

  10. Validate that the response document complies with test /conf/data-joining/joins-get-success-items-links

  11. Validate that the response document complies with test /conf/data-joining/joins-get-success-timeStamp

Abstract test A.32

Identifier/conf/data-joining/joins-get-success-limit
RequirementRequirement 32: /req/data-joining/joins-get-success-limit
Test purpose

Validate that the joins response complies with the limit parameter.

Test method
  1. If the server supports the limit parameter, execute the test /conf/data-joining/joins-get-op with a limit parameter value that is supported by the server.

  2. Verify that the response contains no more resources than the value of the limit parameter.

  3. If the server specifies the maximum value for the limit parameter, execute the test /conf/data-joining/joins-get-op with a limit parameter value that exceeds the maximum value.

  4. Verify that the response contains no more resources than the maximum value.

Abstract test A.33

Identifier/conf/data-joining/joins-get-success-limit-unsupported
RequirementRequirement 33: /req/data-joining/joins-get-success-limit-unsupported
Test purpose

Validate that the joins content complies with the required structure and contents.

Test method
  1. If the server does not support the limit parameter, execute the test /conf/data-joining/joins-get-op with a set limit parameter value.

  2. Execute the test /conf/data-joining/joins-get-op without a limit parameter.

  3. Verify that both queries return the same response.

Abstract test A.34

Identifier/conf/data-joining/joins-get-success-datetime
RequirementRequirement 34: /req/data-joining/joins-get-success-datetime
Test purpose

Validate that the joins content complies with the required structure and contents.

Test method
  1. If the server supports the datetime parameter, execute the test /conf/data-joining/joins-get-op with a supported datetime parameter value.

  2. Verify that the response contains only join elements that match with the give datetime paramter value.

Abstract test A.35

Identifier/conf/data-joining/joins-get-success-paged-response
RequirementRequirement 35: /req/data-joining/joins-get-success-paged-response
Test purpose

Validate that the joins response complies with the required structure and contents.

Test method
  1. Execute the test /conf/data-joining/joins-get-op with a set of selection parameters that result in response where the number of joins in the joins element is less than the number that match the selection parameters.

  2. Verify that the numberMatched and numberReturned properties are included in the response.

Abstract test A.36

Identifier/conf/data-joining/joins-get-success-numberMatched
RequirementRequirement 36: /req/data-joining/joins-get-success-numberMatched
Test purpose

Validate that the joins content complies with the required structure and contents.

Test method
  1. Execute the test /conf/data-joining/joins-get-op with selected filtering parameters.

  2. Verify that the numberMatched property is identical to the number of joins that match the selection criteria.

Abstract test A.37

Identifier/conf/data-joining/joins-get-success-numberReturned
RequirementRequirement 37: /req/data-joining/joins-get-success-numberReturned
Test purpose

Validate that the joins content complies with the required structure and contents.

Test method
  1. Execute the test joins-get-op with selected filtering parameters.

  2. If the response document contains a numberRetuned property, verify that it is identical to the number of items in the joins array.

Abstract test A.38

Identifier/conf/data-joining/joins-get-success-items
RequirementRequirement 38: /req/data-joining/joins-get-success-items
Test purpose

Validate that the joins content complies with the required structure and contents.

Test method
  1. Verify that the Join document includes a joins property.

  2. Verify that the joins property is an array.

  3. Verify that there is an entry in the joins property for each join accessible through the API.

  4. Verify that each entry in the joins array is valid according to joins-joinid-get-success.

Abstract test A.41

Identifier/conf/data-joining/joins-get-success-timeStamp
RequirementRequirement 41: /req/data-joining/joins-get-success-timeStamp
Test purpose

Validate that the joins content complies with the required structure and contents.

Test method

If a property timeStamp is included in the response, verify that the value is the time when the response was generated.

A.2.6.  Join Creation {root}/joins

Abstract test A.42

Identifier/conf/data-joining/joins-post-op
RequirementRequirement 42: /req/data-joining/joins-post-op
Test purpose
  1. Validate that data can be joined from an inputted data file with a Collection available on the server from the expected location.

  2. If the server supports the direct GeoJSON output functionality, validate that data can be joined from the expected location from an inputted data file with a Collection available on the server with a direct GeoJSON output.

Test method

Test method for (1):
1. Issue an HTTP POST request to the URL {root}/joins where:
- The request contains the header: Content-Type: multipart/form-data;
- The form data parameter right-dataset-format has the value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv.
- The form data parameter collection-id has the same value as id property of a collection (from query {root}/collections).
- The form data parameter output-formats has the value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson.
- The request contains either the uploaded intput data file or it is referenced via a URL.
- Other query parameters are set correctly.
2. Validate that a document was returned with a status code 201.
3. Validate the contents of the returned document using test /conf/data-joining/joins-post-success

Test method for (2):
1. Issue an HTTP POST request to the URL {root}/joins where:
- The request contains the header: Content-Type: multipart/form-data;
- The form data parameter right-dataset-format has the value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv.
- The form data parameter collection-id has the same value as id property of a collection (from query {root}/collections).
- The form data parameter output-formats has the value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson-direct.
- The request contains either the uploaded intput data file or it is referenced via a URL.
- Other query parameters are set correctly.
2. Validate that a document was returned with a status code 200.
3. Validate the contents of the returned document using test /conf/data-joining/joins-post-success

Abstract test A.43

Identifier/conf/data-joining/joins-post-op-additional-output-formats
RequirementRequirement 43: /req/data-joining/joins-post-op-additional-output-formats
Test purpose

If the server supports any additional joined data output formats for the Join Creation operation, validate that they are listed in the conformance declaration response document.

Test method
  1. Issue an HTTP GET request to the URL {root}/conformance

  2. Validate that the response document includes conformance values for all supported additional joined data output formats.

Abstract test A.44

Identifier/conf/data-joining/joins-post-success
RequirementRequirement 44: /req/data-joining/joins-post-success
Test purpose

Validate that the Join Creation response complies with the required structure and contents.

Test method

For test method (1) in the abtract test /conf/data-joining/joins-post-op:
1. Validate that the response document complies with the Join Schema.
2. Validate that the response document contains links to the joined data in all requested output formats that are supported by the server.

For test method (2) in the abtract test /conf/data-joining/joins-post-op:
1. Validate that the response is a valid GeoJSON document.
2. Validate that the response contains the joined attributes from the input data file.

Abstract test A.45

Identifier/conf/data-joining/joins-post-success-input-data-file-csv-multiple-keys
RequirementRequirement 45: /req/data-joining/joins-post-success-input-data-file-csv-multiple-keys
Test purpose

Validate that the data join response complies with the required structure and contents.

Test method
  1. Validate that if the input data file is in CSV format and it contains multiple rows with the same key value, the value is used in the join operation from the row where it is encountered first.

Abstract test A.46

Identifier/conf/data-joining/joins-post-success-input-data-file-csv-attribute-names
RequirementRequirement 46: /req/data-joining/joins-post-success-input-data-file-csv-attribute-names
Test purpose

Validate that the data join response complies with the required structure and contents.

Test method
  1. Validate that if the input data file is in CSV format, the names for the joined attributes are the values of the joined columns from the CSV file header row.

A.2.7.  Join {root}/joins/{joinId}

Abstract test A.47

Identifier/conf/data-joining/joins-joinid-get-op
RequirementRequirement 47: /req/data-joining/joins-joinid-get-op
Test purpose

Validate that the information about a join can be retrieved from the expected location.

Test method
  1. For a list of joins (path {root}/joins), issue an HTTP GET request to the URL {root}/joins/{joinId} where joinId is the id property of a join.

  2. Validate that a document was returned with a status code 200.

  3. Validate the contents of the returned document using test /conf/data-joining/joins-joinid-get-success.

Abstract test A.48

Identifier/conf/data-joining/joins-joinid-get-success
RequirementRequirement 48: /req/data-joining/joins-joinid-get-success
Test purpose

Validate that the Join content complies with the required structure and contents.

Test method

Validate that the response document complies with Join schema.

  1. Validate that the response document complies with test /conf/data-joining/joins-joinid-get-success-links

  2. Validate that the response document complies with test /conf/data-joining/joins-joinid-get-success-links-collection

  3. Validate that the response document complies with test /conf/data-joining/joins-joinid-get-success-links-outputs

A.3.  Conformance Class “Join Delete”

Conformance class A.3

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/join-delete
Requirements classRequirements class 3: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/join-delete
Target TypeWeb API
Conformance testsAbstract test A.52: /conf/join-delete/joins-joinid-delete-op
Abstract test A.53: /conf/join-delete/joins-joinid-delete-success

A.3.1.  Join Delete {root}/joins/{joinId}

Abstract test A.52

Identifier/conf/join-delete/joins-joinid-delete-op
RequirementRequirement 52: /req/join-delete/joins-joinid-delete-op
Test purpose

Validate that the join can be deleted from the expected location.

Test method
  1. 1. Issue an HTTP DELETE request to the URL {root}/joins/{joinId} where {joinId} is the id property of a join (from query {root}/joins/{joinId}).

  2. 2. Validate that a document was returned with a status code 204.

  3. 3. Validate the contents of the returned document using test /conf/join-delete/joins-joinid-delete-success

Abstract test A.53

Identifier/conf/join-delete/joins-joinid-delete-success
RequirementRequirement 53: /req/join-delete/joins-joinid-delete-success
Test purpose

Validate that the join was deleted from the server.

Test method
  1. 1. Validate that the join has been deleted from the server by issuing an HTTP GET request to the URL {root}/joins/{joinId} where {joinId} is the same id property of the join that was used in the delete request.

  2. 2. Validate that the server sent a response code 404.

A.4.  Conformance Class “File Joining”

Conformance class A.4

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/file-joining
Requirements classRequirements class 4: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/file-joining
Target TypeWeb API
Conformance testsAbstract test A.54: /conf/file-joining/filejoin-post-op
Abstract test A.55: /conf/file-joining/filejoin-post-success
Abstract test A.56: /conf/file-joining/filejoin-post-success-attribute-data-file-csv-multiple-keys
Abstract test A.57: /conf/file-joining/filejoin-post-success-attribute-data-file-csv-attribute-names

Abstract test A.54

Identifier/conf/file-joining/filejoin-post-op
RequirementRequirement 54: /req/file-joining/filejoin-post-op
Test purpose

Validate that the data can be joined from an inputted data file directly with a other inputted data file from the expected location.

Test method
  1. Issue an HTTP POST request to the URL {root}/filejoin where

    • The request contains the header: Content-Type: multipart/form-data;

    • The request contains either the uploaded right dataset file or it is referenced via URL.

    • The request contains either the uploaded left dataset file or it is referenced via URL.

    • Other query parameters are set correctly.

  2. Validate that a document was returned with a status code 200.

  3. Validate the contents of the returned document using test /conf/file_joining/filejoin-post-success.

Abstract test A.55

Identifier/conf/file-joining/filejoin-post-success
RequirementRequirement 55: /req/file-joining/filejoin-post-success
Test purpose

Validate the response of the file joining operation.

Test method
  1. Validate that the response is a valid document in the correct output format and that it contains the attributes that were joined from the right dataset file.

  2. Validate that the response document complies with test /conf/file-joining/filejoin-post-success-attribute-data-file-csv-multiple-keys.

  3. Validate that the response document complies with test /conf/file-joining/filejoin-post-success-attribute-data-file-csv-attribute-names.

Abstract test A.56

Identifier/conf/file-joining/filejoin-post-success-attribute-data-file-csv-multiple-keys
RequirementRequirement 56: /req/file-joining/filejoin-post-success-attribute-data-file-csv-multiple-keys
Test purpose

Validate the response of the file joining functionality where the input CSV file contains multiple rows with the same key value.

Test method
  1. Validate that if the attribute data file is in CSV format and if it contains multiple rows with the same key value, the value is used in the join operation from the row where the value is encountered first.

Abstract test A.57

Identifier/conf/file-joining/filejoin-post-success-attribute-data-file-csv-attribute-names
RequirementRequirement 57: /req/file-joining/filejoin-post-success-attribute-data-file-csv-attribute-names
Test purpose

Validate the names of the joined attributes from the file joining functionality’s response.

Test method
  1. Validate that if the attribute data file is in CSV format, the names of the joined attributes are the values of the joined columns from the CSV file header row.

A.5.  Conformance Class “Input File Upload”

Conformance class A.5

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-file-upload
Requirements classRequirements class 5: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-file-upload
Target TypeWeb API
Conformance testsAbstract test A.58: /conf/input-file-upload/right-dataset-file-join-creation
Abstract test A.59: /conf/input-file-upload/right-dataset-file-file-joining
Abstract test A.60: /conf/input-file-upload/left-dataset-file-file-joining

Abstract test A.58

Identifier/conf/input-file-upload/right-dataset-file-join-creation
RequirementRequirement 58: /req/input-file-upload/right-dataset-file-join-creation
Test purpose

Validate that the right input data file can be uploaded with the Join Creation query to the server.

Test method

Execute the abstract test: /conf/data-joining/joins-post-op where:

  • The request contains the form data parameter right-dataset-file that contains the uploaded file.

  • The request contains the header Content-Disposition: form-data; filename=”[right dataset file’s name]”; name=”right-dataset-file;

Abstract test A.59

Identifier/conf/input-file-upload/right-dataset-file-file-joining
RequirementRequirement 59: /req/input-file-upload/right-dataset-file-file-joining
Test purpose

Validate that the right input data file can be uploaded with the File Joining query to the server.

Test method

Execute the abstract test: /conf/file-joining/filejoin-post-op where:

  • The request contains the form data parameter right-dataset-file that contains the uploaded file.

  • The request contains the header Content-Disposition: form-data; filename=”[right dataset file’s name]”; name=”right-dataset-file;

Abstract test A.60

Identifier/conf/input-file-upload/left-dataset-file-file-joining
RequirementRequirement 60: /req/input-file-upload/left-dataset-file-file-joining
Test purpose

Validate that the left input data file can be uploaded with the File Joining query to the server.

Test method

Execute the abstract test: /conf/file-joining/filejoin-post-op where:

  • The request contains the form data parameter left-dataset-file that contains the uploaded file.

  • The request contains the header Content-Disposition: form-data; filename=”[left dataset file’s name]”; name=”left-dataset-file;

A.6.  Conformance Class “File Referencing with URL”

Conformance class A.6

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-http-ref
Requirements classRequirements class 6: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-http-ref
Target TypeWeb API
Conformance testsAbstract test A.61: /conf/input-http-ref/right-dataset-url-join-creation
Abstract test A.62: /conf/input-http-ref/right-dataset-url-file-joining
Abstract test A.63: /conf/input-http-ref/left-dataset-url-file-joining

Abstract test A.61

Identifier/conf/input-http-ref/right-dataset-url-join-creation
RequirementRequirement 61: /req/input-http-ref/right-dataset-url-join-creation
Test purpose

Validate that the right dataset input file can be referenced via URL in the Data Joining query.

Test method

Execute the abstract test: /conf/data-joining/joins-post-op where:

  • The request contains the form data parameter right-dataset-url that contains the URL of the right dataset file.

Abstract test A.62

Identifier/conf/input-http-ref/right-dataset-url-file-joining
RequirementRequirement 62: /req/input-http-ref/right-dataset-url-file-joining
Test purpose

Validate that the right dataset input file can be referenced via URL in the file joining functionality.

Test method

Execute the abstract test: /conf/file-joining/filejoin-post-op where:

  • The request contains the form data parameter right-dataset-url that contains the URL of the right dataset file.

Abstract test A.63

Identifier/conf/input-http-ref/left-dataset-url-file-joining
RequirementRequirement 63: /req/input-http-ref/left-dataset-url-file-joining
Test purpose

Validate that the left dataset input file can be referenced via URL in the file joining functionality.

Test method

Execute the abstract test: /conf/file-joining/filejoin-post-op where:

  • The request contains the form data parameter left-dataset-url that contains the URL of the left dataset file.

A.7.  Conformance Class “CSV File Input”

Conformance class A.7

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv
Requirements classRequirements class 7: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-csv
Target TypeWeb API
Conformance testsAbstract test A.64: /conf/input-csv/right-dataset-format-join-creation
Abstract test A.65: /conf/input-csv/right-dataset-format-file-joining

Abstract test A.64

Identifier/conf/input-csv/right-dataset-format-join-creation
RequirementRequirement 64: /req/input-csv/right-dataset-format-join-creation
Test purpose

Validate that the server supports the CSV input file format for the right dataset in the Join Creation operation.

Test method

Execute the abstract test: /conf/data-joining/joins-post-op where:
- The form data parameter right-dataset-format has the value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv.
- The request contains either the uploaded CSV file in the form data parameter right-dataset-file or it is referenced via URL in the form data parameter right-dataset-url.

Abstract test A.65

Identifier/conf/input-csv/right-dataset-format-file-joining
RequirementRequirement 65: /req/input-csv/right-dataset-format-file-joining
Test purpose

Validate that the server supports the CSV input file format for the right dataset in the File Joining operation.

Test method

Execute the abstract test: /conf/file-joining/filejoin-post-op where:
- The form data parameter right-dataset-format has the value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv.
- The request contains either the uploaded CSV file in the form data parameter right-dataset-file or it is referenced via URL in the form data parameter right-dataset-url.

A.8.  Conformance Class “GeoJSON File Input”

Conformance class A.8

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-geojson
Requirements classRequirements class 8: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-geojson
Target TypeWeb API
Conformance testAbstract test A.66: /conf/input-geojson/left-dataset-format-file-joining

Abstract test A.66

Identifier/conf/input-geojson/left-dataset-format-file-joining
RequirementRequirement 66: /req/input-geojson/left-dataset-format-file-joining
Test purpose

Validate that server supports the GeoJSON input file format for the left dataset in the File Joining operation.

Test method

Test method: Execute the abstract test: /conf/file-joining/filejoin-post-op where:
- The form data parameter left-dataset-format has the value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-geojson.
- The request contains either the uploaded GeoJSON file in the form data parameter left-dataset-file or it is referenced via URL in the form data parameter left-dataset-url.

A.9.  Conformance Class “GeoJSON Output for Joined Data”

Conformance class A.9

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson
Requirements classRequirements class 9: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/output-geojson
Target TypeWeb API
Conformance testAbstract test A.67: /conf/output-geojson/output-formats-join-creation

Abstract test A.67

Identifier/conf/output-geojson/output-formats-join-creation
RequirementRequirement 67: /req/output-geojson/output-formats-join-creation
Test purpose

If the server supports the data joining functionality, validate that the server supports the GeoJSON output format for the joined data.

Test method

Test method: Execute the test method (1) in the abstract test: /conf/data-joining/joins-post-op.

A.10.  Conformance Class “Direct GeoJSON Output for Joined Data”

Conformance class A.10

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson-direct
Requirements classRequirements class 10: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/output-geojson-direct
Target TypeWeb API
Conformance testAbstract test A.68: /conf/output-geojson-direct/output-formats-join-creation

Abstract test A.68

Identifier/conf/output-geojson-direct/output-formats-join-creation
RequirementRequirement 68: /req/output-geojson-direct/output-formats-join-creation
Test purpose

If the server supports the data joining functionality, validate that the server supports the direct GeoJSON output format for the joined data.

Test method

Test method: Execute the test method (2) in the abstract test: /conf/data-joining/joins-post-op

A.11.  Conformance Class “HTML”

Conformance class A.11

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/html
Requirements classRequirements class 11: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/html
Target TypeWeb API
Conformance testsAbstract test A.69: /conf/html/definition
Abstract test A.70: /conf/html/content

A.11.1.  HTML Definition

Abstract test A.69

Identifier/conf/html/definition
RequirementRequirement 69: /req/html/definition
Test purpose

Verify support for HTML.

Test method

Verify that every 200-response of every operation of the API where HTML was requested is of media type text/html.

A.11.2.  HTML Content

Abstract test A.70

Identifier/conf/html/content
RequirementRequirement 70: /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 HTML 5 document.

  2. Manually inspect the document against the schema.

A.12.  Conformance Class “JSON”

Conformance class A.12

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/json
Requirements classRequirements class 12: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/json
Target TypeWeb API
Conformance testsAbstract test A.71: /conf/json/json-definition
Abstract test A.72: /conf/json/json-content

A.12.1.  JSON Definition

Abstract test A.71

Identifier/conf/json/json-definition
RequirementRequirement 71: /req/json/json-definition
Test purpose

Verify support for JSON.

Test method

DO FOR EACH . Resource and operation defined in the “Core” and “Data Joining” Conformance Class:
. 1. Execute the operation specifing application/json as the media type.
. 2. Validate that a document was returned with a status code 200.
. 3. Validate the contents of the returned document using test /conf/json/json-content.
DONE.

A.12.2.  JSON Content

Abstract test A.72

Identifier/conf/json/json-content
RequirementRequirement 72: /req/json/json-content
Test purpose

Verify the content of a JSON document given an input document and schema.

Test method
  1. Validate that the document is a JSON (IETF RFC 8259) document.

  2. Validate the document against the schema using a JSON Schema validator.

A.13.  Conformance Class “GeoJSON”

Conformance class A.13

Identifierhttp://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/geojson
Requirements classRequirements class 13: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/geojson
Target TypeWeb API
Conformance testsAbstract test A.73: /conf/geojson/geojson-join-creation
Abstract test A.74: /conf/geojson/geojson-file-joining

A.13.1.  Join Creation

Abstract test A.73

Identifier/conf/geojson/geojson-join-creation
RequirementRequirement 73: /req/geojson/geojson-join-creation
Test purpose

Verify the GeoJSON output for the joined data in the join creation operation.

Test method
  1. 1. Execute the operation Join Creation, with the outputFormats parameter value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson.

  2. 2. Validate that a document was returned with a status code 201.

  3. 3. Execute the link from the response document that contains the joined data output in the GeoJSON format.

  4. 4 Validate that the response is a valid GeoJSON document using an JSON Schema validator.

A.13.2.  File Joining

Abstract test A.74

Identifier/conf/geojson/geojson-file-joining
RequirementRequirement 74: /req/geojson/geojson-file-joining
Test purpose

Verify the support for GeoJSON ouput for joined data.

Test method

Annex B
(informative)
Revision History

Table B.1 — Revision History.

DateReleaseEditorPrimary clauses modifiedDescription
2025-05-301.0.0P. LatvalaallUpdated the collection schema from OGC API — Common — Part 2. Edited other schemas. Other small edits.
2025-02-251.0.0P. LatvalaallSplitted core requirements class into several classes. Added text about asynchronous requests and security considerations. Fixed link relations. Updated Abstract tests. Changed /filejoin GeoJSON file key string to JSONPath.
2024-09-261.0.0P. LatvalaallDocument updated from the basis of the comments from the OAB. Added new parameters to join creation and file joining operations.
2022-01-271.0.0P. LatvalaallFile joining separated into its own operation from the join creation operation, updated the whole document.
2021-12-171.0.0P. LatvalaallChanged document into metanorma template, edited the whole document, removed the join update operation.
2021-11-301.0.0P. Latvala2,7Updated chapters 2 and 7 and the whole document.
2021-11-241.0.0P. LatvalaallInitial version.

Bibliography

[1]  Peter Schut: OGC 10-070r2, OpenGIS® Georeferenced Table Joining Service Implementation Standard. Open Geospatial Consortium (2010). https://portal.ogc.org/files/?artifact_id=40095.

[2]  W3C/OGC: Spatial Data on the Web Best Practices, W3C Working Group Note 28 September 2017, https://www.w3.org/TR/sdw-bp/