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:
| Name | Affiliation |
|---|---|
| Pekka Latvala (editor) | Finnish Geospatial Research Institute FGI, National Land Survey of Finland |
| Panu Muhli | Finnish 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 class | URI |
|---|---|
| Core | |
| Data Joining | |
| Join Delete | |
| File Joining | |
| Input | |
| Input File Upload | |
| File Referencing with URL | |
| CSV File Input | |
| GeoJSON File Input | |
| Output | |
| GeoJSON Output for Joined Data | |
| Direct GeoJSON Output for Joined Data | |
| Encodings | |
| HTML | |
| JSON | |
| 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
To express relationships between resources, RFC 8288 (Web Linking) is used.
The link relation types that are used in this document are listed in Table 2.
Table 2 — Link Relations.
| The following registered link relation types [IANA] are used in this document: | |
| Link Relation | Purpose |
| alternate | Refers to a substitute for this context. Refers to a representation of the current resource that is encoded using another media type (the media type is specified in the type link attribute). |
| describedby | Refers to a resource providing information about the link’s context. |
| license | Refers to a license associated with this context. |
| next | Indicates that the link’s context is a part of a series, and that the next in the series is the link target. |
| prev | Indicates that the link’s context is a part of a series, and that the previous in the series is the link target. |
| self | Conveys an identifier for the link’s context. |
| service-desc | Identifies service description for the context that is primarily intended for consumption by machines. |
| service-doc | Identifies service documentation for the context that is primarily intended for human consumption. |
| service-meta | Identifies general metadata for the context that is primarily intended for consumption by machines. |
| In addition, the following link relation types are used for which no applicable registered link relation type could be identified: | |
| Link Relation | Purpose |
| dataset | Refers to a resource that is comprised of the metadata of the specific collection that is available on the server. |
| conformance | Refers to a resource that identifies the standards that the link’s context conforms to. |
| data | Indicates that the link’s context is a distribution of a dataset that is an API and refers to the root resource of the dataset in an API. |
| keys | Refers to a resource that is comprised of metadata of the key fields of the collection represented by the link’s context. |
| key-values | Refers to a resource that is comprised of key values of the collection’s key field represented by the link’s context. |
| joins | Refers to a resource that is comprised of the metadata of the created joins that are available on the server. |
| join | Refers to a resource that is comprised of the metadata of the specific join that is available on the server. |
| output | Refers to an output of the join operation that contains the joined data. |
5.2.1. Response Schema for the Link Object
The individual hyperlink elements that make up a “links” elements are defined in the Hyperlink Schema, originally defined in the section 6.3 of the OGC API — Common — Part 1 document.
type: object
required:
- href
- rel
properties:
href:
type: string
description: Supplies the URI to a remote resource (or resource fragment).
example: http://data.example.com/buildings/123
rel:
type: string
description: The type or semantics of the relation.
example: alternate
type:
type: string
description: A hint indicating what the media type of the result of dereferencing the link should be.
example: application/geo+json
hreflang:
type: string
description: A hint indicating what the language of the result of dereferencing the link should be.
example: en
title:
type: string
description: Used to label the destination of a link such that it can be used as a human-readable identifier.
example: Trierer Strasse 70, 53115 Bonn
length:
type: integer
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 (link relations service-desc and service-doc).
The Conformance declaration (path /conformance, link relation http://www.opengis.net/def/rel/ogc/1.0/conformance).
The Collections (path /collections, link relation http://www.opengis.net/def/rel/ogc/1.0/data).
The Joins (path /joins, link relation joins).
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.
| Path | HTTP method | Description |
|---|---|---|
| Discovery Operations | ||
| / | GET | API landing page. |
| /api (recommended path) | GET | API definition. |
| /conformance | GET | API conformance declaration. |
| Data Joining Operations | ||
| /collections | GET | Returns metadata on the collections available on the server. |
| /collections/{collectionId} | GET | Returns metadata on a specific collection available on the server. |
| /collections/{collectionId}/keys | GET | Returns the key fields of a specific collection. |
| /collections/{collectionId}/keys/{keyFieldId} | GET | Returns the key values of a specific key field of a specific collection. |
| /joins | GET | Returns a list of the joins available on the server. |
| /joins | POST | Creates a new join by joining tabular data from an input data file with a specific collection. |
| /joins/{joinId} | GET | Returns metadata on a specific join. |
| /joins/{joinId} | DELETE | Deletes a specific join. |
| File Joining Operations | ||
| /filejoin | POST | Joins data between two input files. |
7. Requirements Class “Core”
7.1. Overview
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core |
|---|---|
| Target type | Web API |
| Conformance class | Conformance class A.1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/core |
| Prerequisites | OGC 19-072 (OGC — API — Common: Part 1) RFC 2616 (HTTP/1.1) RFC 2818 (HTTP over TLS) |
| Normative statements | Requirement 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
| Identifier | /req/core/operations |
|---|---|
| Included in | Requirements 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
| Identifier | /req/core/http |
|---|---|
| Included in | Requirements 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 code | Description |
| 200 | A successful request. |
| 201 | The request was executed successfully and it resulted in one or more resources that were created. |
| 204 | A request was executed successfully and there is no additional content in the response payload body. |
| 302 | The target resource was found but resides temporarily under a different URI. A 302 response is not evidence that the operation has been successfully completed. |
| 303 | The server is redirecting the user agent to a different resource. A 303 response is not evidence that the operation has been successfully completed. |
| 304 | An entity tag was provided in the request and the resource has not changed since the previous request. |
| 307 | The 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. |
| 308 | Indicates 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. |
| 400 | The server cannot or will not process the request due to an apparent client error. For example, a query parameter had an incorrect value. |
| 401 | The request requires user authentication. The response includes a WWW-Authenticate header field containing a challenge applicable to the requested resource. |
| 403 | The 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. |
| 404 | The requested resource does not exist on the server. For example, a path parameter had an incorrect value. |
| 405 | The request method is not supported. For example, a POST request was submitted, but the resource only supports GET requests. |
| 406 | Content 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. |
| 500 | An 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.
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.
| 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.
| 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
| Identifier | /req/core/root-op |
|---|---|
| Included in | Requirements 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
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
| Identifier | /req/core/api-definition-op |
|---|---|
| Included in | Requirements 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. |
| 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
| Identifier | /req/core/api-definition-success |
|---|---|
| Included in | Requirements 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.
| 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
| Identifier | /req/core/conformance-op |
|---|---|
| Included in | Requirements 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
| Identifier | /req/core/conformance-success |
|---|---|
| Included in | Requirements 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
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
| Identifier | /req/data-joining/collections-get-op |
|---|---|
| Included in | Requirements 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
| Identifier | /req/data-joining/collections-get-success |
|---|---|
| Included in | Requirements 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.
| Identifier | /req/data-joining/collections-get-success-links |
|---|---|
| Included in | Requirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining |
| A | A 200-response SHALL include the following links in the links property of the response:
|
| B | All links SHALL include the rel and type link parameters. |
Additional information may be available to assist in understanding and using this dataset. Links to those resources should be provided as well.
| 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.
| Identifier | /req/data-joining/collections-get-success-items |
|---|---|
| Included in | Requirements 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
| Identifier | /req/data-joining/collections-collectionid-get-op |
|---|---|
| Included in | Requirements 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
| Identifier | /req/data-joining/collections-collectionid-get-success |
|---|---|
| Included in | Requirements 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
| Identifier | /req/data-joining/collections-collectionid-get-success-extent |
|---|---|
| Included in | Requirements 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. |
| 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. |
| 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.
| 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.
| Identifier | /req/data-joining/collections-collectionid-get-success-links |
|---|---|
| Included in | Requirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining |
| A | A 200-response SHALL include the following links in the links property of the response:
|
| B | All links SHALL include the rel and type properties. |
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
| 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
| Identifier | /req/data-joining/collections-collectionid-keys-get-op |
|---|---|
| Included in | Requirements 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
| Identifier | /req/data-joining/collections-collectionid-keys-get-success |
|---|---|
| Included in | Requirements 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.
| Identifier | /req/data-joining/collections-collectionid-keys-get-success-default-key |
|---|---|
| Included in | Requirements 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 the links property of the CollectionKeysResponseObject:
| Identifier | /req/data-joining/collections-collectionid-keys-get-success-links |
|---|---|
| Included in | Requirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining |
| A | A 200-response SHALL include the following links in the links property of the response:
|
| B | All links SHALL include the rel and type properties. |
Description of links property of the CollectionKeysObject:
| Identifier | /req/data-joining/collections-collectionid-keys-get-success-items-links |
|---|---|
| Included in | Requirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining |
| A | A 200-response SHALL include a following link in the links property for each key field included in the response’s keys array:
|
| B | The links SHALL include the rel and type properties. |
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
| Identifier | /req/data-joining/collections-collectionid-keys-keyfieldid-get-op |
|---|---|
| Included in | Requirements 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). |
8.5.2. Response
| Identifier | /req/data-joining/collections-collectionid-keys-keyfieldid-get-success |
|---|---|
| Included in | Requirements 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.
| Identifier | /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit |
|---|---|
| Included in | Requirements 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. |
| Identifier | /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit-unsupported |
|---|---|
| Included in | Requirements 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.
| 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.
| 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. |
| 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. |
| 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.
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.
| Identifier | /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-paged-response |
|---|---|
| Included in | Requirements 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.
| Identifier | /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberMatched |
|---|---|
| Included in | Requirements 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. |
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.
| Identifier | /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberReturned |
|---|---|
| Included in | Requirements 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. |
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.
| Identifier | /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-links |
|---|---|
| Included in | Requirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining |
| A | A 200-response SHALL include the following links in the links property of the response:
|
| B | All links SHALL include the rel and type properties. |
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
| Identifier | /req/data-joining/joins-get-op |
|---|---|
| Included in | Requirements 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. |
8.6.2. Response
| Identifier | /req/data-joining/joins-get-success |
|---|---|
| Included in | Requirements 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.
| Identifier | /req/data-joining/joins-get-success-limit |
|---|---|
| Included in | Requirements 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. |
| Identifier | /req/data-joining/joins-get-success-limit-unsupported |
|---|---|
| Included in | Requirements 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
| Identifier | /req/data-joining/joins-get-success-datetime |
|---|---|
| Included in | Requirements 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.
| 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.
| 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. |
| 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. |
| 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.
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.
| Identifier | /req/data-joining/joins-get-success-paged-response |
|---|---|
| Included in | Requirements 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.
| Identifier | /req/data-joining/joins-get-success-numberMatched |
|---|---|
| Included in | Requirements 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. |
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.
| Identifier | /req/data-joining/joins-get-success-numberReturned |
|---|---|
| Included in | Requirements 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. |
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.
| Identifier | /req/data-joining/joins-get-success-items |
|---|---|
| Included in | Requirements 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:
| Identifier | /req/data-joining/joins-get-success-links |
|---|---|
| Included in | Requirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining |
| A | A 200-response SHALL include the following links in the links property of the response:
|
| B | All links SHALL include the rel and type properties. |
Property links in the JoinsObject:
| Identifier | /req/data-joining/joins-get-success-items-links |
|---|---|
| Included in | Requirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining |
| A | For each item included in the joins array in the response, the links property of that item SHALL include a link for each supported encoding to the join resource (relation: join). |
| B | All links SHALL include the rel and type properties. |
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:
| Identifier | /req/data-joining/joins-get-success-timeStamp |
|---|---|
| Included in | Requirements 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
| Identifier | /req/data-joining/joins-post-op |
|---|---|
| Included in | Requirements 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.
| Name | Description | Type and values | Required |
|---|---|---|---|
| collection-id | The value of the id attribute of the collection available on the server, to which the attribute data will be joined. | String | Mandatory |
| collection-key | The value of the id attribute of the key field of the collection that will be used in the join operation. | String | Optionala |
| right-dataset-format | The format of the attribute dataset. | String | Mandatoryb |
| right-dataset-file | The attribute dataset file (uploaded file). | File | Optionalc |
| right-dataset-url | The attribute dataset URL. | URL | Optionalc |
| right-dataset-key | The key field in the attribute dataset that contains the key values. | String | Mandatoryd |
| right-dataset-data-value-list | Fields in the attribute dataset that contain the attribute values that will be joined. | String, separated by commas | Mandatorye |
| csv-file-delimiter | The delimiter character used in the CSV file. | String | Optionalf |
| csv-file-header-row-number | The row number of CSV file’s header row (counting starts from 1). | Integer | Optionalg |
| csv-file-data-start-row-number | The row number where the data values start in the CSV file. (counting starts from 1) | Integer | Optionalh |
| output-formats | List of output formats for the joined data that will be included to the response document. | String, separated by commas | Optionali |
| include-join-metadata | Includes 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 | |||
| Identifier | /req/data-joining/joins-post-op-additional-output-formats |
|---|---|
| Included in | Requirements 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
| Identifier | /req/data-joining/joins-post-success-input-data-file-csv-multiple-keys |
|---|---|
| Included in | Requirements 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. |
| Identifier | /req/data-joining/joins-post-success-input-data-file-csv-attribute-names |
|---|---|
| Included in | Requirements 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
| Identifier | /req/data-joining/joins-joinid-get-op |
|---|---|
| Included in | Requirements 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
| Identifier | /req/data-joining/joins-joinid-get-success |
|---|---|
| Included in | Requirements 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.
| Identifier | /req/data-joining/joins-joinid-get-success-links |
|---|---|
| Included in | Requirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining |
| A | A 200-response SHALL include the following links in the links property of the response:
|
| B | All links SHALL include the rel and type properties. |
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.
| Identifier | /req/data-joining/joins-joinid-get-success-links-collection |
|---|---|
| Included in | Requirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining |
| A | A 200-response SHALL include the following links in the links property of the collection property of the response:
|
| B | All links SHALL include the rel and type properties. |
8.8.2.1.8. outputs
Links to the produced outputs that contain the joined data.
| Identifier | /req/data-joining/joins-joinid-get-success-links-outputs |
|---|---|
| Included in | Requirements class 2: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/data-joining |
| A | A 200-response SHALL include the following links in the links property of the outputs property of the response:
|
| B | All links SHALL include the rel and type properties. |
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
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/join-delete |
|---|---|
| Target type | Web API |
| Conformance class | Conformance class A.3: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/join-delete |
| Prerequisites | Requirements Class: Core Requirements Class: Data Joining RFC 2616 (HTTP/1.1) RFC 2818 (HTTP over TLS) |
| Normative statements | Requirement 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
| Identifier | /req/join-delete/joins-joinid-delete-op |
|---|---|
| Included in | Requirements 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
| Identifier | /req/join-delete/joins-joinid-delete-success |
|---|---|
| Included in | Requirements 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.1. Overview
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
| Identifier | /req/file-joining/filejoin-post-op |
|---|---|
| Included in | Requirements 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:
|
| C | If the left dataset file is uploaded with the query, it SHALL contain the header:
|
| 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
|
| 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.
| Name | Description | Type and values | Required |
|---|---|---|---|
| left-dataset-format | The format of the left dataset. | String | Mandatorya |
| left-dataset-file | The left dataset file (uploaded file) | File | Optionalb |
| left-dataset-url | A URL link to the left dataset file | URL | Optionalb |
| left-dataset-key | The key field in the left dataset file that contains the key values. | String | Mandatoryc |
| right-dataset-format | The format of the right dataset. | String | Mandatoryd |
| right-dataset-file | The right dataset file (uploaded file). | File | Optionale |
| right-dataset-url | The right dataset URL. | URL | Optionale |
| right-dataset-key | The key field in the right dataset that contains the key values. | String | Mandatoryf |
| right-dataset-data-value-list | Fields in the right dataset that contain the attribute values that will be joined with the left dataset. | String, separated by commas | Mandatoryg |
| csv-file-delimiter | The delimiter character used in the CSV file. | String | Optionalh |
| csv-file-header-row-number | The row number of CSV file’s header row (counting starts from 1). | Integer | Optionali |
| csv-file-data-start-row-number | The row number where the data values start in the CSV file. (counting starts from 1) | Integer | Optionalj |
| 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
| Identifier | /req/file-joining/filejoin-post-success |
|---|---|
| Included in | Requirements 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. |
| Identifier | /req/file-joining/filejoin-post-success-attribute-data-file-csv-multiple-keys |
|---|---|
| Included in | Requirements 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. |
| Identifier | /req/file-joining/filejoin-post-success-attribute-data-file-csv-attribute-names |
|---|---|
| Included in | Requirements 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.
10.2.3. Error Situations
See HTTP status codes for general guidance.
11. Requirements Class “Input File Upload”
11.1. Overview
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-file-upload |
|---|---|
| Target type | Web API |
| Conformance class | Conformance class A.5: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-file-upload |
| Prerequisites | Requirement 42: /req/data-joining/joins-post-op Requirement 54: /req/file-joining/filejoin-post-op |
| Normative statements | Requirement 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
| Identifier | /req/input-file-upload/right-dataset-file-join-creation |
|---|---|
| Included in | Requirements 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
| Identifier | /req/input-file-upload/right-dataset-file-file-joining |
|---|---|
| Included in | Requirements 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
| Identifier | /req/input-file-upload/left-dataset-file-file-joining |
|---|---|
| Included in | Requirements 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
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-http-ref |
|---|---|
| Target type | Web API |
| Conformance class | Conformance class A.6: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-http-ref |
| Prerequisites | Requirement 42: /req/data-joining/joins-post-op Requirement 54: /req/file-joining/filejoin-post-op |
| Normative statements | Requirement 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
| Identifier | /req/input-http-ref/right-dataset-url-join-creation |
|---|---|
| Included in | Requirements 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
| Identifier | /req/input-http-ref/right-dataset-url-file-joining |
|---|---|
| Included in | Requirements 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
| Identifier | /req/input-http-ref/left-dataset-url-file-joining |
|---|---|
| Included in | Requirements 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
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-csv |
|---|---|
| Target type | Web API |
| Conformance class | Conformance class A.7: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv |
| Prerequisites | Requirement 42: /req/data-joining/joins-post-op Requirement 54: /req/file-joining/filejoin-post-op |
| Normative statements | Requirement 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.2.1. Parameter right-dataset-format
| Identifier | /req/input-csv/right-dataset-format-join-creation |
|---|---|
| Included in | Requirements class 7: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-csv |
| A | If the server supports the CSV input file format in the Join Creation query, the Join Creation operation SHALL support the form data parameter right-dataset-format value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv. |
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.
13.3.1. Parameter right-dataset-format
| Identifier | /req/input-csv/right-dataset-format-file-joining |
|---|---|
| Included in | Requirements class 7: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-csv |
| A | If the server supports the CSV input file format in the File Joining query, the File Joining operation SHALL support the form data parameter right-dataset-format value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv. |
14. Requirements Class “GeoJSON File Input”
14.1. Overview
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-geojson |
|---|---|
| Target type | Web API |
| Conformance class | Conformance class A.8: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-geojson |
| Prerequisite | Requirement 54: /req/file-joining/filejoin-post-op |
| Normative statement | Requirement 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.
14.2.1. Parameter left-dataset-format
| Identifier | /req/input-geojson/left-dataset-format-file-joining |
|---|---|
| Included in | Requirements class 8: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-geojson |
| A | If the server supports the GeoJSON input file format in the File Joining query, the File Joining operation SHALL support the form data parameter left-dataset-format value http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-geojson. |
15. Requirements Class “GeoJSON Output for Joined Data”
15.1. Overview
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/output-geojson |
|---|---|
| Target type | Web API |
| Conformance class | Conformance class A.9: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson |
| Prerequisite | Requirement 42: /req/data-joining/joins-post-op |
| Normative statement | Requirement 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.
15.2.1. Parameter output-formats
| Identifier | /req/output-geojson/output-formats-join-creation |
|---|---|
| Included in | Requirements class 9: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/output-geojson |
| 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. |
16. Requirements Class “Direct GeoJSON Output for Joined Data”
16.1. Overview
Requirements class 10: Direct GeoJSON Output for Joined Data | |
|---|---|
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/output-geojson-direct |
| Target type | Web API |
| Conformance class | Conformance class A.10: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson-direct |
| Prerequisite | Requirement 42: /req/data-joining/joins-post-op |
| Normative statement | Requirement 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
| Identifier | /req/output-geojson-direct/output-formats-join-creation |
|---|---|
| Included in | Requirements 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.
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/html |
|---|---|
| Target type | Web API |
| Conformance class | Conformance class A.11: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/html |
| Prerequisites | Requirements Class: “Core” Requirements Class: “Data Joining” HTML5 Schema.org |
| Normative statements | Requirement 69: /req/html/definition Requirement 70: /req/html/content |
| Identifier | /req/html/definition |
|---|---|
| Included in | Requirements 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. |
| Identifier | /req/html/content |
|---|---|
| Included in | Requirements 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:
|
| 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.
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/json |
|---|---|
| Target type | Web API |
| Conformance class | Conformance class A.12: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/json |
| Prerequisites | Requirements Class: “Core” Requirements Class: “Data Joining” IETF RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format JSON Schema |
| Normative statements | Requirement 71: /req/json/json-definition Requirement 72: /req/json/json-content |
| Identifier | /req/json/json-definition |
|---|---|
| Included in | Requirements 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. |
| Identifier | /req/json/json-content |
|---|---|
| Included in | Requirements 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. |
| 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
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/geojson |
|---|---|
| Target type | Web API |
| Conformance class | Conformance class A.13: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/geojson |
| Prerequisites | Requirements Class: “Data Joining” Requirements Class: “File Joining” The GeoJSON Format |
| Normative statements | Requirement 73: /req/geojson/geojson-join-creation Requirement 74: /req/geojson/geojson-file-joining |
| Identifier | /req/geojson/geojson-join-creation |
|---|---|
| Included in | Requirements 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. |
| Identifier | /req/geojson/geojson-file-joining |
|---|---|
| Included in | Requirements class 13: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/geojson |
| A | The server SHALL support the GeoJSON format for the file Joining operation output when the left-dataset-format form data parameter values is http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-geojson. |
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”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/core |
|---|---|
| Requirements class | Requirements class 1: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/core |
| Target Type | Web API |
| Conformance tests | Abstract 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
| Identifier | /conf/core/operations |
|---|---|
| Requirement | Requirement 1: /req/core/operations |
| Test purpose | Validate that the server implementation contains supports for the operations sets. |
| Test method |
|
A.1.1.2. HTTP
| Identifier | /conf/core/http |
|---|---|
| Requirement | Requirement 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 |
|
A.1.2. Landing Page {root}/
| Identifier | /conf/core/root-op |
|---|---|
| Requirement | Requirement 3: /req/core/root-op |
| Test purpose | Validate that the landing page can be retrieved from the expected location. |
| Test method |
|
| Identifier | /conf/core/root-success |
|---|---|
| Requirement | Requirement 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.
If the server supports the data joining operations operation set:
|
A.1.3. API Definiton path {root}/api (link)
| Identifier | /conf/core/api-definition-op |
|---|---|
| Requirement | Requirement 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:
DONE |
| Identifier | /conf/core/api-definition-success |
|---|---|
| Requirement | Requirement 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
| Identifier | /conf/core/conformance-op |
|---|---|
| Requirement | Requirement 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:
DONE
|
| Identifier | /conf/core/conformance-success |
|---|---|
| Requirement | Requirement 8: /req/core/conformance-success |
| Test purpose | Validate that the conformance declaration response complies with the required structure and contents. |
| Test method |
|
A.2. Conformance Class “Data Joining”
A.2.1. Collections {root}/collections
| Identifier | /conf/data-joining/collections-get-op |
|---|---|
| Requirement | Requirement 9: /req/data-joining/collections-get-op |
| Test purpose | Validate that the information about collections can be retrieved from the expected location. |
| Test method |
|
| Identifier | /conf/data-joining/collections-get-success |
|---|---|
| Requirement | Requirement 10: /req/data-joining/collections-get-success |
| Test purpose | Validate that the Collections content complies with the required structure and contents. |
| Test method |
|
| Identifier | /conf/data-joining/collections-get-success-links |
|---|---|
| Requirement | Requirement 11: /req/data-joining/collections-get-success-links |
| Test purpose | Validate that the required links are included in the Collections document. |
| Test method | Verify that the response document includes:
Verify that all links include the rel and type link parameters. |
| Identifier | /conf/data-joining/collections-get-success-items |
|---|---|
| Requirement | Requirement 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 |
|
A.2.2. Collection {root}/collections/{collectionId}
| Identifier | /conf/data-joining/collections-collectionid-get-op |
|---|---|
| Requirement | Requirement 13: /req/data-joining/collections-collectionid-get-op |
| Test purpose | Validate that a collection information can be retrieved from the expected location. |
| Test method |
|
| Identifier | /conf/data-joining/collections-collectionid-get-success |
|---|---|
| Requirement | Requirement 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:
|
| Identifier | /conf/data-joining/collections-collectionid-get-success-extent |
|---|---|
| Requirement | Requirement 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:
|
NOTE: A temporal extent of null indicates an open time interval.
| Identifier | /conf/data-joining/collections-collectionid-get-success-links |
|---|---|
| Requirement | Requirement 16: /req/data-joining/collections-collectionid-get-success-links |
| Test purpose | Validate that a Collection document includes all required links. |
| Test method |
|
A.2.3. Collection Key Fields {root}/collections/{collectionId}/keys
| Identifier | /conf/data-joining/collections-collectionid-keys-get-op |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/collections-collectionid-keys-get-success |
|---|---|
| Requirement | Requirement 18: /req/data-joining/collections-collectionid-keys-get-success |
| Test purpose | Validate that the response complies with the required structure and contents. |
| Test method |
|
| Identifier | /conf/data-joining/collections-collectionid-keys-get-success-default-key |
|---|---|
| Requirement | Requirement 19: /req/data-joining/collections-collectionid-keys-get-success-default-key |
| Test purpose | Validate that the response isDefault value of the response. |
| Test method |
|
| Identifier | /conf/data-joining/collections-collectionid-keys-get-success-links |
|---|---|
| Requirement | Requirement 20: /req/data-joining/collections-collectionid-keys-get-success-links |
| Test purpose | Validate that the required links are included in the response document. |
| Test method | Validate that the response document includes:
|
| Identifier | /conf/data-joining/collections-collectionid-keys-get-success-items-links |
|---|---|
| Requirement | Requirement 21: /req/data-joining/collections-collectionid-keys-get-success-items-links |
| Test purpose | Validate that a response document includes all required links. |
| Test method | Validate that the each item in the response’s keys property includes contains:
|
A.2.4. Collection Key Field {root}/collections/{collectionId}/keys/{keyFieldId}
| Identifier | /conf/data-joining/collections-collectionid-keys-keyfieldid-get-op |
|---|---|
| Requirement | Requirement 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:
|
| Identifier | /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-limit-unsupported |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-paged-response |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberMatched |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-numberReturned |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/collections-collectionid-keys-keyfieldid-get-success-links |
|---|---|
| Requirement | Requirement 29: /req/data-joining/collections-collectionid-keys-keyfieldid-get-success-links |
| Test purpose | Validate that the required links are included in the Collection key field’s response document. |
| Test method |
Verify that the response document includes: . A link to this response document (relation: self). . A link to the response document in every other media type supported by the server (relation: alternate). Verify that all links include the rel and type link parameters. |
A.2.5. Joins {root}/joins
| Identifier | /conf/data-joining/joins-get-op |
|---|---|
| Requirement | Requirement 30: /req/data-joining/joins-get-op |
| Test purpose | Validate that the information about Joins can be retrieved from the expected location. |
| Test method |
|
| Identifier | /conf/data-joining/joins-get-success |
|---|---|
| Requirement | Requirement 31: /req/data-joining/joins-get-success |
| Test purpose | Validate that the joins content complies with the required structure and contents. |
| Test method |
|
| Identifier | /conf/data-joining/joins-get-success-limit |
|---|---|
| Requirement | Requirement 32: /req/data-joining/joins-get-success-limit |
| Test purpose | Validate that the joins response complies with the limit parameter. |
| Test method |
|
| Identifier | /conf/data-joining/joins-get-success-limit-unsupported |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/joins-get-success-datetime |
|---|---|
| Requirement | Requirement 34: /req/data-joining/joins-get-success-datetime |
| Test purpose | Validate that the joins content complies with the required structure and contents. |
| Test method |
|
| Identifier | /conf/data-joining/joins-get-success-paged-response |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/joins-get-success-numberMatched |
|---|---|
| Requirement | Requirement 36: /req/data-joining/joins-get-success-numberMatched |
| Test purpose | Validate that the joins content complies with the required structure and contents. |
| Test method |
|
| Identifier | /conf/data-joining/joins-get-success-numberReturned |
|---|---|
| Requirement | Requirement 37: /req/data-joining/joins-get-success-numberReturned |
| Test purpose | Validate that the joins content complies with the required structure and contents. |
| Test method |
|
| Identifier | /conf/data-joining/joins-get-success-items |
|---|---|
| Requirement | Requirement 38: /req/data-joining/joins-get-success-items |
| Test purpose | Validate that the joins content complies with the required structure and contents. |
| Test method |
|
| Identifier | /conf/data-joining/joins-get-success-links |
|---|---|
| Requirement | Requirement 39: /req/data-joining/joins-get-success-links |
| Test purpose | Validate that the joins content complies with the required structure and contents. |
| Test method |
|
| Identifier | /conf/data-joining/joins-get-success-items-links |
|---|---|
| Requirement | Requirement 40: /req/data-joining/joins-get-success-items-links |
| Test purpose | Validate that the joins content complies with the required structure and contents. |
| Test method | Verify that the each item in the response’s joins property includes contains:
|
| Identifier | /conf/data-joining/joins-get-success-timeStamp |
|---|---|
| Requirement | Requirement 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
| Identifier | /conf/data-joining/joins-post-op |
|---|---|
| Requirement | Requirement 42: /req/data-joining/joins-post-op |
| Test purpose |
|
| Test method | Test method for (1): Test method for (2): |
| Identifier | /conf/data-joining/joins-post-op-additional-output-formats |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/joins-post-success |
|---|---|
| Requirement | Requirement 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: For test method (2) in the abtract test /conf/data-joining/joins-post-op: |
| Identifier | /conf/data-joining/joins-post-success-input-data-file-csv-multiple-keys |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/joins-post-success-input-data-file-csv-attribute-names |
|---|---|
| Requirement | Requirement 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 |
|
A.2.7. Join {root}/joins/{joinId}
| Identifier | /conf/data-joining/joins-joinid-get-op |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/data-joining/joins-joinid-get-success |
|---|---|
| Requirement | Requirement 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.
|
| Identifier | /conf/data-joining/joins-joinid-get-success-links |
|---|---|
| Requirement | Requirement 49: /req/data-joining/joins-joinid-get-success-links |
| Test purpose | Validate that the Join content complies with the required structure and contents. |
| Test method |
|
| Identifier | /conf/data-joining/joins-joinid-get-success-links-collection |
|---|---|
| Requirement | Requirement 50: /req/data-joining/joins-joinid-get-success-links-collection |
| Test purpose | Validate that the Join content complies with the required structure and contents. |
| Test method |
|
| Identifier | /conf/data-joining/joins-joinid-get-success-links-outputs |
|---|---|
| Requirement | Requirement 51: /req/data-joining/joins-joinid-get-success-links-outputs |
| Test purpose | Validate that the Join content complies with the required structure and contents. |
| Test method |
|
A.3. Conformance Class “Join Delete”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/join-delete |
|---|---|
| Requirements class | Requirements class 3: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/join-delete |
| Target Type | Web API |
| Conformance tests | Abstract 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}
| Identifier | /conf/join-delete/joins-joinid-delete-op |
|---|---|
| Requirement | Requirement 52: /req/join-delete/joins-joinid-delete-op |
| Test purpose | Validate that the join can be deleted from the expected location. |
| Test method |
|
| Identifier | /conf/join-delete/joins-joinid-delete-success |
|---|---|
| Requirement | Requirement 53: /req/join-delete/joins-joinid-delete-success |
| Test purpose | Validate that the join was deleted from the server. |
| Test method |
|
A.4. Conformance Class “File Joining”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/file-joining |
|---|---|
| Requirements class | Requirements class 4: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/file-joining |
| Target Type | Web API |
| Conformance tests | Abstract 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 |
| Identifier | /conf/file-joining/filejoin-post-op |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/file-joining/filejoin-post-success |
|---|---|
| Requirement | Requirement 55: /req/file-joining/filejoin-post-success |
| Test purpose | Validate the response of the file joining operation. |
| Test method |
|
| Identifier | /conf/file-joining/filejoin-post-success-attribute-data-file-csv-multiple-keys |
|---|---|
| Requirement | Requirement 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 |
|
| Identifier | /conf/file-joining/filejoin-post-success-attribute-data-file-csv-attribute-names |
|---|---|
| Requirement | Requirement 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 |
|
A.5. Conformance Class “Input File Upload”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-file-upload |
|---|---|
| Requirements class | Requirements class 5: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-file-upload |
| Target Type | Web API |
| Conformance tests | Abstract 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 |
| Identifier | /conf/input-file-upload/right-dataset-file-join-creation |
|---|---|
| Requirement | Requirement 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:
|
| Identifier | /conf/input-file-upload/right-dataset-file-file-joining |
|---|---|
| Requirement | Requirement 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:
|
| Identifier | /conf/input-file-upload/left-dataset-file-file-joining |
|---|---|
| Requirement | Requirement 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:
|
A.6. Conformance Class “File Referencing with URL”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-http-ref |
|---|---|
| Requirements class | Requirements class 6: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-http-ref |
| Target Type | Web API |
| Conformance tests | Abstract 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 |
| Identifier | /conf/input-http-ref/right-dataset-url-join-creation |
|---|---|
| Requirement | Requirement 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:
|
| Identifier | /conf/input-http-ref/right-dataset-url-file-joining |
|---|---|
| Requirement | Requirement 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:
|
| Identifier | /conf/input-http-ref/left-dataset-url-file-joining |
|---|---|
| Requirement | Requirement 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:
|
A.7. Conformance Class “CSV File Input”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-csv |
|---|---|
| Requirements class | Requirements class 7: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-csv |
| Target Type | Web API |
| Conformance tests | Abstract test A.64: /conf/input-csv/right-dataset-format-join-creation Abstract test A.65: /conf/input-csv/right-dataset-format-file-joining |
| Identifier | /conf/input-csv/right-dataset-format-join-creation |
|---|---|
| Requirement | Requirement 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: |
| Identifier | /conf/input-csv/right-dataset-format-file-joining |
|---|---|
| Requirement | Requirement 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: |
A.8. Conformance Class “GeoJSON File Input”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input-geojson |
|---|---|
| Requirements class | Requirements class 8: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/input-geojson |
| Target Type | Web API |
| Conformance test | Abstract test A.66: /conf/input-geojson/left-dataset-format-file-joining |
| Identifier | /conf/input-geojson/left-dataset-format-file-joining |
|---|---|
| Requirement | Requirement 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: |
A.9. Conformance Class “GeoJSON Output for Joined Data”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson |
|---|---|
| Requirements class | Requirements class 9: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/output-geojson |
| Target Type | Web API |
| Conformance test | Abstract test A.67: /conf/output-geojson/output-formats-join-creation |
| Identifier | /conf/output-geojson/output-formats-join-creation |
|---|---|
| Requirement | Requirement 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”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output-geojson-direct |
|---|---|
| Requirements class | Requirements class 10: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/output-geojson-direct |
| Target Type | Web API |
| Conformance test | Abstract test A.68: /conf/output-geojson-direct/output-formats-join-creation |
| Identifier | /conf/output-geojson-direct/output-formats-join-creation |
|---|---|
| Requirement | Requirement 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”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/html |
|---|---|
| Requirements class | Requirements class 11: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/html |
| Target Type | Web API |
| Conformance tests | Abstract test A.69: /conf/html/definition Abstract test A.70: /conf/html/content |
A.11.1. HTML Definition
| Identifier | /conf/html/definition |
|---|---|
| Requirement | Requirement 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
| Identifier | /conf/html/content |
|---|---|
| Requirement | Requirement 70: /req/html/content |
| Test purpose | Verify the content of an HTML document given an input document and schema. |
| Test method |
|
A.12. Conformance Class “JSON”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/json |
|---|---|
| Requirements class | Requirements class 12: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/json |
| Target Type | Web API |
| Conformance tests | Abstract test A.71: /conf/json/json-definition Abstract test A.72: /conf/json/json-content |
A.12.1. JSON Definition
| Identifier | /conf/json/json-definition |
|---|---|
| Requirement | Requirement 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: |
A.12.2. JSON Content
| Identifier | /conf/json/json-content |
|---|---|
| Requirement | Requirement 72: /req/json/json-content |
| Test purpose | Verify the content of a JSON document given an input document and schema. |
| Test method |
|
A.13. Conformance Class “GeoJSON”
| Identifier | http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/geojson |
|---|---|
| Requirements class | Requirements class 13: http://www.opengis.net/spec/ogcapi-joins-1/1.0/req/geojson |
| Target Type | Web API |
| Conformance tests | Abstract test A.73: /conf/geojson/geojson-join-creation Abstract test A.74: /conf/geojson/geojson-file-joining |
A.13.1. Join Creation
| Identifier | /conf/geojson/geojson-join-creation |
|---|---|
| Requirement | Requirement 73: /req/geojson/geojson-join-creation |
| Test purpose | Verify the GeoJSON output for the joined data in the join creation operation. |
| Test method |
|
A.13.2. File Joining
| Identifier | /conf/geojson/geojson-file-joining |
|---|---|
| Requirement | Requirement 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.
| Date | Release | Editor | Primary clauses modified | Description |
|---|---|---|---|---|
| 2025-05-30 | 1.0.0 | P. Latvala | all | Updated the collection schema from OGC API — Common — Part 2. Edited other schemas. Other small edits. |
| 2025-02-25 | 1.0.0 | P. Latvala | all | Splitted 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-26 | 1.0.0 | P. Latvala | all | Document updated from the basis of the comments from the OAB. Added new parameters to join creation and file joining operations. |
| 2022-01-27 | 1.0.0 | P. Latvala | all | File joining separated into its own operation from the join creation operation, updated the whole document. |
| 2021-12-17 | 1.0.0 | P. Latvala | all | Changed document into metanorma template, edited the whole document, removed the join update operation. |
| 2021-11-30 | 1.0.0 | P. Latvala | 2,7 | Updated chapters 2 and 7 and the whole document. |
| 2021-11-24 | 1.0.0 | P. Latvala | all | Initial 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/
[3] IANA: Link Relation Types, https://www.iana.org/assignments/link-relations/link-relations.xml