<?xml version="1.0" encoding="UTF-8"?>
<ogc-standard xmlns="https://www.metanorma.org/ns/ogc" type="semantic" version="2.5.7" schema-version="v1.3.1">
<bibdata type="standard">
<title language="en" format="text/plain">OGC API - Environmental Data Retrieval Standard - Part 3: Profiles</title>
<uri type="xml">./25-014.xml</uri><uri type="pdf">./25-014.pdf</uri><uri type="doc">./25-014.doc</uri><docidentifier type="ogc-external">http://www.opengis.net/doc/spec/ogcapi-edr-3/1.0</docidentifier><docidentifier type="ogc-internal" primary="true">25-014</docidentifier><docnumber>25-014</docnumber><date type="published"><on>2029-03-30</on></date><date type="issued"><on>2029-03-30</on></date><date type="received"><on>2025-08-21</on></date><contributor><role type="author"/><organization>
<name>UK Met Office</name>
</organization></contributor><contributor><role type="author"/><organization>
<name>Heazeltech</name>
</organization></contributor><contributor><role type="editor"/><person>
<name><completename>Mark Burgoyne</completename></name>
</person></contributor><contributor><role type="editor"/><person>
<name><completename>Charles Heazel</completename></name>
</person></contributor><contributor><role type="publisher"/><organization>
<name>Open Geospatial Consortium</name>
<abbreviation>OGC</abbreviation></organization></contributor><edition>1.0</edition><version><draft>3.0</draft></version><language>en</language><script>Latn</script><abstract><p>The OGC API-EDR Part 1: Core standard was designed to be flexible and straightforward to understand and implement for Web developers. As it is being widely implemented, various groups of users have identified the need to restrict some of the flexibility to improve interoperability between different implementations of both servers and clients within their domains of interest. A set of these stricter specifications for a specific domain of user is a Profile.</p>

<p>The aim of the OGC API-EDR Part 3: Service Profile Support standard is to ensure interoperability between API implementations by defining a standard approach to specifying a Profile of OGC API-EDR Part 1: Core.</p>

<p>To ensure consistency, providers must adopt a standardised approach when defining <tt>Collections</tt> and their <tt>Instances</tt>. The OGC API-EDR Profile outlines a set of requirements that an EDR API implementation must meet to be considered compliant with the service profile.</p>
</abstract><status><stage>draft</stage></status><copyright><from>2025</from><owner><organization>
<name>Open Geospatial Consortium</name>
<abbreviation>OGC</abbreviation></organization></owner></copyright><keyword>ogcdoc</keyword><keyword>OGC document</keyword><keyword>ModSpec</keyword><keyword>API</keyword><keyword>OpenAPI</keyword><keyword>html</keyword><keyword>Profile</keyword><ext><doctype>standard</doctype><subdoctype>implementation</subdoctype><editorialgroup><committee>technical</committee></editorialgroup></ext></bibdata><metanorma-extension><table id="_misccontainer_anchor_aliases"><tbody><tr><th>req_class_core</th><td>http://www.opengis.net/spec/ogcapi-edr-3/1.0/req/req-class-core</td></tr><tr><th>_3462035e-1efe-4e56-9639-cb645761ace7</th><td>/req/core/modspec</td></tr><tr><th>_7b68bdb8-2d07-4964-b66a-42c0347478b6</th><td>/req/core/edr-conformant</td></tr><tr><th>_a449ff6c-5f80-4100-a527-d822e4f1a395</th><td>/req/core/parameter-names</td></tr><tr><th>_1014bbf8-1004-47ff-8abb-2809098564a7</th><td>/req/core/root</td></tr><tr><th>_360523bd-c3a7-45f6-9b3e-8ef27024f0ad</th><td>/req/core/root-description</td></tr><tr><th>_0feb721b-d353-40a7-a209-f9c11f9f6e30</th><td>/req/core/root-keywords</td></tr><tr><th>_0815277f-2968-4404-b0bf-928853a0d3ec</th><td>/req/core/root-provider</td></tr><tr><th>_0c6eee63-9e80-4022-b217-17cf98860bf9</th><td>/req/core/root-contact</td></tr><tr><th>_a6187485-6cab-4ad5-aacb-d309477742f6</th><td>/req/core/root-links</td></tr><tr><th>_293e1746-d4e2-44c0-89f9-6fab3dc13348</th><td>/req/core/publishing</td></tr><tr><th>_661b9b31-defb-4bf9-9832-95b80c8acccb</th><td>/req/core/openapi</td></tr><tr><th>_9299854f-7e07-4132-b450-a46e53ae9a2b</th><td>/req/core/api</td></tr><tr><th>_0e8da2bb-3445-47ea-9069-406d0a66d506</th><td>/req/core/requirements-set</td></tr><tr><th>_b9e62d6a-dab8-41f1-9aa3-5e16e54020cb</th><td>/req/core/collectionid</td></tr><tr><th>_3ece9ca4-d59d-407a-ba89-13f7eb826825</th><td>/req/core/extent</td></tr><tr><th>_fc1d8bcf-28e9-443e-9dcb-bfff8f8aaaac</th><td>/req/core/extent-spatial</td></tr><tr><th>_bca734d9-f770-47a9-8e0c-ca95f6c6fd11</th><td>/req/core/extent-temporal</td></tr><tr><th>_e8ad4b3f-1bcb-4d96-a62a-68a8bd93db27</th><td>/req/core/extent-vertical</td></tr><tr><th>_a14be407-13bc-406e-b864-6cce232f205a</th><td>/req/core/extent-custom</td></tr><tr><th>_825ef075-d513-475a-9d0f-2155ae4b2d7b</th><td>/req/core/data-query</td></tr><tr><th>_711a1248-377a-450a-94e7-acb675d73a97</th><td>/req/core/output-format</td></tr><tr><th>_75c35fd8-9532-4af8-8b6c-2060660d8a70</th><td>/req/core/data-query-area</td></tr><tr><th>_697d069c-d7e7-4519-9c8a-aabbba66c417</th><td>/req/core/data-query-corridor</td></tr><tr><th>_08b1b09a-d2d4-4908-90e6-41f8eb6d4d18</th><td>/req/core/data-query-cube</td></tr><tr><th>_97dfc786-7293-4d39-9a70-61f2f421df6a</th><td>/req/core/data-query-instances</td></tr><tr><th>_07c6bb0a-ba34-4f54-869c-b8634297dd47</th><td>/req/core/instanceid</td></tr><tr><th>_421210a2-c77b-4a76-a1b6-bf6db91af2b9</th><td>/req/core/paging-support</td></tr><tr><th>_c6d77dac-964d-484a-9f98-4b7069e248d6</th><td>/req/core/data-query-locations</td></tr><tr><th>_1864d54a-c040-4101-ad4c-c1f5b2accb66</th><td>/req/core/data-query-position</td></tr><tr><th>_ff6aa645-0e98-4518-bdad-dbb5921a228e</th><td>/req/core/data-query-radius</td></tr><tr><th>_23e86bc9-b2dd-455b-a994-40bb03438300</th><td>/req/core/data-query-trajectory</td></tr><tr><th>_441757d5-29da-4e47-9c54-99dd0ffd6e11</th><td>/req/core/status-codes</td></tr><tr><th>_58a813b9-71f4-4fd5-bd96-776614303003</th><td>/req/core/links</td></tr><tr><th>_51bfabde-a41d-467d-a9f8-fb4609df9c6f</th><td>/req/core/asynchronous</td></tr><tr><th>_d50c230f-62d0-4dac-8aba-495d89396289</th><td>/req/core/pubsub</td></tr><tr><th>req_class_core_modspec</th><td>/req/core/modspec</td></tr><tr><th>req_class_core_edr-conformant</th><td>/req/core/edr-conformant</td></tr><tr><th>req_core_parameter-names</th><td>/req/core/parameter-names</td></tr><tr><th>req_core_root</th><td>/req/core/root</td></tr><tr><th>_09301352-6a28-48c9-bafd-f74bf812de33</th><td>/rec/core/root</td></tr><tr><th>_7ac770f8-e0b0-4753-8148-ca5112fcce95</th><td>/req/core/root-description</td></tr><tr><th>_5df81e1f-b7fc-43d9-ad54-5582534076f7</th><td>/req/core/root-attribution</td></tr><tr><th>_577f71ce-ae6b-4db1-86a5-8c0cebbd9745</th><td>/req/core/root-keywords</td></tr><tr><th>_62cb2def-3fb4-44ea-9e0e-ecc907d91ed4</th><td>/req/core/root-provider</td></tr><tr><th>_f93c9d2a-e616-418a-b861-fa35e273d52a</th><td>/req/core/root-contact</td></tr><tr><th>_261451ab-e109-4a84-bd07-dc9dff4e678f</th><td>/req/core/root-links</td></tr><tr><th>_f828349c-172c-4a7c-9e1f-ff65eb371a77</th><td>/rec/core/root-links</td></tr><tr><th>req_core_publishing</th><td>/req/core/publishing</td></tr><tr><th>_177977a0-7cb7-43f9-a228-c5f11a024281</th><td>/req/core/openapi</td></tr><tr><th>req_core_api</th><td>/req/core/api</td></tr><tr><th>_2c0f0fd2-06db-4486-b168-a915042d33db</th><td>/req/core/requirements-set</td></tr><tr><th>req_core_collectionid</th><td>/req/core/collectionid</td></tr><tr><th>req_core_extent</th><td>/req/core/extent</td></tr><tr><th>_31b678d2-a3b9-4731-9c1d-855d9a6e12d6</th><td>/rec/core/extent</td></tr><tr><th>_50a4d8ac-18c5-45db-90fe-5dd9daec6788</th><td>/req/core/extent-spatial</td></tr><tr><th>_e429a17c-1b45-4119-89e2-fd79c946b0b6</th><td>/per/core/extent-spatial</td></tr><tr><th>_585f9686-2efd-4738-bdd3-834d2465d9de</th><td>/req/core/extent-temporal</td></tr><tr><th>_5b3260ae-3393-49d7-9866-af936b19c6bc</th><td>/rec/core/extent-temporal</td></tr><tr><th>_ff29b020-06d1-42ab-8ca5-abab3e695d14</th><td>/req/core/extent-vertical</td></tr><tr><th>_4f28a0df-6fc8-40eb-a8f6-f17c38988c63</th><td>/rec/core/extent-vertical</td></tr><tr><th>_6b512278-0277-4244-bd80-0f1415fa3b8a</th><td>/req/core/extent-custom</td></tr><tr><th>_cbbf5d5f-5c43-4388-b8f9-8a931ecdb8dd</th><td>/rec/core/extent-custom</td></tr><tr><th>req_core_data-query</th><td>/req/core/data-query</td></tr><tr><th>req_core_output-format</th><td>/req/core/output-format</td></tr><tr><th>_26df4b71-44da-4a8a-a0f2-c9eeaa60c777</th><td>/rec/core/output-format</td></tr><tr><th>req_core_data-query-area</th><td>/req/core/data-query-area</td></tr><tr><th>req_core_data-query-corridor</th><td>/req/core/data-query-corridor</td></tr><tr><th>req_core_data-query-cube</th><td>/req/core/data-query-cube</td></tr><tr><th>req_core_data-query-locations</th><td>/req/core/data-query-locations</td></tr><tr><th>req_core_data-query-instances</th><td>/req/core/data-query-instances</td></tr><tr><th>req_core_paging-support</th><td>/req/core/paging-support</td></tr><tr><th>req_core-data-query-position</th><td>/req/core/data-query-position</td></tr><tr><th>req_core_data-query-radius</th><td>/req/core/data-query-radius</td></tr><tr><th>req_core_data-query-trajectory</th><td>/req/core/data-query-trajectory</td></tr><tr><th>req_core_status-codes</th><td>/req/core/status-codes</td></tr><tr><th>req_core_links</th><td>/req/core/links</td></tr><tr><th>req_core_asynchronous</th><td>/req/core/asynchronous</td></tr><tr><th>_5d82601f-fd0b-4376-93e2-de68f632f8e9</th><td>/per/core/asynchronous</td></tr><tr><th>req_core_pubsub</th><td>/req/core/pubsub</td></tr><tr><th>ats_class-core</th><td>http://www.opengis.net/spec/ogcapi-edr-3/1.0/conf/conf-class-core</td></tr><tr><th>_431e2475-bced-4f8a-863a-0390980c29f4</th><td>/conf/core/modspec</td></tr><tr><th>_75db34be-7a7f-4cb4-88b1-7d213379b2ad</th><td>/conf/core/publishing</td></tr><tr><th>_258d8ab8-3a91-488e-86e1-76f4580491ce</th><td>/conf/core/api</td></tr><tr><th>_b3635a8d-9cc9-4752-b61f-7ad07d2f971e</th><td>/conf/core/edr-conformant</td></tr><tr><th>_bdf88ace-e787-4b90-b5e8-89c0453dc043</th><td>/conf/core/root</td></tr><tr><th>_04e96230-0a1e-4b49-8cd1-39f7fb0684fe</th><td>/conf/core/requirements-set</td></tr><tr><th>_337b1a97-900b-4f3d-acc3-e2784b151175</th><td>/conf/core/parameter-names</td></tr><tr><th>_32a11b29-9222-4480-98d1-28f2b5ddbf55</th><td>/conf/core/collectionid</td></tr><tr><th>_4db85ead-f0c3-472a-a0e1-78c1303b7682</th><td>/conf/core/extent</td></tr><tr><th>_e27ecdee-2d9d-4e55-a0c1-016389072b39</th><td>/conf/core/output-format</td></tr><tr><th>_ce913c50-c2ae-45ef-aeca-92eaa622fb44</th><td>/conf/core/paging-support</td></tr><tr><th>_fd8c04b8-be22-48d5-9678-ad9247112cab</th><td>/conf/core/status-codes</td></tr><tr><th>_45d126d2-8540-495f-86f4-dda4b57205f0</th><td>/conf/core/links</td></tr><tr><th>_d14b1e75-d4a7-42b4-a72d-022ea26aeb39</th><td>/conf/core/data-query</td></tr><tr><th>_78090ad6-47d5-443f-b1b0-1dc0f2a48e48</th><td>/conf/core/data-query-area</td></tr><tr><th>_78e2917b-e21a-4a88-948d-146f3e91b499</th><td>/conf/core/data-query-corridor</td></tr><tr><th>_a954448d-a47f-47ee-b2c6-fcfdb1e961c2</th><td>/conf/core/data-query-cube</td></tr><tr><th>_91759354-f75d-41b0-8287-7d131077b4f7</th><td>/conf/core/data-query-instances</td></tr><tr><th>_65747e3c-9c7e-41a9-bab4-5e0b431abc9a</th><td>/conf/core/data-query-locations</td></tr><tr><th>_a30ebb9a-efe4-48a3-ab7d-b5d9f940042f</th><td>/conf/core/data-query-position</td></tr><tr><th>_3604a91a-1644-4e0f-b238-707e83a2a96e</th><td>/conf/core/data-query-radius</td></tr><tr><th>_34e491a1-a05d-49f3-9f4b-7a0ea2e63650</th><td>/conf/core/data-query-trajectory</td></tr><tr><th>_af0b9d6b-febb-4c07-96c3-1d2a946333c3</th><td>/conf/core/asynchronous</td></tr><tr><th>_8a32e041-030d-4aac-8bc1-9c4c9cbe94b6</th><td>/conf/core/pubsub</td></tr><tr><th>ats_modspec</th><td>/conf/core/modspec</td></tr><tr><th>ats_publishing</th><td>/conf/core/publishing</td></tr><tr><th>ats_api</th><td>/conf/core/api</td></tr><tr><th>ats_edr-conformant</th><td>/conf/core/edr-conformant</td></tr><tr><th>ats_root</th><td>/conf/core/root</td></tr><tr><th>ats_requirements-set</th><td>/conf/core/requirements-set</td></tr><tr><th>ats_parameter-names</th><td>/conf/core/parameter-names</td></tr><tr><th>ats_collectionid</th><td>/conf/core/collectionid</td></tr><tr><th>ats_extent</th><td>/conf/core/extent</td></tr><tr><th>ats_output-format</th><td>/conf/core/output-format</td></tr><tr><th>ats_paging-support</th><td>/conf/core/paging-support</td></tr><tr><th>ats_status-codes</th><td>/conf/core/status-codes</td></tr><tr><th>ats_links</th><td>/conf/core/links</td></tr><tr><th>ats_data-query</th><td>/conf/core/data-query</td></tr><tr><th>ats_data-query-area</th><td>/conf/core/data-query-area</td></tr><tr><th>ats_data-query-corridor</th><td>/conf/core/data-query-corridor</td></tr><tr><th>ats_data-query-cube</th><td>/conf/core/data-query-cube</td></tr><tr><th>ats_data-query-instances</th><td>/conf/core/data-query-instances</td></tr><tr><th>ats_data-query-position</th><td>/conf/core/data-query-position</td></tr><tr><th>ats_data-query-radius</th><td>/conf/core/data-query-radius</td></tr><tr><th>ats_data-query-trajectory</th><td>/conf/core/data-query-trajectory</td></tr><tr><th>ats_asynchronous</th><td>/conf/core/asynchronous</td></tr><tr><th>ats_pubsub</th><td>/conf/core/pubsub</td></tr></tbody></table><presentation-metadata><name>TOC Heading Levels</name><value>2</value></presentation-metadata><presentation-metadata><name>HTML TOC Heading Levels</name><value>2</value></presentation-metadata><presentation-metadata><name>DOC TOC Heading Levels</name><value>2</value></presentation-metadata><presentation-metadata><name>PDF TOC Heading Levels</name><value>2</value></presentation-metadata></metanorma-extension>
<boilerplate><copyright-statement>

<clause id="_copyright_notice" obligation="normative">
<title>Copyright notice</title>
<p id="_57ad8640-3b0c-b487-62ff-22dc5568f09a" align="center">Copyright © 2025 Open Geospatial Consortium<br/>
To obtain additional rights of use, visit
<link target="https://www.ogc.org/legal"/></p>
</clause>

<clause id="_note" obligation="normative">
<title>Note</title>
<p id="_11e88dba-9912-1a89-a82d-7291bf232191" align="left">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.</p>

<p id="_15067213-c07b-cba0-7e18-395ab2e00ab3" align="left">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.</p>
</clause>
</copyright-statement>

<license-statement>

<clause id="_license_agreement" obligation="normative">
<title>License Agreement</title>
<p id="_f5fe34fd-12e2-2bb7-8cd6-9d4cffa96538">Use of this document is subject to the license agreement at <link target="https://www.ogc.org/license"/></p>
</clause>
</license-statement>

<legal-statement>

<clause id="_notice_for_drafts" obligation="normative">
<title>Notice for Drafts</title>
<p id="_09caafd2-d047-3050-9095-b3f182faf86f">This document is not an OGC Standard. This document is distributed for review and comment. This document is subject to change without notice and may not be referred to as an OGC Standard.</p>

<p id="_d80fd0eb-fbfd-dec3-0ddb-92472f4d5fcf">Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.</p>
</clause>
</legal-statement>

<feedback-statement>

<clause id="boilerplate-standard-feedback" obligation="normative">
<p id="_bb5602d2-6eb1-e557-e221-499759fe237f">Suggested additions, changes and comments on this document are welcome and encouraged. Such suggestions may be submitted using the online change request form on OGC web site: <link target="http://ogc.standardstracker.org/"/></p>
</clause>
</feedback-statement>
</boilerplate><preface><abstract id="_abstract"><title>Abstract</title><p id="_1d0b2535-14aa-e7af-3c57-b4936b11370c">The OGC API-EDR Part 1: Core standard was designed to be flexible and straightforward to understand and implement for Web developers. As it is being widely implemented, various groups of users have identified the need to restrict some of the flexibility to improve interoperability between different implementations of both servers and clients within their domains of interest. A set of these stricter specifications for a specific domain of user is a Profile.</p>

<p id="_ce506b74-4b60-5129-7f75-59443b8bc43a">The aim of the OGC API-EDR Part 3: Service Profile Support standard is to ensure interoperability between API implementations by defining a standard approach to specifying a Profile of OGC API-EDR Part 1: Core.</p>

<p id="_f6980407-3d98-ec9a-d194-ac83ab7d1dc7">To ensure consistency, providers must adopt a standardised approach when defining <tt>Collections</tt> and their <tt>Instances</tt>. The OGC API-EDR Profile outlines a set of requirements that an EDR API implementation must meet to be considered compliant with the service profile.</p>
</abstract><foreword id="_9273cccd-0579-a24f-8966-518fdd8f437b" obligation="informative">
<title>Preface</title>
<p id="_8ba0feed-acfd-bc4f-1d13-2e75dab20f9a">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.</p>

<p id="_25f6b7a1-8657-2655-9eff-47df179631e0">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.</p>
</foreword><clause id="_security_considerations" type="security" obligation="informative">
<title>Security considerations</title>
<p id="_4bfc9ff4-0427-16f3-2dce-96ac965b7eae">No security considerations have been made for this Standard.</p>
</clause><submitters id="_submitters">
<title>Submitters</title>
<p id="_c4485abb-cbc5-a7e8-5e00-c9c58a531cc9">All questions regarding this submission should be directed to the editor or the submitters:</p>

<table id="_2fe1fe73-6300-d7ce-83fc-ee1586ecdb5c" unnumbered="true"><tbody><tr><td valign="middle" align="left"><strong>Name</strong></td>
<td valign="middle" align="left"><strong>Affiliation</strong></td>
</tr><tr><td valign="middle" align="left">Mark Burgoyne</td>
<td valign="middle" align="left">Met Office</td>
</tr><tr><td valign="middle" align="left">Charles Heazel</td>
<td valign="middle" align="left">Heazel Tech</td>
</tr><tr><td valign="middle" align="left">Chris Little</td>
<td valign="middle" align="left">Met Office</td>
</tr></tbody>
</table>
</submitters><submitters id="_contributors" type="contributors">
<title>Contributors</title>
<p id="_621c4f5b-26a9-89f7-0840-938819089a27">Additional contributors to this Standard include the following:</p>

<p id="_45f943af-cadd-6488-bff5-c1c1376f2096">Individual name(s), Organization</p>
</submitters></preface><sections>

<foreword id="_preface" obligation="informative">
<title>Preface</title>
<note id="_228b39c3-f42b-4850-f232-48ad0140f6bc"><p id="_1f97aa3e-c605-89cf-933a-92d05cf9da9d">The aim of the OGC API-EDR Part 3: Service Profile Support standard is to ensure interoperability between EDR API implementations by defining a standard approach to specifying a Profile of OGC API-EDR Part 1: Core. To achieve this, it is essential that service providers use a consistent approach when defining <tt>Collections</tt> and <tt>Instances</tt> of <tt>Collections</tt>. An OGC API-EDR Profile will specify a set of Requirements that an EDR API implementation must support to be a profile-Markcompliant implementation.</p>

<p id="_82f2f913-eb5a-5768-b2c6-b77dc3f86a85">This standard specifies Requirements and Recommendations for a Profile definition, and also conforms to the OGC Mod Spec Standard.</p>

<p id="_77bb0183-a07e-8d52-541d-a2f0857b005b">It is envisaged that this approach may be useful for other OGC API Standards.</p>

<p id="_2398bdcf-414b-5930-5a6b-f216f19fedb5">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.</p>

<p id="_aa9164e3-80f9-2548-0101-ef95e7165ad2">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.</p>
</note>
</foreword>




<clause id="_scope" type="scope" obligation="normative">
<title>Scope</title>
<note id="_798425b1-1875-e033-46f3-1991b2f6ce63"><p id="_fd7388bc-0f4f-42c8-eb23-c0e0e747bd52">This Standard defines how to specify a Profile of the OGC API-EDR Part 1: Core Standard. It only defines restrictive profiles, not profiles that extend the EDR API Standard with new functionality, which may not maintain backward compatibility with the EDR API.</p>

<p id="_6432e486-8f24-b756-75c2-5b586ede507e">Some parts of the specification could be used by other OGC APIs.</p>

<p id="_0a36703d-1da8-9bf1-bdf2-243207aa41b0">The restrictions are defined by using JSON Schema fragments, which can be formally tested.</p>
</note>
</clause>

<clause id="_conformance" type="conformance" obligation="normative">
<title>Conformance</title>
<p id="_d6370777-3cd2-7633-efd3-9dac158b4764">Conformance to the OGC API-EDR-Part 3 Standard (this document) by a profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> can be tested by inspection. The test suite is provided in <xref target="annex-A"/>.</p>

<p id="_c35e63bb-455c-12f2-3e60-53ccbdb84ea9">This Standard contains normative language and thus places requirements on conformance, or mechanism for adoption, of candidate standards to which this Standard applies. In particular:</p>

<ul id="_fc75ba6f-f65d-c2d9-c6e3-8e658661f16f"><li><p id="_ec629680-dffe-e6f2-ccd7-02ba2f463ce5"><xref target="core-section">OGC API-EDR Requirements Class: Core</xref> specifies the core requirements which shall be met by all standards claiming conformance to this Standard.</p>
</li>
</ul>

<p id="_eb96d090-204c-bf74-57e9-ebebe7d898af">Annex B provides guidance on how to build a profile of an ISO Standard. While not normative, following these practices increases the likelihood that the suite of OGC API-EDR Standards and profiles will form an interoperable whole.</p>
</clause>



<terms id="terms_and_definitions-section" obligation="normative">
<title>Terms and definitions</title><p id="_7fe04b5b-db41-5d9b-ebe1-463b3a0c16c9">This document uses the terms defined in <link target="https://portal.ogc.org/public_ogc/directives/directives.php">OGC Policy Directive 49</link>, which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this document and OGC documents do not use the equivalent phrases in the ISO/IEC Directives, Part 2.</p>
<p id="_e0235fe8-8273-26b4-faeb-a580ad58929f">This document also uses terms defined in the OGC Standard for Modular specifications (<link target="https://portal.opengeospatial.org/files/?artifact_id=34762">OGC 08-131r3</link>), also known as the ‘ModSpec’. The definitions of terms such as standard, specification, requirement, and conformance test are provided in the ModSpec.</p>
<p id="_1448dc16-8929-d666-6525-0249826c75e3">For the purposes of this document, the following additional terms and definitions apply.</p>

<term id="collection-definition"><preferred><expression>
<name>Collection</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_f9b4f796-369f-ef02-440b-86591d58f89f">Body of resources that belong or are used together. An aggregate, set, or group of related resources.</p></verbal-definition></definition>


 <termsource status="identical" type="authoritative"><origin bibitemid="OGC20-024" type="inline" citeas="OGC&amp;#xa0;20-024">OGC 20-024</origin>
</termsource></term>

<term id="term-Profile"><preferred><expression>
<name>Profile</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_1a55bdb9-e768-a05a-3ec9-b392aa485d37">An implementation case of a more general standard or set of standards.</p></verbal-definition></definition>

 </term>

<term id="conformance_module-definition"><preferred><expression>
<name>Conformance Module; Conformance Test Module</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_bf174930-13a5-11ad-58d5-ba88c458de20">A set of related conformance classes and their associated components.</p></verbal-definition></definition>




 <termnote id="_35476767-fd25-8150-ceeb-c38d225e77e0"><p id="_b568625c-e94d-baa3-cafa-14f3039ffb8d">When no ambiguity is possible, the word <tt>test</tt> may be omitted. i.e. conformance test module is the same as conformance module. Conformance modules may be nested in a hierarchical way.</p>
</termnote><termsource status="identical" type="authoritative"><origin bibitemid="ogc-modspec" type="inline" citeas="OGC&amp;#xa0;08-131r3">OGC 08-131r5</origin>
</termsource></term>

<term id="conformance-class-definition"><preferred><expression>
<name>Conformance Class; Conformance Test Class</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_84474ede-a1f8-4767-6295-ae21388699c0">A set of conformance tests that must be passed to receive a single certificate of conformance.</p></verbal-definition></definition>




 <termnote id="_6dc8d4c2-7846-b1c1-2453-e63097e29703"><p id="_4d17f26e-4b4c-1c92-2941-f874ad5f2570">When no ambiguity is possible, the word <em>test</em> may be left out, so conformance test class maybe called a conformance class.</p>
</termnote><termsource status="identical" type="authoritative"><origin bibitemid="ogc-modspec" type="inline" citeas="OGC&amp;#xa0;08-131r3">OGC 08-131r5</origin>
</termsource></term>

<term id="conformance_test-definition"><preferred><expression>
<name>Conformance Test</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_2f05c7d3-a8ea-90df-6f92-7acc6b2cf30c">A test, abstract or real, of one or more requirements contained within a standard, or set of standards.</p></verbal-definition></definition>


 <termsource status="identical" type="authoritative"><origin bibitemid="ogc-modspec" type="inline" citeas="OGC&amp;#xa0;08-131r3">OGC 08-131r5</origin>
</termsource></term>

<term id="requirement-definition"><preferred><expression>
<name>Requirement</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_40e4e1d0-d58d-cb5f-ffa1-7940efeee995">Expression in the content of a standard conveying criteria to be fulfilled if compliance with the standard is to be claimed and from which no deviation is permitted.</p></verbal-definition></definition>


 <termsource status="identical" type="authoritative"><origin bibitemid="ogc-modspec" type="inline" citeas="OGC&amp;#xa0;08-131r3">OGC 08-131r5</origin>
</termsource></term>

<term id="requirements_class-definition"><preferred><expression>
<name>Requirements Class</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_85ef9e48-e19f-4c0a-4634-03bec4086e90">An aggregate of requirements with a single standardization target type that must all be satisfied to pass a conformance test Class.</p></verbal-definition></definition>


 <termsource status="identical" type="authoritative"><origin bibitemid="ogc-modspec" type="inline" citeas="OGC&amp;#xa0;08-131r3">OGC 08-131r5</origin>
</termsource></term>

<term id="requirements_module-definition"><preferred><expression>
<name>Requirements Module</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_2e171627-1798-8bf9-f082-1c67a6b2daa9">A set of related requirements classes and their associated components.</p></verbal-definition></definition>


 <termsource status="identical" type="authoritative"><origin bibitemid="ogc-modspec" type="inline" citeas="OGC&amp;#xa0;08-131r3">OGC 08-131r5</origin>
</termsource></term>

<term id="standardization_goal-definition"><preferred><expression>
<name>Standardization Goal</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_356fe734-0345-f9a1-9a02-812ecbc29651">A concise statement of the problem that the standard helps address and the strategy envisioned for achieving a solution. This strategy typically identifies real-world entities that need to be modified or constrained. At the abstract level, those entities are the Standardization Target Types.</p></verbal-definition></definition>


 <termsource status="identical" type="authoritative"><origin bibitemid="ogc-modspec" type="inline" citeas="OGC&amp;#xa0;08-131r3">OGC 08-131r5</origin>
</termsource></term>

<term id="standardization_target-definition"><preferred><expression>
<name>Standardization Target</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_07657028-87ed-d4a4-647d-27afd59c668b">Entity to which some requirements of a standard apply.</p></verbal-definition></definition>




 <termnote id="_4d8aa576-84c8-dcef-3e9e-957f8184822a"><p id="_a7bff4a5-31d3-18bb-f714-7a229a7438b0">The standardization target is the entity which may receive a certificate of conformance for a requirements class.</p>
</termnote><termsource status="identical" type="authoritative"><origin bibitemid="ogc-modspec" type="inline" citeas="OGC&amp;#xa0;08-131r3">OGC 08-131r5</origin>
</termsource></term>

<term id="standardization_target_type-definition"><preferred><expression>
<name>Standardization Target Type</name>
</expression>
</preferred>
<definition><verbal-definition><p id="_561461dd-a599-7983-9b97-04172a9db7f7">Type of entity or set of entities to which the requirement of a standard apply.</p></verbal-definition></definition>




 <termnote id="_26822cd2-2fb9-682f-37d0-ca1621436f80"><p id="_69c8cec5-31b4-798f-ca2b-de9df8c4f363">For example, the standardization target type for The <link target="https://docs.ogc.org/is/17-069r4/17-069r4.html">OGC API – Features Standard</link> are Web APIs. The standardization target type for the <link target="https://docs.ogc.org/is/15-113r6/15-113r6.html">CDB Standard</link> is “datastore”. It is important to understand that a standard’s root standardization target type can have sub-types, and that there can be a hierarchy of target types. For example, a Web API can have sub types of client, server, security, and so forth. As such, each requirements class can have a standardization target type that is a sub-type of the root.</p>
</termnote><termsource status="identical" type="authoritative"><origin bibitemid="ogc-modspec" type="inline" citeas="OGC&amp;#xa0;08-131r3">OGC 08-131r5</origin>
</termsource></term>
</terms>

<clause id="_conventions" obligation="normative">
<title>Conventions</title>
<p id="_f287e0a4-ca0e-ef98-6e01-5d09472b62aa">This sections 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.</p>

<clause id="_identifiers" obligation="normative">
<title>Identifiers</title>
<p id="_34025c5d-dda4-c61f-5774-94f51d938b80">The normative provisions in this standard are denoted by the URI</p>

<p id="_f0191874-4eeb-2c92-18f2-f1367cf61a60"><tt><link target="http://www.opengis.net/doc/spec/ogcapi-edr-3/1.0"/></tt></p>

<p id="_52250454-5ac3-4fce-7c83-eb454adf6103">All requirements and conformance tests that appear in this document are denoted by partial URIs which are relative to this base.</p>

<clause id="_shortcuts" obligation="normative">
<title>Shortcuts</title>
<p id="_6e38f106-b2aa-5b23-d51e-f7477fad3baa">In the interest of readability, the following terms will be used as shorthand for more complex text:</p>

<ul id="_41c62207-76d4-08c4-f110-41226824c914"><li><p id="_14619741-b680-be7f-fe1a-67e6207a4f74">Profile: A Profile is a standard or specification which restricts and/or extends an existing standard. This standard defines the rules for creating a profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval</eref> Standard.  The term “Profile” will be used in this document as shorthand for “profile of the OGC API — Environmental Data Retrieval Standard”.</p>
</li>
<li><p id="_e67ec228-9912-7adf-503e-14d9297071c6">OGC API-EDR: The term OGC API-EDR will be used in this document as shorthand for the term “OGC API — Environmental Data Retrieval Standard”</p>
</li>
</ul>
</clause>
</clause>
</clause>

<clause id="context-section" obligation="informative">
<title>Context</title>
<clause id="_standardization_goal" obligation="informative">
<title>Standardization Goal</title>
<p id="_4e0e63c2-c404-998d-efa0-d7b024d6a47b">The goal of this Standard is to ensure interoperabilty between implementations of the OGC API — Environmental Data Retrieval Standard (OGC API-EDR).</p>

<p id="_9f09ac23-828f-70b8-34ca-7941a0019ec8">The OGC API-EDR Standard does not try to address every possible application domain. Rather, it provides a foundation which can be tailored for a specific domain. The result of this tailoring is a domain specific “profile” of the EDR API Standard.</p>

<p id="_c2538b64-072b-5c50-be88-d4b657acc171">A significant risk to this approach is that, in the act of profiling, interoperabilty will be compromized. This risk can be mitigated by establishing rules for how the OGC API-EDR Standard can be profiled. The goal of this Standard is to define a set of rules sufficient to ensure interoperability while retaining the adaptability needed to support domain-specific requirements.</p>
</clause>

<clause id="_standardization_target_type" obligation="informative">
<title>Standardization Target Type</title>
<p id="_1e5d973d-fdf4-9b70-d0b7-69dccdf42648">The <xref target="standardization_target_type-definition">Standardization Target Type</xref> for this Standard is the set of standards and specifications which profile the OGC API — Environmental Data Retrieval Standard.</p>

<p id="_d5773abb-f434-54fd-7dc1-bdf41acbb74e">It is important to understand that:</p>

<ul id="_2ecbf178-f787-29f6-b122-269172ee920c"><li><p id="_4187d366-cede-154d-d70f-fb73576592a8">This Standard is a standard for writing standards. It does not address the EDR API implementation.</p>
</li>
<li><p id="_49fbba84-a4be-7c03-d933-08bc3eb33048">This Standard is a profile of the <eref type="inline" bibitemid="ogc-modspec" citeas="OGC 08-131r3">OGC ModSpec Model — Part 1: Core — A Standard for Designing and Writing Modular Standards</eref> (ModSpec).</p>
</li>
<li><p id="_3c5c5035-7182-5826-c969-2564c39d1835">Implementations of this Standard are Profiles of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>
</li>
<li><p id="_071ee7f4-031f-0a7f-04c1-cfffa3d22f08">The profiling model used is defined in <eref type="inline" bibitemid="iso19106" citeas="ISO 19106">ISO 19106:2004 Geographic information — Profiles</eref></p>
</li>
</ul>
</clause>

<clause id="_profiles" obligation="informative">
<title>Profiles</title>
<p id="_8b340be8-2f72-e8aa-0ba6-69c74a1b45ed"><eref type="inline" bibitemid="iso19106" citeas="ISO 19106">ISO 19106:2004 Geographic information — Profiles</eref> is the ISO TC211 Standard for developing profiles of ISO TC211 Standards. This standard defines two conformance classes. These conformance classes can be thought of as two classes of profile.</p>

<ul id="_7d9678ca-ee63-b606-e9b6-05adee0c432f"><li><p id="_4aeb3139-7650-9a49-04d6-04b7fb136f53">A Class 1 profile is a pure subset of the ISO geographic information standards.</p>
</li>
<li><p id="_016f1f0f-e1cf-da99-36fc-12228ff102ed">A Class 2 profile has the same basis as Class 1 but includes extensions within the contexts permitted in the base standard.  Additionally, a Class 2 profile permits the profiling of non-ISO geographic information standards as part of the profile.</p>
</li>
</ul>

<p id="_bee2dff4-cd8b-c58b-c630-2f477fc27a4c">In other words, a Class 1 profile restricts the base standard while a Class 2 profile both restricts and extends the base standard.</p>

<p id="_2e9bd52c-1562-b501-b240-a16d5d8c88c7">Both Class 1 and Class 2 Profiles of the OGC API-EDR Standard are allowed.</p>

<p id="_bee24124-fef3-935f-579b-bbc1170cdaeb">Detailed guidance on how to create a valid Class 1 and Class 2 profile are provided in Annex B.</p>
</clause>
</clause>

<clause id="core-section" obligation="normative">
<title>Requirements Class Core</title>
<requirement id="req_class_core" model="ogc" type="class">
<title>Requirements Class ‘Core’</title><identifier>http://www.opengis.net/spec/ogcapi-edr-3/1.0/req/req-class-core</identifier><classification><tag>target-type</tag><value>OGC API-EDR Profile Standard</value></classification><requirement id="_49b8a711-0949-7471-edd2-7821a4138f87" model="ogc" type="general"> <identifier>/req/core/modspec</identifier></requirement><requirement id="_b5a0f84b-c5ab-5998-2d79-1bcf5b2edd50" model="ogc" type="general"> <identifier>/req/core/edr-conformant</identifier></requirement><requirement id="_9a781342-1cc9-e6d6-956f-addb7666de31" model="ogc" type="general"> <identifier>/req/core/parameter-names</identifier></requirement><requirement id="_bfb998ec-caf0-f6df-e637-5357ca080650" model="ogc" type="general"> <identifier>/req/core/root</identifier></requirement><requirement id="_ecfd5ee0-3458-23a8-1d36-d67179c7dcb7" model="ogc" type="general"> <identifier>/req/core/root-description</identifier></requirement><requirement id="_f04a2100-d0dc-aba2-503d-c38a78cb9785" model="ogc" type="general"> <identifier>/req/core/root-keywords</identifier></requirement><requirement id="_670fd96e-6a9b-e512-6dd4-4d4994579cb2" model="ogc" type="general"> <identifier>/req/core/root-provider</identifier></requirement><requirement id="_9a030600-0a8e-1101-c5e2-6afcdf2b6a2f" model="ogc" type="general"> <identifier>/req/core/root-contact</identifier></requirement><requirement id="_bdd6c11f-1dfd-9ff3-6bc4-1ac9b5940fbc" model="ogc" type="general"> <identifier>/req/core/root-links</identifier></requirement><requirement id="_a0c819e3-e613-106c-ad96-a95a3e0dde1d" model="ogc" type="general"> <identifier>/req/core/publishing</identifier></requirement><requirement id="_18386ed2-9fcc-7800-7a50-7f581ae38a40" model="ogc" type="general"> <identifier>/req/core/openapi</identifier></requirement><requirement id="_e22e6199-d7cd-4144-2f93-a60b05febb8b" model="ogc" type="general"> <identifier>/req/core/api</identifier></requirement><requirement id="_a4b4d8fb-4d4a-3b41-dabe-8d20da8b933d" model="ogc" type="general"> <identifier>/req/core/requirements-set</identifier></requirement><requirement id="_09421fad-f303-80d5-0078-13acdf8153d3" model="ogc" type="general"> <identifier>/req/core/collectionid</identifier></requirement><requirement id="_bbf0b161-fa0e-f12e-aa65-306895e2a90d" model="ogc" type="general"> <identifier>/req/core/extent</identifier></requirement><requirement id="_090677d5-a89b-6340-1b94-98da86509bc1" model="ogc" type="general"> <identifier>/req/core/extent-spatial</identifier></requirement><requirement id="_eb0337c6-dba4-1b28-e5ec-427a110d7ce6" model="ogc" type="general"> <identifier>/req/core/extent-temporal</identifier></requirement><requirement id="_2fad2b50-0a03-6104-8a3b-dd850c9bb808" model="ogc" type="general"> <identifier>/req/core/extent-vertical</identifier></requirement><requirement id="_15c4051e-a2da-e62f-44ed-8376861c61c7" model="ogc" type="general"> <identifier>/req/core/extent-custom</identifier></requirement><requirement id="_0a097114-44b1-97fc-9947-63322623fde7" model="ogc" type="general"> <identifier>/req/core/data-query</identifier></requirement><requirement id="_33ea41e5-cab8-a278-840d-dcb7f417b001" model="ogc" type="general"> <identifier>/req/core/output-format</identifier></requirement><requirement id="_0f88c40f-66cc-424a-eace-e3b0a23efa5b" model="ogc" type="general"> <identifier>/req/core/data-query-area</identifier></requirement><requirement id="_692f5090-6cf7-55e8-a915-3a3a3438b594" model="ogc" type="general"> <identifier>/req/core/data-query-corridor</identifier></requirement><requirement id="_cf4977c5-288b-8b6b-0873-4e196c54c12b" model="ogc" type="general"> <identifier>/req/core/data-query-cube</identifier></requirement><requirement id="_0f3b4eb2-a9de-e883-feb8-9ffadd30e401" model="ogc" type="general"> <identifier>/req/core/data-query-instances</identifier></requirement><requirement id="_df08e497-7b82-8cf6-27ee-d470d3449e47" model="ogc" type="general"> <identifier>/req/core/instanceid</identifier></requirement><requirement id="_4de56705-b534-8e36-9502-942fd38beeae" model="ogc" type="general"> <identifier>/req/core/paging-support</identifier></requirement><requirement id="_5580ec66-3bc8-132c-554f-bf4a7b42fea2" model="ogc" type="general"> <identifier>/req/core/data-query-locations</identifier></requirement><requirement id="_56546587-b3d7-0488-6ca7-db65eccd6cca" model="ogc" type="general"> <identifier>/req/core/data-query-position</identifier></requirement><requirement id="_18ad07f4-a4f7-ee77-033d-5b62813ef4f3" model="ogc" type="general"> <identifier>/req/core/data-query-radius</identifier></requirement><requirement id="_87b266e2-624a-6a7b-a711-4513d81e2f9a" model="ogc" type="general"> <identifier>/req/core/data-query-trajectory</identifier></requirement><requirement id="_dcc64663-e1fe-c14c-7c76-7cd6c5399e80" model="ogc" type="general"> <identifier>/req/core/status-codes</identifier></requirement><requirement id="_8e2507c5-5e4d-8fd7-a2dd-f58d5c0cded8" model="ogc" type="general"> <identifier>/req/core/links</identifier></requirement><requirement id="_0e19939c-67fc-8347-1174-6bf336a64277" model="ogc" type="general"> <identifier>/req/core/asynchronous</identifier></requirement><requirement id="_58802963-dbd3-4297-2389-dd7a9243d589" model="ogc" type="general"> <identifier>/req/core/pubsub</identifier></requirement>

</requirement>

<clause id="_profiling_requirements" obligation="normative">
<title>Profiling Requirements</title>
<p id="_f0df7303-5e12-fcfa-0747-b0cab8ec977f">Profile is conformant with the ModSpec</p>

<requirement id="req_class_core_modspec" model="ogc"> <identifier>/req/core/modspec</identifier><description><p id="_201c1aae-0198-dbf4-2748-5071e6d932f1">A profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> be conformant to the <eref type="inline" bibitemid="ogc-modspec" citeas="OGC 08-131r3">OGC Modular Specification</eref>.</p>
</description>
</requirement>

<p id="_59b1b50b-2bfb-4be2-bc9f-cd4f9bdade23">Implementations of the Profile are conformant with OGC API-EDR Part 1</p>

<requirement id="req_class_core_edr-conformant" model="ogc"> <identifier>/req/core/edr-conformant</identifier><description><p id="_64bb6c42-bfd4-5872-0c4d-af8d43c27d26">A profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> require that a conformant implementation (<xref target="standardization_target-definition">standardization target</xref>) of that profile demonstrate conformance to the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref>.</p>
</description>
</requirement>

<p id="_0766753b-9a5b-4efb-d2b0-ef5de7b0b35c">Profiles often focus on restricting the values of Path parameters. A Profile should clearly specify the requirements for these restrictions</p>

<requirement id="req_core_parameter-names" model="ogc"> <identifier>/req/core/parameter-names</identifier><description><p id="_940f04df-8776-19b0-847d-d0ae9da098c7">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>restricts</em> the valid values and definitions of parameter_names, then,</p>
</description><component class="part"><p id="_b11e59b0-8ace-f24f-1403-ee76a988f7b9">Requirements <em>SHALL</em> be defined which specify the parameter_names and their definitions.</p>
</component><component class="part"><p id="_f5a13740-9467-b131-a807-bb9de95f6c95">The parameter_names requirement definitions <em>SHALL</em> specify the required parameter_names objects in full including:</p>
<ul id="_26b5013a-4217-5dbf-66df-6440da2f96a5"><li><p id="_c89999a7-16b8-0e02-dd8f-5b6dc12ccb4b">name,</p>
</li>
<li><p id="_939fe4d2-03d8-a5a3-aaf7-13434bf5e8e8">unit,</p>
</li>
<li><p id="_de22b0c1-b601-d749-3674-e1f257118cf8">data type and</p>
</li>
<li><p id="_1b8aceca-dafa-3072-9b68-b879771b4ded">measurement duration</p>
</li>
</ul>
</component>

<description><p id="_e5b4a706-9db0-d756-f39a-9f2b9bed733f">for example:</p><sourcecode id="_20324659-1a13-fe0e-9814-a0a6eeca3360" lang="JSON">"parameter_names": {
    "prmsl": {
        "type": "Parameter",
        "description": "Air pressure at sea level",
        "unit": {
            "label": "Pascals",
            "symbol": {
                "value": "Pa",
                "type": "https://qudt.org/vocab/unit/PA"
            }
        },
        "observedProperty": {
            "id": "http://codes.wmo.int/grib2/codeflag/4.2/_0-3-1",
            "label": "MSL Pressure"
        }
    },
    "t2m": {
        "type": "Parameter",
        "description": "Air temperature at 2m",
        "unit": {
        "label": "Kelvin",
        "symbol": {
            "value": "K",
            "type": "https://qudt.org/vocab/unit/K"
        }
        },
        "observedProperty": {
        "id": "http://codes.wmo.int/grib2/codeflag/4.2/0-0-0",
        "label": "Air temperature at 2m"
        }
    },
    "dd": {
        "type": "Parameter",
        "description": "Wind Direction",
        "unit": {
            "label": "degree true",
            "symbol": {
                "value": "°",
                "type": "https://qudt.org/vocab/unit/DEG"
            }
        },
        "observedProperty": {
            "id": "http://codes.wmo.int/grib2/codeflag/4.2/0-2-0",
            "label": "Wind Direction"
        },
        "measurementType": {
            "method": "mean",
            "duration": "-PT10M"
        }
    },
    "ff": {
        "type": "Parameter",
        "description": "10m Wind Speed",
        "unit": {
            "label": "m/s",
            "symbol": {
              "value": "ms-1",
              "type": "https://qudt.org/vocab/unit/M/s"
            }
        },
        "observedProperty": {
            "id": "http://codes.wmo.int/grib2/codeflag/4.2/0-2-1",
            "label": "10m Wind Speed"
        },
        "measurementType": {
            "method": "mean",
            "duration": "-PT10M"
        }
    }
}</sourcecode></description>

</requirement>

<p id="_23ec4346-b787-0b38-db02-8a6100cf6805">A Profile must be interoperable with other OGC API-EDR data providers. Any valid OGC API-EDR document should be valid under the profile. That means:</p>

<ul id="_8ae2639d-3fcd-f338-b697-eda2f516a7e2"><li><p id="_69fcca56-e8bb-1fba-5572-3637b07b5096">If a data element is valid for OGC API-EDR, then it should not be prohibited under the profile</p>
</li>
<li><p id="_1ba6fd7b-8955-42e5-4a98-e30d432a67d0">Custom query elements defined by a Service Profile <em>SHALL</em> be optional, not mandatory, for data queries.</p>
</li>
<li><p id="_1890b70f-80f3-a4c0-b458-0d2715bd74ff">It is valid for a profile to prohibit the production and population of OGC API-EDR optional elements by data providers within the profile’s domain.</p>
</li>
</ul>
</clause>

<clause id="_platform_resources" obligation="normative">
<title>Platform Resources</title>
<p id="_a4afbc51-8fbd-56c6-7604-065c0017a998">OGC API — Common defines a set of common capabilities which are applicable to any OGC Web API. Those capabilities provide the platform upon which resource-specific APIs can be built. This section describes those capabilities and any modifications needed to better support spatio-temporal data resources.</p>

<table id="_f7a616a4-2e2a-3dd3-380d-6a8a6673e642" width="100%">
<name>Platform Resource Paths</name>
<thead><tr><th valign="middle" align="left">PATH TEMPLATE</th>
<th valign="middle" align="left">METHOD</th>
<th valign="middle" align="left">RESOURCE</th>
</tr></thead>
<tbody><tr><td valign="middle" align="left">{root}/</td>
<td valign="middle" align="left">GET</td>
<td valign="middle" align="left">Landing page</td>
</tr><tr><td valign="middle" align="left">{root}/api</td>
<td valign="middle" align="left">GET</td>
<td valign="middle" align="left">API Description (optional)</td>
</tr></tbody>
<tfoot><tr><td valign="middle" align="left">{root}/conformance</td>
<td valign="middle" align="left">GET</td>
<td valign="middle" align="left">Conformance Classes</td>
</tr></tfoot>
</table>

<p id="_3adf5688-7de9-5e1d-ba40-86a4c4437375">Where: {root} = Base URI for the API server</p>

<clause id="_api_landing_page" obligation="normative">
<title>API Landing Page</title>
<p id="_3a8a3b12-2d9f-8833-5790-207286f33068">Path = {root}/</p>

<p id="_28f80c2b-2a9e-8b65-338d-0914fad63d7c">Dependencies</p>

<ul id="_4fd88f4c-ea74-14db-37bf-330d2ef0e088"><li><p id="_ec1db2be-202c-0a22-8792-31ae2c142222"><eref type="inline" bibitemid="OGC19-072" citeas="OGC 19-072">OGC API — Common — Part 1: Core</eref></p>
</li>
<li><p id="_c8346086-fc5c-e480-07c9-dde0f6298087"><eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>
</li>
</ul>

<p id="_d0069fd3-a4bf-37c9-0b49-3dc19c88a5da">The landing page provides links that support exploration of the resources offered via the API. The most important component of a landing page is a list of links. The Landing Page resource is initially defined in the Core conformance class of the <eref type="inline" bibitemid="OGC19-072" citeas="OGC 19-072">OGC API — Common — Part 1</eref> Standard. The <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> does not make any changes to this definition.</p>

<p id="_875aa6ec-8740-d13c-f7ad-e9b566da871c">The normative JSON Schema for an EDR Landing Page is defined in the <link target="https://schemas.opengis.net/ogcapi/edr/1.1/openapi/schemas/core/landingPage.yaml">LandingPage.yaml</link> document. While this schema provides a rich body of information about the API, only the Links property is required.</p>

<p id="_8737c003-a565-8e8c-95b5-b4027c035bbb">Profiles of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> are expected to provide a richer description of the API. The additional content that Profiles should mandate is defined in the following requirements.</p>

<requirement id="req_core_root" model="ogc"> <identifier>/req/core/root</identifier><description><p id="_29661140-23ff-fd5f-0a9e-dbc5373b348c">The OGC API-EDR Landing Page schema only requires the <tt>links</tt> property, however, a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> require the following additional properties and content:</p>
</description><component class="part"><p id="_52c3e40b-4bfb-006a-2f60-a45d8bd2897b">The <tt>Title</tt> property <em>SHALL</em> be required and populated</p>
</component><component class="part"><p id="_fc56a4b1-1c89-d3db-8ccf-d1b9bfe78be9">The <tt>Links</tt> property <em>SHALL</em> define the links that SHALL be included in the Root response and <em>SHALL</em> be populated with href and rel properties.</p>
</component>
</requirement>

<recommendation id="_8dbeda3a-d03d-175a-e7b9-388203977ecf" model="ogc"> <identifier>/rec/core/root</identifier><description><p id="_6b6e2d03-3961-116c-5511-d2e9b7cd8ed9">The OGC API-EDR Landing Page schema only requires the <tt>links</tt> property, however, a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHOULD</em> require the following additional properties:</p>
</description><component class="part"><p id="_698c5472-8b41-7e72-8142-6cde05b9ad90">The <tt>Description</tt> property <em>SHOULD</em> be required</p>
</component><component class="part"><p id="_68b0df92-8c59-124c-4e5f-f74b7da634f8">The <tt>Keywords</tt> property <em>SHOULD</em> be required</p>
</component><component class="part"><p id="_fdaee1e0-eae5-39e7-0250-24fd147921e4">The <tt>Provider</tt> property <em>SHOULD</em> be required and populated with the name and url properties</p>
</component><component class="part"><p id="_aab0bf08-2bcd-5959-c412-e68c4a269300">The <tt>Contact</tt> property <em>SHOULD</em> be required and populated with the with the email properties</p>
</component>
</recommendation>

<requirement id="_ddcb0206-7445-b337-7a3d-8c0a830d7108" model="ogc"> <identifier>/req/core/root-description</identifier><description><p id="_b2f37df3-6af4-1b3a-c984-9445bdbafcb0">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> require that when an EDR Landing Page includes the <tt>Description</tt> property, that property <em>SHALL</em> be populated.</p>
</description>
</requirement>

<requirement id="_d53938ea-4570-934d-660e-9e417751b43c" model="ogc"> <identifier>/req/core/root-attribution</identifier><description><p id="_8bbae04a-4e73-e721-5c8b-4b6a8d80702c">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> require that when an EDR Landing Page includes the <tt>Attribution</tt> property, that property <em>SHALL</em> be populated.</p>
</description>
</requirement>

<requirement id="_a40f79ff-3268-d6fb-958d-c5d493fbce63" model="ogc"> <identifier>/req/core/root-keywords</identifier><description><p id="_f888cb6a-e6f2-faee-2a4e-0ae15b6fc6f8">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> require that when an EDR Landing Page includes the <tt>Keywords</tt> property, that property <em>SHALL</em> be populated with at least one keyword entry.</p>
</description>
</requirement>

<requirement id="_773b5e14-fbd4-6808-fa70-7668fa606caf" model="ogc"> <identifier>/req/core/root-provider</identifier><description><p id="_75d651e3-cbc0-7aa7-ef82-99665c2cbc26">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> require that when an EDR Landing Page includes the <tt>Provider</tt> property.</p>
</description><component class="part"><p id="_560c25cf-f819-271a-753a-4b8e35eae8ad">A <tt>Provider</tt> property <em>SHALL</em> be populated with a <tt>name</tt> property.</p>
</component><component class="part"><p id="_1e5414c5-7c99-42b2-e2a1-ad472604dbe3">A <tt>Provider</tt> property <em>MAY</em> be populated with a <tt>url</tt> property.</p>
</component>
</requirement>

<requirement id="_8cb20e89-d0ca-5071-ce73-f887d26d49c2" model="ogc"> <identifier>/req/core/root-contact</identifier><description><p id="_867503c4-006a-5ef5-3d03-86c7e4fc26d7">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> require that when an EDR Landing Page includes the <tt>Contact</tt> property,</p>
</description><component class="part"><p id="_f70d2c48-31b4-2c43-1361-9dadab5edb95">A <tt>Contact</tt> property <em>SHALL</em> be populated with the <tt>email</tt> property.</p>
</component><component class="part"><p id="_c0a2975d-3c27-12ec-f348-08fa752a5ff8">A <tt>Contact</tt> property <em>MAY</em> be populated with the <tt>name</tt> property.</p>
</component><component class="part"><p id="_1f124282-88c0-faf6-0cc2-31ab456eb14d">A <tt>Contact</tt> property <em>MAY</em> be populated with the <tt>url</tt> property.</p>
</component>
</requirement>

<requirement id="_87fef462-686b-1379-eb2d-cc84198c5298" model="ogc"> <identifier>/req/core/root-links</identifier><description><p id="_19dcf6bb-92fd-bed4-c96a-1771181d6d98">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> require that when an EDR Landing Page includes the <tt>Links</tt> property:</p>
</description><component class="part"><p id="_eb64a2d0-747a-c88e-309a-1ed46c0b2e5f">The <tt>Links</tt> property <em>SHALL</em> define the links that <em>SHALL</em> be included in the Root response</p>
</component><component class="part"><p id="_56343052-3ac5-d3e0-aab1-684b911cb3c8">The <tt>Links</tt> property <em>SHALL</em> be populated with href and rel properties</p>
</component><component class="part"><p id="_beaa2964-2ef7-c1ff-d072-9c3dabb243de">The <tt>Links</tt> property <em>MAY</em> be populated with type, hreflang and length properties</p>
</component>
</requirement>

<recommendation id="_2c724162-d05c-ebaf-fe35-d0bc541f2973" model="ogc"> <identifier>/rec/core/root-links</identifier><description><p id="_12e7def2-b54e-6039-0acb-bf1d806491bc">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHOULD</em> require that when an EDR Landing Page includes the <tt>Links</tt> property, the title property of each link <em>SHALL</em> be populated.</p>
</description>
</recommendation>
</clause>

<clause id="_api_definition" obligation="normative">
<title>API Definition</title>
<p id="_8179bac8-0d8b-69b0-194a-03ca3b585c58">Path = {root}/api</p>

<p id="_e295ec4a-0ff9-4940-299d-ff194cb633d9">Dependencies</p>

<ul id="_a56b56fe-0b99-075d-2452-a0a6a148a08d"><li><p id="_25098d03-ce7e-fdf2-3ee2-7ff1301687c2"><eref type="inline" bibitemid="OGC19-072" citeas="OGC 19-072">OGC API — Common — Part 1: Core</eref></p>
</li>
<li><p id="_97253fe5-8d58-aee1-6de5-cdea9ef14d65"><eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>
</li>
</ul>

<p id="_aee95278-2d9c-5ab8-13e7-94d3b650418a">Every API is required to provide a definition document that describes the capabilities of that API. This definition document can be used by developers to understand the API, by software clients to connect to the server, or by development tools to support the implementation of servers and clients. The API Definition resource is initially defined in the Core conformance class of the <eref type="inline" bibitemid="OGC19-072" citeas="OGC 19-072">OGC API — Common — Part 1</eref> Standard. The <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> Standard does not make any changes to this definition.</p>

<p id="_8e3ed8a2-5c1d-4bdb-7060-7a17fad02fc2">Profiles of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> are required to provide an OpenAPI 3.1 document. This document extends the API definition provided by the OGC API-EDR Standard. These extensions reflect the additional requirements added by the Profile. Implementors of the profile will then build on that document to produce the API definition document for their implementation.<note id="_ecbcd9fe-6c1b-6974-6e2b-6a10502decd5"><p id="_3df7e7a4-7056-ffd1-45c6-b0d22203f422">At this time only OpenAPI 3.0 and OpenAPI 3.1 documents are supported by OGC Web API Standards.</p>
</note></p>



<requirement id="req_core_publishing" model="ogc"> <identifier>/req/core/publishing</identifier><description><p id="_7285fece-8bf6-d204-c481-882efea9b9eb">An EDR profile <em>SHALL</em> be published as an OpenAPI JSON document.</p>
</description><component class="part"><p id="_e5526bc5-e7b3-97e2-78ef-cc0a8ac0b283">The rules described in the requirements <em>SHALL</em> be encoded using the OpenAPI 3.1 specification.</p>
</component><component class="part"><p id="_ac7e10f6-99bf-7730-0d6a-6bcaf29cf741">The requirement rules <em>SHALL</em> be encoded in either the OpenAPI Path Item or in the Response object schema sections of the document.</p>
</component>
</requirement>

<requirement id="_cf8b6fc9-1e52-3da5-0eab-7180cd31dcda" model="ogc"> <identifier>/req/core/openapi</identifier><description><p id="_2851fcad-9812-710d-419a-9e60dd53e178">The profile OpenAPI document <em>SHALL</em> describe the profile EDR API as follows:</p>
</description><component class="part"><p id="_0d065cad-4cee-eb3e-49f6-dc0f140a474f">The servers attributes of the OpenAPI root object <em>SHALL</em> be blank (the profile is not linked to specific implementations)</p>
</component><component class="part"><p id="_118fed54-7a04-c307-ec07-f5bc9ce82846">The Extent requirement rules <em>SHALL</em> be encoded in the JSON schema defined in the 200 responses for the /collections and /collections/{collectionId} Paths object</p>
</component><component class="part"><p id="_1266a662-3321-853e-49aa-12bca5b14019">The data_query type requirement rules <em>SHALL</em> be encoded in the JSON schema defined in the 200 responses for the /collections and /collections/{collectionId} Paths object</p>
</component><component class="part"><p id="_ddc56b53-0459-5f98-a7ae-75b1913df11e">The conformance classes <em>SHALL</em> be encoded in the JSON schema defined in the 200 responses for the /conformance Paths object.</p>
</component><component class="part"><p id="_663544f6-6fba-47fd-ef2d-ab83ac927229">The data_query types <em>SHALL</em> be encoded as Paths objects in the OpenAPI document, where appropriate the output_format, default_output_format, crs, within_units, width-units, height-units and limit (paging) requirements SHALL be encoded in the child Parameter objects of the Paths object.</p>
</component><component class="part"><p id="_ce7cd653-f0dd-90d7-f43c-1aa7393611a9">The output_format requirement rules <em>SHALL</em> be encoded in the 200 responses of the data_query type Paths objects</p>
</component><component class="part"><p id="_2ad6226a-abe7-8d2a-df64-f0e3432e6f76">The Parameter_names requirements <em>SHALL</em> be encoded in the JSON schema defined in the 200 responses for the /collections and /collections/{collectionId} Paths object.</p>
</component><component class="part"><p id="_80570fa3-c0d0-087e-5198-fdbbbec2a050">Where a <tt>Collection</tt> has <tt>Instances</tt>, Parameter_names requirements <em>SHALL</em> be encoded in the JSON schema defined in the 200 responses for the /collections/{collectionId}/instances and /collections/{collectionId}/instances/{instanceId} Paths object.</p>
</component><component class="part"><p id="_d3722380-41cc-c861-350d-a35c6a70e423">An EDR API <em>SHALL</em> advertise the location of the profile OpenAPI document it complies with in the links section of the API root with a link relation value of ‘profile’</p>
</component>
</requirement>
</clause>

<clause id="_declaration_of_conformance_classes" obligation="normative">
<title>Declaration of Conformance Classes</title>
<p id="_cab4b10f-96de-83ba-a871-8239d65e62a5">Path = {root}/conformance</p>

<p id="_8d01cd53-dba9-dd00-000d-a5fae630f450">Dependencies</p>

<ul id="_13164c20-23c8-9f62-424f-45ebe1d661fe"><li><p id="_d42f29ac-3c6d-4747-94f9-5ae76ae175d2"><eref type="inline" bibitemid="OGC19-072" citeas="OGC 19-072">OGC API — Common — Part 1: Core</eref></p>
</li>
<li><p id="_14f208d1-4193-592c-1205-f072d558ed40"><eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>
</li>
</ul>

<p id="_84436f57-d4fc-2cb8-ed8f-7e094bc42706">To support “generic” clients that want to access implementations of multiple OGC API Standards and extensions — and not “just” a specific API server, the API has to declare the conformance classes it claims to have implemented. The Conformance Classes resource is initially defined in the Core conformance class of the <eref type="inline" bibitemid="OGC19-072" citeas="OGC 19-072">OGC API — Common — Part 1</eref> Standard. The <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> does not make any changes to this definition.</p>

<p id="_23fff5fa-09dc-20dd-eb0e-ced8668385d9">Profiles of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> have additional requirements governing which Conformance Classes and identifiers must be included in this resource.</p>

<requirement id="req_core_api" model="ogc"> <identifier>/req/core/api</identifier><description><p id="_4e333be5-4d7b-74a7-0f0b-1171c76ce693">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> specify the versions of OpenAPI that an implementation <em>SHALL</em> support.</p>
</description>
</requirement>

<note id="_0e819fa9-7d94-64b9-f763-fe8e2fcd1d38"><p id="_6ad2297f-2ff9-754b-a242-41f5f2e5c7fa">OpenAPI 3.0 and OpenAPI 3.1 are two distinct Conformance Classes in the OGC API-EDR Standard. This requirement can be addressed in a Profile by including the appropriate conformance classes at {root}/conformance.</p>
</note>

<note id="_85d8aa87-6888-a701-b190-d2871bee7b43"><p id="_21714bf5-a75e-233a-81ef-4c97a81bcd16">Get guidance from the <link target="https://docs.ogc.org/pol/10-103r1.html">OGC Naming Authority</link> on valid URIs for Profiles.</p>
</note>
</clause>
</clause>

<clause id="_spatio_temporal_and_information_resources" obligation="normative">
<title>Spatio-temporal and Information Resources</title>
<table id="_e1606364-192e-13f8-be20-6487e43e37b6" width="100%">
<name>Spatialtemporal and Information Resource Paths</name>
<thead><tr><th valign="middle" align="left">PATH TEMPLATE</th>
<th valign="middle" align="left">METHOD</th>
<th valign="middle" align="left">RESOURCE</th>
</tr></thead>
<tbody><tr><td valign="middle" align="left">{root}/collections</td>
<td valign="middle" align="left">GET</td>
<td valign="middle" align="left">Metadata describing the Collections of data available from this API.</td>
</tr></tbody>
<tfoot><tr><td valign="middle" align="left">{root}/collections/{collectionId}</td>
<td valign="middle" align="left">GET</td>
<td valign="middle" align="left">Metadata describing the <tt>Collection</tt> of data which has the unique identifier{collectionId}</td>
</tr></tfoot>
</table>

<p id="_8d90cd73-852a-5f97-1f71-e987317619e1">Where:</p>

<ul id="_63358e04-ce4c-66c7-cc4f-82a5a96210a4"><li><p id="_cf30c160-65f1-11c5-3fe7-9b2bb7284222">{root} = Base URI for the API server</p>
</li>
<li><p id="_6e3a75c5-c4cd-6e43-ba03-c40783b430fa">{collectionId} = an identifier for a specific <tt>Collection</tt> of data</p>
</li>
</ul>

<clause id="_collections" obligation="normative">
<title>Collections</title>
<p id="_0da5b023-689f-f86b-a268-9e5ceb829539">OGC API implementations typically organize their geospatial resources into collections. Information about those Collections is accessed through the /collections path and the <link target="http://www.opengis.net/def/rel/ogc/1.0/data"/> link relation.</p>

<p id="_c5cc3025-55c5-4b2c-f85a-4cd37b534595">Path = {root}/collections</p>

<p id="_723d3d80-397b-6e7e-3429-f09295df9b01">Dependencies</p>

<ul id="_7690f8a3-2358-6202-8fea-c8d337d7702a"><li><p id="_d63ee9c3-f645-4d2c-6485-53ee0317f0c3"><eref type="inline" bibitemid="OGC20-024" citeas="OGC 20-024">OGC API — Common — Part 2: Geospatial Data</eref></p>
</li>
<li><p id="_d256d137-d5da-e975-916c-5aee95fbe472"><eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>
</li>
</ul>

<p id="_ab74728a-b8f1-301f-4c0f-d0ff0051fa30">The Collections resource is initially defined in the <tt>Collections</tt> conformance class of the <eref type="inline" bibitemid="OGC20-024" citeas="OGC 20-024">OGC API — Common — Part 2</eref> Standard. The <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> Standard does not make any changes to this definition.</p>

<p id="_f08fbd92-28ac-85fd-9ad3-f1ce1ddc4084">An API may support multiple collections. Additional requirements address how the Profile should document requirements at the per-collection level as well as on the landing page (where appropriate)<note id="req_core_requirements-set"><p id="_3ab277e5-ccfd-1ab3-4502-88c5c271fcd0">A service may consist of multiple <tt>Collections</tt>. While there may be common rules for all <tt>Collections</tt>, a profile should be able to support different rules depending on the <tt>Collection</tt>.</p>
</note></p>



<requirement id="_7fb4f15f-c1d5-4e9e-552f-dcd40ae8dd10" model="ogc"> <identifier>/req/core/requirements-set</identifier>
<component class="part"><p id="_6ea31277-8752-0153-905d-077c8060ac0e">The profile SHALL clearly define which collection a requirement applies to.</p>
</component><component class="part"><p id="_83c0b2ee-562e-752c-5cfc-98b0bb19ae6e">The profile SHALL consist of a set of requirements for a <tt>Collection</tt> and (if the <tt>Collection</tt> supports <tt>Instances</tt>) the <tt>Instances</tt> of the <tt>Collection</tt>. For each of the attributes listed, if it is in the <tt>Collection</tt> (or instance), there SHALL be a requirement to define it.</p>
</component><component class="part"><p id="_446dfa77-c2e1-0e22-872d-d308dcf0c3a3">A profile MAY include requirements for the landing page.</p>
</component><component class="part"><p id="_e3e4f6cb-e137-8dda-f357-1018bb473859">A profile MAY include requirements for multiple collections.</p>
</component>
</requirement>
</clause>

<clause id="_collection_description" obligation="normative">
<title>Collection Description</title>
<p id="_252bd9cf-562a-3c57-1707-223cc675efc3">Each resource <tt>Collection</tt> is described by a set of metadata. That metadata can be accessed directly using the /collections/{collectionId} path and as an entry in the Collections property of the /collections response.</p>

<p id="_0ec43087-0366-c676-52ea-dd990ff1de03">Path:</p>

<ul id="_10d068af-1037-27ae-36db-82f011035be9"><li><p id="_145b017a-e8fc-1458-f3cb-dd375c543375">{root}/collections (returns metadata for every <tt>Collection</tt>)</p>
</li>
<li><p id="_aa734ab6-f2df-5eea-2b88-08075c471464">{root}/collections/{collectionId} (returns metadata for the specified <tt>Collection</tt>)</p>
</li>
</ul>

<p id="_91c4a5b3-5a51-51f0-8cae-97508d9e477b">Dependencies</p>

<ul id="_7727b272-d83c-df7b-0869-ed4605c77b56"><li><p id="_825add20-710c-11e4-7ddc-e1eb123bce0b"><eref type="inline" bibitemid="OGC20-024" citeas="OGC 20-024">OGC API — Common — Part 2: Geospatial Data</eref></p>
</li>
<li><p id="_ecb6020a-06a5-a9d6-c671-a31e688526c9"><eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>
</li>
</ul>

<clause id="_collection_id_parameter_restictions" obligation="normative">
<title>Collection ID parameter restictions</title>
<requirement id="req_core_collectionid" model="ogc"> <identifier>/req/core/collectionid</identifier><description><p id="_00cfdd32-b8f7-a4a2-7576-800e23e80387">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>restricts</em> the valid values of the <tt>collectionId</tt> parameter, then:</p>
</description><component class="part"><p id="_a1d53603-9db6-6527-4381-a8fdd1537b1b">The Profile <em>SHALL</em> specify the rules that the <tt>collectionId</tt> values must follow.</p>
</component><component class="part"><p id="_deb0c78c-3f3c-cbd7-c9c7-50cc463fe6b8">Those rules <em>SHALL</em> include a brief description explaining how the <tt>collectionId</tt> is generated.</p>
</component><component class="part"><p id="_3b3a4b15-2a79-b436-bb44-e6caab6df66b">Those rules <em>SHALL</em> be specified using either:</p>
<ul id="_4a42390f-9cbb-b415-b407-e60d274761d9"><li><p id="_37d705c9-5aaf-7658-0a9c-e766483335a6">identifier string or</p>
</li>
<li><p id="_401c7b53-b899-b87d-b4b6-2455da722041">Regular expression defining valid string patterns.</p>
</li>
</ul>
</component>
</requirement>
</clause>

<clause id="_extent_property_restrictions" obligation="normative">
<title>Extent property restrictions</title>
<p id="_e8f8e874-032b-a844-c491-6970d5c921c2">The <tt>Collection</tt> metadata includes an Extent property which defines a spatial-temporal envelope that encompasses the geospatial data in the <tt>Collection</tt>.</p>

<requirement id="req_core_extent" model="ogc"> <identifier>/req/core/extent</identifier><description><p id="_fdc6a46d-fc8f-8c93-b2dc-7db9ca8a7f9b">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> define a requirement defining a <tt>bbox</tt> which specifies the minimum spatial bounds that <em>SHALL</em> be supported</p>
</description>
</requirement>

<recommendation id="_b5f26496-ca66-40ed-b3c9-e73df7c22fcf" model="ogc"> <identifier>/rec/core/extent</identifier><description><p id="_a299449b-d4f4-3d68-44de-2bca934febec">A requirement <em>SHOULD</em> be defined specifying the rules for defining the <tt>Collection</tt> extent.</p>
</description>
</recommendation>

<requirement id="_ae335308-9e67-ca9d-0c34-c3277e0aedc3" model="ogc"> <identifier>/req/core/extent-spatial</identifier><classification><tag>NOTE</tag><value>Regular expressions could be used to restrict reference system definitions to WKT2 or EPSG values</value></classification><description><p id="_bd8188b3-5a22-9588-3b9d-f1b2ddc1d150">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> supports Extents with spatial dimensions, then:</p>
</description><component class="part"><p id="_7f1a495f-cf0f-d1c6-d024-e74364f1187e">The Profile <em>SHALL</em> specify the rules for the spatial Coordinate Reference System (CRS).</p>
</component><component class="part"><p id="_88e2e1a5-cd07-21d3-e312-353f60a9007a">Those rules <em>SHALL</em> be specified using either:</p>
<ul id="_f348387b-148e-268e-d455-d0f5908c65e8"><li><p id="_1f3bcbea-45d9-cf93-9670-baaeec074ccc">Enumerated list of valid CRS values</p>
</li>
<li><p id="_79229180-dd6d-3ec0-64b1-0348762a9315">Regular expression defining valid CRS string patterns.</p>
</li>
</ul>
</component>
</requirement>

<permission id="_02cd887f-be23-ec11-b1ba-5abc7a80293d" model="ogc"> <identifier>/per/core/extent-spatial</identifier><description><p id="_692b2af4-9f87-dd66-9cbd-1bf08ca29fa5">Regular expressions <em>MAY</em> be used to restrict reference system definitions to WKT2 or EPSG values</p>
</description>
</permission>

<requirement id="_a1e135b5-bd74-9f1a-3809-280b4d3ba84c" model="ogc"> <identifier>/req/core/extent-temporal</identifier><description><p id="_f54b5b61-5efe-d9a7-2437-3dc243bae0bf">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> supports Extents with a temporal dimension, then:</p>
</description><component class="part"><p id="_ba955f1d-555a-8327-df16-6d365c58b016">The Profile <em>SHALL</em> specify the rules for expressing the Temporal Reference System (TRS).</p>
</component><component class="part"><p id="_8c35a7e5-fa1b-d9f7-65bc-f275eb1dbb38">Those rules <em>SHALL</em> be specified using either:</p>
<ul id="_27d95584-1dce-02ba-8165-aaa05eed7293"><li><p id="_3bd32d9a-3c74-eefe-ae46-a55371f99628">Enumerated list of valid TRS values</p>
</li>
<li><p id="_f9e4dde1-633b-6507-920b-2e9c36b22775">Regular expression defining valid TRS string patterns.</p>
</li>
</ul>
</component>
</requirement>

<recommendation id="_2f86b71c-559a-a378-8ec0-1c7b59d84516" model="ogc"> <identifier>/rec/core/extent-temporal</identifier><description><p id="_aac4a454-5778-933b-b96e-a602440a4e56">A requirement <em>SHOULD</em> be defined specifying the minimum temporal bounds that <em>SHALL</em> be supported</p>
</description>
</recommendation>

<requirement id="_66c45d1e-a69e-de47-1769-bdb9a2e3e233" model="ogc"> <identifier>/req/core/extent-vertical</identifier><description><p id="_38e31bf0-3fff-ebfa-b0ba-c19191a5141d">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> supports Extents with a vertical dimension, then:</p>
</description><component class="part"><p id="_c33e6b06-0b78-097a-dbd2-4b36e6c03656">The Profile <em>SHALL</em> specify the rules for expressing the Vertical Reference System (VRS).</p>
</component><component class="part"><p id="_8d68f96e-1916-f9ba-d7ee-4481df7f8bb4">Those rules <em>SHALL</em> be specified using either:</p>
<ul id="_f0ddc0a9-987f-1132-33c2-842736c1a554"><li><p id="_f06de7c1-c7a5-2aa3-4900-807372f4a2c7">Enumerated list of valid VRS values</p>
</li>
<li><p id="_79a31d60-a69c-ee2f-0e74-3b8fad49d408">Regular expression defining valid VRS string patterns.</p>
</li>
</ul>
</component>
</requirement>

<recommendation id="_536254b2-c831-1ae4-8d34-262c2a53bc53" model="ogc"> <identifier>/rec/core/extent-vertical</identifier><description><p id="_c72f4f3b-c6c9-2fcf-37c7-e4010b38e721">A requirement <em>SHOULD</em> be defined specifying the minimum vertical bounds that <em>SHALL</em> be supported</p>
</description>
</recommendation>

<requirement id="_ac370c00-0045-32b1-e29e-8a79386480ec" model="ogc"> <identifier>/req/core/extent-custom</identifier><description><p id="_3bd83c54-f4df-80d2-78c1-8ed92686f777">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> supports Extents with a custom dimension, then:</p>
</description><component class="part"><p id="_8bea8e4f-67dd-4d4d-52c2-a72e13d74e9d">The Profile <em>SHALL</em> specify the rules for expressing the custom dimension.</p>
</component><component class="part"><p id="_5a271d71-92cd-e022-d5fc-e8f5c69ea185">Those rules <em>SHALL</em> be specified using either:</p>
<ul id="_3090a07f-a28f-3f7a-8d21-58db1ae5ee85"><li><p id="_8e3cba30-afc1-de45-8841-264901844e61">A custom dimension id</p>
</li>
<li><p id="_4914ac29-1fb7-f9b6-142b-2a659dca8e5a">A custom dimension reference value</p>
</li>
<li><p id="_9caee54e-1a9d-bceb-e83f-f3b478531394">A custom interval value</p>
</li>
<li><p id="_976cd644-fa30-964f-f765-143deb8e8e23">An enumerated list of valid custom dimension values</p>
</li>
</ul>
</component>
</requirement>

<recommendation id="_6dc5c727-1ca7-964f-d313-f1cd1f33a52b" model="ogc"> <identifier>/rec/core/extent-custom</identifier><description><p id="_6c833252-adbb-e8ec-a8cb-c81d0c6680b8">A requirement <em>SHOULD</em> be defined specifying the minimum bounds of custom extents that <em>SHALL</em> be supported</p>
</description>
</recommendation>
</clause>
</clause>
</clause>

<clause id="_query_resources" obligation="normative">
<title>Query Resources</title>
<table id="_5ec9eb06-94cf-e360-d16a-3445d7f4ca4c" width="100%">
<name>Query Resource Paths</name>
<thead><tr><th valign="middle" align="left">PATH TEMPLATE</th>
<th valign="middle" align="left">METHOD</th>
<th valign="middle" align="left">RESOURCE</th>
</tr></thead>
<tbody><tr><td valign="middle" align="left">{root}/collections/{collectionId}/{queryType}</td>
<td valign="middle" align="left">GET, POST(Optional)</td>
<td valign="middle" align="left">Retrieve data according to the query pattern from a <tt>Collection</tt> with the unique identifier {collectionId}</td>
</tr><tr><td valign="middle" align="left">{root}/collections/{collectionId}/instances</td>
<td valign="middle" align="left">GET</td>
<td valign="middle" align="left">Retrieve metadata about Instances of a <tt>Collection</tt></td>
</tr><tr><td valign="middle" align="left">{root}/collections/{collectionId}/instances/{instanceId}</td>
<td valign="middle" align="left">GET</td>
<td valign="middle" align="left">Retrieve metadata from a specific <tt>Instance</tt> of a <tt>Collection</tt> with the unique identifiers{collectionId} and {instanceId}</td>
</tr></tbody>
<tfoot><tr><td valign="middle" align="left">{root}/collections/{collectionId}/instances/{instanceId}/{queryType}</td>
<td valign="middle" align="left">GET, POST(Optional)</td>
<td valign="middle" align="left">Retrieve data according to the query pattern from a specific <tt>Instance</tt> of a <tt>Collection</tt> with the unique identifiers{collectionId} and {instanceId}</td>
</tr></tfoot>
</table>

<p id="_4e0d0fdb-a038-fd03-724e-7e494927124b">Where:</p>

<ul id="_15d446d8-b7b7-f32f-b6f9-107963c6763b"><li><p id="_f8cb9379-89f8-9a78-1de9-4f052bb65992">{root} = Base URI for the API server</p>
</li>
<li><p id="_07d93af1-114e-96ba-bdf7-596ea27956e7">{collectionId} = an identifier for a specific <tt>Collection</tt> of data</p>
</li>
<li><p id="_e9a643bb-6733-e80b-961a-b9e0b253a270">{instanceId} = an identifier for a specific version or <tt>Instance</tt> of a <tt>Collection</tt> of data</p>
</li>
<li><p id="_2a63d3ec-7ef9-1de2-a998-c8f781940d07">{queryType} = an identifier for a specific query pattern to retrieve data from a specific <tt>Collection</tt> of data</p>
</li>
</ul>

<p id="_db091d9a-dedf-9e0e-5537-8fcc1adfa2fd">Path = {root}/collections/{collectionId}/{queryType}</p>

<p id="_ef987d9e-aac9-1017-0a78-ade36a23d9dc">Dependencies: <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>

<requirement id="req_core_data-query" model="ogc"> <identifier>/req/core/data-query</identifier><description><p id="_95c89b23-9093-6bd8-4f31-2ba514ead71b">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> Standard <em>SHALL</em> require definition of the supported data queries.</p>
</description><component class="part"><p id="_2f424c2b-d4d4-ab55-2e01-0cc51b63aceb">The data_queries definitions <em>SHALL</em> specify which data queries a service supports. This can be defined as follows:</p>
<ul id="_356d7e05-4695-600e-6fc3-53cc2b2bdfd7"><li><p id="_fc74c64c-4507-a34a-f0d1-36fb1293e871">Enumerated list of query types</p>
</li>
</ul>
</component><component class="part"><p id="_f50da40b-2854-b3de-d5f5-2686b4f8ef2a">Each data_query type listed <em>SHALL</em> have a requirement definition.</p>
</component>
</requirement>

<clause id="_parameters" obligation="normative">
<title>Parameters</title>
<p id="_08232507-5436-2194-fb57-184854bbb78f">The following parameters are supported by all OGC API-EDR queries.</p>

<clause id="_output_format_parameter" obligation="normative">
<title>Output Format parameter</title>
<p id="_c8dcd3ba-956a-7db9-0519-686d77d7ff30">Also known as the -f parameter.</p>

<p id="_e811671f-e7eb-1920-10a9-7defd132247f">Data format for the output data (available options are listed in the Collections response).</p>

<requirement id="req_core_output-format" model="ogc"> <identifier>/req/core/output-format</identifier><description><p id="_440e5b5e-57e3-6549-dc66-3f5d8ceb9a63">For every output_format specified in any of the data_query enumerated lists, there <em>SHALL</em> be a requirement which defines the schema or structure of the data (depending on the format).</p>
</description>
</requirement>

<recommendation id="_5b31f0a8-8923-823f-d34e-60760020eff2" model="ogc"> <identifier>/rec/core/output-format</identifier><description><p id="_f302600f-d8bd-25c4-8a83-7b79655e7046">The recommended definition approaches are as follows:</p>
<ul id="_3f3406f2-986c-ce14-1cb7-e8a642a85a89"><li><p id="_5cdcff15-3969-5c52-365c-d45674e4db09">JSON – Link to a JSON Schema definition</p>
</li>
<li><p id="_62bea3c8-2410-e624-e842-71e27590cdc7">XML – Link to a XML Schema definition</p>
</li>
<li><p id="_914f88a9-767d-0940-2458-09dd74140af5">CSV, TSV, PSV, SSV – Link to a definition based on the CSV on the web recommendations available from the <link target="https://www.w3.org/TR/2015/REC-tabular-data-model-20151217/">CSV on the Web Working Group</link>.</p>
</li>
<li><p id="_30842e22-8e96-c9d1-d30d-8444ccaaa78f">Other types (e.g. binary file types) – Link to a description of the format</p>
</li>
</ul>
</description>
</recommendation>
</clause>
</clause>

<clause id="_area_query" obligation="normative">
<title>Area Query</title>
<p id="_79ff01b1-5e53-a871-a31f-214b12af31bb">The Area query returns data within the polygon defined by the coords parameter. Logic for identifying the best match for the requested area will depend on the Collection and is at the discretion of the query service implementer.</p>

<p id="_94f792c6-07e0-da32-05b8-a48dcbbc8f32">Path = {root}/collections/{collectionId}/area</p>

<p id="_f694f01a-0507-4202-9d39-c3351235c1f0">Dependencies: <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>

<requirement id="req_core_data-query-area" model="ogc"> <identifier>/req/core/data-query-area</identifier><description><p id="_70380201-d460-df9e-f428-167197a142ea">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>restricts</em> data queries by making the Area query mandatory, then:</p>
</description><component class="part"><p id="_98afbb77-c4a0-0a23-43ef-a8f8cbf4668b">The Profile <em>SHALL</em> include a requirement mandating the <tt>Area</tt> query.</p>
</component><component class="part"><p id="_ea7d90a0-3c0d-3b39-2251-6fb26409325e">The <tt>Area</tt> query requirement <em>SHALL</em> specify the following:</p>
<ul id="_47639a4b-a01c-b332-3736-e74ee12de5cf"><li><p id="_d6d3773d-15e3-469b-2936-6bfcd7c408da">Enumerated list of output_format types</p>
</li>
<li><p id="_8b56f360-3b6c-8a64-c720-9e5cdeab8242">The default_output_format</p>
</li>
<li><p id="_4787e97f-68d7-c4ee-1276-042f786701e8">Enumerated list of crs_details values</p>
</li>
<li><p id="_72a2d1e4-5cd7-4516-0a9f-101ae355c423">Enumerated list of the operations that the query supports (i.e. GET, POST)</p>
</li>
</ul>
</component><component class="part"><p id="_af27e77e-cc70-516b-18a8-3e2076c77e14">The <tt>Area</tt> requirement <em>MAY</em> specify which OGC API-EDR <tt>Area</tt> query parameters are mandatory for compliance with the profile.</p>
</component>
</requirement>
</clause>

<clause id="_corridor_query" obligation="normative">
<title>Corridor Query</title>
<p id="_7ce975fd-d084-23f1-b7f5-7104f80c2b58">The Corridor query returns data along and around the path defined by the coords parameter. Logic for identifying the best match for the requested corridor will depend on the <tt>Collection</tt> and is at the discretion of the query service implementer.</p>

<p id="_90b24873-d4fc-d6ba-dcc0-c45f85c67bd3">Path = {root}/collections/{collectionId}/corridor</p>

<p id="_851c970f-700e-fc1a-90d3-8caca1d95c5c">Dependencies: <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>

<requirement id="req_core_data-query-corridor" model="ogc"> <identifier>/req/core/data-query-corridor</identifier><description><p id="_f9586aae-eeed-7465-131a-a345873a62c1">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>restricts</em> data queries by making the <tt>Corridor</tt> query mandatory, then:</p>
</description><component class="part"><p id="_da084cec-dc28-9673-97d9-1a84bafcb943">The Profile <em>SHALL</em> include a requirement mandating the <tt>Corridor</tt> query.</p>
</component><component class="part"><p id="_381305a9-f489-22b9-81f5-1081767face2">The <tt>Corridor</tt> requirement <em>SHALL</em> specify the following:</p>
<ul id="_a2fc2f49-3857-684e-dae6-f6e27dc1545a"><li><p id="_94d0caaf-3d1d-bd43-5fd5-0db240bc019a">Enumerated list of output_format types</p>
</li>
<li><p id="_f9abb94a-39ca-bd60-48a6-23c92c95508a">The default_output_format</p>
</li>
<li><p id="_80ad3aa3-8fef-91ac-17ad-4d79add84707">Enumerated list of crs_details values</p>
</li>
<li><p id="_1bd80a21-5e5d-2f27-c842-4667c576d378">Enumerated list of width-units values</p>
</li>
<li><p id="_58283130-dcca-f5ab-d036-fc5c49dcddd4">Enumerated list of height-units values</p>
</li>
<li><p id="_6c597c7d-93ad-087c-71f5-f67bcd323fb7">Enumerated list of the operations that the query supports (i.e. GET, POST)</p>
</li>
</ul>
</component><component class="part"><p id="_20c671e1-af24-c0d4-8a41-4956cf905108">The <tt>Corridor</tt> requirement <em>MAY</em> specify which OGC API-EDR <tt>Corridor</tt> query parameters are mandatory for compliance with the profile.</p>
</component>
</requirement>
</clause>

<clause id="_cube_query" obligation="normative">
<title>Cube Query</title>
<p id="_11875be8-429b-2c8d-de70-b9638f9d3a7e">The Cube query returns a data cube defined by the bbox and z parameters.</p>

<p id="_a992a6c4-ecb4-33cd-2add-babf84d8c7fd">Path = {root}/collections/{collectionId}/cube</p>

<p id="_7af06d17-cad1-4c7d-78a4-b809bc14d2da">Dependencies: <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>

<requirement id="req_core_data-query-cube" model="ogc"> <identifier>/req/core/data-query-cube</identifier><description><p id="_ec5ddbdb-81c7-e23d-6a81-7e6a1fb79426">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>restricts</em> data queries by making the <tt>Cube</tt> query mandatory, then:</p>
</description><component class="part"><p id="_709553b6-5fff-0466-34c8-59f225b61017">The Profile <em>SHALL</em> include a requirement mandating the <tt>Cube</tt> query.</p>
</component><component class="part"><p id="_e69f3d46-87c6-51da-d5f4-bb781fd76af1">The <tt>Cube</tt> query requirement <em>SHALL</em> specify the following:</p>
<ul id="_a14c2618-caf9-cdfc-a3a9-51244b272fce"><li><p id="_4e853097-5e9d-b171-0964-bb17a1ef4b83">Enumerated list of output_format types</p>
</li>
<li><p id="_96ffb99c-a483-6ebf-faea-2fe501ccb790">The default_output_format</p>
</li>
<li><p id="_21826a82-8043-7786-2817-d8e3a4362693">Enumerated list of crs_details values</p>
</li>
<li><p id="_736bdb68-f6c7-7b40-3882-848bdad899d8">Enumerated list of the operations that the query supports (i.e. GET, POST)</p>
</li>
</ul>
</component><component class="part"><p id="_75238c86-b68b-8814-db16-b3464871a81b">The <tt>Cube</tt> requirement <em>MAY</em> specify which OGC API-EDR <tt>Cube</tt> query parameters are mandatory for compliance with the profile.</p>
</component>
</requirement>
</clause>

<clause id="_locations_query" obligation="normative">
<title>Locations Query</title>
<p id="_3c8c9df4-0274-88a2-0fbb-34e23ad7149f">The Locations query returns data for the named location. Logic for identifying the best match for the coordinate will depend on the <tt>Collection</tt> and is at the discretion of the query service implementer. If a location id is not defined the API SHALL return a GeoJSON features array of valid location identifiers, the schema of the GeoJSON response SHOULD be defined in the OpenAPI definition of the EDR service.</p>

<p id="_8077d297-0380-f150-f937-743de0a8b1fc">Path = {root}/collections/{collectionId}/locations</p>

<p id="_13538e95-ed88-446f-5685-1503fad29182">Dependencies: <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>

<requirement id="req_core_data-query-locations" model="ogc"> <identifier>/req/core/data-query-locations</identifier><description><p id="_d2e765bc-b911-2df3-268a-5d0bf88006b5">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>restricts</em> data queries by making the Locations query mandatory, then:</p>
</description><component class="part"><p id="_18077cb3-f799-5930-fb1c-f2010787a27c">The Profile <em>SHALL</em> include a requirement mandating the <tt>Locations</tt> query.</p>
</component><component class="part"><p id="_5d65b73c-9e49-7fcf-ddfc-0a2c6fdf6296">The <tt>Locations</tt> query requirement <em>SHALL</em> specify the following:</p>
<ul id="_c1fb945c-1d15-89f2-2b25-d2554a13e5fa"><li><p id="_eee675c0-73c2-e229-44b8-3bd5b7551d86">Enumerated list of output_format types</p>
</li>
<li><p id="_cb987d1d-035e-7e7d-13cb-65ca1ccd1065">The default_output_format</p>
</li>
<li><p id="_a5a7edad-b200-5559-2a07-c77c49138e02">Enumerated list of crs_details values</p>
</li>
<li><p id="_acd54018-ae60-e1a7-3553-8d156d066a1c">Enumerated list of the operations that the query supports (i.e. GET, POST)</p>
</li>
</ul>
</component><component class="part"><p id="_b4883e94-d90c-9e53-3740-3501392406c7">The <tt>Locations</tt> requirement <em>MAY</em> specify which OGC API-EDR <tt>Locations</tt> query parameters are mandatory for compliance with the profile.</p>
</component><component class="part"><p id="_c4a0666c-fc11-4a36-9de6-dd752d06ed60">The <tt>Locations</tt> query requirement <em>MAY</em> specify a list of required <tt>locationId</tt> values.</p>
</component>
</requirement>
</clause>

<clause id="_instances_query" obligation="normative">
<title>Instances Query</title>
<p id="_0799393e-50fd-9c33-48e3-69eb2c10bd8b">Having multiple versions or <tt>Instances</tt> of the same <tt>Collection</tt>, where the same information is reprocessed or regenerated is not unusal. Although these versions could be described as new Collections the <tt>Instance</tt> query type allows this data to be described as different views of the same <tt>Collection</tt>.</p>

<p id="_3750d506-d1de-2535-e336-ac66840a8727">Path = {root}/collections/{collectionId}/instances</p>

<p id="_06d51daf-f690-5b22-efde-66ee4dbe245c">Dependencies: <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>

<requirement id="req_core_data-query-instances" model="ogc"> <identifier>/req/core/data-query-instances</identifier><description><p id="_76e46fa2-e42e-4757-35a4-2e55d77bf705">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>extends</em> data queries by making the Instances within a <tt>Collection</tt> queryable, then:</p>
</description><component class="part"><p id="_74ca24cf-4b3f-bbc7-4874-e720511b82aa"><tt>Instances</tt> <em>SHALL</em> be defined in the data_queries enumerated list.</p>
</component><component class="part"><p id="_c6aab0ce-78a0-58c4-cef7-347830cc2d4c">A <em>NULL</em> value <em>SHALL</em> be used to indicate that no child instances can be queried.</p>
</component><component class="part"><p id="_dfe497f5-7c0b-7468-1edd-be260008c590">The Profile <em>SHALL</em> specify the rules that the <tt>instanceId</tt> values must follow.</p>
</component><component class="part"><p id="_b58a5883-2314-2971-fa09-4457eb2ca33f">Those rules <em>SHALL</em> include a brief description explaining how the <tt>instanceId</tt> is generated.</p>
</component><component class="part"><p id="_e8c0428a-bcb8-9917-8776-ab09774f5de3">Those rules <em>SHALL</em> be specified using either:</p>
<ul id="_164a992f-8c97-d06b-311e-dfc995d46873"><li><p id="_71e75756-12f3-434d-7d74-f9e4ca803a58">identifier string</p>
</li>
<li><p id="_dde6b1d5-b83d-9b93-e001-2ade07a23221">Regular expression defining valid string patterns.</p>
</li>
</ul>
</component><component class="part"><p id="_dc203427-c524-1c8f-abc6-36afc43491c7">The Profile <em>MAY</em> define a <tt>InstanceId</tt> string which represents either a default or the latest value of <tt>InstanceId</tt>.</p>
</component>
</requirement>

<clause id="_parameter_querytype" obligation="normative">
<title>Parameter queryType</title>
<p id="_1829496a-a148-1511-fd5c-f261e07de101">Path —  Instance Query {root}/collections/{collectionId}/instances/{instanceId}/{queryType}</p>
</clause>
</clause>

<clause id="_items_query" obligation="normative">
<title>Items Query</title>
<p id="_eaa2bd45-ec05-a1cd-bea2-642f868afae1">Paths:
* {root}/collections/{collectionId}/items
* {root}/collections/{collectionId}/items/{itemid}</p>

<p id="_be11ae84-6070-114e-f468-6248c286772b">Dependencies</p>

<ul id="_c6b24009-c778-3dd7-9309-d1b557958d82"><li><p id="_a95b9c31-6f77-e6be-f5ea-e970ba109efc"><eref type="inline" bibitemid="OGC17-069" citeas="OGC 17-069">GC API — Features — Part 1: Core</eref></p>
</li>
<li><p id="_e17fcbef-b73f-9665-287e-135b826e547e"><eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>
</li>
</ul>

<p id="_4de72147-fa1b-b4fd-b595-07fdb56d0f43">The EDR API Items query is like an <link target="https://docs.ogc.org/is/19-086r6/19-086r6.html#OGC17-069r4">OGC API — Features Part 1: Core</link> endpoint. It offers some basic compatibility with API-Features for convenience. It may be used to catalog pre-existing EDR sampling features. The pre-existence of an EDR sampling feature may be because a particular query has been cached for later use, such as a monitoring location. Or there may be a catalog of spatio-temporal sampling features such as domains of anomalies in a dataset. A GeoJSON-compatible JSON-Schema is specified to document an EDR API query endpoint and valid query parameters including time range, parameters, and spatial characteristics. A service can define a custom GeoJSON schema in the OpenAPI definition for the service, with the default being the edr-geojson schema if no alternative is documented.</p>

<clause id="_itemid_parameter" obligation="normative">
<title>ItemID parameter</title>
<p id="_42b759c3-58fc-397b-d578-a60573e0a3e8">If an itemId is not specified, the query will return a list of the available itemId’s. This behavior is specified in OGC API — Features.</p>
</clause>

<clause id="_limit_parameter" obligation="normative">
<title>Limit parameter</title>
<p id="_477a4b38-ac0a-25a6-120d-db2f34b6a203">Paging restrictions (limit parameter provided in the request, multi-page response).</p>

<requirement id="req_core_paging-support" model="ogc"> <identifier>/req/core/paging-support</identifier><description><p id="_fdcc4578-4a23-ffa9-7274-30750835d2da">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> is <em>extended</em> to support paging, then:</p>
</description><component class="part"><p id="_30e7e874-41c0-bb9d-868d-e50b344f9663">A requirement <em>SHALL</em> be created for each combination of query pattern and output format that must support paging.</p>
</component><component class="part"><p id="_ca53d39c-6cf5-421d-ecfc-6428f1647104">Each paging requirement <em>SHALL</em> specify the default number of items to return per page request.</p>
</component>
</requirement>
</clause>
</clause>

<clause id="_position_query" obligation="normative">
<title>Position Query</title>
<p id="_6103ad9a-f527-20c9-dbc0-92c219c4edfe">The Position query returns data for the requested coordinate. Logic for identifying the best match for the coordinate will depend on the <tt>Collection</tt> and is at the discretion of the query service implementer.</p>

<p id="_352cee23-7540-a739-1083-ee2316d4b388">Path = {root}/collections/{collectionId}/positions</p>

<p id="_a14ab6fe-55fa-92d1-8283-083c6ebb54dc">Dependencies: <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>

<requirement id="req_core-data-query-position" model="ogc"> <identifier>/req/core/data-query-position</identifier><description><p id="_51d79b4b-0855-0c45-2452-6af02620f492">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>restricts</em> data queries by making the <tt>Position</tt> query mandatory, then:</p>
</description><component class="part"><p id="_1ca5892b-9ff6-2185-d08d-55d4ee590258">The Profile <em>SHALL</em> include a requirement mandating the <tt>Position</tt> query.</p>
</component><component class="part"><p id="_e6de365e-2ec8-e9f0-87e2-7226db8215cd">The <tt>Position</tt> query requirement <em>SHALL</em> specify the following:</p>
<ul id="_0aa4a224-43fa-98a6-6544-a9690e3429ac"><li><p id="_87ed4ee0-04c4-2b6c-4c79-b05b85f0ce81">Enumerated list of output_format types</p>
</li>
<li><p id="_a843d2b8-2638-2027-cb06-9d5113aa0bca">The default_output_format</p>
</li>
<li><p id="_135f9a02-4aea-bd96-0cf4-54b4a4bfb1fb">Enumerated list of crs_details values</p>
</li>
<li><p id="_91467814-33ac-d62c-b7f3-c8aa39770433">Enumerated list of the operations that the query supports (i.e. GET, POST)</p>
</li>
</ul>
</component><component class="part"><p id="_56fd4115-86ed-2679-0768-ef0bd7be99ba">The <tt>Position</tt> query requirement <em>SHALL</em> also specify the logic used in selecting the data returned by the response, i.e. exact, nearest neighbour, most representative or interpolated.</p>
</component><component class="part"><p id="_55666b35-ef29-0b2a-fdad-7c4e3821a51f">The <tt>Position</tt> requirement <em>MAY</em> specify which OGC API-EDR <tt>Position</tt> query parameters are mandatory for compliance with the profile.</p>
</component>
</requirement>
</clause>

<clause id="_radius_query" obligation="normative">
<title>Radius Query</title>
<p id="_4e32517e-cd7c-6383-fb67-7bd3e3fc6512">The Radius query returns data within the defined radius of the requested coordinate.</p>

<p id="_b6a610b3-81bd-48da-0281-e4b600a6aafd">Path = {root}/collections/{collectionId}/radius</p>

<p id="_9f891503-a4c8-ca79-f815-921e3d5457cd">Dependencies: <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>

<requirement id="req_core_data-query-radius" model="ogc"> <identifier>/req/core/data-query-radius</identifier><description><p id="_283b869e-5141-43da-9f85-284a57321ece">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>restricts</em> data queries by making the <tt>Radius</tt> query mandatory, then:</p>
</description><component class="part"><p id="_7ad7aacc-1fba-6e0b-fb04-93a7ddeef85d">The Profile <em>SHALL</em> include a requirement mandating the <tt>Radius</tt> query.</p>
</component><component class="part"><p id="_a31a2a04-cae5-9de8-b2db-32066a14c6d1">The <tt>Radius</tt> query requirement <em>SHALL</em> specify the following:</p>
<ul id="_259de6b7-1d71-0e9f-7331-d76606025705"><li><p id="_3aedfb3b-5251-cc50-f21b-30d99ccdee31">Enumerated list of output_format types</p>
</li>
<li><p id="_d99a62e6-bb15-03d1-fbb2-90c681d70957">The default_output_format</p>
</li>
<li><p id="_795fb239-000c-40cb-e270-491ca79f7b58">Enumerated list of crs_details values</p>
</li>
<li><p id="_e1e92b17-2b7c-5178-6f75-3552462e0fe3">Enumerated list of within_units values</p>
</li>
<li><p id="_46263ea5-6543-46c7-62b0-f36c7a4c8556">Enumerated list of the operations that the query supports (i.e. GET, POST)</p>
</li>
</ul>
</component><component class="part"><p id="_3c51f08d-b057-0a60-066e-7577de51ecab">The <tt>Radius</tt> requirement <em>MAY</em> specify which OGC API-EDR <tt>Radius</tt> query parameters are mandatory for compliance with the profile.</p>
</component>
</requirement>
</clause>

<clause id="_trajectory_query" obligation="normative">
<title>Trajectory Query</title>
<p id="_28f20b1d-247b-5e2f-e68a-803f8bc23675">The Trajectory query returns data along the path defined by the coords parameter. Logic for identifying the best matches for the requested trajectory will depend on the <tt>Collection</tt> and is at the discretion of the query service implementer.</p>

<p id="_61a141c8-5954-1c82-a2fb-5cb19c454dde">Path = {root}/collections/{collectionId}/trajectory</p>

<p id="_0359ad46-ed66-7adc-9746-b84214af28ba">Dependencies: <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref></p>

<requirement id="req_core_data-query-trajectory" model="ogc"> <identifier>/req/core/data-query-trajectory</identifier><description><p id="_132e7712-4acd-26c4-5b86-e626ab81f45a">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>restricts</em> data queries by making the <tt>Trajectory</tt> query mandatory, then:</p>
</description><component class="part"><p id="_496683b5-d23b-f18a-83c9-b86f8d7801bf">The Profile <em>SHALL</em> include a requirement mandating the <tt>Trajectory</tt> query.</p>
</component><component class="part"><p id="_ceb54b88-66c0-c04f-0982-a24d3a7f6796">The <tt>Trajectory</tt> query requirement <em>SHALL</em> specify the following:</p>
<ul id="_76b603f9-1588-243a-f654-4b1d521376bf"><li><p id="_fd160916-a20b-0c31-0915-d4be3e4c0c93">Enumerated list of output_format types</p>
</li>
<li><p id="_23b1bf65-ce46-8eb3-6880-b547f65acf11">The default_output_format</p>
</li>
<li><p id="_a385b61d-c74d-4d1a-88e0-19d99f75c9be">Enumerated list of crs_details values</p>
</li>
<li><p id="_a72c9254-5c47-f39b-d084-0147b16abcf5">Enumerated list of the operations that the query supports (i.e. GET, POST)</p>
</li>
</ul>
</component><component class="part"><p id="_79fa1a96-15cf-d735-a084-34ed45a24831">The <tt>Trajectory</tt> requirement <em>MAY</em> specify which OGC API-EDR <tt>Trajectory</tt> query parameters are mandatory for compliance with the profile.</p>
</component>
</requirement>
</clause>
</clause>

<clause id="_general_requirements" obligation="normative">
<title>General Requirements</title>
<clause id="_http_status_codes" obligation="normative">
<title>HTTP Status Codes</title>
<p id="_a739fe55-9dce-2e8b-a136-8295013510db">HTTP response</p>

<ul id="_7f4195e8-73fb-e68c-b758-99c353f12531"><li><p id="_696bc373-59c2-e5d8-18af-1c23b19d0228">Response status codes</p>
</li>
</ul>

<requirement id="req_core_status-codes" model="ogc"> <identifier>/req/core/status-codes</identifier><description><p id="_d4c4b857-e645-e865-ac5a-42d28bf5b4c4">A Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>SHALL</em> require that the definitions of all http status codes SHALL be provided.</p>
</description><component class="part"><p id="_524d1ed0-441d-b8ba-0c75-a6eb016b1ade">These definitions <em>SHALL</em> provide the following:</p>
<ul id="_aa2d2a86-a7fd-5d61-94d0-27cde7cd4b07"><li><p id="_4cbe5d9b-7b83-f917-fb0c-28abe5d5833e">A description of the cause of the response.</p>
</li>
<li><p id="_c71ef732-99bf-fc71-084b-56cfd5c2eb7a">A JSON schema for the message body structure</p>
</li>
</ul>
</component>
</requirement>
</clause>

<clause id="_links" obligation="normative">
<title>Links</title>
<ul id="_94689e0b-43b2-ba97-6e5d-4cf4f4244c02"><li><p id="_6ca35bb7-9342-1532-e2e2-b393c7c7664f">Response links</p>
</li>
</ul>

<requirement id="req_core_links" model="ogc"> <identifier>/req/core/links</identifier><description><p id="_ed887575-22cf-2e5a-fdf4-7883efc5d10a">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>restricts</em> valid responses to only those which include links, then:</p>
</description><component class="part"><p id="_05da624f-460f-f1a0-b8ba-99492b41016a">The Profile <em>SHALL</em> require that link objects are included in a response.</p>
</component><component class="part"><p id="_1af61491-5354-8fe7-6d8f-90bdfc7961e6">The Profile <em>SHALL</em> define the required link objects in full.</p>
</component><component class="part"><p id="_6ad4c02b-2cc4-a5e8-f9fa-608b201dcc67">The link objects <em>SHALL</em> require that the <tt>href</tt>, <tt>rel</tt> and <tt>type</tt> attributes are populated.</p>
</component>

<description><p id="_b085ea5b-e37a-3bb1-67d8-993e8155c76b">for example:</p><sourcecode id="_2c3baf44-3cba-0475-914b-71730568467c" lang="JSON">    {
        "href": "https://creativecommons.org/licenses/by-nc/4.0/",
        "rel": "licence",
        "type": "text/html"
    },
    {
        "href": "https://docs.ogc.org/cs/21-069r2/21-069r2.html",
        "rel": "service-doc",
        "title": "CoverageJSON Community Standard v1.0"
        "type": "text/html"
    }</sourcecode></description>

</requirement>
</clause>

<clause id="_asynchronous_queries" obligation="normative">
<title>Asynchronous Queries</title>
<p id="_1674c411-584c-b180-c3a6-721a597cfc0b">While Web protocols typically use request-response operations, there is also support for asychonous operations.</p>

<p id="_97f6a043-a33b-ecfd-b6fc-bc58b64ae64e">HTTP Asynchrouous — This requirement address the use of HTTP asynchronous operations such as Webhooks and Callbacks.</p>

<requirement id="req_core_asynchronous" model="ogc"> <identifier>/req/core/asynchronous</identifier><description><p id="_728b20f5-1a4f-c0d2-4cd9-415b57ab5a38">If a Profile <em>extends</em> the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> with support for asynchronous opperations, then:</p>
</description><component class="part"><p id="_43ee1d77-5ba7-6011-574a-98a4c26bd428">Requirements <em>SHALL</em> be defined for each query type that is asynchronous</p>
</component><component class="part"><p id="_f8a41ed9-be19-808b-044c-4b25a0d1d8dc">Each asynchronous query type requirement <em>SHALL</em> define the HTTP Status Code and provide a message schema and text used to inform the user that the response is asynchronous.</p>
</component><component class="part"><p id="_766995f4-bb7b-5377-741a-9d367bee779c">Each asynchronous query type requirement <em>SHALL</em> document the mechanism for delivering the result of the asynchronous query.</p>
</component>
</requirement>

<permission id="_ede43ffd-9699-d289-58e5-c2922367e37c" model="ogc"> <identifier>/per/core/asynchronous</identifier><description><p id="_c073cb18-2f5e-faf4-ed8a-c78306db04d1">The documentation of the mechanism for delivering the result of the asynchronous query <em>MAY</em> be provided through a link to an external document.</p>
</description>
</permission>

<p id="_f6f53d37-2162-d909-29f0-5b3547b97d4c">Publish-Subscribe — This requirement addresses the use of Publish-Subscribe protocols. These are protocols supported in addition to HTTP.</p>

<requirement id="req_core_pubsub" model="ogc"> <identifier>/req/core/pubsub</identifier><description><p id="_14059e01-c107-c278-d7a4-f491404821ae">If a Profile of the <eref type="inline" bibitemid="ogc-edr" citeas="OGC 19-086r4">OGC API — Environmental Data Retrieval Standard</eref> <em>extends</em> the supported operations to include Publish-Subscribe operations, then:</p>
</description><component class="part"><p id="_9c8b4531-cfd9-9b8b-4cbf-ab4d95dcf904">Support for the OGC API — Environmental Data Retrieval — Part 2: Publish-Subscribe workflow Standard <em>SHALL</em> be required.</p>
</component><component class="part"><p id="_f1a7ea45-823b-23dc-1d91-bcf75d7447e3">The pubsub requirement <em>SHALL</em> specify the channels that <em>SHALL</em> be supported</p>
</component><component class="part"><p id="_70132227-54dd-9de2-9f93-00c220f3056b">The pubsub requirement <em>SHALL</em> specify the payloads that a pubsub channel <em>SHALL</em> support</p>
</component>
</requirement>
</clause>
</clause>
</clause>

<clause id="_media_types_for_any_data_encodings" obligation="normative">
<title>Media Types for any data encoding(s)</title>
<p id="_9edcb2e8-b4ab-3495-e76a-87c21ea5743d">A section describing the MIME-types to be used is mandatory for any standard involving data encodings. If no suitable MIME type exists in <link target="http://www.iana.org/assignments/media-types/index.html"/> then this section may be used to define a new MIME type for registration with IANA.</p>
</clause>


</sections><annex id="annex-A" obligation="informative">
<title>Conformance Class Abstract Test Suite (Normative)</title>
<clause id="_conformance_class_core" obligation="informative">
<title>Conformance Class Core</title>
<requirement id="ats_class-core" model="ogc" type="conformanceclass">
<title>Conformance Class ‘Core’</title><identifier>http://www.opengis.net/spec/ogcapi-edr-3/1.0/conf/conf-class-core</identifier><classification><tag>target</tag><value>http://www.opengis.net/spec/ogcapi-edr-3/1.0/req/req-class-core</value></classification><requirement id="_f85e4e92-91a8-1436-88c1-34257ba7cc6e" model="ogc" type="abstracttest"> <identifier>/conf/core/modspec</identifier></requirement><requirement id="_a8ee4002-7814-6e98-b3b9-26fbdb8c0a99" model="ogc" type="abstracttest"> <identifier>/conf/core/publishing</identifier></requirement><requirement id="_01364e28-1ca1-5910-76e9-c9e894d5e930" model="ogc" type="abstracttest"> <identifier>/conf/core/api</identifier></requirement><requirement id="_70ffbcaa-d067-8d52-7e64-c775ffc0e087" model="ogc" type="abstracttest"> <identifier>/conf/core/edr-conformant</identifier></requirement><requirement id="_6da08f22-1373-6f46-c00d-61a3a39d54fa" model="ogc" type="abstracttest"> <identifier>/conf/core/root</identifier></requirement><requirement id="_99f2d7bc-e9c6-f5cc-2fd8-a0d6ab5fb521" model="ogc" type="abstracttest"> <identifier>/conf/core/requirements-set</identifier></requirement><requirement id="_3deff9c4-4173-f162-f7c9-acd03e16daa4" model="ogc" type="abstracttest"> <identifier>/conf/core/parameter-names</identifier></requirement><requirement id="_90be4c3d-750f-0bda-b485-c0ea45baa17f" model="ogc" type="abstracttest"> <identifier>/conf/core/collectionid</identifier></requirement><requirement id="_d2a3e5aa-e565-ebe2-bb55-3eaf5d948300" model="ogc" type="abstracttest"> <identifier>/conf/core/extent</identifier></requirement><requirement id="_939b23f9-9cae-dd5d-d959-3e530390f397" model="ogc" type="abstracttest"> <identifier>/conf/core/output-format</identifier></requirement><requirement id="_542298c7-e307-e6ae-8160-230c44702b9c" model="ogc" type="abstracttest"> <identifier>/conf/core/paging-support</identifier></requirement><requirement id="_976cc916-589f-0196-27be-234c22a27540" model="ogc" type="abstracttest"> <identifier>/conf/core/status-codes</identifier></requirement><requirement id="_1f46909a-9221-dceb-67b5-b3257b700b22" model="ogc" type="abstracttest"> <identifier>/conf/core/links</identifier></requirement><requirement id="_5069d355-28af-e643-0134-64b05aa33618" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query</identifier></requirement><requirement id="_adb87f4f-702a-75fd-9fbb-41d5285a687b" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-area</identifier></requirement><requirement id="_b9b86393-18d7-5895-0f95-84a0d66a55ab" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-corridor</identifier></requirement><requirement id="_6d45e0cc-a9b0-df52-5fa0-2286ce436199" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-cube</identifier></requirement><requirement id="_3abb8f3c-9c97-848c-7df7-a7c6673828fc" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-instances</identifier></requirement><requirement id="_eea1445f-92d5-c86d-c92f-5091154a922e" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-locations</identifier></requirement><requirement id="_432da8b1-e0e8-944b-a5ca-7117f783c353" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-position</identifier></requirement><requirement id="_22938588-c706-6bf7-1476-39fbf20d0c79" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-radius</identifier></requirement><requirement id="_e36537b8-7cdf-4239-ecae-47253bf67df3" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-trajectory</identifier></requirement><requirement id="_3aff48de-4043-5d00-92ce-6fbbcf518582" model="ogc" type="abstracttest"> <identifier>/conf/core/asynchronous</identifier></requirement><requirement id="_938eaded-cc9a-d57b-2594-f50d815d2e15" model="ogc" type="abstracttest"> <identifier>/conf/core/pubsub</identifier></requirement>

</requirement>

<requirement id="ats_modspec" model="ogc" type="abstracttest"> <identifier>/conf/core/modspec</identifier><classification><tag>target</tag><value>/req/core/modspec</value></classification><component class="test-purpose"><p id="_cee966d2-cc7e-4742-5c6a-6ba9d6145174">Validate that the profile is compliant with the <eref type="inline" bibitemid="ogc-modspec" citeas="OGC 08-131r3">OGC Modular Specification</eref>.</p>
</component><component class="test-method"/><component class="step"><p id="_d64fbe8c-9d46-ba90-a32d-31afc1b2866a">Verify that the profile is compliant with the <eref type="inline" bibitemid="ogc-modspec" citeas="OGC 08-131r3">OGC Modular Specification</eref>.</p>
</component>
</requirement>

<requirement id="ats_publishing" model="ogc" type="abstracttest"> <identifier>/conf/core/publishing</identifier><classification><tag>target</tag><value>/req/core/publishing</value></classification><component class="test-purpose"><p id="_e8b64d03-62c0-f861-848b-95bc9d078f81">Validate that an OpenAPI description of the profile is available</p>
</component><component class="test-method"/><component class="step"><p id="_a9d92c55-02f0-36f5-488c-6e686bf90635">Verify that an OpenAPI document describing the profile exists</p>
</component><component class="step"><p id="_0a2bc655-f19d-66ae-747d-a7ed9c54691c">Verify that the OpenAPI document is compliant with the OpenAPI 3.1 specification</p>
</component><component class="step"><p id="_efc557d1-a0a7-8e6b-70ec-dae6acfa9248">Verify that the OpenAPI document includes schemas for the <tt>Collection</tt> and <tt>Instance</tt> query responses</p>
</component><component class="step"><p id="_5e6fa023-5f64-4314-e7f7-d37fee9f918a">Verify that the <tt>Collection</tt> and <tt>Instance</tt> schemas include all of the queries defined in the  <xref target="req_core_data-query">data-query</xref> requirement</p>
</component><component class="step"><p id="_2ceb15cf-d2d1-6e6a-ed79-3818322f625a">Verify that the <tt>Collection</tt> and <tt>Instance</tt> schema include Path objects for each of the data_queries defined in the profile.</p>
</component><component class="step"><p id="_15f3f6d6-f5ad-bba5-98b8-9d06693892ec">Verify that the Path Object define Items for the HTTP operations defined by the data query requirements in the profile</p>
</component><component class="step"><p id="_e4fa363b-aa55-e189-214c-d3e9608047f9">Verify that the Path Item definitions include the enumerated lists defined by the data query requirements in the profile</p>
</component>
</requirement>

<requirement id="ats_api" model="ogc" type="abstracttest"> <identifier>/conf/core/api</identifier><classification><tag>target</tag><value>/req/core/api</value></classification><component class="test-purpose"><p id="_fd72f4a7-f941-7bed-5863-318227008a14">Validate that the profile includes a requirement specifying the OpenAPI versions that implementations shall support.</p>
</component><component class="test-method"/><component class="step"><p id="_9ad9dd16-1b8a-adc0-5214-aa69f2670813">Verify that the profile includes a requirement defining the OpenAPI versions that implementations shall support.</p>
</component><component class="step"><p id="_91e54df6-a72f-5c38-ccbd-37587f2babfe">Verify that the profile includes a conformance class testing that OpenAPI versions are supported.</p>
</component>
</requirement>

<requirement id="ats_edr-conformant" model="ogc" type="abstracttest"> <identifier>/conf/core/edr-conformant</identifier><classification><tag>target</tag><value>/req/core/edr-conformant</value></classification><component class="test-purpose"><p id="_f88327d2-d2a8-c1cf-95a8-4ddb40e679cd">Validate that the Profile Standard requires that all implementations demonstrate conformance with the OGC API-EDR Standard.</p>
</component><component class="test-method"/><component class="step"><p id="_5cdfcece-1ff0-6115-38f2-fbf00e30bd72">Verify that the profile specifies that regardless of any profile specifc requirements, implementations shall function as OGC API-EDR Part 1 — Core compliant API’s.</p>
</component>
</requirement>

<note id="_1d528382-031f-20a6-88b5-66e1427d0efb"><p id="_3174bcbf-941a-531f-2e99-2e23109171d7">this “purpose” requires more specificity.</p>
</note>

<requirement id="ats_root" model="ogc" type="abstracttest"> <identifier>/conf/core/root</identifier><classification><tag>target</tag><value>/req/core/root</value></classification><component class="test-purpose"><p id="_3fa210d0-98cd-a219-2201-8ffb80964021">Validate that the profile defines the service landing page</p>
</component><component class="test-method"/><component class="step"><p id="_7dbbbccc-31d3-3d2f-7fba-d0722a0e45e9">Verify that the profile defines a <tt>Title</tt> for the service</p>
</component><component class="step"><p id="_20b1c777-45e6-abe9-1582-6fdbcf858d79">Verify that the profile defines the <tt>Links</tt> required for the service</p>
</component><component class="step"><p id="_675c1ab8-2bf6-5b98-be6c-1f35d463f17d">Verify that each link defined for the service has a <tt>href</tt> and <tt>rel</tt> attribute.</p>
</component><component class="step"><p id="_76c8c270-25e9-0cb6-4d1f-b71fb7ac2339">Verify that any <tt>Description</tt> attributes in the profile have a defined value.</p>
</component><component class="step"><p id="_af6c1bf0-4bf8-c11f-5e5c-09f76053aa2a">Verify that any <tt>Attribution</tt> attributes in the profile have a defined value.</p>
</component><component class="step"><p id="_40211669-a95f-0d77-0034-a70fdbebf1ab">Verify that any <tt>Keywords</tt> attributes in the profile have defined values.</p>
</component><component class="step"><p id="_55f7ed84-6674-f7d4-e76d-25ffccde56b3">Verify that any <tt>Provider</tt> attributes in the profile have <tt>name</tt> and <tt>url</tt> attributes.</p>
</component><component class="step"><p id="_afd5ef55-5d2a-3e51-032c-a87c86d07da1">Verify that the providers <tt>name</tt> and <tt>url</tt> attributes have defined values.</p>
</component><component class="step"><p id="_423e5101-ed99-fd96-ff43-051e62588ac5">Verify that any <tt>Contact</tt> attributes in the profile have an <tt>email</tt> attributes.</p>
</component><component class="step"><p id="_3929f2df-2292-f5ec-cc14-dd6ce1617a58">Verify that contact <tt>email</tt> attributes has a defined value.</p>
</component>
</requirement>

<requirement id="ats_requirements-set" model="ogc" type="abstracttest"> <identifier>/conf/core/requirements-set</identifier><classification><tag>target</tag><value>/req/core/requirements-set</value></classification><component class="test-purpose"><p id="_393582a1-b997-c6db-27df-a2ad558450d3">Validate that the profile defines at least one requirement for a collection</p>
</component><component class="test-method"/><component class="step"><p id="_ddfaedea-f6b0-7eda-ff4e-ccc69964a4c4">Verify that the profile contains at least one requirement which applies to a collection.</p>
</component><component class="step"><p id="_00fb3c5e-e38c-c98a-4c72-5314291584d6">Verify that collection requirements in the profile clearly identify which collection a requirement applies to.</p>
</component>
</requirement>

<requirement id="ats_parameter-names" model="ogc" type="abstracttest"> <identifier>/conf/core/parameter-names</identifier><classification><tag>target</tag><value>/req/core/parameter-names</value></classification><component class="test-purpose"><p id="_44d55639-1299-e20a-9268-104a62799fbc">Validate that the parameter_names requirement is correctly defined</p>
</component><component class="test-method"/><component class="step"><p id="_6fdc3a57-bb9b-d1ba-66ed-86028583581b">Verify that the parameter_names requirement defines a set of parameter objects</p>
</component><component class="step"><p id="_30fbde5a-f135-7ffd-5ab6-959ced581bc5">Verify that each parameter object in the set has a unique key</p>
</component><component class="step"><p id="_69c0ba04-4f63-4628-5390-61a7b8437d14">Verify that each parameter object in the set has a type value of “Parameter”</p>
</component><component class="step"><p id="_e9fe1c7e-bb2e-5655-63a7-0eb2af510b76">Verify that each parameter object in the set has a description attribute</p>
</component><component class="step"><p id="_52e1f615-4004-a4f3-384e-4d015f1f7516">Verify that each parameter object in the set has a unit attribute</p>
</component><component class="step"><p id="_cc8b7b3e-de2e-a3c4-0f45-b37da2a73c10">Verify that each unit object a label attribute</p>
</component><component class="step"><p id="_63c16733-e282-c48d-6219-c5e7c8b55d17">Verify that each unit object a symbol attribute</p>
</component><component class="step"><p id="_404bed99-b33c-eac7-a781-5d1bd0294bb1">Verify that each symbol object a value attribute</p>
</component><component class="step"><p id="_fb7ad4cc-5c52-6c28-d46f-f0a06326ee07">Verify that each symbol object a type attribute</p>
</component><component class="step"><p id="_1d1bf3a9-d4bf-de62-eb88-ce66198f2ba9">Verify that each parameter object in the set has an observedProperty attribute</p>
</component><component class="step"><p id="_6a4ff202-e2bc-9019-71cf-13053e694862">Verify that each observedProperty object has an id attribute</p>
</component><component class="step"><p id="_05b879d4-1dcf-6831-2dd0-3db6f285d0d2">Verify that each observedProperty object has a label attribute</p>
</component>
</requirement>

<requirement id="ats_collectionid" model="ogc" type="abstracttest"> <identifier>/conf/core/collectionid</identifier><classification><tag>target</tag><value>/req/core/collectionid</value></classification><component class="test-purpose"><p id="_1335d821-ecd2-bab7-33f0-1cf7582fa9b1">Validate that a <tt>collectionId</tt> requirement is correctly defined.</p>
</component><component class="test-method"/><component class="step"><p id="_7e89e305-85e9-517e-811e-ee3fd54f99cd">Verify that a <tt>collectionId</tt> requirement includes an explanation of how a <tt>collectionId</tt> is derived.</p>
</component><component class="step"><p id="_8b9225ad-4c53-3a66-bd82-b54fe9a0abb8">Verify that a <tt>collectionId</tt> requirement specifies either an identifier string or a Regular expression.</p>
</component>
</requirement>

<requirement id="ats_extent" model="ogc" type="abstracttest"> <identifier>/conf/core/extent</identifier><classification><tag>target</tag><value>/req/core/extent</value></classification><component class="test-purpose"><p id="_abb7a7c0-1b05-aa90-9557-4abea01704d5">Validate the profile extent requirements are defined correctly.</p>
</component><component class="test-method"/><component class="step"><p id="_3b7657ea-1fcc-5616-dc77-cf8d733e62b4">Verfiy that the profile has a requirement specifying the spatial extent of the <tt>Collection</tt>.</p>
</component><component class="step"><p id="_ab0c7c16-e5d5-7434-a0eb-10c08f47311c">Verfiy that the profile specifies either an enumerated list of CRS values or a Regular expression definition for valid CRS values.</p>
</component><component class="step"><p id="_79fb7a79-f302-5923-cf5b-1762842732f7">Verify that Temporal extent requirements specify either an enumerated list of TRS values or a Regular expression definition for valid TRS values.</p>
</component><component class="step"><p id="_141b0fdd-1455-b790-51dd-c50cbb9c6efa">Verify that Vertical extent requirements specify either an enumerated list of VRS values or a Regular expression definition for valid VRS values.</p>
</component><component class="step"><p id="_f8ea5249-4f92-6141-8e50-8af554c7ed9c">Verify that Custom extent requirements specify the id of the custom dimension.</p>
</component><component class="step"><p id="_fe511115-c030-1bc3-4b43-64bd07d454aa">Verify that Custom extent requirements specify the custom dimension reference value.</p>
</component><component class="step"><p id="_0bb955dc-53de-35c8-6b29-ba69da3b05fd">Verify that Custom extent requirements specify the custom dimension interval value.</p>
</component><component class="step"><p id="_8e974caa-45d1-4c29-2fb5-a963527a2003">Verify that Custom extent requirements specify an enumerated list of the valid custom dimension values.</p>
</component>
</requirement>

<requirement id="ats_output-format" model="ogc" type="abstracttest"> <identifier>/conf/core/output-format</identifier><classification><tag>target</tag><value>/req/core/output-format</value></classification><component class="test-purpose"><p id="_3b1b39fa-6fcd-11c9-536f-ab4e470c82c2">Validate that the profile correctly defines output-formats</p>
</component><component class="test-method"/><component class="step"><p id="_e88d8678-76d9-25ff-fd9a-f7a94ed65614">Verify that the profile contains references to the schemas or format descriptions for all output-formats defined in the data queries requirements</p>
</component>
</requirement>

<requirement id="ats_paging-support" model="ogc" type="abstracttest"> <identifier>/conf/core/paging-support</identifier><classification><tag>target</tag><value>/req/core/paging-support</value></classification><component class="test-purpose"><p id="_285fe2b8-273b-f787-5a2e-b32d52d3ddef">Validate that paging support requirements are correctly defined</p>
</component><component class="test-method"/><component class="step"><p id="_ac333533-6173-2f03-5a4e-89f9e40babc5">Verify that a paging support requirement defines which query types will support output paging</p>
</component><component class="step"><p id="_d51660a7-4dda-95c2-1aa7-b775ebc42a4a">Verify that a paging support requirement identifies which output formats support paging in paging-capable queries</p>
</component><component class="step"><p id="_ce806fb1-0627-bf06-9e08-411f803a3e98">Verify that a paging support requirement defines the default number of items to return per page request</p>
</component>
</requirement>

<requirement id="ats_status-codes" model="ogc" type="abstracttest"> <identifier>/conf/core/status-codes</identifier><classification><tag>target</tag><value>/req/core/status-codes</value></classification><component class="test-purpose"><p id="_42d8118b-95d9-e0ab-c5a7-bb644c3ae02b">Validate that the profile defines any HTTP status code responses required by a service.</p>
</component><component class="test-method"/><component class="step"><p id="_34e78887-6d03-95fd-b301-293b84324f8d">Verify that the profile contains HTTP status code definitions</p>
</component><component class="step"><p id="_ca4e2f21-968a-4d3f-360f-198bd3b99e35">Verify that any HTTP status code definition has a description value.</p>
</component><component class="step"><p id="_f4eb0780-5b7e-edc1-03a1-097b6341f446">Verify that each HTTP status code definition includes a JSON schema for the response body.</p>
</component>
</requirement>

<requirement id="ats_links" model="ogc" type="abstracttest"> <identifier>/conf/core/links</identifier><classification><tag>target</tag><value>/req/core/links</value></classification><component class="test-purpose"><p id="_9adb4129-8c05-7114-9220-8e2020c6e668">Validate that link requirements are correctly defined</p>
</component><component class="test-method"/><component class="step"><p id="_0c88243c-5c4b-7a62-643c-177de12a3fb6">Verify that link requirements define a <tt>href</tt> value</p>
</component><component class="step"><p id="_f9f3d2ae-1887-0966-80ec-b189ea892252">Verify that link requirements define a <tt>rel</tt> value</p>
</component><component class="step"><p id="_180da3b8-1fd7-e1bc-897b-a2e98a16bd2e">Verify that link requirements define a <tt>type</tt> value</p>
</component>
</requirement>

<requirement id="ats_data-query" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query</identifier><classification><tag>target</tag><value>/req/core/data-query</value></classification><component class="test-purpose"><p id="_391c4bae-9a53-b2d6-31bc-4a8539c5505b">Validate that a profile correctly defines the query types that a service shall support.</p>
</component><component class="test-method"/><component class="step"><p id="_8b982708-3921-882d-dc0c-d68f619e8920">Verify that the profile defines an enumerated list of the queries that a service shall support.</p>
</component><component class="step"><p id="_f4559955-a649-b4a0-7d48-b628a8badd7b">Verify that for each definition in the enumerated list there is a corresponding data query requirement in the profile.</p>
</component>
</requirement>

<requirement id="ats_data-query-area" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-area</identifier><classification><tag>target</tag><value>/req/core/data-query-area</value></classification><component class="test-purpose"><p id="_8b7bc1e3-cf64-b444-8dc3-36085b57f809">Verify that Area query requirements are defined correctly in a profile.</p>
</component><component class="test-method"/><component class="step"><p id="_63ed1897-5858-b134-774f-1d9f150f598e">Verify an Area query requirement defines an enumerated list of output_format types.</p>
</component><component class="step"><p id="_fd6a46cb-2da5-19c9-43ec-0dd4380abadf">Verify an Area query requirement defines the default output_format.</p>
</component><component class="step"><p id="_c55ced6f-696f-fdf0-a897-05dbc64181ba">Verify an Area query requirement defines an enumerated list of crs_details values.</p>
</component><component class="step"><p id="_14f68698-4f74-ea4d-91f7-1e12936a14e1">Verify an Area query requirement defines a list of supported HTTP operations.</p>
</component>
</requirement>

<requirement id="ats_data-query-corridor" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-corridor</identifier><classification><tag>target</tag><value>/req/core/data-query-corridor</value></classification><component class="test-purpose"><p id="_3617a9a6-a801-7874-0e6c-16feb4196ad3">Verify that Corridor query requirements are defined correctly in a profile.</p>
</component><component class="test-method"/><component class="step"><p id="_59bdaabd-71d7-c182-09e1-1dd6b84c5fb3">Verify that a Corridor requirement defines an enumerated list of output_format types.</p>
</component><component class="step"><p id="_9de29848-80ce-daa4-daff-b4605d9a573c">Verify that a Corridor requirement defines the default output_format.</p>
</component><component class="step"><p id="_dcba7133-2235-a37e-edde-a580c1092fda">Verify that a Corridor requirement defines an enumerated list of crs_details values.</p>
</component><component class="step"><p id="_a35fce52-c4cc-5ee6-39ac-6e01b72f9c7b">Verify that a Corridor requirement defines an enumerated list of width-units values.</p>
</component><component class="step"><p id="_0701001c-ac59-440e-336b-31afdd9ecced">Verify that a Corridor requirement defines an enumerated list of height-units values.</p>
</component><component class="step"><p id="_44ba0e13-a9d0-3267-2fc1-393c4bfa4022">Verify that a Corridor requirement defines a list of supported HTTP operations.</p>
</component>
</requirement>

<requirement id="ats_data-query-cube" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-cube</identifier><classification><tag>target</tag><value>/req/core/data-query-cube</value></classification><component class="test-purpose"><p id="_8c28964a-1716-785f-a3cb-a97e4035a145">Verify that Cube query requirements are defined correctly in a profile.</p>
</component><component class="test-method"/><component class="step"><p id="_803e30d6-b7f4-8253-919f-79e17571e687">Verify a Cube query requirement defines an enumerated list of output_format types.</p>
</component><component class="step"><p id="_4b23a915-2efb-784b-a2f6-e238762ad3cb">Verify a Cube query requirement defines the default output_format.</p>
</component><component class="step"><p id="_6abfae3e-d89b-e678-05fc-06f15ef837d5">Verify a Cube query requirement defines an enumerated list of crs_details values.</p>
</component><component class="step"><p id="_60eed78f-027e-76fe-373c-78cd34663c4e">Verify a Cube query requirement defines a list of supported HTTP operations.</p>
</component>
</requirement>

<requirement id="ats_data-query-instances" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-instances</identifier><classification><tag>target</tag><value>/req/core/data-query-instances</value></classification><component class="test-purpose"><p id="_6d594c7f-d7fd-ce61-49dc-893da257f259">Validate than a profile correctly defines support for <tt>instances</tt></p>
</component><component class="test-method"/><component class="step"><p id="_2504f4e2-8820-78ec-3906-5c122427d8a7">Verify that the data queries requirement enumerated list includes an entry for <tt>instances</tt>.</p>
</component><component class="step"><p id="_a6d41443-135d-d158-f31f-25fc5769d50a">Verify that an <tt>instanceId</tt> requirement includes an explanation of how an <tt>instanceId</tt> is derived.</p>
</component><component class="step"><p id="_dafd2cc6-44e0-09ca-7828-9892a41be7bf">Verify that an <tt>instanceId</tt> requirement contains either an identifier string or a Regular expression rule for defining the <tt>instanceId</tt>.</p>
</component>
</requirement>

<requirement id="ats_data-query-position" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-position</identifier><classification><tag>target</tag><value>/req/core/data-query-position</value></classification><component class="test-purpose"><p id="_22956804-da97-ffbf-d52a-ad6754eaa4c8">Verify that Position query requirements are defined correctly in a profile.</p>
</component><component class="test-method"/><component class="step"><p id="_d54806f2-49db-88da-c166-63ac5e9766b3">Verify a Position query requirement defines the logic in used selecting the appropriate data response.</p>
</component><component class="step"><p id="_2dac4acb-c1c8-ba43-7f38-1275f8c58013">Verify a Position query requirement defines an enumerated list of output_format types.</p>
</component><component class="step"><p id="_936736fe-963f-eddd-c808-cf616d7fec50">Verify a Position query requirement defines the default output_format.</p>
</component><component class="step"><p id="_86d489b2-f1f1-48c8-bb1d-1f46b1efcc02">Verify a Position query requirement defines an enumerated list of crs_details values.</p>
</component><component class="step"><p id="_78354d8c-41f2-ec44-440f-ea7f88340054">Verify a Position query requirement defines a list of supported HTTP operations.</p>
</component>
</requirement>

<requirement id="ats_data-query-radius" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-radius</identifier><classification><tag>target</tag><value>/req/core/data-query-radius</value></classification><component class="test-purpose"><p id="_7514a124-d787-9cae-9c43-c47a175875df">Verify that Radius query requirements are defined correctly in a profile.</p>
</component><component class="test-method"/><component class="step"><p id="_ca211752-0289-1e27-a97f-fb70993cfe6d">Verify a Radius query requirement defines an enumerated list of output_format types.</p>
</component><component class="step"><p id="_a20505e1-d9a8-896c-33ad-e1850a4bc376">Verify a Radius query requirement defines the default output_format.</p>
</component><component class="step"><p id="_4eb9d2ee-c766-17e1-f7cb-2fa942f4fb00">Verify a Radius query requirement defines an enumerated list of crs_details values.</p>
</component><component class="step"><p id="_0918da5b-2438-be55-ce18-6da71c013e1c">Verify a Radius query requirement defines an enumerated list of within_units values.</p>
</component><component class="step"><p id="_5bfd04d6-c4f6-83e7-bbfb-e976e0e99212">Verify a Radius query requirement defines a list of supported HTTP operations.</p>
</component>
</requirement>

<requirement id="ats_data-query-trajectory" model="ogc" type="abstracttest"> <identifier>/conf/core/data-query-trajectory</identifier><classification><tag>target</tag><value>/req/core/data-query-trajectory</value></classification><component class="test-purpose"><p id="_7e2adbdc-78c9-2c2f-9f70-755663feb0a2">Verify that Trajectory query requirements are defined correctly in a profile.</p>
</component><component class="test-method"/><component class="step"><p id="_d9a74510-a530-a02f-72a6-82c4300bde83">Verify a Trajectory query requirement defines an enumerated list of output_format types.</p>
</component><component class="step"><p id="_36c1565b-e55e-f15d-0eb1-54a2835e37dc">Verify a Trajectory query requirement defines the default output_format.</p>
</component><component class="step"><p id="_48abb091-f0c7-733a-6426-e2315975537d">Verify a Trajectory query requirement defines an enumerated list of crs_details values.</p>
</component><component class="step"><p id="_d0d37a9d-83c3-6c43-c7ee-789e9fc2cc62">Verify a Trajectory query requirement defines a list of supported HTTP operations.</p>
</component>
</requirement>

<requirement id="ats_asynchronous" model="ogc" type="abstracttest"> <identifier>/conf/core/asynchronous</identifier><classification><tag>target</tag><value>/req/core/asynchronous</value></classification><component class="test-purpose"><p id="_aed131ce-d951-abb6-9a8c-057130ecde2f">Validate that an asynchronous query support requirement in correctly defined</p>
</component><component class="test-method"/><component class="step"><p id="_72bba624-80b3-8249-5396-44a9487fce2b">Verify that all asynchronous query requirements in a profile define a HTTP Status Code for the asynchronous response.</p>
</component><component class="step"><p id="_9df007dc-0f11-1b7b-6479-4d2098e2d23c">Verify that all asynchronous query requirements in a profile define a message schema for the asynchronous response.</p>
</component><component class="step"><p id="_49fe83e6-c29e-0da8-24d9-e1fef9a55bf5">Verify that all asynchronous query requirements in a profile define the text for the asynchronous response.</p>
</component><component class="step"><p id="_b0702f83-9178-128c-f88b-29ea574fd700">Verify that all asynchronous query requirements in a profile define the mechanism for delivering the asynchronous query result.</p>
</component>
</requirement>

<requirement id="ats_pubsub" model="ogc" type="abstracttest"> <identifier>/conf/core/pubsub</identifier><classification><tag>target</tag><value>/req/core/pubsub</value></classification><component class="test-purpose"><p id="_92f9641f-7098-b927-6948-210df8f08b41">Validate Pub/Sub requirements</p>
</component><component class="test-method"/><component class="step"><p id="_2ba9d737-8a24-4d5f-2312-dfc263054dba">Verify that the profile specifes the OGC API-EDR Part 2 conformance class</p>
</component><component class="step"><p id="_26a7149a-06a2-bebe-e514-9aaf5bccb95f">Verify that the profile defines the channels services shall implement.</p>
</component><component class="step"><p id="_d01d8489-3aac-fc61-8c25-5646211ccc02">Verify that the profile defines the message payloads required for each of the channels in the service.</p>
</component><component class="step"><p id="_534eb11c-bfe8-daaf-9777-496a4c7eca7e">Verify the profile contains an AsyncAPI definition that describes the channels and their messages.</p>
</component>
</requirement>
</clause>
</annex><bibliography><references id="_references" normative="true" obligation="informative">
<title>Normative references</title><p id="_cdc64d2a-a937-72f4-1261-c3b19cc626b1">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.</p>


<bibitem id="iso19106" type="standard" schema-version="v1.2.8">  <fetched>2025-07-23</fetched>  
<title type="title-intro" format="text/plain" language="en" script="Latn">Geographic information</title>
  
<title type="title-main" format="text/plain" language="en" script="Latn">Profiles</title>
  
<title type="main" format="text/plain" language="en" script="Latn">Geographic information — Profiles</title>
  <uri type="src">https://www.iso.org/standard/26011.html</uri>  <uri type="obp">https://www.iso.org/obp/ui/en/#!iso:std:26011:en</uri>  <uri type="rss">https://www.iso.org/contents/data/standard/02/60/26011.detail.rss</uri>  <docidentifier type="ISO" primary="true">ISO 19106</docidentifier>  <docidentifier type="iso-reference">ISO 19106(E)</docidentifier>  <docidentifier type="URN">urn:iso:std:iso:19106:stage-90.93</docidentifier>  <docnumber>19106</docnumber>  <contributor>    <role type="publisher"/>    <organization>      
<name>International Organization for Standardization</name>
      <abbreviation>ISO</abbreviation>      <uri>www.iso.org</uri>    </organization>  </contributor>  <edition>1</edition>  <language>en</language>  <language>fr</language>  <script>Latn</script>  <status>    <stage>90</stage>    <substage>93</substage>  </status>  <copyright>    <from>2004</from>    <owner>      <organization>        
<name>ISO</name>
      </organization>    </owner>  </copyright>  <relation type="instanceOf">    <bibitem type="standard">      <fetched>2025-07-23</fetched>      
<title type="title-intro" format="text/plain" language="en" script="Latn">Geographic information</title>
      
<title type="title-main" format="text/plain" language="en" script="Latn">Profiles</title>
      
<title type="main" format="text/plain" language="en" script="Latn">Geographic information — Profiles</title>
      <uri type="src">https://www.iso.org/standard/26011.html</uri>      <uri type="obp">https://www.iso.org/obp/ui/en/#!iso:std:26011:en</uri>      <uri type="rss">https://www.iso.org/contents/data/standard/02/60/26011.detail.rss</uri>      <docidentifier type="ISO" primary="true">ISO 19106:2004</docidentifier>      <docidentifier type="iso-reference">ISO 19106:2004(E)</docidentifier>      <docidentifier type="URN">urn:iso:std:iso:19106:stage-90.93</docidentifier>      <docnumber>19106</docnumber>      <date type="published">        <on>2004-07</on>      </date>      <contributor>        <role type="publisher"/>        <organization>          
<name>International Organization for Standardization</name>
          <abbreviation>ISO</abbreviation>          <uri>www.iso.org</uri>        </organization>      </contributor>      <edition>1</edition>      <language>en</language>      <language>fr</language>      <script>Latn</script>      <abstract format="text/plain" language="en" script="Latn">ISO 19106:2004 is intended to define the concept of a profile of the ISO geographic information standards developed by ISO/TC 211 and to provide guidance for the creation of such profiles. Only those components of specifications that meet the definition of a profile contained herein can be established and managed through the mechanisms described in this International Standard. These profiles can be standardized internationally using the ISO standardization process. This document also provides guidance for establishing, managing, and standardizing at the national level (or in some other forum).</abstract>      <status>        <stage>90</stage>        <substage>93</substage>      </status>      <copyright>        <from>2004</from>        <owner>          <organization>            
<name>ISO</name>
          </organization>        </owner>      </copyright>      <place>Geneva</place>    </bibitem>
  </relation>  <place>Geneva</place></bibitem>
<bibitem id="ogc-edr" type="standard" schema-version="v1.2.8">  <fetched>2025-06-07</fetched>  
<title type="title-intro" format="text/plain" language="en" script="Latn">OGC API</title>
  
<title type="title-main" format="text/plain" language="en" script="Latn">Environmental Data Retrieval Standard</title>
  
<title type="main" format="text/plain" language="en" script="Latn">OGC API — Environmental Data Retrieval Standard</title>
  <uri type="src">http://www.opengis.net/doc/IS/ogcapi-edr-1/1.0.0</uri>  <uri type="html">https://docs.ogc.org/is/19-086r4/19-086r4.html</uri>  <docidentifier type="OGC" primary="true">19-086r4</docidentifier>  <date type="published">    <on>2021-08-13</on>  </date>  <contributor>    <role type="author"/>    <person>      
<name>        <completename>Mark Burgoyne</completename>      </name>
    </person>  </contributor>  <contributor>    <role type="author"/>    <person>      
<name>        <completename>Dave Blodgett</completename>      </name>
    </person>  </contributor>  <contributor>    <role type="author"/>    <person>      
<name>        <completename>Chuck Heazel</completename>      </name>
    </person>  </contributor>  <contributor>    <role type="author"/>    <person>      
<name>        <completename>Chris Little</completename>      </name>
    </person>  </contributor>  <contributor>    <role type="publisher"/>    <organization>      
<name>Open Geospatial Consortium</name>
    </organization>  </contributor>  <edition>4</edition>  <language>en</language>  <script>Latn</script>  <abstract format="text/plain" language="en" script="Latn">The Environmental Data Retrieval (EDR) Application Programming Interface (API) provides a family of lightweight query interfaces to access spatio-temporal data resources by requesting data at a Position, within an Area, along a Trajectory or through a Corridor. A spatio-temporal data resource is a collection of spatio-temporal data that can be sampled using the EDR query pattern geometries. These patterns are described in the section describing the Core Requirements Class.  The goals of the EDR API are to make it easier to access a wide range of data through a uniform, well-defined simple Web interface, and to achieve data reduction to just the data needed by the user or client while hiding much of the data storage complexity. A major use case for the EDR API is to retrieve small subsets from large collections of environmental data, such as weather forecasts, though many other types of data can be accessed. The important aspect is that the data can be unambiguously specified by spatio-temporal coordinates.  The EDR API query patterns, such as Position, Area, Cube, Trajectory or Corridor, can be thought of as discrete sampling geometries, conceptually consistent with the feature of interest in the Sensor Observation Service (SOS) standard. A typical EDR data resource is a multidimensional dataset that could be accessed via an implementation of the Web Coverage Service (WCS) standard. In contrast to SOS and WCS, EDR implements the technical baseline of the OGC API family of standards and aims to provide a single set of simple-to-use query patterns. Use cases for EDR range from real or virtual time-series observation retrievals, to sub-setting 4-dimensional data cubes along user-supplied sampling geometries. These query patterns do not attempt to satisfy the full scope of either SOS or WCS, but provide useful building blocks to allow the composition of APIs that satisfy a wide range of geospatial data use cases. By defining a small set of query patterns (and no requirement to implement all of them), the EDR API should help to simplify the design of systems (as they can be performance tuned for the supported queries) making it easier to build robust and scalable infrastructure.  With the OGC API family of standards, the OGC community has extended its suite of standards to include Resource Oriented Architectures and Web Application Programming Interfaces (APIs). These standards are based on a shared foundation, specified in OGC API-Common, which defines the resources and access paths that are supported by all OGC APIs. The resources are listed in Table 1. This document extends that foundation to define the Environmental Data Retrieval API.</abstract>  </bibitem>
<bibitem id="OGC17-069"><formattedref format="application/x-isodoc+xml"><link target="https://docs.ogc.org/is/17-069r4/17-069r4.html"/>, OGC APIFeatures — Part 1: Core, Open Geospatial Consortium (2022).</formattedref><docidentifier type="OGC">OGC 17-069</docidentifier><docnumber>17-069</docnumber></bibitem>
<bibitem id="OGC19-072"><formattedref format="application/x-isodoc+xml"><link target="https://docs.ogc.org/is/19-072/19-072.html"/>, OGC API — Common — Part 1: Core, Open Geospatial Consortium (2023).</formattedref><docidentifier type="OGC">OGC 19-072</docidentifier><docnumber>19-072</docnumber></bibitem>
<bibitem id="OGC20-024"><formattedref format="application/x-isodoc+xml"><link target="http://docs.ogc.org/DRAFTS/20-024.html"/>, OGC API — Common — Part 2: Geospatial Data (Draft), Open Geospatial Consortium</formattedref><docidentifier type="OGC">OGC 20-024</docidentifier><docnumber>20-024</docnumber></bibitem>
<bibitem id="ogc-modspec" type="standard" schema-version="v1.2.8">  <fetched>2025-06-07</fetched>  
<title type="title-intro" format="text/plain" language="en" script="Latn">The Specification Model</title>
  
<title type="title-main" format="text/plain" language="en" script="Latn">Standard for Modular specifications</title>
  
<title type="main" format="text/plain" language="en" script="Latn">The Specification Model — Standard for Modular specifications</title>
  <uri type="pdf">https://portal.ogc.org/files/?artifact_id=34762&amp;version=2</uri>  <docidentifier type="OGC" primary="true">08-131r3</docidentifier>  <date type="published">    <on>2009-10-19</on>  </date>  <contributor>    <role type="author"/>    <person>      
<name>        <completename>Policy SWG</completename>      </name>
    </person>  </contributor>  <contributor>    <role type="publisher"/>    <organization>      
<name>Open Geospatial Consortium</name>
    </organization>  </contributor>  <edition>3</edition>  <language>en</language>  <script>Latn</script>  <abstract format="text/plain" language="en" script="Latn">This standard contains requirements for writing standards to be used for any document whose eventual purpose is the specification of requirements for software, services or data structures.</abstract>  </bibitem>
<bibitem id="OpenAPI30"><formattedref format="application/x-isodoc+xml">OpenAPI Initiative (OAI). <strong>OpenAPI Specification 3.0</strong> [online]. 2024 [viewed 2025-01-03]. The latest patch version at the time of publication of this standard was 3.0.4, available at <link target="https://spec.openapis.org/oas/v3.0.4"/></formattedref><docidentifier>OpenAPI30</docidentifier><docnumber>30</docnumber></bibitem>
<bibitem id="OpenAPI31"><formattedref format="application/x-isodoc+xml">OpenAPI Initiative (OAI). <strong>OpenAPI Specification 3.1</strong> [online]. 2024 [viewed 2025-01-03]. The latest patch version at the time of publication of this standard was 3.1.1, available at <link target="https://spec.openapis.org/oas/v3.1.1"/></formattedref><docidentifier>OpenAPI31</docidentifier><docnumber>31</docnumber></bibitem>
</references></bibliography>
</ogc-standard>
