├── core ├── standard │ ├── HTML_Gen.bat │ ├── recommendations │ │ ├── README.md │ │ ├── building-blocks │ │ │ ├── query-param-profile │ │ │ │ ├── PER_default.adoc │ │ │ │ ├── REC_link-header.adoc │ │ │ │ ├── PER_profiles-of-media-type.adoc │ │ │ │ └── REC_negotiation.adoc │ │ │ ├── record-collection │ │ │ │ ├── REC_title.adoc │ │ │ │ ├── REC_description.adoc │ │ │ │ ├── PER_catalogs.adoc │ │ │ │ ├── PER_record-access-modes.adoc │ │ │ │ ├── PER_records-array-name.adoc │ │ │ │ ├── PER_common-mark.adoc │ │ │ │ ├── REC_record-langs.adoc │ │ │ │ ├── PER_links.adoc │ │ │ │ ├── REC_links-catalog-hierarchy.adoc │ │ │ │ ├── REC_keywords-themes.adoc │ │ │ │ └── PER_additional-properties.adoc │ │ │ ├── record-core │ │ │ │ ├── REC_contact.adoc │ │ │ │ ├── PER_record-geometry.adoc │ │ │ │ ├── PER_common-mark.adoc │ │ │ │ ├── REC_record-description.adoc │ │ │ │ ├── REC_format.adoc │ │ │ │ ├── REC_record-links_type.adoc │ │ │ │ ├── REC_record-title.adoc │ │ │ │ ├── PER_record-type.adoc │ │ │ │ ├── PER_temporal_comparison.adoc │ │ │ │ ├── REC_record-associations_templated.adoc │ │ │ │ ├── REC_record-links_iana.adoc │ │ │ │ ├── REC_record-associations_relate.adoc │ │ │ │ ├── REC_resource-langs.adoc │ │ │ │ └── REC_time.adoc │ │ │ ├── json │ │ │ │ ├── REC_header-profile-link.adoc │ │ │ │ └── PER_time.adoc │ │ │ ├── html │ │ │ │ └── REC_schema-org.adoc │ │ │ ├── sorting │ │ │ │ ├── PER_synthetic.adoc │ │ │ │ └── REC_sortables-schema.adoc │ │ │ ├── record-core-query-parameters │ │ │ │ ├── REC_param-q.adoc │ │ │ │ └── REC_query-param-type-definition.adoc │ │ │ ├── records-api │ │ │ │ ├── REC_html.adoc │ │ │ │ └── PER_query-params.adoc │ │ │ └── record-filter │ │ │ │ ├── REC_json-encoding.adoc │ │ │ │ └── REC_text-encoding.adoc │ │ ├── crawlable-catalog │ │ │ ├── REC_record-file-name.adoc │ │ │ └── REC_record-file-location.adoc │ │ ├── local-resources-catalog_filtering │ │ │ ├── REC_text-encoding.adoc │ │ │ └── REC_json-encoding.adoc │ │ └── local-resources-catalog │ │ │ ├── PER_additional-record-properties.adoc │ │ │ ├── PER_other-catalog-properties.adoc │ │ │ └── PER_other-record-properties.adoc │ ├── .gitignore │ ├── PDF_Gen.bat │ ├── annex_history.adoc │ ├── requirements │ │ ├── building-blocks │ │ │ ├── requirements_class_query-param-profile.adoc │ │ │ ├── record-collection │ │ │ │ ├── REQ_contact.adoc │ │ │ │ ├── REQ_records.adoc │ │ │ │ ├── REQ_mandatory-properties.adoc │ │ │ │ ├── REQ_license.adoc │ │ │ │ ├── REQ_links-catalog-hierarchy.adoc │ │ │ │ ├── REQ_links-catalog-related.adoc │ │ │ │ ├── REQ_links-catalog-series.adoc │ │ │ │ ├── REQ_links-record.adoc │ │ │ │ ├── REQ_links.adoc │ │ │ │ ├── REQ_links-records.adoc │ │ │ │ ├── REQ_records-array-name.adoc │ │ │ │ └── REQ_default-mediatype.adoc │ │ │ ├── record-core │ │ │ │ ├── REQ_time-zone.adoc │ │ │ │ ├── REQ_mandatory-properties-record.adoc │ │ │ │ ├── REQ_templated-link-header.adoc │ │ │ │ └── REQ_record-links.adoc │ │ │ ├── html │ │ │ │ ├── REQ_definition.adoc │ │ │ │ └── REQ_conformance.adoc │ │ │ ├── query-param-profile │ │ │ │ └── REQ_response.adoc │ │ │ ├── requirements_class_oas30.adoc │ │ │ ├── requirements_class_autodiscovery.adoc │ │ │ ├── requirements_class_html.adoc │ │ │ ├── json │ │ │ │ ├── REQ_catalog-response.adoc │ │ │ │ ├── REQ_catalog-content-profile.adoc │ │ │ │ ├── REQ_catalog-content.adoc │ │ │ │ └── REQ_conformance.adoc │ │ │ ├── oas30 │ │ │ │ ├── REQ_oas-conformance.adoc │ │ │ │ └── REQ_oas30.adoc │ │ │ ├── record-core-query-parameters │ │ │ │ ├── REQ_query-param-ids-response.adoc │ │ │ │ └── REQ_query-param-type-response.adoc │ │ │ ├── requirements_class_sorting.adoc │ │ │ ├── records-api │ │ │ │ └── REQ_features-api.adoc │ │ │ ├── requirements_class_record-filter.adoc │ │ │ ├── sorting │ │ │ │ ├── REQ_get-sortables-op.adoc │ │ │ │ └── REQ_sortby-response.adoc │ │ │ ├── requirements_class_record-core.adoc │ │ │ └── requirements_class_json.adoc │ │ ├── crawlable-catalog │ │ │ ├── REQ_record.adoc │ │ │ ├── REQ_catalog.adoc │ │ │ ├── REQ_conformance.adoc │ │ │ ├── REQ_catalog-location.adoc │ │ │ └── REQ_record-location.adoc │ │ ├── searchable-catalog │ │ │ ├── REQ_mandatory-catalog-properties.adoc │ │ │ └── REQ_mandatory-record-properties.adoc │ │ ├── searchable-catalog_filtering │ │ │ └── REQ_mandatory-queryables.adoc │ │ ├── local-resources-catalog │ │ │ ├── REQ_mandatory-catalog-properties.adoc │ │ │ ├── REQ_mandatory-record-properties.adoc │ │ │ └── REQ_discovery.adoc │ │ ├── requirements_class_searchable-catalog.adoc │ │ ├── requirements_class_searchable-catalog_sorting.adoc │ │ ├── requirements_class_local-resources-catalog_sorting.adoc │ │ ├── local-resources-catalog_sorting │ │ │ └── REQ_sorting.adoc │ │ ├── local-resources-catalog_filtering │ │ │ └── REQ_filtering.adoc │ │ ├── requirements_class_searchable-catalog_filtering.adoc │ │ ├── README.md │ │ ├── requirements_class_crawlable-catalog.adoc │ │ └── requirements_class_local-resources-catalog_filtering.adoc │ ├── annex_stac.adoc │ ├── abstract_tests │ │ ├── building-blocks │ │ │ ├── ATS_class_query-param-profile.adoc │ │ │ ├── query-param-profile │ │ │ │ ├── ATS_response.adoc │ │ │ │ └── ATS_definition.adoc │ │ │ ├── ATS_class_autodiscovery.adoc │ │ │ ├── ATS_class_oas30.adoc │ │ │ ├── ATS_class_html.adoc │ │ │ └── json │ │ │ │ └── ATS_catalog-content-profile.adoc │ │ ├── crawlable-catalog │ │ │ ├── ATS_record-location.adoc │ │ │ ├── ATS_catalog-location.adoc │ │ │ └── ATS_catalog.adoc │ │ └── README.md │ └── annex_abbreviated_terms.adoc ├── openapi │ ├── parameters │ │ ├── recordId.yaml │ │ ├── catalogId.yaml │ │ ├── profile.yaml │ │ ├── ids.yaml │ │ ├── type.yaml │ │ ├── externalIds.yaml │ │ ├── q.yaml │ │ └── sortby.yaml │ ├── schemas │ │ ├── link.yaml │ │ ├── format.yaml │ │ ├── roles.yaml │ │ ├── defaultSortOrder.yaml │ │ ├── landingPage.yaml │ │ ├── collection.yaml │ │ ├── catalogs.yaml │ │ ├── recordCollectionGeoJSON.yaml │ │ ├── scheme.yaml │ │ └── time.yaml │ └── responses │ │ ├── Catalogs.yaml │ │ ├── BadRequest.yaml │ │ ├── ServerError.yaml │ │ ├── Record.yaml │ │ ├── InvalidParameter.yaml │ │ ├── ConformanceDeclaration.yaml │ │ ├── Sortables.yaml │ │ ├── NotFound.yaml │ │ ├── NotAcceptable.yaml │ │ └── LandingPage.yaml ├── examples │ ├── README.md │ ├── yaml │ │ ├── collections │ │ │ ├── localResourcesItem.yaml │ │ │ ├── localResourcesCatalog.yaml │ │ │ └── README.md │ │ └── processes │ │ │ ├── localResourcesItem.yaml │ │ │ ├── localResourcesCatalog.yaml │ │ │ └── README.md │ └── json │ │ ├── defaultSortOrder.json │ │ ├── templated-link-ref.json │ │ ├── conformance.json │ │ └── catalog.json ├── release-notes.md └── README.md ├── extensions ├── OpenSearch │ ├── clause_6_overview.adoc │ ├── requirements │ │ ├── atom │ │ │ ├── REQ_media-type.adoc │ │ │ ├── REQ_atom-conformance.adoc │ │ │ ├── REQ_common-content.adoc │ │ │ └── REQ_content.adoc │ │ ├── opensearch │ │ │ ├── REQ_param-geo-relation.adoc │ │ │ ├── REQ_param-time-relation.adoc │ │ │ ├── REQ_descriptiondoc-op.adoc │ │ │ ├── REQ_param-language-response.adoc │ │ │ ├── REQ_autodiscovery-link.adoc │ │ │ ├── REQ_param-outputencoding-response.adoc │ │ │ ├── REQ_param-startpage-response.adoc │ │ │ ├── REQ_param-startindex-response.adoc │ │ │ ├── REQ_param-outputencoding.adoc │ │ │ ├── REQ_descriptiondoc-response-lang.adoc │ │ │ ├── REQ_descriptiondoc-response.adoc │ │ │ ├── REQ_descriptiondoc-response-self-link.adoc │ │ │ ├── REQ_param-language.adoc │ │ │ ├── REQ_descriptiondoc-response-example-qry.adoc │ │ │ ├── REQ_param-geo-name-response.adoc │ │ │ ├── REQ_param-geometry-response.adoc │ │ │ ├── REQ_param-proximity-response.adoc │ │ │ ├── REQ_descriptiondoc-response-inputenc.adoc │ │ │ ├── REQ_descriptiondoc-response-outputenc.adoc │ │ │ └── REQ_descriptiondoc-response-collection-links.adoc │ │ ├── requirements_class_opensearch.adoc │ │ └── requirements_class_atom.adoc │ ├── recommendations │ │ ├── opensearch │ │ │ ├── REC_param-language.adoc │ │ │ ├── REC_param-geometry.adoc │ │ │ ├── REC_param-geo-name.adoc │ │ │ ├── REC_param-startpage.adoc │ │ │ ├── REC_param-startindex.adoc │ │ │ ├── REC_param-geo-relation.adoc │ │ │ ├── REC_param-inputencoding.adoc │ │ │ ├── REC_param-proximity.adoc │ │ │ ├── REC_param-time-relation.adoc │ │ │ ├── REC_param-outputencoding.adoc │ │ │ ├── REC_response-query.adoc │ │ │ └── PER_additional-query-parameters.adoc │ │ └── atom │ │ │ └── PER_foreign-markup.adoc │ ├── annex_history.adoc │ ├── annex_ats.adoc │ └── annex_bibliography.adoc ├── facets │ ├── standard │ │ ├── HTML_Gen.bat │ │ ├── recommendations │ │ │ ├── README.md │ │ │ └── simple │ │ │ │ └── PER_queryables.adoc │ │ ├── PDF_Gen.bat │ │ ├── clause_9_security.adoc │ │ ├── annex_history.adoc │ │ ├── requirements │ │ │ ├── simple │ │ │ │ ├── REQ_media_type.adoc │ │ │ │ └── REQ_conformance.adoc │ │ │ ├── requirements_class_simple.adoc │ │ │ ├── requirements_class_advanced.adoc │ │ │ ├── advanced │ │ │ │ ├── REQ_conformance.adoc │ │ │ │ └── REQ_query_facets_response.adoc │ │ │ └── README.md │ │ ├── annex_ats.adoc │ │ ├── abstract_tests │ │ │ ├── simple │ │ │ │ ├── ATS_media_type.adoc │ │ │ │ ├── ATS_conformance.adoc │ │ │ │ ├── ATS_response.adoc │ │ │ │ └── ATS_query_response.adoc │ │ │ ├── advanced │ │ │ │ ├── ATS_conformance.adoc │ │ │ │ └── ATS_query_facets_response.adoc │ │ │ ├── ATS_class_simple.adoc │ │ │ └── ATS_class_advanced.adoc │ │ ├── Makefile │ │ ├── annex_bibliography.adoc │ │ ├── clause_1_scope.adoc │ │ ├── clause_5_conventions.adoc │ │ ├── README.md │ │ ├── clause_4_terms_and_definitions.adoc │ │ └── clause_8_advanced_facets.adoc │ ├── examples │ │ └── README.md │ ├── README.md │ └── openapi │ │ ├── schemas │ │ └── facets-queryables.yaml │ │ └── parameters │ │ └── facets.yaml ├── transactions │ ├── create-replace-update-delete-harvest │ │ ├── examples │ │ │ ├── xml │ │ │ │ └── README.md │ │ │ └── json │ │ │ │ ├── README.md │ │ │ │ ├── ex04_delete.adoc │ │ │ │ ├── ex06a_options.adoc │ │ │ │ └── ex06b_options.adoc │ │ ├── openapi │ │ │ ├── examples │ │ │ │ └── README.md │ │ │ ├── responses │ │ │ │ └── README.md │ │ │ ├── schemas │ │ │ │ └── README.md │ │ │ └── parameters │ │ │ │ └── README.md │ │ ├── xml │ │ │ └── wsdl │ │ │ │ └── README.md │ │ ├── standard │ │ │ ├── annex_ats.adoc │ │ │ ├── README.md │ │ │ ├── abstract_tests │ │ │ │ ├── ATS_class_features.adoc │ │ │ │ ├── ATS_class_simpletx.adoc │ │ │ │ ├── simpletx │ │ │ │ │ ├── update │ │ │ │ │ │ └── put │ │ │ │ │ │ │ ├── ATS_body.adoc │ │ │ │ │ │ │ ├── ATS_put-op.adoc │ │ │ │ │ │ │ ├── ATS_response.adoc │ │ │ │ │ │ │ ├── ATS_rid-exception.adoc │ │ │ │ │ │ │ └── ATS_content-type.adoc │ │ │ │ │ ├── delete │ │ │ │ │ │ ├── ATS_delete-op.adoc │ │ │ │ │ │ └── ATS_response.adoc │ │ │ │ │ └── insert │ │ │ │ │ │ ├── ATS_response-rid.adoc │ │ │ │ │ │ ├── ATS_post-op.adoc │ │ │ │ │ │ └── ATS_content-type.adoc │ │ │ │ ├── ATS_class_patch-update.adoc │ │ │ │ └── features │ │ │ │ │ ├── ATS_collection-items-end-point.adoc │ │ │ │ │ ├── crs │ │ │ │ │ ├── ATS_crs84.adoc │ │ │ │ │ ├── ATS_geojson.adoc │ │ │ │ │ └── ATS_storage-crs.adoc │ │ │ │ │ └── ATS_resource-end-point.adoc │ │ │ ├── annex_history.adoc │ │ │ ├── clause_7_harvest.adoc │ │ │ ├── requirements │ │ │ │ ├── requirements_class_harvest.adoc │ │ │ │ ├── records │ │ │ │ │ ├── crs │ │ │ │ │ │ ├── REQ_content-crs-header.adoc │ │ │ │ │ │ ├── REQ_gml-srsname.adoc │ │ │ │ │ │ ├── REQ_other-crs.adoc │ │ │ │ │ │ ├── REQ_default-crs.adoc │ │ │ │ │ │ └── REQ_crs84.adoc │ │ │ │ │ ├── REQ_resources-endpoint.adoc │ │ │ │ │ ├── REQ_schema.adoc │ │ │ │ │ ├── REQ_collection-endpoint.adoc │ │ │ │ │ └── REQ_resource-endpoint.adoc │ │ │ │ └── README.md │ │ │ ├── figures │ │ │ │ └── README.md │ │ │ ├── images │ │ │ │ └── README.md │ │ │ ├── clause_8_media_types.adoc │ │ │ └── recommendations │ │ │ │ └── records │ │ │ │ └── REC_storage-crs.adoc │ │ └── README.md │ └── README.md └── README.md ├── template ├── examples │ ├── json │ │ └── README.md │ └── xml │ │ └── README.md ├── standard │ ├── README.md │ ├── clause_5_conventions.adoc │ ├── clause_1_scope.adoc │ ├── recommendations │ │ └── cc │ │ │ ├── PER_per.adoc │ │ │ └── REC_rec.adoc │ ├── clause_7_media_types.adoc │ ├── clause_8_security_considerations.adoc │ ├── annex_ats.adoc │ ├── requirements │ │ ├── cc │ │ │ └── REQ_req.adoc │ │ ├── requirements_class_cc.adoc │ │ └── README.md │ ├── annex_n.adoc │ ├── annex_history.adoc │ ├── figures │ │ └── README.md │ ├── annex_bibliography.adoc │ ├── abstract_tests │ │ └── cc │ │ │ └── TEST001.adoc │ ├── clause_6_cc.adoc │ ├── clause_3_references.adoc │ ├── images │ │ └── README.md │ ├── clause_2_conformance.adoc │ └── clause_4_terms_and_definitions.adoc ├── openapi │ ├── examples │ │ └── README.md │ ├── schemas │ │ └── README.md │ ├── parameters │ │ └── README.md │ └── responses │ │ └── README.md ├── xml │ └── wsdl │ │ └── README.md └── README.md ├── proposals └── facets │ └── openapi │ └── schemas │ ├── facets.yaml │ ├── bucket.yaml │ └── facetResult.yaml ├── images └── crawlable_catalogue_example.png ├── .gitignore ├── CONTRIBUTORS.md └── DEVELOPMENT.md /core/standard/HTML_Gen.bat: -------------------------------------------------------------------------------- 1 | asciidoctor --trace -o ../20-004.html 20-004.adoc 2 | -------------------------------------------------------------------------------- /extensions/OpenSearch/clause_6_overview.adoc: -------------------------------------------------------------------------------- 1 | [[overview]] 2 | == Overview 3 | 4 | 5 | -------------------------------------------------------------------------------- /core/standard/recommendations/README.md: -------------------------------------------------------------------------------- 1 | This folder contains recommendations description. 2 | -------------------------------------------------------------------------------- /core/standard/.gitignore: -------------------------------------------------------------------------------- 1 | /19-087.html 2 | /19-087.pdf 3 | *.xml 4 | *.err 5 | *.log.txt 6 | *.pdf -------------------------------------------------------------------------------- /extensions/facets/standard/HTML_Gen.bat: -------------------------------------------------------------------------------- 1 | asciidoctor --trace -o ../document.html document.adoc 2 | -------------------------------------------------------------------------------- /core/standard/PDF_Gen.bat: -------------------------------------------------------------------------------- 1 | asciidoctor -r asciidoctor-pdf --trace -b pdf -o ../20-004.pdf 20-004.adoc 2 | -------------------------------------------------------------------------------- /extensions/facets/standard/recommendations/README.md: -------------------------------------------------------------------------------- 1 | This folder contains recommendations description. 2 | -------------------------------------------------------------------------------- /template/examples/json/README.md: -------------------------------------------------------------------------------- 1 | Add JSON examples to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /template/examples/xml/README.md: -------------------------------------------------------------------------------- 1 | Add XML examples to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /template/standard/README.md: -------------------------------------------------------------------------------- 1 | This folder contains the text for part 1 of the OGC API Features standard. 2 | -------------------------------------------------------------------------------- /extensions/facets/standard/PDF_Gen.bat: -------------------------------------------------------------------------------- 1 | asciidoctor -r asciidoctor-pdf --trace -b pdf -o ../document.pdf document.adoc 2 | -------------------------------------------------------------------------------- /template/openapi/examples/README.md: -------------------------------------------------------------------------------- 1 | Add OpenAPI YAML examples to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /template/openapi/schemas/README.md: -------------------------------------------------------------------------------- 1 | Add OpenAPI schema components to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /template/openapi/parameters/README.md: -------------------------------------------------------------------------------- 1 | Add OpenAPI parameter components to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /template/openapi/responses/README.md: -------------------------------------------------------------------------------- 1 | Add OpenAPI response components to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /proposals/facets/openapi/schemas/facets.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | description: Facets overview 3 | items: 4 | $ref: "./facetResult.yaml" 5 | -------------------------------------------------------------------------------- /images/crawlable_catalogue_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opengeospatial/ogcapi-records/HEAD/images/crawlable_catalogue_example.png -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/examples/xml/README.md: -------------------------------------------------------------------------------- 1 | Add XML examples to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /template/standard/clause_5_conventions.adoc: -------------------------------------------------------------------------------- 1 | == Conventions and background 2 | 3 | See <>, Clauses 5 and 6. 4 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/examples/json/README.md: -------------------------------------------------------------------------------- 1 | Add JSON examples to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /core/openapi/parameters/recordId.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: recordId 3 | in: path 4 | description: local identifier of a record 5 | required: true 6 | schema: 7 | type: string 8 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/openapi/examples/README.md: -------------------------------------------------------------------------------- 1 | Add OpenAPI YAML examples to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /core/openapi/parameters/catalogId.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: catalogId 3 | in: path 4 | description: local identifier of a catalog 5 | required: true 6 | schema: 7 | type: string 8 | -------------------------------------------------------------------------------- /extensions/facets/standard/clause_9_security.adoc: -------------------------------------------------------------------------------- 1 | [[security-section]] 2 | == Security Considerations 3 | 4 | See <>, Clause 10. 5 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/openapi/responses/README.md: -------------------------------------------------------------------------------- 1 | Add OpenAPI response components to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/openapi/schemas/README.md: -------------------------------------------------------------------------------- 1 | Add OpenAPI schema components to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/openapi/parameters/README.md: -------------------------------------------------------------------------------- 1 | Add OpenAPI parameter components to this directory. If not used, delete the directory. 2 | -------------------------------------------------------------------------------- /template/standard/clause_1_scope.adoc: -------------------------------------------------------------------------------- 1 | == Scope 2 | 3 | This document specifies the behavior of Web APIs that provide access to features ... 4 | 5 | (( add scope statement )) 6 | -------------------------------------------------------------------------------- /template/standard/recommendations/cc/PER_per.adoc: -------------------------------------------------------------------------------- 1 | [[per_cc_per]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Permission {counter:per-id}* |*/per/cc/per* 5 | ^|A |Abc MAY .... 6 | |=== 7 | -------------------------------------------------------------------------------- /template/xml/wsdl/README.md: -------------------------------------------------------------------------------- 1 | # Standard template 2 | 3 | This folder is a placeholder for a WSDL 2.0 description that can be an 4 | XML-encoded alternative for an OpenAPI 3.0 document. 5 | -------------------------------------------------------------------------------- /template/standard/clause_7_media_types.adoc: -------------------------------------------------------------------------------- 1 | [[mediatypes]] 2 | == Media Types 3 | 4 | See <>, Clause 10. 5 | 6 | (( add additional text as needed )) 7 | -------------------------------------------------------------------------------- /template/standard/recommendations/cc/REC_rec.adoc: -------------------------------------------------------------------------------- 1 | [[rec_cc_rec]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/cc/rec* 5 | ^|A |Xyz SHOULD ... 6 | |=== 7 | -------------------------------------------------------------------------------- /template/standard/clause_8_security_considerations.adoc: -------------------------------------------------------------------------------- 1 | == Security Considerations 2 | 3 | See <>, Clause 11. 4 | 5 | (( add additional text as needed )) 6 | -------------------------------------------------------------------------------- /template/standard/annex_ats.adoc: -------------------------------------------------------------------------------- 1 | [[ats]] 2 | [appendix] 3 | :appendix-caption: Annex 4 | == Abstract Test Suite (Normative) 5 | 6 | (( add test cases )) 7 | 8 | include::abstract_tests/cc/TEST001.adoc[] 9 | -------------------------------------------------------------------------------- /template/standard/requirements/cc/REQ_req.adoc: -------------------------------------------------------------------------------- 1 | [[req_cc_req]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/cc/req* 5 | ^|A |Xyz SHALL ... 6 | ^|B |Abc SHALL ... 7 | |=== 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | core/*.html 2 | core/*.pdf 3 | core/relaton/* 4 | core/iev/* 5 | core/standard/*.html 6 | .vscode/settings.json 7 | .DS_Store 8 | core/standard/document.presentation.xml 9 | extensions/*/standard/*.html 10 | -------------------------------------------------------------------------------- /core/openapi/schemas/link.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | allOf: 4 | - $ref: 'linkBase.yaml' 5 | - type: object 6 | required: 7 | - href 8 | properties: 9 | href: 10 | type: string 11 | -------------------------------------------------------------------------------- /core/examples/README.md: -------------------------------------------------------------------------------- 1 | # Examples 2 | 3 | This sub-folder contains the following: 4 | 5 | * [Examples of catalog responses in JSON/GeoJSON](json) 6 | * [Examples of extending OGC API endpoints to behave like catalogs](yaml) 7 | -------------------------------------------------------------------------------- /core/openapi/schemas/format.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | anyOf: 4 | - required: 5 | - name 6 | - required: 7 | - mediaType 8 | properties: 9 | name: 10 | type: string 11 | mediaType: 12 | type: string 13 | -------------------------------------------------------------------------------- /extensions/facets/examples/README.md: -------------------------------------------------------------------------------- 1 | # Examples 2 | 3 | The sub-folders contain examples of responses of implementations of 4 | OGC API - Records - Part 2: Facets. 5 | 6 | * [JSON/GeoJSON examples](json) 7 | * [YAML examples](yaml) 8 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/xml/wsdl/README.md: -------------------------------------------------------------------------------- 1 | # Standard template 2 | 3 | This folder is a placeholder for a WSDL 2.0 description that can be an 4 | XML-encoded alternative for an OpenAPI 3.0 document. 5 | -------------------------------------------------------------------------------- /core/examples/yaml/collections/localResourcesItem.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | allOf: 3 | - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/collection.yaml' 4 | - $ref: '../../../openapi/schemas/recordCommonProperties.yaml' 5 | -------------------------------------------------------------------------------- /core/examples/yaml/processes/localResourcesItem.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | allOf: 3 | - $ref: 'https://schemas.opengis.net/ogcapi/processes/part1/1.0/openapi/schemas/processSummary.yaml' 4 | - $ref: '../../../openapi/schemas/recordCommonProperties.yaml' 5 | -------------------------------------------------------------------------------- /core/release-notes.md: -------------------------------------------------------------------------------- 1 | ## Version 1.0.0 2 | 3 | |Status: |Published 4 | | --- | --- | 5 | |Document reference: |[OGC 20-004r1](https://docs.ogc.org/is/20-004r1/20-004r1.html) 6 | |Date: |2024-12-20 7 | 8 | This version is the first release. 9 | -------------------------------------------------------------------------------- /extensions/transactions/README.md: -------------------------------------------------------------------------------- 1 | This directory contains the extension that handle simple translactions (i.e. mutations on single records), harvesting and (eventually) complex transactions (i.e. atomic and batch mutations to multiple records). 2 | -------------------------------------------------------------------------------- /core/openapi/schemas/roles.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | The list of duties, job functions or permissions assigned by the system 4 | and associated with the context of this member. 5 | type: array 6 | minItems: 1 7 | items: 8 | type: string 9 | -------------------------------------------------------------------------------- /template/standard/annex_n.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Title ( {Normative/Informative} ) 4 | 5 | [NOTE] 6 | Place other Annex material in sequential annexes beginning with "B" and leave final two annexes for the Revision History and Bibliography 7 | -------------------------------------------------------------------------------- /core/standard/annex_history.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | == Revision History 3 | 4 | [width="90%",options="header"] 5 | |=== 6 | |Date |Release |Contributors | Primary clauses modified |Description 7 | |2024-12-19 |1.0.0 |P. Vretanos, T. Kralidis, A. Tzotsos |all|Review for 1.0.0. 8 | |=== 9 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/atom/REQ_media-type.adoc: -------------------------------------------------------------------------------- 1 | [[req_atom_media-type]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/atom/media-type* 5 | ^|A |`200`-responses of the server SHALL support the media type `application/atom+xml`. 6 | |=== 7 | -------------------------------------------------------------------------------- /core/openapi/responses/Catalogs.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | Information about the list of catalogs offered by this service. 4 | content: 5 | application/json: 6 | schema: 7 | $ref: '../schemas/catalogs.yaml' 8 | text/html: 9 | schema: 10 | type: string 11 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/query-param-profile/PER_default.adoc: -------------------------------------------------------------------------------- 1 | [[per_query-param-profile_default]] 2 | [permission] 3 | ==== 4 | [%metadata] 5 | identifier:: /per/query-param-profile/default 6 | part:: The server MAY specify a default value for the query parameter "profile". 7 | ==== 8 | -------------------------------------------------------------------------------- /extensions/facets/standard/recommendations/simple/PER_queryables.adoc: -------------------------------------------------------------------------------- 1 | [[per_simple_queryables]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/per/simple/queryables* 5 | ^|A |A queryables response MAY indicate whether facets can be applied on a given queryable. 6 | |=== 7 | -------------------------------------------------------------------------------- /template/standard/annex_history.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Revision History 4 | 5 | [cols="12,18,12,12,46",options="header"] 6 | |=== 7 | |Date |Release |Editor | Primary clauses modified |Description 8 | |2019-xx-xx |1.0.0-SNAPSHOT |J. Doe |all |initial version 9 | |=== 10 | -------------------------------------------------------------------------------- /core/examples/json/defaultSortOrder.json: -------------------------------------------------------------------------------- 1 | { 2 | . 3 | . 4 | . 5 | "defaultSortOrder": [ 6 | { 7 | "field": "updated", 8 | "direction": "desc" 9 | }, 10 | { 11 | "field": "area", 12 | "direction": "desc" 13 | } 14 | ], 15 | . 16 | . 17 | . 18 | } 19 | -------------------------------------------------------------------------------- /core/openapi/schemas/defaultSortOrder.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: array 3 | items: 4 | type: object 5 | required: 6 | - field 7 | - direction 8 | properties: 9 | field: 10 | type: string 11 | direction: 12 | type: string 13 | enum: 14 | - asc 15 | - desc 16 | -------------------------------------------------------------------------------- /core/openapi/schemas/landingPage.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | allOf: 3 | - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/landingPage.yaml' 4 | - type: object 5 | properties: 6 | linkTemplates: 7 | type: array 8 | items: 9 | $ref: 'linkTemplate.yaml' 10 | -------------------------------------------------------------------------------- /core/openapi/responses/BadRequest.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | A client error occurred. 4 | content: 5 | application/json: 6 | schema: 7 | $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' 8 | text/html: 9 | schema: 10 | type: string 11 | -------------------------------------------------------------------------------- /core/openapi/responses/ServerError.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | A server error occurred. 4 | content: 5 | application/json: 6 | schema: 7 | $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' 8 | text/html: 9 | schema: 10 | type: string 11 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-geo-relation.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_param-geo-relation]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/param-geo-relation* 5 | 6 | The default value of the `geo:relation` parameter SHALL be `intersects`. 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/facets/standard/annex_history.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Revision History 4 | 5 | [cols="12,18,12,12,46",options="header"] 6 | |=== 7 | |Date |Release |Editor | Primary clauses modified |Description 8 | |2024-05-29 |Template |T. Kralidis|all |initial template 9 | |=== 10 | -------------------------------------------------------------------------------- /extensions/facets/standard/requirements/simple/REQ_media_type.adoc: -------------------------------------------------------------------------------- 1 | [[req_simple_media_type]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/simple/media_type* 5 | ^|A |The Facets resource SHALL support the HTTP GET operation and the media type `application/facets+json`. 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-time-relation.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_param-time-relation]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/param-time-relation* 5 | 6 | The default value of the `time:relation` parameter SHALL be `intersects`. 7 | |=== 8 | -------------------------------------------------------------------------------- /template/standard/requirements/requirements_class_cc.adoc: -------------------------------------------------------------------------------- 1 | [[rc_cc]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-features-1/1.0/req/cc 6 | |Target type |Web API 7 | |Dependency |<> 8 | |=== 9 | -------------------------------------------------------------------------------- /core/openapi/responses/Record.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | Fetch the record with id `recordId` in the record collection 4 | with id `collectionId` 5 | content: 6 | application/geo+json: 7 | schema: 8 | $ref: '../schemas/recordGeoJSON.yaml' 9 | text/html: 10 | schema: 11 | type: string 12 | -------------------------------------------------------------------------------- /core/openapi/responses/InvalidParameter.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | A query parameter has an invalid value. 4 | content: 5 | application/json: 6 | schema: 7 | $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' 8 | text/html: 9 | schema: 10 | type: string 11 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/query-param-profile/REC_link-header.adoc: -------------------------------------------------------------------------------- 1 | [[rec_query-param-profile_link-header]] 2 | [recommendation] 3 | ==== 4 | [%metadata] 5 | identifier:: /rec/query-param-profile/link-header 6 | part:: The response SHOULD include links to the selected profile(s) in the HTTP response headers. 7 | ==== 8 | -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | * Chuck Heazel [@cmheazel](https://github.com/cmheazel) 2 | * Panagiotis (Peter) A. Vretanos [@pvretano](https://github.com/pvretano) 3 | * Clemens Portele [@cportele](https://github.com/cportele) 4 | * Tom Kralidis [@tomkralidis](https://github.com/tomkralidis) 5 | * Angelos Tzotsos [@kalxas](https://github.com/kalxas) 6 | 7 | -------------------------------------------------------------------------------- /core/openapi/schemas/collection.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | allOf: 3 | - $ref: 'catalog.yaml' 4 | - type: object 5 | properties: 6 | itemType: 7 | description: |- 8 | For a collection of records, the itemType is 9 | fixed to "record". 10 | type: string 11 | enum: 12 | - record 13 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/atom/REQ_atom-conformance.adoc: -------------------------------------------------------------------------------- 1 | [[req_atom_conformance]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/atom/conformance* 5 | 2+|The list of Conformance Classes advertised by the API SHALL include: 6 | ^|A |http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/atom 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/annex_ats.adoc: -------------------------------------------------------------------------------- 1 | [[ats]] 2 | [appendix] 3 | :appendix-caption: Annex 4 | == Abstract Test Suite (Normative) 5 | 6 | NOTE: Conformance classes and test cases for all requirements classes and requirements will be added once the requirements classes and requirements are final. 7 | -------------------------------------------------------------------------------- /extensions/facets/standard/requirements/requirements_class_simple.adoc: -------------------------------------------------------------------------------- 1 | [[rc_simple]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-records-2/1.0/req/simple 6 | |Target type |Web API 7 | |Dependency |<> 8 | |=== 9 | -------------------------------------------------------------------------------- /extensions/facets/standard/requirements/requirements_class_advanced.adoc: -------------------------------------------------------------------------------- 1 | [[rc_advanced]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-records-2/1.0/req/advanced 6 | |Target type |Web API 7 | |Dependency |<> 8 | |=== 9 | -------------------------------------------------------------------------------- /extensions/facets/standard/requirements/simple/REQ_conformance.adoc: -------------------------------------------------------------------------------- 1 | [[req_simple_conformance]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/simple/conformance* 5 | ^|A |The list of Conformance Classes advertised by the API SHALL include: 6 | `http://www.opengis.net/spec/ogcapi-records-2/1.0/conf/simple` 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/facets/standard/requirements/advanced/REQ_conformance.adoc: -------------------------------------------------------------------------------- 1 | [[req_advanced_conformance]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/advanced/conformance* 5 | 2+|The list of Conformance Classes advertised by the API SHALL include: 6 | ^|A |http://www.opengis.net/spec/ogcapi-records-2/1.0/conf/advanced 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/facets/standard/requirements/advanced/REQ_query_facets_response.adoc: -------------------------------------------------------------------------------- 1 | [[req_advanced_query_facets_response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/advanced/query_facets_response* 5 | ^|A |Only properties matching the property names specified using the `facets` parameter SHALL be in the results set. 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/README.md: -------------------------------------------------------------------------------- 1 | This folder contains the text for part 4 of the OGC API Features standard. 2 | 3 | [OGC API - Feautures - Part 4: Simple Transactions](https://htmlpreview.github.io/?https://github.com/opengeospatial/ogcapi-features/blob/master/extensions/transactions/simple/standard/20-002.html) 4 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/ATS_class_features.adoc: -------------------------------------------------------------------------------- 1 | [[ats_features]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-features-4/1.0/req/features 6 | |Target type |Web API 7 | |Dependency |<> 8 | |=== 9 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/annex_history.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Revision History 4 | 5 | [cols="12,18,12,12,46",options="header"] 6 | |=== 7 | |Date |Release |Editor | Primary clauses modified |Description 8 | |2025-04-13 |1.0.0-DRAFT |P. Vretanos |all |initial version 9 | |=== 10 | -------------------------------------------------------------------------------- /template/standard/figures/README.md: -------------------------------------------------------------------------------- 1 | Figures go here. 2 | 3 | Each figure is a separate file with the naming convention: 4 | 5 | "PTm_FIGn.xxx" where "m" is a number with leading zeroes appropriate for the total number of parts, "n" is a number with leading zeroes appropriate for the total number of figures and "xxx" is the appropriate extension for the file type. -------------------------------------------------------------------------------- /core/openapi/responses/ConformanceDeclaration.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | The URIs of all conformance classes supported by the server. 4 | content: 5 | application/json: 6 | schema: 7 | $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/confClasses.yaml' 8 | text/html: 9 | schema: 10 | type: string 11 | -------------------------------------------------------------------------------- /core/openapi/responses/Sortables.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | A list of properties by which the server response may be sorted. 4 | content: 5 | application/json: 6 | schema: 7 | type: object 8 | description: 9 | A JSON Schema document that defines all the sortables. 10 | text/html: 11 | schema: 12 | type: string 13 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/clause_7_harvest.adoc: -------------------------------------------------------------------------------- 1 | [[harvest_clause]] 2 | == Requirements Class "Harvest" 3 | 4 | === Overview 5 | 6 | include::requirements/requirements_class_harvest.adoc[] 7 | 8 | This clause defines requirements for a harvesting operation when the resource type is a record. 9 | 10 | T.B.D. 11 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/requirements_class_harvest.adoc: -------------------------------------------------------------------------------- 1 | [[rc_harvest]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-records-3/1.0/req/harvest 6 | |Target type |Web API 7 | |Dependency |T.B.D. 8 | |Conditional Dependency |T.B.D. 9 | |=== 10 | -------------------------------------------------------------------------------- /proposals/facets/openapi/schemas/bucket.yaml: -------------------------------------------------------------------------------- 1 | type: object 2 | description: A bucket is the number of items sharing a certain value for a property 3 | required: 4 | - key 5 | - count 6 | properties: 7 | key: 8 | type: string 9 | description: Bucket value 10 | count: 11 | type: number 12 | description: Number of hits for this value -------------------------------------------------------------------------------- /template/standard/annex_bibliography.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | [[Bibliography]] 4 | = Bibliography 5 | 6 | * [[OAFeat-Guide]] Heazel, Ch.: *Guide to OGC API - Features*, https://example.org/fixme 7 | * [[OpenAPI]] Open API Initiative: *OpenAPI Specification 3.0.2*, 8 | https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md 9 | -------------------------------------------------------------------------------- /extensions/facets/standard/annex_ats.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | [[ats]] 4 | == Conformance Class Abstract Test Suite (Normative) 5 | 6 | === Conformance Class: Simple Facets 7 | 8 | include::abstract_tests/ATS_class_simple.adoc[] 9 | 10 | === Conformance Class: Advanced Facets 11 | 12 | include::abstract_tests/ATS_class_advanced.adoc[] 13 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/ATS_class_simpletx.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-features-4/1.0/req/create-replace-delete 6 | |Target type |Web API 7 | |Dependency |<> 8 | |=== 9 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_param-language.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_param-language]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/param-language* 5 | 6 | Servers SHOULD support the language (`language`) parameter for the search operation (method: GET, path: `/collections/{collectionId}/items`). 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_param-geometry.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_param-geometry]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/param-geometry* 5 | ^|A |Servers SHOULD support the geometry (`geo:geometry`) parameter for the search operation (method: GET, path: `/collections/{collectionId}/items`). 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_param-geo-name.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_param-geo-name]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/param-geo-name* 5 | ^|A |Servers SHOULD support the place name search parameter (`geo:name`) for the search operation (method: GET, path: `/collections/{collectionId}/items`). 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_param-startpage.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_param-startPage]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/param-startPage* 5 | ^|A |Servers SHOULD support the start page (`startPage`) parameter for the search operation (method: GET, path: `/collections/{collectionId}/items`). 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_descriptiondoc-op.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_descriptiondoc-op]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/descriptiondoc-op* 5 | ^|A |The HTTP GET operation SHALL be supported at the <> endpoint specified in the server's <>. 6 | |=== 7 | -------------------------------------------------------------------------------- /core/examples/json/templated-link-ref.json: -------------------------------------------------------------------------------- 1 | { 2 | "rel": "item", 3 | "type": "image/png", 4 | "title": "World Ozone and Ultraviolet Radiation Data Centre (WOUDC) stations", 5 | "uriTemplate": "https://geo.woudc.org/ows?service=WMS&version=1.3.0&request=GetMap&crs={crs}&bbox={bbox}&layers=stations&width={width}&height={height}&format=image/png", 6 | "varBase": "variables.json" 7 | } 8 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_param-startindex.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_param-startIndex]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/param-startIndex* 5 | ^|A |Servers SHOULD support the start index (`startIndex`) parameter for the search operation (method: GET, path: `/collections/{collectionId}/items`). 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/README.md: -------------------------------------------------------------------------------- 1 | # Extensions 2 | 3 | This directory is where extensions to the "OGC API - Records - Part 1: Core" 4 | specification should live. 5 | 6 | These are extensions that are within the charter of the SWG and are being actively worked on. **Proposed** extensions should be created in the [proposals](https://github.com/opengeospatial/ogcapi-records/tree/master/proposals) directory. 7 | -------------------------------------------------------------------------------- /core/openapi/responses/NotFound.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | The requested resource does not exist on the server. For example, 4 | a path parameter had an incorrect value. 5 | content: 6 | application/json: 7 | schema: 8 | $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' 9 | text/html: 10 | schema: 11 | type: string 12 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/requirements_class_query-param-profile.adoc: -------------------------------------------------------------------------------- 1 | [[rc_query-param-profile]] 2 | [requirements_class] 3 | ==== 4 | [%metadata] 5 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/query-param-profile 6 | subject:: Web API 7 | requirement:: /req/query-param-profile/definition 8 | requirement:: /req/query-param-profile/response 9 | ==== 10 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_param-geo-relation.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_param-geo-relation]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/param-geo-relation* 5 | ^|A |Servers SHOULD support the geometry relation (`geo:relation`) parameter for the search operation (method: GET, path: `/collections/{collectionId}/items`). 6 | |=== 7 | -------------------------------------------------------------------------------- /core/openapi/schemas/catalogs.yaml: -------------------------------------------------------------------------------- 1 | allOf: 2 | - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/collections.yaml' 3 | - type: object 4 | properties: 5 | collections: 6 | type: array 7 | items: 8 | $ref: 'catalog.yaml' 9 | linkTemplates: 10 | type: array 11 | items: 12 | $ref: 'linkTemplate.yaml' 13 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_param-inputencoding.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_param-inputencoding]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/param-inputencoding* 5 | 6 | Servers SHOULD support the input encoding (`inputencoding`) parameter for the search operation (method: `GET`, path: `/collections/{collectionId}/items`). 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_param-proximity.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_param-proximity]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/param-proximity* 5 | ^|A |Servers SHOULD support the proximity parameters (`geo:lat`, `geo:lon`, `geo:radius`) for the search operation (method: GET, path: `/collections/{collectionId}/items`). 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_param-time-relation.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_param-time-relation]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/param-time-relation* 5 | ^|A |Servers SHOULD support the geometry relation (`geo:relation`) parameter for the search operation (method: GET, path: `/collections/{collectionId}/items`). 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_param-outputencoding.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_param-outputencoding]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/param-outputencoding* 5 | 6 | Servers SHOULD support the output encoding (`outputencoding`) parameter for the search operation (method: `GET`, path: `/collections/{collectionId}/items`). 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/figures/README.md: -------------------------------------------------------------------------------- 1 | Figures go here. 2 | 3 | Each figure is a separate file with the naming convention: 4 | 5 | "PTm_FIGn.xxx" where "m" is a number with leading zeroes appropriate for the total number of parts, "n" is a number with leading zeroes appropriate for the total number of figures and "xxx" is the appropriate extension for the file type. -------------------------------------------------------------------------------- /template/standard/abstract_tests/cc/TEST001.adoc: -------------------------------------------------------------------------------- 1 | ===== Test case title 2 | 3 | (( additional discussion, if needed )) 4 | 5 | ====== a) Test Purpose: 6 | (( description )) 7 | 8 | ====== b) Pre-conditions: 9 | * (( list all preconditions )) 10 | 11 | ====== c) Test Method: 12 | * (( steps to execute and assertions to test )) 13 | 14 | ====== d) References: 15 | * <> 16 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/requirements_class_opensearch.adoc: -------------------------------------------------------------------------------- 1 | [[rc_opensearch]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/opensearch 6 | |Target type |Web API 7 | |Dependency |http://www.opengis.net/spec/ogcapi_common-1/1.0/req/core 8 | |Dependency |http://www.opengis.net/spec/ogcapi_common-1/1.0/req/collections 9 | |=== 10 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-language-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_language-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/language-response* 5 | ^|Condition |Server implements recommendation <>. 6 | ^|A |The response records SHALL be presented in the requested language. 7 | |=== 8 | -------------------------------------------------------------------------------- /core/openapi/schemas/recordCollectionGeoJSON.yaml: -------------------------------------------------------------------------------- 1 | allOf: 2 | - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/featureCollectionGeoJSON.yaml' 3 | - type: object 4 | properties: 5 | features: 6 | type: array 7 | items: 8 | $ref: 'recordGeoJSON.yaml' 9 | linkTemplates: 10 | type: array 11 | items: 12 | $ref: 'linkTemplate.yaml' 13 | -------------------------------------------------------------------------------- /extensions/facets/README.md: -------------------------------------------------------------------------------- 1 | # OGC API - Records - Part 2: Facets 2 | 3 | This folder contains the content for the OGC API - Records - Part 2: Facets standard. 4 | 5 | The repo is organized as follows: 6 | 7 | * standard - the main standard document content 8 | - organized in multiple sections and directories 9 | * openapi - normative OpenAPI components specified by the standard 10 | * examples - JSON and XML examples 11 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/atom/PER_foreign-markup.adoc: -------------------------------------------------------------------------------- 1 | [[per_core_foreign-markup]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Permission {counter:per-id}* |*/per/core/foreign-markup* 5 | 6 | Servers MAY include additional foreign markup from other vocabularies in an ATOM document as per the extension provisions specified in the https://datatracker.ietf.org/doc/html/rfc4287#section-6[The Atom Syndication Format] specification. 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_autodiscovery-link.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_autodiscovery-link]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/autodiscovery-link* 5 | ^|A |An autodiscovery link (relation: `search`, type: `application/opensearchdescription+xml`) SHALL be included in the links section of the collection information object (path: `/collection/{collectionId}`). 6 | |=== 7 | 8 | 9 | -------------------------------------------------------------------------------- /core/openapi/parameters/profile.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: profile 3 | in: query 4 | description: |- 5 | One or more identifiers that provide information about additional 6 | semantics (constraints, conventions, extensions), in addition to 7 | those defined by the media type, that are associated with the 8 | target resource. 9 | required: false 10 | schema: 11 | type: array 12 | items: 13 | type: string 14 | explode: false 15 | style: form 16 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-outputencoding-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_outputencoding-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/outputencoding-response* 5 | ^|Condition |Server implements recommendation <>. 6 | ^|A |The response records SHALL be presented in the requested output encoding. 7 | |=== 8 | -------------------------------------------------------------------------------- /template/standard/clause_6_cc.adoc: -------------------------------------------------------------------------------- 1 | == Requirements Class "CC" 2 | 3 | [[cc-overview]] 4 | === Overview 5 | 6 | include::requirements/requirements_class_cc.adoc[] 7 | 8 | (( add text how this part extends OGC API Features )) 9 | 10 | (( use the following as templates for normative statements: )) 11 | 12 | include::requirements/cc/REQ_req.adoc[] 13 | 14 | include::recommendations/cc/REC_rec.adoc[] 15 | 16 | include::recommendations/cc/PER_per.adoc[] 17 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/REC_title.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-collection_title]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/title* 6 | // 7 | //A catalog SHOULD include the `title` property. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/catalog-title 14 | part:: A catalog SHOULD include the `title` property. 15 | ==== -------------------------------------------------------------------------------- /template/README.md: -------------------------------------------------------------------------------- 1 | # Standard template 2 | 3 | This folder contains the content for the OGC API - Features - Part n: TBD standard. 4 | 5 | The repo is organized as follows: 6 | 7 | * standard - the main standard document content 8 | - organized in multiple sections and directories 9 | * openapi - normative OpenAPI components specified by the standard 10 | * xml - normative XML/XSD components specified by the standard 11 | * examples - JSON and XML examples 12 | -------------------------------------------------------------------------------- /core/examples/yaml/processes/localResourcesCatalog.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | allOf: 3 | - $ref: 'https://schemas.opengis.net/ogcapi/processes/part1/1.0/openapi/schemas/processList.yaml' 4 | - $ref: '../../../openapi/schemas/catalogCommonProperties.yaml' 5 | - type: object 6 | properties: 7 | itemType: 8 | type: string 9 | enum: 10 | - record 11 | recordsArrayName: 12 | type: string 13 | enum: 14 | - processes 15 | -------------------------------------------------------------------------------- /core/openapi/parameters/ids.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: ids 3 | in: query 4 | description: |- 5 | The optional ids parameter allows a specific list of records, identified 6 | by their identifiers, to be fetched from a catalog. Only records whose 7 | identifier matches one of the values listed for this parameter shall appear 8 | in the response. 9 | required: false 10 | schema: 11 | type: array 12 | items: 13 | type: string 14 | explode: false 15 | style: form 16 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/query-param-profile/PER_profiles-of-media-type.adoc: -------------------------------------------------------------------------------- 1 | [[per_query-param-profile_profiles-of-media-type]] 2 | [permission] 3 | ==== 4 | [%metadata] 5 | identifier:: /per/query-param-profile/profiles-of-media-type 6 | part:: For any media type that can represent a resource, the server MAY support only a subset of the profiles offered for the resource. 7 | part:: The subset of supported profiles for a media type MAY be empty, too. 8 | ==== 9 | -------------------------------------------------------------------------------- /core/examples/yaml/collections/localResourcesCatalog.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | allOf: 3 | - $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/collections.yaml' 4 | - $ref: '../../../openapi/schemas/catalogCommonProperties.yaml' 5 | - type: object 6 | properties: 7 | itemType: 8 | type: string 9 | enum: 10 | - record 11 | recordsArrayName: 12 | type: string 13 | enum: 14 | - collections 15 | -------------------------------------------------------------------------------- /core/openapi/responses/NotAcceptable.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | Content negotiation failed. For example, the `Accept` header submitted 4 | in the request did not support any of the media types supported by the 5 | server for the requested resource. 6 | content: 7 | application/json: 8 | schema: 9 | $ref: 'https://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/schemas/exception.yaml' 10 | text/html: 11 | schema: 12 | type: string 13 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/REC_contact.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core_contact]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/contact* 6 | //^|A |A contact `country` property SHOULD use ISO 3166-1 notation. 7 | //|=== 8 | 9 | [recommendation] 10 | ==== 11 | [%metadata] 12 | identifier:: /rec/record-core/contact 13 | part:: A contact `country` property SHOULD use ISO 3166-1 notation. 14 | ==== -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/simpletx/update/put/ATS_body.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete_update_put-body]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/create-replace-delete/update/put/body* 5 | ^|Test Purpose | 6 | ^|Requirement | 7 | ^|Dependencies | 8 | ^|Test Method | 9 | |=== 10 | 11 | ((The body of a PUT request shall contain a representation of the replacement resource.)) 12 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/simpletx/update/put/ATS_put-op.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete_update_put-put-op]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/req/create-replace-delete/update/put/put-op* 5 | ^|Test Purpose | 6 | ^|Requirement | 7 | ^|Dependencies | 8 | ^|Test Method | 9 | |=== 10 | 11 | ((For every resource in a collection, the server shall support the HTTP PUT operation.)) 12 | -------------------------------------------------------------------------------- /core/openapi/parameters/type.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: type 3 | in: query 4 | description: |- 5 | The optional type parameter allows a specific list of records, identified 6 | by their resource type, to be fetched from a catalog. Only records whose 7 | resource type matches one of the values listed for this parameter shall 8 | appear in the response. 9 | required: false 10 | schema: 11 | type: array 12 | items: 13 | type: string 14 | explode: false 15 | style: form 16 | 17 | 18 | -------------------------------------------------------------------------------- /extensions/OpenSearch/annex_history.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Revision History 4 | 5 | [cols="12,18,12,12,46",options="header"] 6 | |=== 7 | |Date |Release |Editor | Primary clauses modified |Description 8 | |2020-01-13 |Template |C. Heazel |all |initial template 9 | |2020-04-22 |1.0-dev |T. Kralidis |all|changes to reflect Records, editorial updates, add Q parameter to clause 7 10 | |2021-06-18 |1.0-dev |T. Kralidis |all|full review for 1.0.0-draft.1 11 | |=== 12 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/REC_response-query.adoc: -------------------------------------------------------------------------------- 1 | [[rec_opensearch_response-query]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/opensearch/response-query* 5 | ^|A |In the response to a <>, server SHOULD inc 6 | lude a https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#the-query-element[Query element] that exposes the query parameters used to gen 7 | erate this response. 8 | |=== 9 | -------------------------------------------------------------------------------- /core/standard/annex_stac.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | [[annex_stac]] 4 | == Crosswalk between STAC and OGC API - Records - Part 1 Core (Informative) 5 | 6 | The document https://github.com/stac-utils/stac-crosswalks/tree/master/ogcapi-records#crosswalk-between-stac-and-ogc-api---records["Crosswalk between STAC and OGC API - Records"] presents a comparison between this standard and the https://github.com/radiantearth/stac-api-spec/tree/v1.0.0[Spatial Temporal Asset Catalog, V 1.0.0]. 7 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/REC_description.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-collection_description]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/description* 6 | // 7 | //A catalog SHOULD include the `description` property. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/catalog-description 14 | part:: A catalog SHOULD include the `description` property. 15 | ==== -------------------------------------------------------------------------------- /core/openapi/responses/LandingPage.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | description: |- 3 | The landing page provides links to the API definition (link relations 4 | `service-desc` and `service-doc`), the Conformance declaration (path 5 | `/conformance`, link relation `conformance`), and the Record Collections 6 | (path `/collections`, link relation `data`). 7 | content: 8 | application/json: 9 | schema: 10 | $ref: '../schemas/landingPage.yaml' 11 | text/html: 12 | schema: 13 | type: string 14 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/query-param-profile/REC_negotiation.adoc: -------------------------------------------------------------------------------- 1 | [[rec_query-param-profile_negotiation]] 2 | [recommendation] 3 | ==== 4 | [%metadata] 5 | identifier:: /rec/query-param-profile/negotiation 6 | part:: If the server supports one or more of the requested profile(s) for the media type and resource, these profiles SHOULD be used for the response. 7 | part:: The profile negotiation SHOULD NOT result in an error, e.g., because a requested profile cannot be provided. 8 | ==== 9 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/simpletx/delete/ATS_delete-op.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete_delete_delete-op]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/create-replace-delete/delete/delete-op* 5 | ^|Test Purpose | 6 | ^|Requirement | 7 | ^|Dependencies | 8 | ^|Test Method | 9 | |=== 10 | 11 | ((For every resource in a collection, the server shall support the HTTP DELETE operation.)) 12 | 13 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/simpletx/delete/ATS_response.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete_delete_response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/create-replace-delete/delete/response* 5 | ^|Test Purpose | 6 | ^|Requirement | 7 | ^|Dependencies | 8 | ^|Test Method | 9 | |=== 10 | 11 | ((A successful execution of the operation shall be reported as a response with a HTTP status code '200'.)) 12 | -------------------------------------------------------------------------------- /core/examples/json/conformance.json: -------------------------------------------------------------------------------- 1 | { 2 | "conformsTo": [ 3 | "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core", 4 | "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30", 5 | "http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/searchable-catalog", 6 | "http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/oas30", 7 | "http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/json", 8 | "http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/html" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_contact.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_contact]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/contact* 6 | // 7 | //See requirement <>. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/record-collection/contact 15 | part:: See requirement <>. 16 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-core/REQ_time-zone.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-core_time-zone]] 2 | 3 | //[width="90%",cols="2,7a"] 4 | //|=== 5 | //^|*Requirement {counter:req-num}* |*/req/record-core/time-zone* 6 | //^|A |Timestamps in the `time` member in a record SHALL use UTC ("Z") as the time zone. 7 | //|=== 8 | 9 | [requirement] 10 | ==== 11 | [%metadata] 12 | identifier:: /req/record-core/time-zone 13 | part:: Timestamps in the `time` member in a record SHALL use UTC ("Z") as the time zone. 14 | ==== -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/simpletx/update/put/ATS_response.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete_update_put_resoponse]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/create-replace-delete/update/put/response* 5 | ^|Test Purpose | 6 | ^|Requirement | 7 | ^|Dependencies | 8 | ^|Test Method | 9 | |=== 10 | 11 | ((A successful execution of the operation shall be reported as a response with a HTTP status code '200'.)) 12 | 13 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/html/REQ_definition.adoc: -------------------------------------------------------------------------------- 1 | [[req_html_definition]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/html/definition* 6 | //^|A |Every `200` response of an operation of the server SHALL support the media type `text/html`. 7 | //|=== 8 | 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/html/definition 14 | part:: Every `200` response of an operation of the server SHALL support the media type `text/html`. 15 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/requirements_class_atom.adoc: -------------------------------------------------------------------------------- 1 | [[rc_atom]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/atom 6 | |Target type |Web API 7 | |Dependency |<> 8 | |Dependency |<> 9 | |Pre-conditions | 10 | 1) The API advertises conformance to the ATOM Conformance Class + 11 | 2) The client negotiates use of an ATOM or XML encoding. 12 | |=== 13 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/json/REC_header-profile-link.adoc: -------------------------------------------------------------------------------- 1 | [[rec_json_header-profile-link]] 2 | 3 | [recommendation] 4 | ==== 5 | [%metadata] 6 | identifier:: /rec/json/header-profile-link 7 | part:: A server SHOULD include a profile link (href: `http://www.opengis.net/def/profile/OGC/0/ogc-catalog`, relation: `profile`) in the response https://datatracker.ietf.org/doc/html/rfc8288#section-3[HTTP headers] (see https://datatracker.ietf.org/doc/html/rfc6906[RFC 6906, The 'profile' Link Relation Type]). 8 | ==== 9 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/PER_catalogs.adoc: -------------------------------------------------------------------------------- 1 | [[per_record-collection_catalogs]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/record-collection/catalogs* 6 | // 7 | //A catalog MAY include zero or more references to other related catalogs. 8 | //|=== 9 | 10 | 11 | [permission] 12 | ==== 13 | [%metadata] 14 | identifier:: /per/record-collection/catalogs 15 | part:: A catalog MAY include zero or more references to other related catalogs. 16 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-startpage-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_startpage-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/startpage-response* 5 | ^|Condition |Server implements recommendation <>. 6 | ^|A |The server SHALL begin presenting response records starting at the specified page offset. 7 | ^|B |The start page of the first page of responses SHALL be counted as 1. 8 | |=== 9 | -------------------------------------------------------------------------------- /template/standard/clause_3_references.adoc: -------------------------------------------------------------------------------- 1 | == References 2 | The following normative documents contain provisions that, through reference in this text, constitute provisions of this document. For dated references, subsequent amendments to, or revisions of, any of these publications do not apply. For undated references, the latest edition of the normative document referred to applies. 3 | 4 | * [[OAFeat-1]] Portele, C., Vretanos, P.: OGC 17-069r2, *OGC API - Features - Part 1: Core*, https://docs.ogc.org/is/17-069r3/17-069r3.html 5 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-startindex-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_startindex-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/startindex-response* 5 | ^|Condition |Server implements recommendation <>. 6 | ^|A |The server SHALL begin presenting response records starting with the specified offset value. 7 | ^|B |The start index of the first response record SHALL be counted as 1. 8 | |=== 9 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-outputencoding.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_param-outputencoding]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/param-outputencoding* 5 | ^|Conditions |Server implements recommendation <>. 6 | ^|A |The value of this parameter SHALL override any value specified for the request using the https://tools.ietf.org/html/rfc7231#section-5.3.4[Accept-Encoding] HTTP header. 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/facets/standard/abstract_tests/simple/ATS_media_type.adoc: -------------------------------------------------------------------------------- 1 | [[ats_simple_media_type]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/simple/media_type* 5 | ^|Test Purpose |Validate media type. 6 | ^|Requirement |<> 7 | ^|Test Method |. Construct a path for a facets page 8 | . Issue an HTTP GET request on the path 9 | . Check that the media type returned as part of the HTTP `Content-Type` header is `application/facets+json`. 10 | |=== 11 | 12 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/README.md: -------------------------------------------------------------------------------- 1 | # Standard template 2 | 3 | This folder contains the content for OGC API - Features - Part 4: Create, replace, update and delete. 4 | 5 | The repo is organized as follows: 6 | 7 | * standard - the main standard document content 8 | - organized in multiple sections and directories 9 | * openapi - normative OpenAPI components specified by the standard 10 | * xml - normative XML/XSD components specified by the standard 11 | * examples - JSON and XML examples 12 | -------------------------------------------------------------------------------- /template/standard/images/README.md: -------------------------------------------------------------------------------- 1 | Image files for graphics go here. 2 | 3 | Each graphic is a separate file with the naming convention: 4 | 5 | "FIGn.xxx" where "n" is a number with leading zeroes appropriate for the total number of figures and "xxx" is the appropriate extension for the file type. 6 | 7 | or, for other graphics not associated with figures: 8 | 9 | "GRPn.xxx" where "n" is a sequential number with leading zeroes appropriate for the total number of graphics and "xxx" is the appropriate extension for the file type. 10 | -------------------------------------------------------------------------------- /DEVELOPMENT.md: -------------------------------------------------------------------------------- 1 | ## Development Guidelines 2 | 3 | TBD 4 | 5 | ## Specification Driving factors 6 | 7 | TBD 8 | 9 | ## Specification Change Criteria 10 | 11 | TBD 12 | 13 | ## Specification Change Process 14 | 15 | TBD 16 | 17 | ## Tracking Process 18 | 19 | * GitHub is the medium of record for all spec designs, use cases, and so on. 20 | 21 | 22 | ## Release Process 23 | 24 | TBD 25 | 26 | ## Draft Features 27 | 28 | 29 | ## Transparency 30 | 31 | 32 | 33 | ## Participation 34 | 35 | 36 | 37 | ## Community Roles 38 | 39 | -------------------------------------------------------------------------------- /core/standard/requirements/crawlable-catalog/REQ_record.adoc: -------------------------------------------------------------------------------- 1 | [[req_crawlable-catalog_record]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/crawlable-catalog/record* 6 | // 7 | //A <> SHALL be created for each resource to be made discoverable. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/crawlable-catalog/record 15 | part:: A <> SHALL be created for each resource to be made discoverable. 16 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/html/REC_schema-org.adoc: -------------------------------------------------------------------------------- 1 | [[rec_html_schema-org]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/html/schema-org* 6 | //^|A |A `200` response with the media type `text/html`, SHOULD include <> annotations. 7 | //|=== 8 | 9 | [recommendation] 10 | ==== 11 | [%metadata] 12 | identifier:: /rec/html/schema-org 13 | part:: A `200` response with the media type `text/html`, SHOULD include <> annotations. 14 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/query-param-profile/REQ_response.adoc: -------------------------------------------------------------------------------- 1 | [[req_query-param-profile_response]] 2 | [requirement] 3 | ==== 4 | [%metadata] 5 | identifier:: /req/query-param-profile/response 6 | part:: The query parameter is not required, that is, omitting the parameter in a request SHALL not result in an error. 7 | part:: If the media type of the response supports web links in accordance with <>, the response SHALL include links to the selected profile(s) with the link relation type "profile". 8 | ==== 9 | -------------------------------------------------------------------------------- /template/standard/clause_2_conformance.adoc: -------------------------------------------------------------------------------- 1 | == Conformance 2 | 3 | This standard defines one requirements / conformance class <>. 4 | The standardization target is "Web APIs". 5 | 6 | Conformance with this standard shall be checked using all the relevant tests 7 | specified in <> of this document. The framework, concepts, and 8 | methodology for testing, and the criteria to be achieved to claim conformance 9 | are specified in the OGC Compliance Testing Policies and Procedures and the 10 | OGC Compliance Testing web site. 11 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/records/crs/REQ_content-crs-header.adoc: -------------------------------------------------------------------------------- 1 | [[req_records_content-crs-header]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/records/content-crs-header* 5 | ^|Condition |Server implements <> 6 | ^|A |The server SHALL inspect CREATE, REPLACE and UPDATE requests for the `Content-Crs` HTTP header and interpret coordinates in the request body to be in the declared CRS. 7 | |=== 8 | -------------------------------------------------------------------------------- /core/openapi/parameters/externalIds.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: externalIds 3 | in: query 4 | description: |- 5 | The optional externalIds parameter allows a specific list of records, 6 | identified by their external identifiers, to be fetched from a catalog. 7 | Only records where one of their associated external identifiers equals 8 | one of the values listed for this parameter shall appear in the response. 9 | required: false 10 | schema: 11 | type: array 12 | items: 13 | type: string 14 | pattern: ([^:]+:)?[^:]+ 15 | explode: false 16 | style: form 17 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_records.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_records]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/records* 6 | // 7 | //Records encoded in-line in the catalog SHALL be encoded using an array property named `records`. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/record-collection/records 14 | part:: Records encoded in-line in the catalog SHALL be encoded using an array property named `records`. 15 | ==== -------------------------------------------------------------------------------- /extensions/facets/standard/abstract_tests/simple/ATS_conformance.adoc: -------------------------------------------------------------------------------- 1 | [[ats_simple_conformance]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/simple/conformance* 5 | ^|Test Purpose |Validate simple identification. 6 | ^|Requirement |<> 7 | ^|Test Method |. Construct a path for a conformance page 8 | . Issue an HTTP GET request on the path 9 | . Check that the `+conformsTo+` array contains the value `+http://www.opengis.net/spec/ogcapi-records-2/1.0/conf/simple+`. 10 | |=== 11 | 12 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/ATS_class_patch-update.adoc: -------------------------------------------------------------------------------- 1 | [[ats_update]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Requirements Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-features-4/1.0/req/create-replace-delete/update 6 | |Target type |Web API 7 | |Dependency |<> 8 | |Dependency |<> 9 | |Dependency |<> 10 | |=== 11 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/features/ATS_collection-items-end-point.adoc: -------------------------------------------------------------------------------- 1 | [[ats_collection-items-end-point]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:ats-id}* |*/conf/features/collection-items-end-point* 5 | ^|A |TBD 6 | ^|B |TBD 7 | |=== 8 | 9 | ((For features, the collection items end point shall be the path '/collections/{collectionsId}/items'.)) 10 | 11 | ((The parameter 'collectionId' is each 'id' property in the feature collection response (JSONPath: '$.collections[*].id').)) 12 | 13 | -------------------------------------------------------------------------------- /core/standard/recommendations/crawlable-catalog/REC_record-file-name.adoc: -------------------------------------------------------------------------------- 1 | [[rec_crawlable-catalog_record-file-name]] 2 | //[width="90%",cols="2,6a"] 3 | //|=== 4 | //^|*Recommendation {counter:rec-id}* |*/rec/crawlable-catalog/record-file-name* 5 | // 6 | //The name of the record file SHOULD be `{id}.json` where `{id}` is the identifier of the record. 7 | //|=== 8 | 9 | [recommendation] 10 | ==== 11 | [%metadata] 12 | identifier:: /rec/crawlable-catalog/record-file-name 13 | part:: The name of the record file SHOULD be `{id}.json` where `{id}` is the identifier of the record. 14 | ==== -------------------------------------------------------------------------------- /extensions/facets/standard/abstract_tests/advanced/ATS_conformance.adoc: -------------------------------------------------------------------------------- 1 | [[ats_advanced_conformance]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/advanced/conformance* 5 | ^|Test Purpose |Validate advanced identification. 6 | ^|Requirement |<> 7 | ^|Test Method |. Construct a path for a conformance page 8 | . Issue an HTTP GET request on the path 9 | . Check that the `+conformsTo+` array contains the value `+http://www.opengis.net/spec/ogcapi-records-2/1.0/conf/advanced+`. 10 | |=== 11 | 12 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/PER_record-access-modes.adoc: -------------------------------------------------------------------------------- 1 | [[per_record-collection_record-access-modes]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/record-collection/record-access-modes* 6 | // 7 | //A catalog MAY simultaneously include all three of the aforementioned access modes. 8 | //|=== 9 | 10 | 11 | [permission] 12 | ==== 13 | [%metadata] 14 | identifier:: /per/record-collection/record-access-modes 15 | part:: A catalog MAY simultaneously include all three of the aforementioned access modes. 16 | ==== -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/images/README.md: -------------------------------------------------------------------------------- 1 | Image files for graphics go here. 2 | 3 | Each graphic is a separate file with the naming convention: 4 | 5 | "FIGn.xxx" where "n" is a number with leading zeroes appropriate for the total number of figures and "xxx" is the appropriate extension for the file type. 6 | 7 | or, for other graphics not associated with figures: 8 | 9 | "GRPn.xxx" where "n" is a sequential number with leading zeroes appropriate for the total number of graphics and "xxx" is the appropriate extension for the file type. 10 | -------------------------------------------------------------------------------- /core/standard/recommendations/crawlable-catalog/REC_record-file-location.adoc: -------------------------------------------------------------------------------- 1 | [[rec_crawlable-catalog_record-file-location]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/crawlable-catalog/record-file-location* 6 | // 7 | //The record file SHOULD be located close to the resource(s) that the record describes. 8 | //|=== 9 | 10 | 11 | [recommendation] 12 | ==== 13 | [%metadata] 14 | identifier:: /rec/crawlable-catalog/record-file-location 15 | part:: The record file SHOULD be located close to the resource(s) that the record describes. 16 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_descriptiondoc-response-lang.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_descriptiondoc-response-lang]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/descriptiondoc-response-lang* 5 | ^|A |The https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#opensearch-description-document[OpenSearch description document] SHALL include one https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#the-language-element[Language element] for each language the server supports for search results. 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/facets/standard/Makefile: -------------------------------------------------------------------------------- 1 | FILE_BASENAME=document 2 | 3 | html: 4 | asciidoctor --verbose --trace -o ${FILE_BASENAME}.html ${FILE_BASENAME}.adoc 5 | 6 | pdf: 7 | asciidoctor --verbose --trace -r asciidoctor-pdf --trace -b pdf -o ${FILE_BASENAME}.pdf ${FILE_BASENAME}.adoc 8 | 9 | docx: 10 | asciidoctor --verbose --trace --backend docbook --out-file - ${FILE_BASENAME}.adoc | pandoc --from docbook --to docx --output ${FILE_BASENAME}.docx 11 | 12 | clean: 13 | rm -f ${FILE_BASENAME}.html ${FILE_BASENAME}.pdf ${FILE_BASENAME}.docx 14 | 15 | .PHONY: html pdf docx linkcheck clean 16 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/simpletx/update/put/ATS_rid-exception.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete_update_put-rid-exception]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/create-replace-delete/update/put/rid-exception* 5 | ^|Test Purpose | 6 | ^|Requirement | 7 | ^|Dependencies | 8 | ^|Test Method | 9 | |=== 10 | 11 | ((If the target resource does not exist then the server shall indicate an unsuccessful execution of the operation that shall be reported as a response with a HTTP status code '404'.)) 12 | -------------------------------------------------------------------------------- /extensions/OpenSearch/recommendations/opensearch/PER_additional-query-parameters.adoc: -------------------------------------------------------------------------------- 1 | [[per_opensearch_additional-query-parameters]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Permission {counter:per-id}* |*/per/opensearch/additional-query-parameters* 5 | ^|A |Servers MAY support additional query prameters that can be mapped to https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#opensearch-11-parameters[OpenSearch] and https://portal.ogc.org/files/?artifact_id=56866[OGC OpenSearch Geo and Time Extensions] substitution variables not listed in <>. 6 | |=== 7 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/PER_record-geometry.adoc: -------------------------------------------------------------------------------- 1 | [[per_record-core_geometry]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/record-core/geometry* 6 | // 7 | //Specific communities of interest and/or use cases MAY alter this obligation and make the `geometry` property mandatory. 8 | //|=== 9 | 10 | 11 | [permission] 12 | ==== 13 | [%metadata] 14 | identifier:: /per/record-core/geometry 15 | part:: Specific communities of interest and/or use cases MAY alter this obligation and make the `geometry` property mandatory. 16 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/annex_ats.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | == Conformance Class Abstract Test Suite (Normative) 4 | 5 | [NOTE] 6 | Ensure that there is a conformance class for each requirements class and a test for each requirement (identified by requirement name and number) 7 | 8 | === Conformance Class A 9 | 10 | ==== Requirement 1 11 | [cols=">20h,<80d",width="100%"] 12 | |=== 13 | |Test id: |/conf/conf-class-a/req-name-1 14 | |Requirement: |/req/req-class-a/req-name-1 15 | |Test purpose: | Verify that... 16 | |Test method: | Inspect... 17 | |=== 18 | 19 | ==== Requirement 2 20 | -------------------------------------------------------------------------------- /proposals/facets/openapi/schemas/facetResult.yaml: -------------------------------------------------------------------------------- 1 | Facet: 2 | type: object 3 | description: A facet is linked to an item property and contains the top set of occurrences (buckets) of values of the property 4 | required: 5 | - key 6 | properties: 7 | key: 8 | type: string 9 | description: Name of the property 10 | next: 11 | type: number 12 | description: Indication how many additional buckets exist for this property 13 | buckets: 14 | type: array 15 | description: buckets for this property 16 | items: 17 | $ref: "./bucket.yaml" 18 | 19 | -------------------------------------------------------------------------------- /core/standard/requirements/crawlable-catalog/REQ_catalog.adoc: -------------------------------------------------------------------------------- 1 | [[req_crawlable-catalog_catalog]] 2 | //[width="90%",cols="2,6a"] 3 | //|=== 4 | //^|*Requirement {counter:req-id}* |*/req/crawlable-catalog/catalog* 5 | // 6 | //A collection of related records, called a _catalog_, SHALL be described by a <>. 7 | //|=== 8 | 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/crawlable-catalog/catalog 14 | part:: A collection of related records, called a _catalog_, SHALL be described by a <>. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/requirements_class_oas30.adoc: -------------------------------------------------------------------------------- 1 | [[rc_oas30]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/oas30 7 | //|Target type |Web API 8 | //|Dependency |<> 9 | //|=== 10 | 11 | [requirements_class] 12 | ==== 13 | [%metadata] 14 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/oas30 15 | subject:: Web API 16 | inherit:: <> 17 | requirement:: /req/oas30/oas-common 18 | requirement:: /req/oas30/conformance 19 | ==== -------------------------------------------------------------------------------- /extensions/facets/standard/abstract_tests/ATS_class_simple.adoc: -------------------------------------------------------------------------------- 1 | [[ats_simple]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Conformance Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-records-2/1.0/conf/simple 6 | |Target type |Web API 7 | |Requirements class |<> 8 | |=== 9 | 10 | ==== Conformance 11 | 12 | include::simple/ATS_conformance.adoc[] 13 | 14 | ==== Media type 15 | 16 | include::simple/ATS_media_type.adoc[] 17 | 18 | ==== Response 19 | 20 | include::simple/ATS_response.adoc[] 21 | 22 | ==== Query response 23 | 24 | include::simple/ATS_query_response.adoc[] 25 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/requirements_class_autodiscovery.adoc: -------------------------------------------------------------------------------- 1 | [[rc_autodiscovery]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/autodiscovery 7 | //|Target type |Web API 8 | //|Dependency |<> 9 | //|=== 10 | 11 | 12 | [requirements_class] 13 | ==== 14 | [%metadata] 15 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/autodiscovery 16 | subject:: Web API 17 | inherit:: <> 18 | requirement:: /req/autodiscovery/links 19 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_descriptiondoc-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_descriptiondoc-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/descriptiondoc-response* 5 | ^|Condition |The negotiated response representation is `application/opensearchdescription+xml`. 6 | ^|A |A successful execution of the operation SHALL be reported as a response with a HTTP status code 200. 7 | ^|B |The response SHALL contain a valid https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#opensearch-description-document[OpenSearch description document]. 8 | |=== 9 | -------------------------------------------------------------------------------- /extensions/facets/standard/abstract_tests/ATS_class_advanced.adoc: -------------------------------------------------------------------------------- 1 | [[ats_advanced]] 2 | [cols="1,4",width="90%"] 3 | |=== 4 | 2+|*Conformance Class* 5 | 2+|http://www.opengis.net/spec/ogcapi-records-2/1.0/conf/advanced 6 | |Target type |Web API 7 | |Requirements class |<> 8 | |=== 9 | 10 | ==== Conformance 11 | 12 | include::advanced/ATS_conformance.adoc[] 13 | 14 | ==== Facets query parameter definition 15 | 16 | include::advanced/ATS_query_facets_definition.adoc[] 17 | 18 | ==== Facets query parameter response 19 | 20 | include::advanced/ATS_query_facets_response.adoc[] 21 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/PER_common-mark.adoc: -------------------------------------------------------------------------------- 1 | [[per_record-core_common-mark]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/record-core/common-mark* 6 | // 7 | //For any `description` member in a record, https://spec.commonmark.org/current/[CommonMark] MAY be used for a rich text representation. 8 | //|=== 9 | 10 | 11 | [permission] 12 | ==== 13 | [%metadata] 14 | identifier:: /per/record-core/common-mark 15 | part:: For any `description` member in a record, https://spec.commonmark.org/current/[CommonMark] MAY be used for a rich text representation. 16 | ==== -------------------------------------------------------------------------------- /extensions/facets/standard/annex_bibliography.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | [[Bibliography]] 4 | == Bibliography 5 | 6 | * [[Elasticsearch]] Elasticsearch aggregations, 30 May 2024, https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html 7 | * [[SOLR]] SOLR aggregations, 30 May 2024, https://solr.apache.org/guide/8_8/json-facet-api.html 8 | * [[PostgreSQL]] PostgreSQL aggregations, 30 May 2024, https://akorotkov.github.io/blog/2016/06/17/faceted-search 9 | * [[Oracle]] Oracle aggreations, 30 May 2024, (https://blogs.oracle.com/apex/apex-192-faceted-search 10 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/clause_8_media_types.adoc: -------------------------------------------------------------------------------- 1 | [[mediatypes]] 2 | == Media Types 3 | 4 | See https://docs.ogc.org/is/20-004r1/20-004r1.html#media-types-section[OGC API - Records - Part 1: Core, Media Types]. 5 | 6 | The media types for the CREATE, REPLACE and UPDATE requests as well as for the schema documents depend on the representations of the resources. 7 | 8 | For GeoJSON features, 9 | 10 | - CREATE and REPLACE operations will use `application/geo+json`, 11 | - UPDATE operations will use `application/merge-patch+json`, 12 | - schema documents will use `application/schema+json`. 13 | -------------------------------------------------------------------------------- /core/openapi/parameters/q.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: q 3 | in: query 4 | description: |- 5 | The optional q parameter supports keyword searching. Only records 6 | whose text fields contain one or more of the specified search terms 7 | are selected. The specific set of text keys/fields/properties of a 8 | record to which the q operator is applied is up to the discretion 9 | of the server. Implementations should, however, apply the q 10 | operator to the title, description and keywords keys/fields/properties. 11 | required: false 12 | schema: 13 | type: array 14 | items: 15 | type: string 16 | explode: false 17 | style: form 18 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/REC_record-description.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core_description]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/description* 6 | // 7 | //A record SHOULD include the `description` property to provide a free-text description of the resource that the record describes. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/record-description 14 | part:: A record SHOULD include the `description` property to provide a free-text description of the resource that the record describes. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_mandatory-properties.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_mandatory-properties-collection]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/mandatory-properties-collection* 6 | // 7 | //A catalog SHALL include all the mandatory properties listed in <>. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/record-collection/mandatory-properties-collection 14 | part:: A catalog SHALL include all the mandatory properties listed in <>. 15 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_descriptiondoc-response-self-link.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_descriptiondoc-response-self-link]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/descriptiondoc-response-self-link* 5 | ^|A |The https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#opensearch-description-document[OpenSearch description document] SHALL include one https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#the-url-element#[Url element] that points to the canonical representation (relation: `self`) of this OpenSearch description document. 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-language.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_param-language]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/param-language* 5 | ^|Condition |Server implements recommendation <>. 6 | ^|A |The value of the `language` parameter SHALL conform to https://tools.ietf.org/html/rfc5646[RFC 5646, Tags for Identifying Languages]. 7 | ^|B |The value of this parameter SHALL override any value specified for the request using the https://tools.ietf.org/html/rfc7231#section-5.3.5[Accept-Language] HTTP header. 8 | |=== 9 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/simpletx/update/put/ATS_content-type.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete_update_put-content-type]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/create-replace-delete/update/put/content-type* 5 | ^|Test Purpose | 6 | ^|Requirement | 7 | ^|Dependencies | 8 | ^|Test Method | 9 | |=== 10 | 11 | ((As per <> (https://www.rfc-editor.org/rfc/rfc2616.html#section-14.17) the 'Content-Type' header shall be used to indicate the media type of a request body containing a representation of the replacement resource.)) 12 | -------------------------------------------------------------------------------- /core/README.md: -------------------------------------------------------------------------------- 1 | 2 | # OGC API - Records - Part 1: Core 3 | 4 | This folder contains the content for the OGC API - Records - Part 1: Core standard. 5 | 6 | The repo is organized as follows: 7 | 8 | * standard - the main standard document content 9 | - organized in multiple sections and directories 10 | * openapi - normative OpenAPI components specified by the standard 11 | * examples - JSON and XML examples 12 | 13 | ## Building 14 | 15 | ``` 16 | cd core 17 | 18 | docker run -v "$(pwd)":/metanorma -v ${HOME}/.fontist/fonts/:/config/fonts metanorma/metanorma metanorma compile --agree-to-terms -t ogc -x html standard/document.adoc 19 | ``` 20 | -------------------------------------------------------------------------------- /core/standard/abstract_tests/building-blocks/ATS_class_query-param-profile.adoc: -------------------------------------------------------------------------------- 1 | [[ats_query-param-profile]] 2 | [conformance_class] 3 | ==== 4 | [%metadata] 5 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/query-param-profile 6 | target:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/query-param-profile 7 | classification:: Target Type:Web API 8 | abstract-test:: /conf/query-param-profile/definition 9 | abstract-test:: /conf/query-param-profile/response 10 | ==== 11 | 12 | ==== Query Parameter Profile 13 | 14 | include::query-param-profile/ATS_definition.adoc[] 15 | 16 | include::query-param-profile/ATS_response.adoc[] 17 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/REC_format.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core_format]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/format* 6 | // 7 | //The value of the `mediaType` property should be taken from the list of https://www.iana.org/assignments/media-types/media-types.xhtml[IANA media types]. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/format 14 | part:: The value of the `mediaType` property should be taken from the list of https://www.iana.org/assignments/media-types/media-types.xhtml[IANA media types]. 15 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_descriptiondoc-response-example-qry.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_descriptiondoc-response-example-qry]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/descriptiondoc-response-example-qry* 5 | ^|A |The https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#opensearch-description-document[OpenSearch description document] SHALL include at least one https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#the-query-element[Query element] with a `role` set to `example` which, when resolved, executes a sample query on the server. 6 | |=== 7 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/features/crs/ATS_crs84.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete_crs_crs84]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:ats-id}* |*/conf/create-replace-delete/crs/crs84* 5 | ^|A | TBD 6 | |=== 7 | 8 | ((If a server implementing this standard does not support the http://fix.me[Coordinate Reference Systems by Reference] extension, then all geometry-valued feature properties presented to the server in a request body shall be expressed using CRS84 as per http://docs.opengeospatial.org/is/17-069r3/17-069r3.html[OGC API - Features - Part 1: Core].)) 9 | 10 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/PER_records-array-name.adoc: -------------------------------------------------------------------------------- 1 | [[per_record-collection_records-array-name]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/record-collection/records-array-name* 6 | // 7 | //The name of the in-line records array property in the catalog (default: `records`) MAY be changed to something else. 8 | //|=== 9 | 10 | 11 | 12 | [permission] 13 | ==== 14 | [%metadata] 15 | identifier:: /per/record-collection/records-array-name 16 | part:: The name of the in-line records array property in the catalog (default: `records`) MAY be changed to something else. 17 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_license.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_license]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/license* 6 | // 7 | //See requirement <>. + 8 | //Replace all instances of the term `resource` with the term `catalog`. 9 | //|=== 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/record-collection/license 15 | part:: See requirement <>. Replace all instances of the term `resource` with the term `catalog`. 16 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/requirements_class_html.adoc: -------------------------------------------------------------------------------- 1 | [[rc_html]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/html 7 | //|Target type |Document encoding 8 | //|Dependency |http://www.w3.org/TR/html5/[HTML5] 9 | //|=== 10 | 11 | [requirements_class] 12 | ==== 13 | [%metadata] 14 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/html 15 | subject:: Document encoding 16 | inherit:: http://www.w3.org/TR/html5/ 17 | requirement:: /req/html/conformance 18 | requirement:: /req/html/definition 19 | requirement:: /req/html/content 20 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/crawlable-catalog/REQ_conformance.adoc: -------------------------------------------------------------------------------- 1 | [[req_crawlable-catalog_conformance]] 2 | //[width="90%",cols="2,6a"] 3 | //|=== 4 | //^|*Requirement {counter:req-id}* |*/req/crawlable-catalog/conformance* 5 | // 6 | //^|A |The `conformsTo` array found in the catalog SHALL contain the value `http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/crawlable-catalog`. 7 | //|=== 8 | 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/crawlable-catalog/conformance 14 | part:: The `conformsTo` array found in the catalog SHALL contain the value `http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/crawlable-catalog`. 15 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/PER_common-mark.adoc: -------------------------------------------------------------------------------- 1 | [[per_record-collection_common-mark]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/record-collection/common-mark* 6 | // 7 | //For any `description` member in a catalog, https://spec.commonmark.org/current/[CommonMark] MAY be used for a rich text representation. 8 | //|=== 9 | 10 | 11 | [permission] 12 | ==== 13 | [%metadata] 14 | identifier:: /per/record-collection/common-mark 15 | part:: For any `description` member in a catalog, https://spec.commonmark.org/current/[CommonMark] MAY be used for a rich text representation. 16 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/sorting/PER_synthetic.adoc: -------------------------------------------------------------------------------- 1 | [[per_sorting_sortables-synthetic]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/sorting/synthetic* 6 | // 7 | //The response MAY include properties that do not actually exist in the information model of the record but are somehow derived or synthesized by the system. 8 | //|=== 9 | 10 | 11 | [permission] 12 | ==== 13 | [%metadata] 14 | identifier:: /per/sorting/synthetic 15 | part:: The response MAY include properties that do not actually exist in the information model of the record but are somehow derived or synthesized by the system. 16 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-geo-name-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_geo-name-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/geo-name-response* 5 | ^|Condition |Server implements recommendation <>. 6 | ^|A |If the `geo:name` parameter is provided by the client, only records where the record's geometry and the geometry implied by the specified place name satisfy the specified spatial relationship (see recommendation: <>) SHALL be included in the response. 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-geometry-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_geometry-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/geometry-response* 5 | ^|Condition |Server implements recommendation <>. 6 | ^|A |If the `geo:geometry` parameter is provided by the client, only records where the record's geometry and the value of the `geo:geometry` parameter satisfy the specified spatial relationship (see recommendation: <>) SHALL be included in the response. 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_param-proximity-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_proximity-response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/proximity-response* 5 | ^|Condition |Server implements recommendation <>. 6 | ^|A |If the `geo:lat`, `geo:lon` and `geo:radius` parameters are provided by the client, only records where the record's geometry and the specified circle satisfy the specified spatial relationship (see recommendation: <>) SHALL be included in the response. 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/examples/json/ex04_delete.adoc: -------------------------------------------------------------------------------- 1 | .... 2 | Client Server 3 | | | 4 | | DELETE /collections/oakland_buildings/items/OB.2 HTTP/1.1 | 5 | |-------------------------------------------------------------------->| 6 | | | 7 | | HTTP/1.1 204 OK | 8 | |<--------------------------------------------------------------------| 9 | .... 10 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/json/REQ_catalog-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_json_collection-response]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/json/collection-response* 6 | //^|A |200-responses of the server SHALL support the following media type: 7 | // 8 | //* `application/ogc-catalog+json` for catalog or record collection resources. 9 | //|=== 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/json/collection-response 15 | part:: 200-responses of the server SHALL support the following media type: 16 | + 17 | * `application/ogc-catalog+json` for catalog or record collection resources. 18 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/oas30/REQ_oas-conformance.adoc: -------------------------------------------------------------------------------- 1 | [[req_oas30_conformance]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/oas30/conformance* 6 | // 7 | //^|A |The `conformsTo` array found in the conformance path (path: `/conformance`) SHALL contain the value `http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/oas30`. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/oas30/conformance 14 | part:: The `conformsTo` array found in the conformance path (path: `/conformance`) SHALL contain the value `http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/oas30`. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-core-query-parameters/REQ_query-param-ids-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-core-query-parameters_ids-response]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-core-query-parameters/ids-response* 6 | // 7 | //Only records whose identifier match one of the identifiers specified using `ids` parameter SHALL be in the results set. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/record-core-query-parameters/ids-response 15 | part:: Only records whose identifier match one of the identifiers specified using `ids` parameter SHALL be in the results set. 16 | ==== -------------------------------------------------------------------------------- /template/standard/clause_4_terms_and_definitions.adoc: -------------------------------------------------------------------------------- 1 | == Terms and Definitions 2 | This document uses the terms defined in Sub-clause 5.3 of [OGC 06-121r9], which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this standard. 3 | 4 | For the purposes of this document, the following additional terms and definitions apply in addition to the terms defined 5 | in <>. 6 | 7 | === term 1 8 | definition [source] 9 | 10 | === term 2 11 | definition [source] 12 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core-query-parameters/REC_param-q.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core-query-parameters_param-q]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core-query-parameters/param-q* 6 | // 7 | //The `q` operator SHOULD, at least, be applied to the following core properties: 8 | // 9 | //* title 10 | //* description 11 | //* keywords 12 | //|=== 13 | 14 | [recommendation] 15 | ==== 16 | [%metadata] 17 | identifier:: /rec/record-core-query-parameters/param-q 18 | part:: The `q` operator SHOULD, at least, be applied to the following core properties: 19 | + 20 | * title 21 | * description 22 | * keywords 23 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/requirements_class_sorting.adoc: -------------------------------------------------------------------------------- 1 | [[rc_sorting]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/sorting 7 | //|Target type |Web API 8 | //|=== 9 | 10 | [requirements_class] 11 | ==== 12 | [%metadata] 13 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/sorting 14 | subject:: Document model 15 | requirement:: /req/sorting/sortby-param 16 | requirement:: /req/sorting/sortby-response 17 | requirement:: /req/sorting/get-sortables-op 18 | requirement:: /req/sorting/get-sortables-success 19 | requirement:: /req/sorting/defaultSortOrder-definition 20 | ==== -------------------------------------------------------------------------------- /core/openapi/schemas/scheme.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | type: object 3 | required: 4 | - scheme-id 5 | - namespace 6 | properties: 7 | scheme-id: 8 | type: string 9 | description: |- 10 | An identifier for this namespace. The identifier can be used as a 11 | short-form for the namespace. 12 | namespace: 13 | type: string 14 | description: |- 15 | A declarative region that provides a scope to the identifiers inside it. 16 | It is recommended that the value of namespace be a URI. 17 | resolver: 18 | description: |- 19 | An extensible description of a mechanism that resolves a scheme 20 | identifier (scheme-id) to its namespace. 21 | type: object 22 | -------------------------------------------------------------------------------- /extensions/facets/standard/clause_1_scope.adoc: -------------------------------------------------------------------------------- 1 | == Scope 2 | 3 | The OGC Records API Standard specifies requirements classes for a set of common components that can be assembled in various ways to deploy a collection of related descriptive information (metadata) about resources called a catalog. The atomic unit of information in a catalog is the record. 4 | 5 | This Standard specifies an extension that allows querying facets (also known as aggregations) as a complement to search results. A server advertises one or more facets tied to various properties of its records. Facets can be used to show term occurrences, distributions of numeric or temporal values and matches for specific queries inside results sets. 6 | -------------------------------------------------------------------------------- /core/openapi/parameters/sortby.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: sortby 3 | in: query 4 | description: |- 5 | Specifies a comma-separated list of property names by which the response shall 6 | be sorted. If the property name is preceded by a plus (+) sign it indicates 7 | an ascending sort for that property. If the property name is preceded by a 8 | minus (-) sign it indicates a descending sort for that property. If the 9 | property is not preceded by a plus or minus, then the default sort order 10 | implied is ascending (+). 11 | required: false 12 | schema: 13 | type: array 14 | minItems: 1 15 | items: 16 | type: string 17 | pattern: '[+|-]?[A-Za-z_].*' 18 | explode: false 19 | style: form 20 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core-query-parameters/REC_query-param-type-definition.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core-query-parameters_param-type-definition]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core-query-parameters/param-type-definition* 6 | //^|A |The definition of the `type` parameter SHOULD be extended to enumerate the list of known record or resource types. 7 | //|=== 8 | 9 | [recommendation] 10 | ==== 11 | [%metadata] 12 | identifier:: /rec/record-core-query-parameters/param-type-definition 13 | part:: The definition of the `type` parameter SHOULD be extended to enumerate the list of known record or resource types. 14 | ==== -------------------------------------------------------------------------------- /extensions/facets/openapi/schemas/facets-queryables.yaml: -------------------------------------------------------------------------------- 1 | $schema: 'https://json-schema.org/draft/2020-12/schema' 2 | $id: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/extensions/facets/openapi/schemas/facets-querayables.yaml' 3 | title: 'OGC API - Records - Part 2: Facets queryables extension' 4 | description: 'OGC API - Records - Part 2: Facets queryables extension' 5 | 6 | type: object 7 | properties: 8 | properties: 9 | patternProperties: 10 | "^.*": 11 | type: object 12 | properties: 13 | facet: 14 | type: boolean 15 | default: false 16 | description: Whether facets can be applied to the property. 17 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/json/REQ_catalog-content-profile.adoc: -------------------------------------------------------------------------------- 1 | [[req_json_catalog-content-profle]] 2 | 3 | [requirement] 4 | ==== 5 | [%metadata] 6 | identifier:: /req/json/catalog-content-profile 7 | condition:: The negotiated profile is `http://www.opengis.net/def/profile/OGC/0/ogc-catalog`. 8 | part:: The schema of all responses with the media type `application/json` SHALL validate against the OpenAPI 3.0 schema document https://schemas.opengis.net/ogcapi/records/part1/1.0/openapi/schemas/catalog.yaml[`catalog.yaml`]. 9 | part:: The response SHALL include, in the `links` section, a profile link (href: `http://www.opengis.net/def/profile/OGC/0/ogc-catalog`, relation: `profile`). 10 | ==== 11 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/REC_record-langs.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-collection_record-langs]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-collection/record-langs* 6 | // 7 | //The languages in which the records of the catalog can be represented SHOULD be listed using the <> property. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-collection/record-langs 14 | part:: The languages in which the records of the catalog can be represented SHOULD be listed using the <> property. 15 | ==== 16 | -------------------------------------------------------------------------------- /core/standard/requirements/searchable-catalog/REQ_mandatory-catalog-properties.adoc: -------------------------------------------------------------------------------- 1 | [[req_searchable-catalog_mandatory-catalog-properties]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/searchable-catalog/mandatory-catalog-properties* 6 | // 7 | //The information model describing a searchable catalog SHALL contain all the mandatory properties listed in <>. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/searchable-catalog/mandatory-catalog-properties 14 | part:: The information model describing a searchable catalog SHALL contain all the mandatory properties listed in <>. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/searchable-catalog_filtering/REQ_mandatory-queryables.adoc: -------------------------------------------------------------------------------- 1 | [[req_searchable-catalog_mandatory-queryables]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/searchable-catalog/mandatory-queryables* 6 | //2+|The list of queryables SHALL include all the mandatory properties listed in <> and <>. 7 | //|=== 8 | 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/searchable-catalog/mandatory-queryables 14 | part:: The list of queryables SHALL include all the mandatory properties listed in <> and <>. 15 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/sorting/REC_sortables-schema.adoc: -------------------------------------------------------------------------------- 1 | [[rec_sorting_sortables-schema]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/sorting/sortables-schema* 6 | //^|A |Each property SHOULD have a human readable title (`title`) and where 7 | //necessary a description (`description`). 8 | //^|B |Each property SHOULD have a single type (`type`). 9 | //|=== 10 | 11 | [recommendation] 12 | ==== 13 | [%metadata] 14 | identifier:: /rec/sorting/sortables-schema 15 | part:: Each property SHOULD have a human readable title (`title`) and where necessary a description (`description`). 16 | part:: Each property SHOULD have a single type (`type`). 17 | ==== -------------------------------------------------------------------------------- /core/standard/abstract_tests/building-blocks/query-param-profile/ATS_response.adoc: -------------------------------------------------------------------------------- 1 | [[ats_query-param-profile_response]] 2 | [abstract_test] 3 | ==== 4 | [%metadata] 5 | identifier:: /conf/query-param-profile/response 6 | target:: /req/query-param-profile/response 7 | test-purpose:: Validate `profile` query parameter. 8 | test-method:: 9 | + 10 | -- 11 | . Construct a path for a searchable endpoint as per test <>. 12 | . Issue an HTTP GET request on that path. 13 | . Check that the value of the returned HTTP status header is +200+. 14 | . Check that that the content of response adheres to the requirements of the specified profile(s). 15 | -- 16 | ==== 17 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/atom/REQ_common-content.adoc: -------------------------------------------------------------------------------- 1 | [[req_atom_common-content]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/atom/common-content* 5 | ^|A |<> specifies the XML document root element that the server SHALL return in a `200`-response for each resource defined in https://docs.ogc.org/DRAFTS/19-072.html[OGC API - Common - Part 1: Core] and https://docs.ogc.org/DRAFTS/20-024.html[OGC API - Common - Part 2: Collections]. 6 | ^|B |The schema of all responses with a root element in the `core` namespace SHALL validate against the link:https://raw.githubusercontent.com/opengeospatial/ogcapi-records/master/core/xml/core.xsd[OGC API - Records Core XML Schema]. 7 | |=== 8 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_links-catalog-hierarchy.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_links-catalog-hierarchy]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/links-catalog-hierarchy* 6 | // 7 | //A catalog referencing sub-ordinate catalogs SHALL include a link (relation: `child`) pointing to each immediate sub-ordinate catalog in the hierarchy. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/record-collection/links-catalog-hierarchy 15 | part:: A catalog referencing sub-ordinate catalogs SHALL include a link (relation: `child`) pointing to each immediate sub-ordinate catalog in the hierarchy. 16 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_links-catalog-related.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_links-catalog-related]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/links-catalog-related* 6 | // 7 | //A catalog referencing another related catalog in an unorganized set of catalogs SHALL include a link (relation: `related`) pointing to the related catalog. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/record-collection/links-catalog-related 14 | part:: A catalog referencing another related catalog in an unorganized set of catalogs SHALL include a link (relation: `related`) pointing to the related catalog. 15 | ==== -------------------------------------------------------------------------------- /core/standard/abstract_tests/building-blocks/ATS_class_autodiscovery.adoc: -------------------------------------------------------------------------------- 1 | [[ats_autodiscovery]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Conformance Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/autodiscovery 7 | //|Target type |Web API 8 | //|Requirements class |<> 9 | //|=== 10 | 11 | [conformance_class] 12 | ==== 13 | [%metadata] 14 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/autodiscovery 15 | target:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/autodiscovery 16 | classification:: Target Type:Web API 17 | abstract-test:: /conf/autodiscovery/links 18 | ==== 19 | 20 | ==== Links 21 | 22 | include::autodiscovery/ATS_links.adoc[] 23 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/REC_record-links_type.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core_links-type]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/links-type* 6 | // 7 | //If there is a canonical URI for the value of the `type` property of a record, a link (relation: `type`) to that canonical URI SHOULD be included in the `links` section of the record. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/links-type 14 | part:: If there is a canonical URI for the value of the `type` property of a record, a link (relation: `type`) to that canonical URI SHOULD be included in the `links` section of the record. 15 | ==== 16 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/REC_record-title.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core_title]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/title* 6 | // 7 | //A record SHOULD include the `title` property to provide a human-readable name for the resource that the record describes and also to provide a target of possible text searches of the catalog. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/record-title 14 | part:: A record SHOULD include the `title` property to provide a human-readable name for the resource that the record describes and also to provide a target of possible text searches of the catalog. 15 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/records-api/REC_html.adoc: -------------------------------------------------------------------------------- 1 | [[rec_records-api_html]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/records-api/html* 6 | // 7 | //To support browsing the catalog and its records with a web browser and to enable search engines to crawl and index the catalog, implementations SHOULD consider supporting a <>. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/records-api/html 14 | part:: To support browsing the catalog and its records with a web browser and to enable search engines to crawl and index the catalog, implementations SHOULD consider supporting a <>. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_links-catalog-series.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_links-catalog-series]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/links-catalog-series* 6 | // 7 | //A catalog referencing another catalog in a series of related catalogs SHALL include a link (relation: `next`) pointing to the next related catalog in the series. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/record-collection/links-catalog-series 14 | part:: A catalog referencing another catalog in a series of related catalogs SHALL include a link (relation: `next`) pointing to the next related catalog in the series. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-core/REQ_mandatory-properties-record.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-core_mandatory-properties-record]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-core/mandatory-properties-record* 6 | // 7 | //Each record in a response SHALL contain all the mandatory properties listed in <>. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/record-core/mandatory-properties-record 15 | part:: Each record in a response SHALL contain all the mandatory properties listed in <>. 16 | part:: The identifier of a record (`id`) cannot be NULL or the empty string. 17 | ==== 18 | -------------------------------------------------------------------------------- /core/standard/requirements/local-resources-catalog/REQ_mandatory-catalog-properties.adoc: -------------------------------------------------------------------------------- 1 | [[req_local-resources-catalog_mandatory-catalog-properties]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/local-resources-catalog/mandatory-catalog-properties* 6 | // 7 | //The information model of the local resources catalog SHALL contain all the mandatory properties listed in <>. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/local-resources-catalog/mandatory-catalog-properties 15 | part:: The information model of the local resources catalog SHALL contain all the mandatory properties listed in <>. 16 | ==== -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/examples/json/ex06a_options.adoc: -------------------------------------------------------------------------------- 1 | .... 2 | Client Server 3 | | | 4 | | OPTIONS /collections/oakland_buildings/items HTTP/1.1 | 5 | |------------------------------------------------------------------>| 6 | | | 7 | | HTTP/1.1 200 OK | 8 | | Allow: GET, HEAD, POST | 9 | |<------------------------------------------------------------------| 10 | .... 11 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/examples/json/ex06b_options.adoc: -------------------------------------------------------------------------------- 1 | .... 2 | Client Server 3 | | | 4 | | OPTIONS /collections/oakland_buildings/items/B1013 HTTP/1.1 | 5 | |------------------------------------------------------------------>| 6 | | | 7 | | HTTP/1.1 200 OK | 8 | | Allow: GET, HEAD, PUT, PATCH, DELETE | 9 | |<------------------------------------------------------------------| 10 | .... 11 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/records/REQ_resources-endpoint.adoc: -------------------------------------------------------------------------------- 1 | [[req_resources-endpoint]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/records/resources-endpoint* 5 | ^|A |For records, the resources endpoints SHALL be URIs specified by the URI template `{landingPageUri}/collections/{catalogId}/items`. 6 | ^|B |The parameter `landingPageUri` SHALL be the URI of the Landing Page resource. 7 | ^|C |The parameter `catalogId` SHALL be each `id` property in the `collections` array of the Collections resource (i.e., the response to a GET request to `{landingPageUri}/collections`) where the collection has an `itemType` with no value or a value `record`. 8 | |=== 9 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_links-record.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_links-record]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/links-record* 6 | // 7 | //A link (relation: `item`) SHALL be included in the <> of the catalog for each individually referenced record that is a member of this catalog. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/record-collection/links-record 14 | part:: A link (relation: `item`) SHALL be included in the <> of the catalog for each individually referenced record that is a member of this catalog. 15 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/PER_links.adoc: -------------------------------------------------------------------------------- 1 | [[per_record-collection_links]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/record-collection/links* 6 | // 7 | //The links in the `links` section of a catalog may be typed (i.e., include the `type` member) to allow for the possibility of alternate representations for each record and/or subordinate catalog. 8 | //|=== 9 | 10 | [permission] 11 | ==== 12 | [%metadata] 13 | identifier:: /per/record-collection/links 14 | part:: The links in the `links` section of a catalog may be typed (i.e., include the `type` member) to allow for the possibility of alternate representations for each record and/or subordinate catalog. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_links.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_links]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/links* 6 | // 7 | //^|A |The catalog SHALL include a link (relation: `self`) that points to itself. 8 | //^|B |The catalog SHALL include one link (relation: `alternate`) for each alternative representation of itself. 9 | //|=== 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/record-collection/links 15 | part:: The catalog SHALL include a link (relation: `self`) that points to itself. 16 | part:: The catalog SHALL include one link (relation: `alternate`) for each alternative representation of itself. 17 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_descriptiondoc-response-inputenc.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_descriptiondoc-response-inputenc]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/descriptiondoc-response-inputenc* 5 | ^|Condition |The server implements recommendation <> 6 | ^|A |The https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#opensearch-description-document[OpenSearch description document] SHALL include one https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#the-inputencoding-element[InputEncoding element] for each input encoding supported by the server for search requests. 7 | |=== 8 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/records/crs/REQ_gml-srsname.adoc: -------------------------------------------------------------------------------- 1 | [[req_records_gml-srsname]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/records/gml-srsname* 5 | ^|Condition |Server implements <> 6 | ^|Condition |A CREATE, REPLACE and UPDATE request has been submitted with a `Content-Type` HTTP header with a GML media type (`application/gml+xml`). 7 | ^|A |The server SHALL inspect the `srsName` XML attribute of the element that represents the value of each geometry-valued record property. 8 | ^|B |A `srsName` XML attribute SHALL override the `Content-Type` HTTP header. 9 | |=== 10 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_descriptiondoc-response-outputenc.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_descriptiondoc-response-outputenc]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/descriptiondoc-response-outputenc* 5 | ^|Condition |The server implements recommendation <>. 6 | ^|A |The https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#opensearch-description-document[OpenSearch description document] SHALL include one https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#the-outputencoding-element[OutputEncoding element] for each output encoding the server supports for search results. 7 | |=== 8 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_links-records.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_links-records]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/links-records* 6 | // 7 | //A link (relation: `items`) SHALL be included in the <> of the catalog pointing to an endpoint for accessing the records of this catalog via an API. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/record-collection/links-records 14 | part:: A link (relation: `items`) SHALL be included in the <> of the catalog pointing to an endpoint for accessing the records of this catalog via an API. 15 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-filter/REC_json-encoding.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-filtering_cql2-JSON-encoding]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-filtering/cql2-JSON-encoding* 6 | //^|A |If a filter expression can be represented for its intended use as JSON, servers SHOULD consider supporting the https://docs.ogc.org/DRAFTS/21-065.html#cql2-json[CQL JSON] encoding. 7 | //|=== 8 | 9 | [recommendation] 10 | ==== 11 | [%metadata] 12 | identifier:: /rec/record-filtering/cql2-JSON-encoding 13 | part:: If a filter expression can be represented for its intended use as JSON, servers SHOULD consider supporting the https://docs.ogc.org/DRAFTS/21-065.html#cql2-json[CQL JSON] encoding. 14 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-filter/REC_text-encoding.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-filtering_cql2-text-encoding]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-filtering/cql2-text-encoding* 6 | //^|A |If a filter expression can be represented for its intended use as text, servers SHOULD consider supporting the https://docs.ogc.org/DRAFTS/21-065.html#cql2-text[CQL text] encoding. 7 | //|=== 8 | 9 | [recommendation] 10 | ==== 11 | [%metadata] 12 | identifier:: /rec/record-filtering/cql2-text-encoding 13 | part:: If a filter expression can be represented for its intended use as text, servers SHOULD consider supporting the https://docs.ogc.org/DRAFTS/21-065.html#cql2-text[CQL text] encoding. 14 | ==== -------------------------------------------------------------------------------- /extensions/facets/standard/abstract_tests/advanced/ATS_query_facets_response.adoc: -------------------------------------------------------------------------------- 1 | [[ats_advanced_query_facets_response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/advanced/query_facets_response* 5 | ^|Test Purpose |Validate `facets` query parameter handling. 6 | ^|Requirement |<> 7 | ^|Test Method |. Construct a path as per <> 8 | . Issue an HTTP GET request on that path. 9 | . Check that the value of the returned HTTP status header is 200. 10 | . Check that only facets whose property match one of the properties specified using `facets` query parameter are in the `facets` object of the results set. 11 | |=== 12 | 13 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/PER_record-type.adoc: -------------------------------------------------------------------------------- 1 | [[per_record-core_type]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/record-core/type* 6 | // 7 | //The list of codes that can occur in records of a catalog for the property `type` MAY use vocabularies found in the OGC Definitions server. A subset of common examples can be found in <>. 8 | //|=== 9 | 10 | 11 | [permission] 12 | ==== 13 | [%metadata] 14 | identifier:: /per/record-core/type 15 | part:: The list of codes that can occur in records of a catalog for the property `type` MAY use vocabularies found in the OGC Definitions server. A subset of common examples can be found in <>. 16 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/PER_temporal_comparison.adoc: -------------------------------------------------------------------------------- 1 | [[per_record-core_temporal-comparison]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/record-core/temporal-comparison* 6 | // 7 | //`date` and `timestamp` are different datatypes and when attempting to compare them, a server MAY either return an error or it MAY cast the value(s) to compatible data types for comparison. 8 | //|=== 9 | 10 | 11 | [permission] 12 | ==== 13 | [%metadata] 14 | identifier:: /per/record-core/temporal-comparison 15 | part:: `date` and `timestamp` are different datatypes and when attempting to compare them, a server MAY either return an error or it MAY cast the value(s) to compatible data types for comparison. 16 | ==== -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/features/ATS_resource-end-point.adoc: -------------------------------------------------------------------------------- 1 | [[ats_feature_end-point]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:ats-id}* |*/conf/features/feature-end-point* 5 | ^|A |TBD 6 | ^|B |TBD 7 | ^|C |TBD 8 | |=== 9 | 10 | ((For features, the resource end point shall be the path '/collections/{collectionsId}/items/{featureId}'.)) 11 | 12 | ((The parameter 'collectionId' is each 'id' property in the feature collection response (JSONPath: '$.collections[*].id').)) 13 | 14 | ((The parameter 'featureId' is the 'id' property of a target feature (JSONPath: '$.features[*].id') obtained by previously having queried the collection (path '/collections/{collectionId}/items').)) 15 | 16 | 17 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/REC_record-associations_templated.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core_associations-templated]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/associations-templated* 6 | // 7 | //If access to the resource(s) requires or would be facilitated by additional context (e.g., a bounding box) then <> SHOULD be used. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/associations-templated 14 | part:: If access to the resource(s) requires or would be facilitated by additional context (e.g., a bounding box) then <> SHOULD be used. 15 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/REC_record-links_iana.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core_links_iana]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/links_iana* 6 | // 7 | //Links relations for links in the `links` or `linkTermplates` sections SHOULD be taked from the official https://www.iana.org/assignments/link-relations/link-relations.xhtml[IANA Link Relation Types] registry. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/links_iana 14 | part:: Links relations for links in the `links` or `linkTermplates` sections SHOULD be taked from the official https://www.iana.org/assignments/link-relations/link-relations.xhtml[IANA Link Relation Types] registry. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/searchable-catalog/REQ_mandatory-record-properties.adoc: -------------------------------------------------------------------------------- 1 | [[req_searchable-catalog_mandatory-record-properties]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/searchable-catalog/mandatory-record-properties* 6 | // 7 | //Each record accessibles via a searchable catalog SHALL include all the mandatory properties listed in <> and <>. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/searchable-catalog/mandatory-record-properties 14 | part:: Each record accessibles via a searchable catalog SHALL include all the mandatory properties listed in <> and <>. 15 | ==== -------------------------------------------------------------------------------- /core/openapi/schemas/time.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | nullable: true 3 | type: object 4 | properties: 5 | date: 6 | type: string 7 | pattern: "^\\d{4}-\\d{2}-\\d{2}$" 8 | timestamp: 9 | type: string 10 | pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" 11 | interval: 12 | type: array 13 | minItems: 2 14 | maxItems: 2 15 | items: 16 | oneOf: 17 | - type: string 18 | pattern: "^\\d{4}-\\d{2}-\\d{2}$" 19 | - type: string 20 | pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$" 21 | - type: string 22 | enum: 23 | - ".." 24 | resolution: 25 | type: string 26 | description: |- 27 | Minimum time period resolvable in the dataset, as an ISO 8601 duration 28 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/REC_record-associations_relate.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core_associations_relate]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/associations_relate* 6 | // 7 | //Implementations SHOULD use links in the `links` sections to represent associations to other internal or external resources related to the current record or the resource the record is describing. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/associations_relate 14 | part:: Implementations SHOULD use links in the `links` sections to represent associations to other internal or external resources related to the current record or the resource the record is describing. 15 | ==== -------------------------------------------------------------------------------- /extensions/facets/standard/abstract_tests/simple/ATS_response.adoc: -------------------------------------------------------------------------------- 1 | [[ats_simple_response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/simple/response* 5 | ^|Test Purpose |Validate facets endpoint response. 6 | ^|Requirement |<> 7 | ^|Test Method |. Construct a path for a facets page 8 | . Issue an HTTP GET request on the path 9 | . Check that the response HTTP status code is `200`. 10 | . Check that the response HTTP `Content-Type` header is `application/facets+json`. 11 | . Check that the response contains a `facets` object with at least one property. 12 | . For each facet property, check that a `type` property exists, Check that the response contains a `facets` object with at least one property. 13 | |=== 14 | 15 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/features/crs/ATS_geojson.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete_crs_geojson]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:ats-id}* |*/conf/create-replace-delete/crs/geojson* 5 | ^|A | TBD 6 | ^|B | TBD 7 | |=== 8 | 9 | ((If a server implements this standard and also implements the http://fix.me[Coordinate Reference Systems by Reference] extension and the request body contains a feature encoded using GeoJSON then the prior arrangements provision of the GeoJSON standard (see https://www.rfc-editor.org/rfc/rfc7946.html#page-12) shall apply between the server and the client.)) 10 | ((The feature in the request body shall thus be subject to requirement <>.)) 11 | -------------------------------------------------------------------------------- /core/standard/requirements/requirements_class_searchable-catalog.adoc: -------------------------------------------------------------------------------- 1 | [[rc_searchable-catalog]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/searchable-catalog 7 | //|Target type |Web API 8 | //|Dependency |<> 9 | //|=== 10 | 11 | [requirements_class] 12 | ==== 13 | [%metadata] 14 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/searchable-catalog 15 | subject:: Web API 16 | inherit:: <> 17 | requirement:: /req/searchable-catalog/common 18 | requirement:: /req/searchable-catalog/conformance 19 | requirement:: /req/searchable-catalog/mandatory-catalog-properties 20 | requirement:: /req/searchable-catalog/mandatory-record-properties 21 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/json/REQ_catalog-content.adoc: -------------------------------------------------------------------------------- 1 | [[req_json_catalog-content]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/json/catalog-content* 6 | // 7 | //The schema of all responses with the media type `application/ogc-catalog+json` SHALL validate against the OpenAPI 3.0 schema document https://schemas.opengis.net/ogcapi/records/part1/1.0/openapi/schemas/catalog.yaml[`catalog.yaml`]. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/json/catalog-content 14 | part:: The schema of all responses with the media type `application/ogc-catalog+json` SHALL validate against the OpenAPI 3.0 schema document https://schemas.opengis.net/ogcapi/records/part1/1.0/openapi/schemas/catalog.yaml[`catalog.yaml`]. 15 | ==== -------------------------------------------------------------------------------- /core/examples/json/catalog.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "tepcat", 3 | "itemType": "record", 4 | "type": "Collection", 5 | "title": "Satellite Imagery Catalog", 6 | "description": "A catalog of satellite imagery products.", 7 | "keywords": [ 8 | "satellite", 9 | "imagery", 10 | "sentinel", 11 | "radarsat", 12 | "rcm" 13 | ], 14 | "defaultSortOrder": [ 15 | { 16 | "field": "updated", 17 | "direction": "desc" 18 | }, 19 | { 20 | "field": "area", 21 | "direction": "desc" 22 | } 23 | ], 24 | "language": "en-CA", 25 | "links": [ 26 | { 27 | "href": "https://www.someserver.com/ogcapi/collections/tepcat/items", 28 | "rel": "items", 29 | "title": "Catalog records describing satellite imagery products." 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/REC_resource-langs.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core_resource-langs]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/resource-langs* 6 | // 7 | //If there are one or more languages associated with the resource that a catalog record describes, those languages SHOULD be listed in the record using the <> property. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/resource-langs 14 | part:: If there are one or more languages associated with the resource that a catalog record describes, those languages SHOULD be listed in the record using the <> property. 15 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/local-resources-catalog_filtering/REC_text-encoding.adoc: -------------------------------------------------------------------------------- 1 | [[rec_local-resource-catalog_filtering_cql2-text-encoding]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/local-resources-catalog/filter/cql2-text-encoding* 6 | // 7 | //If a filter expression can be represented for its intended use as text, servers SHOULD consider supporting the https://docs.ogc.org/DRAFTS/21-065.html#cql2-text[CQL text] encoding. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/local-resources-catalog/filter/cql2-text-encoding 14 | part:: If a filter expression can be represented for its intended use as text, servers SHOULD consider supporting the https://docs.ogc.org/DRAFTS/21-065.html#cql2-text[CQL text] encoding. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-core-query-parameters/REQ_query-param-type-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-core-query-parameters_type-response]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-core-query-parameters/type-response* 6 | // 7 | //Only records whose type, as indicated by the value of the `type` core queryable, is equal to one of the listed values specified using the `type` parameter SHALL be in the result set. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/record-core-query-parameters/type-response 15 | part:: Only records whose type, as indicated by the value of the `type` core queryable, is equal to one of the listed values specified using the `type` parameter SHALL be in the result set. 16 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/local-resources-catalog_filtering/REC_json-encoding.adoc: -------------------------------------------------------------------------------- 1 | [[rec_local-resource-catalog_filtering_cql2-JSON-encoding]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/local-resources-catalog/filtering/cql2-JSON-encoding* 6 | // 7 | //If a filter expression can be represented for its intended use as JSON, servers SHOULD consider supporting the https://docs.ogc.org/DRAFTS/21-065.html#cql2-json[CQL JSON] encoding. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/local-resources-catalog/filtering/cql2-JSON-encoding 14 | part:: If a filter expression can be represented for its intended use as JSON, servers SHOULD consider supporting the https://docs.ogc.org/DRAFTS/21-065.html#cql2-json[CQL JSON] encoding. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/local-resources-catalog/REQ_mandatory-record-properties.adoc: -------------------------------------------------------------------------------- 1 | [[req_local-resources-catalog_mandatory-record-properties]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/local-resources-catalog/mandatory-record-properties* 6 | // 7 | //Each record accessible via the local resource catalog SHALL contain all the mandatory properties listed in <> and <>. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/local-resources-catalog/mandatory-record-properties 15 | part:: Each record accessible via the local resource catalog SHALL contain all the mandatory properties listed in <> and <>. 16 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/requirements_class_searchable-catalog_sorting.adoc: -------------------------------------------------------------------------------- 1 | [[rc_searchable-catalog_sorting]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/searchable-catalog/sorting 7 | //|Target type |Web API 8 | //|Dependency |<> 9 | //|Dependency |<> 10 | //|=== 11 | 12 | 13 | [requirements_class] 14 | ==== 15 | [%metadata] 16 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/searchable-catalog/sorting 17 | subject:: Web API 18 | inherit:: <> 19 | inherit:: <> 20 | requirement:: /req/searchable-catalog/sorting 21 | requirement:: /req/searchable-catalog/sorting-conformance 22 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-core/REQ_templated-link-header.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-core_templated-link-header]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-core/templated-link-header* 6 | // 7 | //A templated link that appears in a HTTP header SHALL be encoded according to https://ietf-wg-httpapi.github.io/link-template/draft-ietf-httpapi-link-template.html[The Link-Template HTTP Header Field] specification. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/record-core/templated-link-header 14 | part:: A templated link that appears in a HTTP header SHALL be encoded according to https://ietf-wg-httpapi.github.io/link-template/draft-ietf-httpapi-link-template.html[The Link-Template HTTP Header Field] specification. 15 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/annex_bibliography.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | :appendix-caption: Annex 3 | [[Bibliography]] 4 | = Bibliography 5 | 6 | * [[SDWBP]] W3C/OGC: Spatial Data on the Web Best Practices, W3C Working Group Note 28 September 2017, https://www.w3.org/TR/sdw-bp/ 7 | * [[DWBP]] W3C: Data on the Web Best Practices, W3C Recommendation 31 January 2017, https://www.w3.org/TR/dwbp/ 8 | * [[DCAT]] W3C: Data Catalog Vocabulary, W3C Recommendation 16 January 2014, https://www.w3.org/TR/vocab-dcat/ 9 | * [[link-relations]] IANA: Link Relation Types, https://www.iana.org/assignments/link-relations/link-relations.xml 10 | * [[SPDX]] Linux Foundation: SPDX License List, https://spdx.org/licenses/ 11 | * https://www.rssboard.org/rss-autodiscovery 12 | * https://datatracker.ietf.org/doc/html/draft-ietf-atompub-autodiscovery 13 | 14 | -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/opensearch/REQ_descriptiondoc-response-collection-links.adoc: -------------------------------------------------------------------------------- 1 | [[req_opensearch_descriptiondoc-response-collection-links]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/opensearch/descriptiondoc-collection-links* 5 | ^|A |The https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#opensearch-description-document[OpenSearch description document] SHALL include one https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md#the-url-element[Url element] for each record collection (path: `/collections/{collectionId}`, `itemType=record`). 6 | ^|B |The value of the `rel` attribute SHALL be `collection`. 7 | ^|C |The value of the `template` attribute SHALL be the URL to the record collection (path: `/collections/{collectionId}`). 8 | |=== 9 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/records-api/REQ_features-api.adoc: -------------------------------------------------------------------------------- 1 | [[req_records-api_features-api]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/records-api/features-api* 6 | // 7 | //Implementations of this requirements class SHALL implement the http://www.opengis.net/spec/ogcapi-features-1/1.0/req/core[Core] requirements class of https://docs.ogc.org/is/17-069r4/17-069r4.html[OGC API - Features - Part 1: Core]. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/records-api/features-api 15 | part:: Implementations of this requirements class SHALL implement the http://www.opengis.net/spec/ogcapi-features-1/1.0/req/core[Core] requirements class of https://docs.ogc.org/is/17-069r4/17-069r4.html[OGC API - Features - Part 1: Core]. 16 | ==== -------------------------------------------------------------------------------- /core/standard/abstract_tests/building-blocks/ATS_class_oas30.adoc: -------------------------------------------------------------------------------- 1 | [[ats_oas30]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Conformance Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/oas30 7 | //|Target type |Web API 8 | //|Requirements class |<> 9 | //|=== 10 | 11 | [conformance_class] 12 | ==== 13 | [%metadata] 14 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/oas30 15 | target:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/oas30 16 | classification:: Target Type:Web API 17 | abstract-test:: /conf/oas30/conformance 18 | abstract-test:: /conf/oas30/oas-common 19 | ==== 20 | 21 | ==== Conformance 22 | 23 | include::oas30/ATS_conformance.adoc[] 24 | 25 | ==== API description document 26 | 27 | include::oas30/ATS_oas30.adoc[] 28 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/records/REQ_schema.adoc: -------------------------------------------------------------------------------- 1 | [[req_records_schema]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/records/schema* 5 | ^|Condition |Server implements <> 6 | ^|A |The response content of a GET request to `{landingPageUri}/collections/{collectionId}/schema` SHALL be a JSON Schema. 7 | ^|B |The server SHALL accept mutation requests where each record property in the request meets the schema constraints of the corresponding, receivable property in the JSON Schema. 8 | ^|C |Unless the JSON Schema includes a statement `"additionalProperties": false`, the server SHALL NOT reject properties that are not specified in the JSON Schema. 9 | |=== 10 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/oas30/REQ_oas30.adoc: -------------------------------------------------------------------------------- 1 | [[req_oas30]] 2 | 3 | //[width="90%",cols="2,6"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/oas30/oas-common* 6 | //^|A |The API implementation SHALL demonstrate conformance to the https://docs.ogc.org/is/17-069r4/17-069r4.html#_requirements_class_openapi_3_0[OpenAPI 3.0] requirements class of the https://docs.ogc.org/is/17-069r4/17-069r4.html[OGC API - Feature - Part 1: Core] Standard. 7 | //|=== 8 | 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/oas30/oas-common 14 | part:: The API implementation SHALL demonstrate conformance to the https://docs.ogc.org/is/17-069r4/17-069r4.html#_requirements_class_openapi_3_0[OpenAPI 3.0] requirements class of the https://docs.ogc.org/is/17-069r4/17-069r4.html[OGC API - Feature - Part 1: Core] Standard. 15 | ==== -------------------------------------------------------------------------------- /extensions/OpenSearch/requirements/atom/REQ_content.adoc: -------------------------------------------------------------------------------- 1 | [[req_atom_content]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/atom/content* 5 | ^|A |<> specifies the XML document root element that the server SHALL return in a `200`-response for each record resource. 6 | ^|B |Every representation of a collection or records SHALL conform to the <> and be encoded as an `atom:feed` element. 7 | ^|C |Every representation of a record SHALL conform to the <> and be encoded as an `atom:entry` element. 8 | ^|D |<> SHALL be mapped to https://datatracker.ietf.org/doc/html/rfc4287#section-4.1.2[ATOM entry elements] as defined in the section <>. 9 | |=== 10 | 11 | -------------------------------------------------------------------------------- /core/standard/requirements/requirements_class_local-resources-catalog_sorting.adoc: -------------------------------------------------------------------------------- 1 | [[rc_local-resources-catalog_sorting]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/local-resources-catalog/sorting 7 | //|Target type |Web API 8 | //|Dependency |<> 9 | //|Dependency |<> 10 | //|=== 11 | 12 | [requirements_class] 13 | ==== 14 | [%metadata] 15 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/local-resources-catalog/sorting 16 | subject:: Web API 17 | inherit:: <> 18 | inherit:: <> 19 | requirement:: /req/local-resources-catalog/sorting-conformance 20 | requirement:: /req/local-resources-catalog/sorting 21 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/local-resources-catalog/PER_additional-record-properties.adoc: -------------------------------------------------------------------------------- 1 | [[per_local-resources-catalog_additional-record-properties]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/local-resources-catalog/additional-record-properties* 6 | // 7 | //<> table contains a list of recommended additional properties that MAY be added to the information model of a local resources i.e., to enhance its searchability. 8 | //|=== 9 | 10 | [permission] 11 | ==== 12 | [%metadata] 13 | identifier:: /per/local-resources-catalog/additional-record-properties 14 | part:: See <> table contains a list of recommended additional properties that MAY be added to the information model of a local resources i.e., to enhance its searchability. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/local-resources-catalog/REQ_discovery.adoc: -------------------------------------------------------------------------------- 1 | [[req_local-resources-catalog_discovery]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/local-resources-catalog/discovery* 6 | // 7 | //The 'links` section of a server's landing page SHALL include one link (relation: `http://www.opengis.net/def/rel/ogc/1.0/ogc-catalog`) for each API endpoint (e.g., `/collections`) that has been instrumented to be a local resources catalog. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/local-resources-catalog/discovery 15 | part:: The `links` section of a server's landing page SHALL include one link (relation: `http://www.opengis.net/def/rel/ogc/1.0/ogc-catalog`) for each API endpoint (e.g., `/collections`) that has been instrumented to be a local resources catalog. 16 | ==== -------------------------------------------------------------------------------- /extensions/facets/standard/abstract_tests/simple/ATS_query_response.adoc: -------------------------------------------------------------------------------- 1 | [[ats_simple_query_response]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/simple/query_response* 5 | ^|Test Purpose |Validate facets in a query response. 6 | ^|Requirement |<> 7 | ^|Test Method |. Construct a path for a facets page 8 | . Issue an HTTP GET request on the path 9 | . Check that the response HTTP status code is `200`. 10 | . Check that the response contains a `facets` object with at least one property. 11 | . Foreach facet property: 12 | .. check that a `type` property exists. 13 | .. check that a `property` property exists. 14 | .. check that a `buckets` property exists and contains an array of 0 or more items; each item should have a `value` and `count` property. 15 | |=== 16 | 17 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/features/crs/ATS_storage-crs.adoc: -------------------------------------------------------------------------------- 1 | [[ats_create-replace-delete_crs_storage-crs]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:ats-id}* |*/conf/create-replace-delete/crs/storage-crs* 5 | ^|A | TBD 6 | ^|B | TBD 7 | |=== 8 | 9 | ((If a server implementing this standard also supports the http://fix.me[Coordinate Reference Systems by Reference] extension, then all geometry-valued feature properties presented to the server in a request body shall be expressed using the storage crs advertised by the server (see http://fix.me[OGC API - Features - Part 2: Coordinate Reference Systems by Reference, Storage CRS] for the collection being operated on.)) 10 | ((The specific collection being operated on is indicated by the {collectionId} component of the resource path.)) 11 | -------------------------------------------------------------------------------- /core/standard/abstract_tests/building-blocks/ATS_class_html.adoc: -------------------------------------------------------------------------------- 1 | [[ats_html]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Conformance Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/html 7 | //|Target type |Web API 8 | //|Requirements class |<> 9 | //|=== 10 | 11 | [conformance_class] 12 | ==== 13 | [%metadata] 14 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/html 15 | target:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/html 16 | classification:: Target Type:Web API 17 | abstract-test:: /conf/html/conformance 18 | abstract-test:: /conf/html/content 19 | abstract-test:: /conf/html/definition 20 | ==== 21 | 22 | ==== Conformance 23 | 24 | include::html/ATS_conformance.adoc[] 25 | 26 | ==== API 27 | 28 | include::html/ATS_content.adoc[] 29 | 30 | include::html/ATS_definition.adoc[] 31 | -------------------------------------------------------------------------------- /core/standard/annex_abbreviated_terms.adoc: -------------------------------------------------------------------------------- 1 | [appendix,obligation=informative] 2 | == Abbreviated Terms 3 | 4 | 5 | API:: 6 | Application Programming Interface 7 | CORS:: 8 | Cross-Origin Resource Sharing 9 | CRS:: 10 | Coordinate Reference System 11 | CSW:: 12 | Catalog Service for the Web 13 | HTTP:: 14 | Hypertext Transfer Protocol 15 | HTTPS:: 16 | Hypertext Transfer Protocol Secure 17 | IANA:: 18 | Internet Assigned Numbers Authority 19 | OGC:: 20 | Open Geospatial Consortium 21 | RFC:: 22 | Request for Comment 23 | TRS:: 24 | Temporal Coordinate Reference System 25 | URI:: 26 | Uniform Resource Identifier 27 | WMS:: 28 | Web Map Service 29 | WFS:: 30 | Web Feature Service 31 | WCS:: 32 | Web Coverage Service 33 | WPS:: 34 | Web Processing Service 35 | YAML:: 36 | YAML Ain't Markup Language or Yet Another Markup Language 37 | 38 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/requirements_class_record-filter.adoc: -------------------------------------------------------------------------------- 1 | [[rc_filtering]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/filtering 7 | //|Target type |Web API 8 | //|Dependency |<> 9 | //|=== 10 | 11 | 12 | [requirements_class] 13 | ==== 14 | [%metadata] 15 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/filtering 16 | subject:: Web API 17 | inherit:: <> 18 | requirement:: /req/features-filter/filter-param 19 | requirement:: /req/record-filter/filter-lang-param 20 | requirement:: /req/record-filter/filter-crs-param 21 | requirement:: /req/record-filter/response 22 | ==== -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/recommendations/records/REC_storage-crs.adoc: -------------------------------------------------------------------------------- 1 | [[rec_records_crs-storage-crs]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Recommendation {counter:rec-id}* |*/rec/records/crs-storage-crs* 5 | ^|Condition |Server implements <> 6 | ^|A |The server SHOULD declare the `storageCrs` property in each Collection resource for each catalog that supports CREATE, REPLACE or UPDATE requests. 7 | ^|B |The server SHOULD support all CRSs that are declared in the `crs` property of the Collection resource for each catalog that supports CREATE, REPLACE or UPDATE requests. 8 | ^|C |The server MAY only support the storage CRS in CREATE, REPLACE or UPDATE requests to avoid coordinate conversion in mutations of record resources. 9 | |=== 10 | -------------------------------------------------------------------------------- /core/standard/requirements/local-resources-catalog_sorting/REQ_sorting.adoc: -------------------------------------------------------------------------------- 1 | [[req_local-resources-catalog_sorting]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/local-resources-catalog/sorting* 6 | //2+|Implementations of sorting of record responses SHALL, at the local resources endpoint (e.g., `/collections`), implement the following requirements class. 7 | //^|A |<> 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/local-resources-catalog/sorting 15 | statement:: Implementations of sorting of record responses SHALL, at the local resources endpoint (e.g., `/collections`), implement the following requirements class. 16 | part:: See <> 17 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_records-array-name.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_records-array-name]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/records-array-name* 6 | // 7 | //If the name of the in-line records array property in the catalog is changed to something other than <> then that name SHALL be indicated in the catalog using a property named `recordsArrayName`. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/record-collection/records-array-name 14 | part:: If the name of the in-line records array property in the catalog is changed to something other than <> then that name SHALL be indicated in the catalog using a property named `recordsArrayName`. 15 | ==== -------------------------------------------------------------------------------- /core/standard/abstract_tests/crawlable-catalog/ATS_record-location.adoc: -------------------------------------------------------------------------------- 1 | [[ats_crawlable-catalog_record-location]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Abstract Test {counter:ats-id}* |*/conf/crawlable-catalog/record-location* 6 | //^|Test Purpose |Validate a crawlable catalog. 7 | //^|Requirement |<> 8 | //^|Test Method |. Determine the URL of a record 9 | //. Verify that the URL can be resolved and retrieve the record 10 | //|=== 11 | 12 | [abstract_test] 13 | ==== 14 | [%metadata] 15 | identifier:: /conf/crawlable-catalog/record-location 16 | target:: /req/crawlable-catalog/record-location 17 | test-purpose:: Validate a crawlable catalog. 18 | test-method:: 19 | + 20 | -- 21 | . Determine the URL of a record 22 | . Verify that the URL can be resolved and retrieve the record 23 | -- 24 | ==== -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/records/crs/REQ_other-crs.adoc: -------------------------------------------------------------------------------- 1 | [[req_records_crs-other-crs]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/records/crs-other-crs* 5 | ^|Condition |Server implements <> 6 | ^|Condition |The request declares that coordinates are in a specific coordinate reference system (by using the `Content-Crs` HTTP header or through information in the request body). 7 | ^|A |The server SHALL interpret all geometries in request bodies of requests to the resources or resource endpoints to be in the coordinate reference system declared in the request. 8 | ^|B |If the server does not support the coordinate reference system declared in the request for the catalog, the server SHALL return an error. 9 | |=== 10 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/REC_links-catalog-hierarchy.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-collection_links-catalog-hierarchy]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-collection/links-catalog-hierarchy* 6 | //^|A |A child catalog SHOULD include a link (relation: `parent`) pointing to its immediate parent catalog in the hierarchy. 7 | //^|B |A child catalog SHOULD include a link (relation: `root`) pointing to the root catalog of the hierarchy. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-collection/links-catalog-hierarchy 14 | part:: A child catalog SHOULD include a link (relation: `parent`) pointing to its immediate parent catalog in the hierarchy. 15 | part:: A child catalog SHOULD include a link (relation: `root`) pointing to the root catalog of the hierarchy. 16 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/local-resources-catalog_filtering/REQ_filtering.adoc: -------------------------------------------------------------------------------- 1 | [[req_local-resource-catalog_filtering]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/local-resources-catalog/filtering* 6 | //2+|Implementations that offer enhanced filtering SHALL, at the local resources catalog endpoint (e.g., `/collections`), implement the following requirements class. 7 | //^|A |<> 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/local-resources-catalog/filtering 15 | statement:: Implementations that offer enhanced filtering SHALL, at the local resources catalog endpoint (e.g., `/collections`), implement the following requirements class. 16 | part:: See <> 17 | ==== -------------------------------------------------------------------------------- /core/standard/abstract_tests/building-blocks/query-param-profile/ATS_definition.adoc: -------------------------------------------------------------------------------- 1 | [[ats_query-param-profile_definition]] 2 | [abstract_test] 3 | ==== 4 | [%metadata] 5 | identifier:: /conf/query-param-profile/definition 6 | target:: /req/query-param-profile/definition 7 | test-purpose:: Validate `profile` query parameter. 8 | test-method:: 9 | + 10 | -- 11 | . Construct a path for a searchable endpoint and include the `profile` query parameter. 12 | . Validate that the `profile` query parameter is constructed correctly using an OpenAPI Specification 3.0 fragment: 13 | 14 | [source,YAML] 15 | ---- 16 | name: profile 17 | in: query 18 | required: false 19 | schema: 20 | type: array 21 | items: 22 | type: string 23 | explode: false 24 | style: form 25 | ---- 26 | . Issue an HTTP GET request on that path. 27 | . Check that the value of the returned HTTP status header is +200+. 28 | -- 29 | ==== 30 | -------------------------------------------------------------------------------- /extensions/facets/standard/clause_5_conventions.adoc: -------------------------------------------------------------------------------- 1 | == Conventions 2 | 3 | === General remarks 4 | 5 | See <>, Clauses 5 and 6. 6 | 7 | === Identifiers 8 | 9 | The normative provisions in this Standard are denoted by the URI `http://www.opengis.net/spec/ogcapi-records-2/1.0`. 10 | 11 | All requirements and conformance tests that appear in this document are denoted by partial URIs which are relative to this base. 12 | 13 | === Additional link relation types 14 | 15 | The following OGC link relation types are introduced in this document (no applicable link relation type in the https://www.iana.org/assignments/link-relations/link-relations.xml[IANA link relation type register] could be identified): 16 | 17 | * **http://www.opengis.net/def/rel/ogc/1.0/facets**: Refers to a resource that lists properties on which facets are applicable to and may be computed on. 18 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/simpletx/insert/ATS_response-rid.adoc: -------------------------------------------------------------------------------- 1 | [[ats_simplextx_insert-response-rid]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/create-replace-delete/insert/response-rid* 5 | ^|Test Purpose |Verify that the server has assigned an identifier for a newly added resource and that, that identifier may be used to get back the resource 6 | ^|Requirement |<> 7 | ^|Dependencies |<> 8 | ^|Test Method |. Add a new resource to a collection. 9 | . Retrieve the newly added resource using the URL specified by the `Location` header. 10 | . Verify that the retrieved resource, matches the one that was originally added. 11 | |=== 12 | -------------------------------------------------------------------------------- /core/standard/requirements/requirements_class_searchable-catalog_filtering.adoc: -------------------------------------------------------------------------------- 1 | [[rc_searchable-catalog_filtering]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/searchable-catalog/filtering 7 | //|Target type |Web API 8 | //|Dependency |<> 9 | //|Dependency |<> 10 | //|=== 11 | 12 | 13 | [requirements_class] 14 | ==== 15 | [%metadata] 16 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/searchable-catalog/filtering 17 | subject:: Web API 18 | inherit:: <> 19 | inherit:: <> 20 | requirement:: /req/searchable-catalog/filtering 21 | requirement:: /req/searchable-catalog/filtering-conformance 22 | requirement:: /req/searchable-catalog/mandatory-queryables 23 | ==== 24 | 25 | -------------------------------------------------------------------------------- /template/standard/requirements/README.md: -------------------------------------------------------------------------------- 1 | This folder contains requirements description. 2 | 3 | Each file is a single requirement. The naming convention for these files is: 4 | 5 | "cc/REQ_req.adoc" where "cc" corresponds to the identifier for the requirements class and "req" corresponds to the identifier for the requirement. Example: "core/REQ_f-op.adoc". 6 | 7 | The requirement files are integrated into the main document as links. 8 | 9 | The requirement is expressed according to this pattern: 10 | 11 | ```` 12 | [[req_cc_req]] 13 | [width="90%",cols="2,6a"] 14 | |=== 15 | ^|*Requirement {counter:req-id}* |*/req/cc/req* 16 | ^|A |... SHALL ... 17 | ^|B |... SHALL ... 18 | |=== 19 | ```` 20 | 21 | Multiple statements should only be in a single requirement, if there is a direct 22 | dependency. 23 | 24 | For each requirement, there should be a corresponding Abstract Test in the "abstract_tests" folder. 25 | -------------------------------------------------------------------------------- /core/standard/requirements/README.md: -------------------------------------------------------------------------------- 1 | This folder contains requirements description. 2 | 3 | Each file is a single requirement. The naming convention for these files is: 4 | 5 | "REQn.adoc" where "n" corresponds to the requirement number. Numbers should have preceeding zeros appropriate for the total number of requirements in the project (e.g., the first requirement could be REQ001 if less than 1000 requirements are anticipated). 6 | 7 | The requirement files are integrated into the main document as links. 8 | 9 | The requirement is expressed according to this pattern: 10 | 11 | NOTE: for each requirement, there should be a corresponding Abstract Test in the "abstract_tests" folder. 12 | 13 | NOTE: sample code may reference one or more requirements and should state which requirements are included in the code by adding the following line to the Extended Description: 14 | 15 | "#REQS: reqnum1,reqnum2,...reqnumn" 16 | -------------------------------------------------------------------------------- /core/examples/yaml/collections/README.md: -------------------------------------------------------------------------------- 1 | # Making the "/collections" endpoint behave like a mini-catalog 2 | 3 | This directory is an example of how to extend the OGC API "/collections" endpoint so that it can be accessed by an "OGC API - Records" client as if it was a catalog of the collections available at this OGC API deployment. 4 | 5 | The schema of the collections is extended to include the common catalog properties. The "itemType" property of the catalog is set to "record" since this catalog does not reference other catalogs (i.e. hierarchical collections are not supported in OGC APIs). The "recordsArrayName" property is set to "collections" which is the name of the array in the collections object that contains the records (i.e. the description of each collection offered by this OGC API deployment). 6 | 7 | The schema of each collection (i.e. each record of this catalog) is extended 8 | with the common record properties. 9 | -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/records-api/PER_query-params.adoc: -------------------------------------------------------------------------------- 1 | [[per_records-api_query-params]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/records-api/query-params* 6 | // 7 | //Any combination of query parameters from the <> and any <> MAY be specified on the operation for the purpose of selecting a subset of catalog records (i.e., filtering). 8 | //|=== 9 | 10 | 11 | [permission] 12 | ==== 13 | [%metadata] 14 | identifier:: /per/records-api/query-params 15 | part:: Any combination of query parameters from the <> and any <> MAY be specified on the operation for the purpose of selecting a subset of catalog records (i.e., filtering). 16 | ==== -------------------------------------------------------------------------------- /core/standard/abstract_tests/crawlable-catalog/ATS_catalog-location.adoc: -------------------------------------------------------------------------------- 1 | [[ats_crawlable-catalog_location]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Abstract Test {counter:ats-id}* |*/conf/crawlable-catalog/location* 6 | //^|Test Purpose |Verify that a catalog is retrievable from the Web 7 | //^|Requirement |<> 8 | //^|Test Method |. Determine the URL of the crawlable catalog. 9 | //. Verify that the URL can be resolved and retrieve the catalog object. 10 | //|=== 11 | 12 | [abstract_test] 13 | ==== 14 | [%metadata] 15 | identifier:: /conf/crawlable-catalog/location 16 | target:: /req/crawlable-catalog/location 17 | test-purpose:: Verify that a catalog is retrievable from the Web 18 | test-method:: 19 | + 20 | -- 21 | . Determine the URL of the crawlable catalog. 22 | . Verify that the URL can be resolved and retrieve the catalog object. 23 | -- 24 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/requirements_class_crawlable-catalog.adoc: -------------------------------------------------------------------------------- 1 | [[rc_crawlable-catalog]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/crawlable-catalog 7 | //|Target type |Web API 8 | //|Dependency |<> 9 | //|Dependency |<> 10 | //|=== 11 | 12 | [requirements_class] 13 | ==== 14 | [%metadata] 15 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/crawlable-catalog 16 | subject:: Web API 17 | inherit:: <> 18 | inherit:: <> 19 | requirement:: /req/crawlable-catalog/record 20 | requirement:: /req/crawlable-catalog/record-location 21 | requirement:: /req/crawlable-catalog/catalog 22 | requirement:: /req/crawlable-catalog/location 23 | requirement:: /req/crawlable-catalog/conformance 24 | ==== -------------------------------------------------------------------------------- /extensions/facets/standard/requirements/README.md: -------------------------------------------------------------------------------- 1 | This folder contains requirements description. 2 | 3 | Each file is a single requirement. The naming convention for these files is: 4 | 5 | "REQn.adoc" where "n" corresponds to the requirement number. Numbers should have preceeding zeros appropriate for the total number of requirements in the project (e.g., the first requirement could be REQ001 if less than 1000 requirements are anticipated). 6 | 7 | The requirement files are integrated into the main document as links. 8 | 9 | The requirement is expressed according to this pattern: 10 | 11 | NOTE: for each requirement, there should be a corresponding Abstract Test in the "abstract_tests" folder. 12 | 13 | NOTE: sample code may reference one or more requirements and should state which requirements are included in the code by adding the following line to the Extended Description: 14 | 15 | "#REQS: reqnum1,reqnum2,...reqnumn" 16 | -------------------------------------------------------------------------------- /core/examples/yaml/processes/README.md: -------------------------------------------------------------------------------- 1 | # Making the "/processes" endpoing behave like a mini-catalog 2 | 3 | This directory is an example of how to extend the OGC API "/processes" endpoint so that it can be accessed by an "OGC API - Records" client as if it was a catalog of the processes available at this OGC API deployment. 4 | 5 | The schema of the process list is extended to include the common catalog properties. The "itemType" property of the catalog is set to "record" since this catalog does not reference other catalogs (i.e. hierarchical process lists are not supported in OGC APIs). The "recordsArrayName" property is set to "processes" which is the name of the array property in the process list object that contains the records (i.e. the summary description of each process offered by this OGC API deployment). 6 | 7 | The schema of each process summary (i.e. each record of this catalog) is extended with the common record properties. 8 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-core/REQ_record-links.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-core_links]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-core/links* 6 | //^|A |Each record SHALL, if it is a member of a catalog, include a link (relation: `collection`) pointing to the catalog of which this record is a member. 7 | //^|B |Only a single link (relation: `collection`) SHALL be included in a record. This implies that a record can only be a member of a single catalog. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/record-core/links 14 | part:: Each record SHALL, if it is a member of a catalog, include a link (relation: `collection`) pointing to the catalog of which this record is a member. 15 | part:: Only a single link (relation: `collection`) SHALL be included in a record. This implies that a record can only be a member of a single catalog. 16 | ==== -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/records/REQ_collection-endpoint.adoc: -------------------------------------------------------------------------------- 1 | [[req_collection_endpoint]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/records/collection-endpoint* 5 | ^|A |If the server supports creating new records for a catalog `catalogId` using the PUT method, the server SHALL include a boolean property `supportsNonAutogeneratedResourceIds` with the value `true` in the representation of the catalog at the endpoints `{landingPageUri}/collections` and `{landingPageUri}/collections/{collectionsId}`. 6 | ^|B |The parameter `landingPageUri` SHALL be the URI of the Landing Page resource. 7 | ^|C |The parameter `collectionId` SHALL be each `id` property in the `collections` array of the Collections resource (i.e., the response to a GET request to `{landingPageUri}/collections`) where the collection has an `itemType` with no value or a value `record`. 8 | |=== 9 | -------------------------------------------------------------------------------- /core/standard/requirements/requirements_class_local-resources-catalog_filtering.adoc: -------------------------------------------------------------------------------- 1 | [[rc_local-resources-catalog_filtering]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/local-resources-catalog/filtering 7 | //|Target type |Web API 8 | //|Dependency |<> 9 | //|Dependency |<> 10 | //|=== 11 | 12 | 13 | [requirements_class] 14 | ==== 15 | [%metadata] 16 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/local-resources-catalog/filtering 17 | subject:: Web API 18 | inherit:: <> 19 | inherit:: <> 20 | requirement:: /req/local-resource-catalog/filtering-conformance 21 | requirement:: /req/local-resources-catalog/filtering 22 | requirement:: /req/features-filter/filtering/queryables-link 23 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/local-resources-catalog/PER_other-catalog-properties.adoc: -------------------------------------------------------------------------------- 1 | [[per_local-resources-catalog_other-catalog-properties]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/local-resources-catalog/other-catalog-properties* 6 | // 7 | //A local resources catalog MAY contain any number of other additional properties not listed in <> and <>. The meaning of these other additional properties is not specified in this document. 8 | //|=== 9 | 10 | [permission] 11 | ==== 12 | [%metadata] 13 | identifier:: /per/local-resources-catalog/other-catalog-properties 14 | part:: A local resources catalog MAY contain any number of other additional properties not listed in <> and <>. The meaning of these other additional properties is not specified in this document. 15 | ==== -------------------------------------------------------------------------------- /extensions/facets/openapi/parameters/facets.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: facets 3 | in: query 4 | description: | 5 | The facets parameter is represented by a comma-separated list of values (,), delimited by colons (:), with the following tokens: 6 | 7 | - `property-name`: mandatory; the name of the facet to be included in the search response, matching one of the facets advertised in the `facets` definition 8 | - `bucket-count`: optional; the maximum number of buckets to return for that facet 9 | - `sorting`: optional; one of the following values: `value_asc`, `value_desc`, `count_asc`, or `count_desc` (defaults to the value advertised in the `facets` definition) 10 | required: false 11 | schema: 12 | type: array 13 | items: 14 | type: string 15 | pattern: '[A-Za-z_]+(:[0-9]*(:(value_asc\|value_desc\|count_asc\|count_desc)?)?)?' 16 | explode: false 17 | style: form 18 | example: facets=keywords:20:value_asc,organization:10,theme::count_desc,format 19 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/README.md: -------------------------------------------------------------------------------- 1 | This folder contains requirements description. 2 | 3 | Each file is a single requirement. The naming convention for these files is: 4 | 5 | "cc/REQ_req.adoc" where "cc" corresponds to the identifier for the requirements class and "req" corresponds to the identifier for the requirement. Example: "core/REQ_f-op.adoc". 6 | 7 | The requirement files are integrated into the main document as links. 8 | 9 | The requirement is expressed according to this pattern: 10 | 11 | ```` 12 | [[req_cc_req]] 13 | [width="90%",cols="2,6a"] 14 | |=== 15 | ^|*Requirement {counter:req-id}* |*/req/cc/req* 16 | ^|A |... SHALL ... 17 | ^|B |... SHALL ... 18 | |=== 19 | ```` 20 | 21 | Multiple statements should only be in a single requirement, if there is a direct 22 | dependency. 23 | 24 | For each requirement, there should be a corresponding Abstract Test in the "abstract_tests" folder. 25 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/records/crs/REQ_default-crs.adoc: -------------------------------------------------------------------------------- 1 | [[req_records_default-crs]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/records/default-crs* 5 | ^|Condition |Server implements <> 6 | ^|Condition |The request does not declare that coordinates are in a specific coordinate reference system (by using the `Content-Crs` HTTP header or through information in the request body). 7 | ^|A |The server SHALL interpret all geometries in request bodies of requests to the resources or resource endpoints to be in the coordinate reference system http://www.opengis.net/def/crs/OGC/1.3/CRS84 (WGS 84 longitude/latitude) for geometries without height information and http://www.opengis.net/def/crs/OGC/0/CRS84h (WGS 84 longitude/latitude plus ellipsoidal height) for geometries with height information. 8 | |=== 9 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/simpletx/insert/ATS_post-op.adoc: -------------------------------------------------------------------------------- 1 | [[ats_simplextx_insert-post-op]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/create-replace-delete/insert/post-op* 5 | ^|Test Purpose |Validate that a . 6 | ^|Requirement |<>, 7 | ^|Dependencies |<>, <> 8 | ^|Test Method |. For every resource collection identified in the Collections, issue an HTTP POST request to the URL `/collections/{collectionId}/items` with a suitable request body (see <>). 9 | . Verify that the server responds as per <>. 10 | |=== 11 | -------------------------------------------------------------------------------- /core/standard/abstract_tests/building-blocks/json/ATS_catalog-content-profile.adoc: -------------------------------------------------------------------------------- 1 | [[ats_json_catalog-content-profile]] 2 | 3 | [abstract_test] 4 | ==== 5 | [%metadata] 6 | identifier:: /conf/json/catalog-content-profile 7 | target:: /req/json/catalog-content-profile 8 | test-purpose:: Validate the JSON representation of a catalog. 9 | test-method:: 10 | + 11 | -- 12 | . Construct a path for a `catalog` page. 13 | . Negoation for a JSON-encoded catalog response. 14 | . Negotiate for the profile `http://www.opengis.net/def/profile/OGC/0/ogc-catalog`. 15 | . Issue an HTTP GET request on the path 16 | . Check that the media type of the response is `application/json`. 17 | . Check that the response validates against the schema as defined in https://schemas.opengis.net/ogcapi/records/part1/1.0/openapi/schemas/catalog.yaml. 18 | . Check that the `links` section includes a link (href: `http://www.opengis.net/def/profile/OGC/0/ogc-catalog`, relation: `profile`). 19 | -- 20 | ==== 21 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/sorting/REQ_get-sortables-op.adoc: -------------------------------------------------------------------------------- 1 | [[req_sorting_get-sortables-op]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/sorting/get-sortables-op* 6 | // 7 | //^|A |For every catalog, the server SHALL support the HTTP GET operation at the sortables endpoint and the media type `application/schema+json`. 8 | //^|B |The sortables resource SHALL be referenced from the catalog with a link with the link relation type `http://www.opengis.net/def/rel/ogc/1.0/sortables`. 9 | //|=== 10 | 11 | 12 | [requirement] 13 | ==== 14 | [%metadata] 15 | identifier:: /req/sorting/get-sortables-op 16 | part:: For every catalog, the server SHALL support the HTTP GET operation at the sortables endpoint and the media type `application/schema+json`. 17 | part:: The sortables resource SHALL be referenced from the catalog with a link with the link relation type `http://www.opengis.net/def/rel/ogc/1.0/sortables`. 18 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/sorting/REQ_sortby-response.adoc: -------------------------------------------------------------------------------- 1 | [[req_sorting_sortby-response]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/sorting/sortby-response* 6 | // 7 | //^|A |If the `sortby` parameter is specified, then the records in a response SHALL be ordered by the keys and sort directions (i.e., ascending or descending) specified. 8 | //^|B |The specific set of keys that may be used for sorting SHALL be specified by the `/collections/{collectionId}/sortables` resource. 9 | //|=== 10 | 11 | 12 | [requirement] 13 | ==== 14 | [%metadata] 15 | identifier:: /req/sorting/sortby-response 16 | part:: If the `sortby` parameter is specified, then the records in a response SHALL be ordered by the keys and sort directions (i.e., ascending or descending) specified. 17 | part:: The specific set of keys that may be used for sorting SHALL be specified by the `/collections/{collectionId}/sortables` resource. 18 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-core/REC_time.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-core_time]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-core/time* 6 | //^|A |A record SHOULD include a `time` property that indicates the temporal aspect of the resource that the record describes. 7 | //^|B |If temporal information about the resource is not available then the `time` property SHOULD, even though it is optional, still be included in the record and its value SHOULD be set to `null`. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-core/time 14 | part:: A record SHOULD include a `time` property that indicates the temporal aspect of the resource that the record describes. 15 | part:: If temporal information about the resource is not available then the `time` property SHOULD, even though it is optional, still be included in the record and its value SHOULD be set to `null`. 16 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/json/PER_time.adoc: -------------------------------------------------------------------------------- 1 | [[per_json_time]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/json/time* 6 | // 7 | //In the GeoJSON encoding of a record, the `time` member is a top-level field. Since some popular GeoJSON tools only manipulate record properties encoded in the `properties` section of a GeoJSON record, implementations MAY duplicate the `time` member from the top level into the `properties` section to take advantage of these available tools. 8 | //|=== 9 | 10 | [permission] 11 | ==== 12 | [%metadata] 13 | identifier:: /per/json/time 14 | part:: In the GeoJSON encoding of a record, the `time` member is a top-level field. Since some popular GeoJSON tools only manipulate record properties encoded in the `properties` section of a GeoJSON record, implementations MAY duplicate the `time` member from the top level into the `properties` section to take advantage of these available tools. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/crawlable-catalog/REQ_catalog-location.adoc: -------------------------------------------------------------------------------- 1 | [[req_crawlable-catalog_location]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/crawlable-catalog/location* 6 | // 7 | //The catalog SHALL be placed in a web-accessible location. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/crawlable-catalog/location 15 | part:: The catalog SHALL be placed in a web-accessible location. 16 | ==== 17 | 18 | NOTE: This Standard is primarily concerned with making resources discoverable on the open https://en.wikipedia.org/wiki/World_Wide_Web[Web] that sits on top of the public https://en.wikipedia.org/wiki/Internet[Internet]. However, the same requirement applies in more restricted contexts such as a company https://en.wikipedia.org/wiki/Intranet[Intranet] or within classified networks. In other words, the catalog should be placed in a location that is accessible to the intended audience. 19 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/abstract_tests/simpletx/insert/ATS_content-type.adoc: -------------------------------------------------------------------------------- 1 | [[ats_simplextx_insert_content-type]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Abstract Test {counter:ats-id}* |*/conf/create-replace-delete/insert/content-type* 5 | ^|Test Purpose |Verify that the server validate that the media type specified by the `Content-Type` headers matches the media type of the POST body. 6 | ^|Requirement |<> 7 | ^|Dependencies |<> 8 | ^|Test Method |. Add a resource to a collection using one of the supported resource representations. 9 | . Ensure that the value of the `Content-Type` header matches the respresentation of the resource. 10 | . Verify that the server response as per <>. 11 | |=== 12 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/records/REQ_resource-endpoint.adoc: -------------------------------------------------------------------------------- 1 | [[req_resource_endpoint]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/records/resource-endpoint* 5 | ^|A |For records, the resource endpoints SHALL be URIs specified by the URI template `{landingPageUri}/collections/{catalogId}/items/{recordId}`. 6 | ^|B |The parameter `landingPageUri` SHALL be the URI of the Landing Page resource. 7 | ^|C |The parameter `catalogId` SHALL be each `id` property in the `collections` array of the Collections resource (i.e., the response to a GET request to `{landingPageUri}/collections`) where the collection has an `itemType` with no value or a value `record`. 8 | ^|D |The parameter `record` SHALL be the `id` property of a record obtained by previously having queried the Records resource of the collection (i.e., responses to GET requests to `{landingPageUri}/collections/{catalogId}/items`). 9 | |=== 10 | -------------------------------------------------------------------------------- /extensions/facets/standard/README.md: -------------------------------------------------------------------------------- 1 | 2 | # OGC API - Records - Part 2: Facets Specification 3 | 4 | This directory contains the OGC API - Records - Part 2: Facets Specification. This specification, working with OGC API - Records - Part 1: Core, defines the mechanisms with which to apply faceting to an OGC API - Records endpoint. 5 | 6 | ## Generating HTML and PDF 7 | 8 | The latest drafts of each standard in this repository are built daily (based on the configuration contained in the [asciidoctor.json](https://github.com/opengeospatial/ogcapi-records/blob/master/asciidoctor.json) file): 9 | 10 | * [Part 1: Core](https://docs.ogc.org/DRAFTS/25-013.html) 11 | 12 | To generate HTML and PDF representations of the standard yourself, asciidoctor is required. To install: 13 | 14 | ```bash 15 | gem install asciidoctor --pre 16 | gem install asciidoctor-pdf --pre 17 | ``` 18 | 19 | From here, run `HTML_gen.bat` and `PDF_gen.bat` accordingly. Outputs are written to the parent directory. 20 | -------------------------------------------------------------------------------- /core/standard/requirements/crawlable-catalog/REQ_record-location.adoc: -------------------------------------------------------------------------------- 1 | [[req_crawlable-catalog_record-location]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/crawlable-catalog/record-location* 6 | // 7 | //The record file SHALL be placed in a web-accessible location. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/crawlable-catalog/record-location 14 | part:: The record file SHALL be placed in a web-accessible location. 15 | ==== 16 | 17 | NOTE: This Standard is primarily concerned with making resources discoverable on the open https://en.wikipedia.org/wiki/World_Wide_Web[Web] that sits on top of the public https://en.wikipedia.org/wiki/Internet[Internet]. However, the same requirement applies in more restricted contexts such as a company https://en.wikipedia.org/wiki/Intranet[Intranet] or within classified networks. In other words, the record should be placed in a location that is accessible to the intended audience. 18 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/requirements_class_record-core.adoc: -------------------------------------------------------------------------------- 1 | [[rc_record-core]] 2 | //[cols="1,4",width="90%"] 3 | //|=== 4 | //2+|*Requirements Class* 5 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core 6 | //|Target type |Document model 7 | //|=== 8 | 9 | [requirements_class] 10 | ==== 11 | [%metadata] 12 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core 13 | subject:: Document model 14 | requirement:: /req/record-core/mandatory-properties-record 15 | requirement:: /req/record-core/time-instant 16 | requirement:: /req/record-core/time-interval 17 | requirement:: /req/record-core/time-instant-interval 18 | requirement:: /req/record-core/time-zone 19 | requirement:: /req/record-core/contact 20 | requirement:: /req/record-core/license 21 | requirement:: /req/record-core/links 22 | requirement:: /req/record-core/templated-link 23 | requirement:: /req/record-core/templated-link-header 24 | requirement:: /req/record-core/default-mediatype 25 | ==== -------------------------------------------------------------------------------- /extensions/facets/standard/clause_4_terms_and_definitions.adoc: -------------------------------------------------------------------------------- 1 | == Terms and Definitions 2 | This document uses the terms defined in Sub-clause 5 of https://docs.ogc.org/DRAFTS/19-072.html[OGC API - Common Part 1] (OGC 19-072), which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word "shall" (not "must") is the verb form used to indicate a requirement to be strictly followed to conform to this Standard. 3 | 4 | For the purposes of this document, the following additional terms, definitions and abbreviated terms apply in addition to those defined in <>. 5 | 6 | [[bucket-def]] 7 | === Bucket 8 | A means to partition a domain of terms, ranges or queries results into logical groups of similar nature. 9 | 10 | === Facet; Aggregation 11 | A high-level piece of information that is computed over a set of records in a collection. The result of this computation is given as <>. 12 | -------------------------------------------------------------------------------- /core/standard/abstract_tests/crawlable-catalog/ATS_catalog.adoc: -------------------------------------------------------------------------------- 1 | [[ats_crawlable-catalog_catalog]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Abstract Test {counter:ats-id}* |*/conf/crawlable-catalog/catalog* 6 | //^|Test Purpose |Validate a crawlable catalog object 7 | //^|Requirement |<> 8 | //^|Test Method |. Obtain a catalog object 9 | //. Check that the catalog object validates against the schema defined in https://schemas.opengis.net/ogcapi/records/part1/1.0/openapi/schemas/catalog.yaml 10 | //|=== 11 | 12 | [abstract_test] 13 | ==== 14 | [%metadata] 15 | identifier:: /conf/crawlable-catalog/catalog 16 | target:: /req/crawlable-catalog/catalog 17 | test-purpose:: Validate a crawlable catalog object 18 | test-method:: 19 | + 20 | -- 21 | . Obtain a catalog object 22 | . Check that the catalog object validates against the schema defined in https://schemas.opengis.net/ogcapi/records/part1/1.0/openapi/schemas/catalog.yaml 23 | -- 24 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/REC_keywords-themes.adoc: -------------------------------------------------------------------------------- 1 | [[rec_record-collection_keywords-themes]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Recommendation {counter:rec-id}* |*/rec/record-collection/keywords-themes* 6 | //^|A |Implementations SHOULD use the `keywords` property to provide free-form terms or tags associated with this catalog. 7 | //^|B |Implementations SHOULD use the `themes` property to enumerate 1..n concepts, and their respective knowledge organization system/controlled vocabulary, associated with the catalog. 8 | //|=== 9 | 10 | [recommendation] 11 | ==== 12 | [%metadata] 13 | identifier:: /rec/record-collection/keywords-themes 14 | part:: Implementations SHOULD use the `keywords` property to provide free-form terms or tags associated with this catalog. 15 | part:: Implementations SHOULD use the `themes` property to enumerate 1..n concepts, and their respective knowledge organization system/controlled vocabulary, associated with the catalog. 16 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/building-blocks/record-collection/PER_additional-properties.adoc: -------------------------------------------------------------------------------- 1 | [[per_record-collection_additional-properties]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/record-collection/additional-properties* 6 | //^|A |A catalog MAY contain zero or more of the optional properties listed in <>. 7 | //^|B |A catalog MAY include any number of additional properties not listed in <>. The meaning of these additional properties is not defined in this standard. 8 | //|=== 9 | 10 | 11 | [permission] 12 | ==== 13 | [%metadata] 14 | identifier:: /per/record-collection/additional-properties 15 | part:: A catalog MAY contain zero or more of the optional properties listed in <>. 16 | part:: A catalog MAY include any number of additional properties not listed in <>. The meaning of these additional properties is not defined in this standard. 17 | ==== -------------------------------------------------------------------------------- /core/standard/recommendations/local-resources-catalog/PER_other-record-properties.adoc: -------------------------------------------------------------------------------- 1 | [[per_local-resources-catalog_other-record-properties]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Permission {counter:per-id}* |*/per/local-resources-catalog/other-record-properties* 6 | // 7 | //Each local resources i.e., MAY contain any number of other additional properties not listed in <>, <> and <>. The meaning of these other additional properties is not specified in this document. 8 | //|=== 9 | 10 | [permission] 11 | ==== 12 | [%metadata] 13 | identifier:: /per/local-resources-catalog/other-record-properties 14 | part:: Each local resources i.e., MAY contain any number of other additional properties not listed in <>, <> and <>. The meaning of these other additional properties is not specified in this document. 15 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/json/REQ_conformance.adoc: -------------------------------------------------------------------------------- 1 | [[req_json_conformance]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/json/conformance* 6 | // 7 | //^|A |The `conformsTo` array SHALL contain the value `http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/json`. 8 | //|=== 9 | 10 | [requirement] 11 | ==== 12 | [%metadata] 13 | identifier:: /req/json/conformance 14 | part:: The `conformsTo` array SHALL contain the value `http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/json`. 15 | ==== 16 | 17 | NOTE: The location of the `conformsTo` array depends on the type of catalog being deployed. In the case of the <> or <> catalog, the `conformsTo` array can be found in the conformance page (path: `/conformance`) of the OGC API deployment or in the catalog. In the case of a <>, the `conformsTo` array is found in the catalog. 18 | -------------------------------------------------------------------------------- /extensions/facets/standard/clause_8_advanced_facets.adoc: -------------------------------------------------------------------------------- 1 | [[advanced_clause]] 2 | == Requirements Class "Advanced Facets" 3 | 4 | === Overview 5 | 6 | include::requirements/requirements_class_advanced.adoc[] 7 | 8 | This requirements class defines the minimum set of query parameters that should be implemented at a searchable catalogue or local resources catalogue endpoint. 9 | 10 | include::requirements/advanced/REQ_conformance.adoc[] 11 | 12 | === Query parameters 13 | 14 | ==== Parameter facets 15 | 16 | The `facets` parameter allows a client to specify fine-grained access and computation of a facet against a given property, such as which facets to return and how many buckets to calculate. 17 | 18 | . Example facets query 19 | 20 | [source,bash] 21 | ---- 22 | GET /collections/wis2-discovery-metadata/items?facets=keywords:20:value_asc,organization:10 23 | ---- 24 | 25 | include::requirements/advanced/REQ_query_facets_definition.adoc[] 26 | 27 | include::requirements/advanced/REQ_query_facets_response.adoc[] 28 | -------------------------------------------------------------------------------- /extensions/transactions/create-replace-update-delete-harvest/standard/requirements/records/crs/REQ_crs84.adoc: -------------------------------------------------------------------------------- 1 | [[req_records_crs-crs84]] 2 | [width="90%",cols="2,6a"] 3 | |=== 4 | ^|*Requirement {counter:req-id}* |*/req/records/crs-crs84* 5 | ^|Condition |Server does not implement <> 6 | ^|A |The server SHALL interpret all geometries in request bodies of requests to the resources or resource endpoints to be in the coordinate reference system http://www.opengis.net/def/crs/OGC/1.3/CRS84 (WGS 84 longitude/latitude) for geometries without height information and http://www.opengis.net/def/crs/OGC/0/CRS84h (WGS 84 longitude/latitude plus ellipsoidal height) for geometries with height information. 7 | ^|B |If the request declares that the coordinates are in a different coordinate reference system (e.g., by using the `Content-Crs` HTTP header with a different CRS identifier or through information in the request body), the server SHALL return an error. 8 | |=== 9 | -------------------------------------------------------------------------------- /core/standard/abstract_tests/README.md: -------------------------------------------------------------------------------- 1 | This folder contains the Abstract Test Suite. 2 | 3 | Each file describes a single test. The naming convention for these files is: 4 | 5 | "cc/TESTn.adoc" where "cc" corresponds to the identifier for the conformance class and "n" corresponds to the test number. Numbers should have preceding zeros appropriate for the total number of tests in the conformance class (e.g., the first test could be TEST001 if less than 1000 tests are anticipated). 6 | 7 | The test is expressed according to this pattern: 8 | 9 | ```` 10 | ===== Test case title 11 | 12 | (( additional discussion, if needed )) 13 | 14 | ====== a) Test Purpose: 15 | (( description )) 16 | 17 | ====== b) Pre-conditions: 18 | * (( list all preconditions )) 19 | 20 | ====== c) Test Method: 21 | * (( steps to execute and assertions to test )) 22 | 23 | ====== d) References: 24 | * <> 25 | ```` 26 | 27 | NOTE: for each test, there must be one or more requirements in the "requirements" folder. 28 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/html/REQ_conformance.adoc: -------------------------------------------------------------------------------- 1 | [[req_html_conformance]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/html/conformance* 6 | // 7 | //^|A |The `conformsTo` array SHALL contain the value `http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/html`. 8 | //|=== 9 | 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/html/conformance 15 | part:: The `conformsTo` array SHALL contain the value `http://www.opengis.net/spec/ogcapi-records-1/1.0/conf/html`. 16 | ==== 17 | 18 | NOTE: The location of the `conformsTo` array depends on the type of catalog being deployed. In the case of the <> or <> catalog, the `conformsTo` array can be found in the conformance page (path: `/conformance`) of the OGC API deployment or in the catalog. In the case of a <>, the `conformsTo` array is found in the catalog. 19 | -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/requirements_class_json.adoc: -------------------------------------------------------------------------------- 1 | [[rc_json]] 2 | 3 | //[cols="1,4",width="90%"] 4 | //|=== 5 | //2+|*Requirements Class* 6 | //2+|http://www.opengis.net/spec/ogcapi-records-1/1.0/req/json 7 | //|Target type |Document encoding 8 | //|Dependency |<> 9 | //|Dependency |<> 10 | //|Dependency |<> 11 | //|=== 12 | 13 | [requirements_class] 14 | ==== 15 | [%metadata] 16 | identifier:: http://www.opengis.net/spec/ogcapi-records-1/1.0/req/json 17 | subject:: Document encoding 18 | inherit:: <> 19 | inherit:: <> 20 | inherit:: <> 21 | requirement:: /req/json/catalog-content 22 | requirement:: /req/json/collection-response 23 | requirement:: /req/json/conformance 24 | requirement:: /req/json/record-content 25 | requirement:: /req/json/record-response 26 | ==== -------------------------------------------------------------------------------- /core/standard/requirements/building-blocks/record-collection/REQ_default-mediatype.adoc: -------------------------------------------------------------------------------- 1 | [[req_record-collection_default-mediatype]] 2 | 3 | //[width="90%",cols="2,6a"] 4 | //|=== 5 | //^|*Requirement {counter:req-id}* |*/req/record-collection/default-mediatype* 6 | // 7 | //^|A |If the <> is advertised, then the default media type for catalog content SHALL be JSON (i.e., `application/ogc-catalog+json`). 8 | //^|B |If the <> is not advertised, then the default media type for catalog content SHALL be HTML (i.e., `text.html`). 9 | //|=== 10 | 11 | [requirement] 12 | ==== 13 | [%metadata] 14 | identifier:: /req/record-collection/default-mediatype 15 | part:: If the <> is advertised, then the default media type for catalog content SHALL be JSON (i.e., `application/ogc-catalog+json`). 16 | part:: If the <> is not advertised, then the default media type for catalog content SHALL be HTML (i.e., `text.html`). 17 | ==== --------------------------------------------------------------------------------