Approved

OGC Standard

OGC API - Connected Systems - Part 1: Feature Resources
Alexandre Robin Editor
Version: 1.0
OGC Standard

Approved

Document number:23-001
Document type:OGC Standard
Document subtype:Implementation
Document stage:Approved
Document language:English

License Agreement

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

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




I.  Abstract

OGC API Standards define modular API building blocks to spatially enable Web APIs in a consistent way. The OpenAPI specification is used to define the API building blocks.

The OGC API family of Standards is organized by resource type. The OGC API — Connected Systems Standard (aka “this Standard” or “CS API”) specifies the fundamental API building blocks for interacting with Connected Systems and associated resources. A Connected System represents any kind of system that can either directly transmit data via communication networks (being connected to them in a permanent or temporary fashion), or whose data is made available in one form or another via such networks. This definition encompasses systems of all kinds, including in-situ and remote sensors, actuators, fixed and mobile platforms, airborne and space-borne systems, robots and drones, and even humans who collect data or execute specific tasks.

Since many of the resource types defined in this Standard, including the systems themselves, are also features, the OGC API — Connected Systems Standard is logically written as an extension of the OGC API — Features Standard (Parts 1 and 4).

But beyond features, this Standard is also intended to act as a bridge between static data (geographic and other application domain features) and dynamic data (observations of these features properties, and commands/actuations that change these features properties). To this end, this Standard also describes protocols and formats to transmit dynamic data to/from connected systems through the API. Some of these protocols allow efficient real-time delivery of data while some others are more suited for transmitting data in batch.

In addition to providing its own mechanism for interacting with static and dynamic data, the API allows linking to resources defined by other OGC Standards, such as 3D Tiles, Coverages, EDR, SensorThings, Processes, and other instances of OGC API — Features. Among other things, this linking capability enables retrieving more advanced representations of features of interest (3D buildings, etc.) and gridded data (coverages) than the one that would typically be provided through this API.

The CS API is comprised of multiple parts, each of them being a separate standard.

“Part 1 — Feature Resources” (this Part) defines resource types and encodings for providing metadata about systems and their deployments, as well as the procedures and sampling strategies used by these systems. Resource types defined in Part 1 are modeled on concepts from the Semantic Sensor Network Ontology (SOSA/SSN). They are all feature types except for the Property resource that is used to describe feature properties. Part 1 also defines additional filtering capabilities and requirements for the Create/Replace/Delete/Update operations.

“Part 2 — Dynamic Data” defines additional resource types and encodings that implement the SSN concepts needed for exchanging dynamic data related to the features defined in Part 1. It defines efficient ways of encoding this dynamic (time-varying) information (including observations, commands and system events), and mechanisms allowing bi-directional streaming of real-time data as well as access to historical data. Part 2 also defines a snapshot mechanism for dynamic feature properties.

Other parts will be developed to define additional functionality such as pub/sub protocols, binary encodings, and concrete sampling feature types.

II.  Keywords

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

ogcdoc, OGC document, OpenAPI, REST, feature, API, system, smart system, connected system, IoT, sensorweb, ssn, sensor, actuator, transducer, sampling, platform, robot, drone, unmanned, autonomous, observation, measurement, datastream, command, control, trajectory, dynamic


III.  Preface

The OGC API — Connected Systems Standard is part of the suite of OGC API Standards.

To increase the brevity and readability of this Standard, many OGC document titles are shortened and/or abbreviated. Therefore, in the context of this document, the following phrases are defined.

  • “this Standard” shall be interpreted as equivalent to “OGC API — Connected Systems — Part 1: Feature Resources Standard.”

  • “CS API” or “CS API Standard” shall be interpreted as equivalent to “OGC API — Connected Systems Standard” (including all its parts).

  • “OGC API — Features” shall be interpreted as equivalent to “OGC API — Features — Part 1: Core corrigendum.”

  • “OGC API — Common” shall be interpreted as equivalent to “OGC API — Common — Part 1: Core.”

IV.  Security considerations

Security considerations are detailed in Clause 7.10.

V.  Submitting Organizations

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

  • GeoRobotix, Inc.
  • Botts Innovative Research, Inc.
  • Cesium GS, Inc.
  • 52°North Spatial Information Research GmbH
  • Riverside Research
  • Pelagis Data Solutions
  • National Geospatial-Intelligence Agency (NGA)

VI.  Submitters

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

NameAffiliation
Alex Robin (Editor)GeoRobotix, Inc.
Christian Autermann52°North Spatial Information Research GmbH
Chuck HeazelHeazeltech (for NGA)
Glenn LaughlinPelagis Data Solutions
Mike BottsBotts Innovative Research, Inc.
Patrick CozziCesium GS, Inc.
Sam BollingRiverside Research

Additional contributors to this Standard include the following:

NameAffiliation
Chris TuckerGeoRobotix, Inc.
Ian PattersonBotts Innovative Research, Inc.
Qihua LiGovTech Singapore
Rob AtkinsonOpen Geospatial Consortium, Inc.
Simon CoxOpen Geospatial Consortium, Inc.
Jan Speckamp52°North Spatial Information Research GmbH

1.  Scope

The CS API Standard defines extensions to the OGC API — Features Standard for exposing metadata regarding all kinds of observing systems and associated resources. The CS API provides an actionable implementation of concepts defined in the Semantic Sensor Network Ontology (SOSA/SSN) and also complies with OGC API — Common.

More specifically, Part 1 of the CS API Standard provides an implementation of some of the SOSA/SSN concepts (namely Systems, Platforms, Sensors, Actuators, Samplers, Procedures, Deployments and Samples) as regular features, thus making them serializable to GeoJSON format, and easily accessible by any feature API client. Advanced SensorML encodings are also defined by this standard, allowing the provision of more advanced metadata (such as complete system datasheets).

The following types of resources are defined by Part 1 of the CS API Standard.

  • Systems are features that represent instances of observing systems, platforms, sensors, actuators and samplers.

  • Deployments are features that provide information about the deployment of one or more Systems. They typically have a temporal and spatial extent.

  • Procedures are non-spatial features describing the procedure implemented by one or more System instances (e.g., specs/datasheets and methodologies).

  • Sampling Features are features used to describe the sampling geometry and/or methodology of a given observing System.

  • Property Definitions provide semantic information about feature properties, which can be observable properties, controllable properties or simply asserted properties (e.g., certain system characteristics and capabilities).

2.  Conformance

This Standard was written to be compliant with the OGC Specification Model – A Standard for Modular Specification (OGC 08-131r3). Extensions of this Standard shall themselves be conformant to the OGC Specification Model.

This Standard defines the following requirements classes.

The standardization target for these requirements classes is an implementation of the Web API.

There is no Core requirements class but an implementation target is expected to implement at least one of the CS resource* types and one encoding.

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

[*] “CS resources” means “Connected Systems resources” and refers to the resource types defined in Clauses 9, 13, 11, 14, and 15.

3.  Normative references

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

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

Clemens Portele, Panagiotis (Peter) A. Vretanos, Charles Heazel: OGC 17-069r4, OGC API — Features — Part 1: Core corrigendum. Open Geospatial Consortium (2022). http://www.opengis.net/doc/IS/ogcapi-features-1/1.0.1.

Clements Portele, Panagiotis (Peter) A. Vretanos: OGC 18-058, OGC API — Features — Part 2: Coordinate Reference Systems by Reference. Open Geospatial Consortium (2020). http://www.opengis.net/doc/IS/ogcapi-features-2/1.0.0.

OGC API — Features — Part 4: Create, Replace, Update and Delete, version 1.0.0-DRAFT. http://www.opengis.net/doc/IS/ogcapi-features-4/1.0

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

Semantic Sensor Network Ontology, (October 19 2017), https://www.w3.org/TR/vocab-ssn

Alexandre Robin: OGC 23-000, OGC SensorML Encoding Standard, version 3.0. Open Geospatial Consortium (2025). https://docs.ogc.org/is/23-000/23-000.html

John Herring: OGC 06-103r4, OpenGIS Implementation Specification for Geographic information — Simple feature access — Part 1: Common architecture. Open Geospatial Consortium (2011). http://www.opengis.net/doc/is/sfa/1.2.1.

ISO: ISO 8601:2019, Date and time — Representations for information interchange — Part 1: Basic rules. International Organization for Standardization, Geneva (2019). https://www.iso.org/standard/70907.html.. ISO (2019).

ISO: ISO 8601:2019, Date and time — Representations for information interchange — Part 2: Extensions. International Organization for Standardization, Geneva (2019). https://www.iso.org/standard/70908.html.. ISO (2019).

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

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

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

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

4.  Terms and definitions

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

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

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

All terms defined in OGC API — Common — Part 1: Core, OGC API — Features — Part 1: Core and OGC API — Features — Part 4: Create, Replace, Update and Delete also apply.

A formally defined set of types and methods which establish a contract between client code which uses the API and implementation code which provides the API.

A device that is used by, or implements, an (Actuation) Procedure that changes the state of the world.

[SOURCE: SOSA-SSN, ]

Collections of interrelated systems consisting of information technology (IT) devices, sensors, actuators, platforms, and processes that can seamlessly interact.

Describes the Deployment of one or more Systems for a particular purpose. Deployment may be done on a Platform.

[SOURCE: SOSA/SSN, ]

Abstraction of real-world phenomena.

Note 1 to entry: More details about the term ‘feature’ may be found in the W3C/OGC Spatial Data on the Web Best Practice in the section ‘Spatial Things, Features and Geometry’.

[SOURCE: ISO-19101, definition 4.11]

A set of features from a dataset.

[SOURCE: OGC API — Features, definition 4.1.4]

The thing whose property is being estimated or calculated in the course of an Observation to arrive at a Result, or whose property is being manipulated by an Actuator, or which is being sampled or transformed in an act of Sampling.

[SOURCE: SOSA/SSN, ]

Act of carrying out an (Observation) Procedure to estimate or calculate a value of a property of a Feature of Interest.

[SOURCE: SOSA/SSN, ]

A Platform is an entity that hosts other entities, particularly Sensors, Actuators, Samplers, and other Platforms.

[SOURCE: SOSA/SSN, ]

A workflow, protocol, plan, algorithm, or computational method specifying how to make an Observation, create a Sample, or make a change to the state of the world (via an Actuator). A Procedure is re-usable, and might be involved in many Observations, Samplings, or Actuations. It explains the steps to be carried out to arrive at reproducible Results.

[SOURCE: SOSA/SSN, ]

Facet or attribute of an object referenced by a name.

Example: Abby’s car has the color red, where “color red” is a property of the car instance

[SOURCE: ISO-19143]

Feature which is intended to be representative of a FeatureOfInterest on which Observations may be made.

[SOURCE: SOSA/SSN, ]

A device that is used by, or implements, a (Sampling) Procedure to create or transform one or more samples.

[SOURCE: SOSA/SSN, ]

Feature representing a subset of a FeatureOfInterest on which properties are observed or controlled. For Observations, Sampling Feature is a synonym of Sample.

Device, agent (including humans), or software (simulation) involved in, or implementing, a Procedure. Sensors respond to a Stimulus, e.g., a change in the environment, or Input data composed from the Results of prior Observations, and generate a Result. Sensors can be hosted by Platforms.

[SOURCE: SOSA/SSN, ]

A collection of sensors and processing nodes, in which information on properties observed by the sensors may be transferred and processed.

Note: A particular type of a sensor network is an ad-hoc sensor network.

System is a unit of abstraction for pieces of infrastructure that implement Procedures. A System may have components, its subsystems, which are other Systems.

[SOURCE: SOSA/SSN, ]

6.  Conventions

6.1.  Identifiers

The normative provisions in this standard are denoted by the URI

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

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

6.2.  URL Templates

URL template notation is used in various places in this document.

Fixed parts of the URL are written as plain string while the variable parts of the URL (i.e., the parameters) are surrounded by curly brackets { }.

In particular, the following parameters are used in various places:

  • {api_root} denotes the base URL of the API, which corresponds to the landing page

  • {id} denotes the local ID of a resource

6.3.  Abbreviated terms

In this document the following abbreviations and acronyms are used or introduced:

  • API: Application Programming Interface

  • CPU: Central Processing Unit

  • CRS: Coordinate Reference System

  • CSML: Climate Science Modeling Language

  • ENU: East North Up

  • GPS: Global Positioning System

  • HTTP: Hypertext Transfer Protocol

  • ISO: International Organization for Standardization

  • LTP: Local Tangent Plane

  • M2M: Machine to Machine

  • MISB: Motion Imagery Standards Board

  • NED: North East Down

  • OGC: Open Geospatial Consortium

  • O&M: Observations and Measurements

  • OMS: Observations, Measurements and Samples

  • RBAC: Role Based Access Control

  • SAS: Sensor Alert Service

  • SensorML: Sensor Model Language

  • SI: Système International (International System of Units)

  • SOS: Sensor Observation Service

  • SPS: Sensor Planning Service

  • SWE: Sensor Web Enablement

  • TAI: Temps Atomique International (International Atomic Time)

  • UAS: Unmanned Aerial System

  • UAV: Unmanned Aerial Vehicle

  • UGV: Unmanned Ground Vehicle

  • UID: Unique Identifier

  • USV: Unmanned Surface Vehicle

  • UUV: Unmanned Underwater Vehicle

  • UML: Unified Modeling Language

  • URL: Uniform Resource Locator

  • URI: Uniform Resource Identifier

  • UTC: Coordinated Universal Time

  • WKT: Well-Known Text

  • XML: eXtensible Markup Language

  • 1D: One Dimensional

  • 2D: Two Dimensional

  • 3D: Three Dimensional

7.  Overview

7.1.  General

OGC Web API Standards enable access to resources using the HTTP protocol and its associated operations (GET, PUT, POST, DELETE, etc.).

OGC API — Connected Systems Standard — Part 1 (aka “this Standard” or “CS API”) defines resource types that allow the provision of metadata about all kinds of devices, hardware components or processes that can transmit and/or receive data via communication networks (a.k.a. connected systems), including sensors, platforms, robots, human observers, forecast models, computer simulations, etc.

This Standard is an extension of the OGC API — Features Standard and defines specific feature collections, feature types and filtering mechanisms that are also dependent on building blocks from the OGC API — Common Standard. Therefore, an implementation of this Standard shall first satisfy the appropriate Requirements Classes from these two Standards. In addition, this Standard has dependencies on some OGC and non-OGC encoding standards. All dependencies are clearly identified in each Requirements Class.

7.2.  Design Considerations

While this is the first version of the OGC API — Connected Systems series, the fine-grained access to sensor related data, including sensor metadata, observations and tasking over the Web has been supported by the OGC Sensor Observation Service (SOS), OGC Sensor Planning Service (SPS) and SensorThings API Standards and their various implementations for many years.

SOS and SPS were designed in the early 2000s and use a Remote-Procedure-Call-over-HTTP architectural style and XML for any payloads, while the SensorThings API Standard is a newer OGC Standard that was the first to adopt the REST architecture style with JSON payloads.

Requirements in the OGC API — Connected Systems Standard (CS API) support all capabilities from these previous Standards, but using a modernized approach that follows the current Web architecture and in particular the W3C/OGC best practices for sharing Spatial Data on the Web as well as the latest OGC API guidelines.

The CS API is designed as an extension of the OGC API — Features Standard which makes it entirely compatible with Features API clients, while still allowing more advanced functionality to access dynamic data associated to features. A clear goal of this approach is to better integrate the GIS and sensor/IoT communities.

Another key design decision was to allow linking to implementations of other OGC API Standards whenever possible, thus allowing a much better integration with the rest of the OGC API ecosystem.

Models from the Semantic Sensor Network Ontology (SOSA/SSN) are the basis for the design of the CS API, and the SensorML language is used as an implementation model to provide concrete implementations of the SOSA/SSN concepts. An alternative GeoJSON encoding of these concepts is also defined.

The CS API defines several resource/feature types in separate requirements classes, any combination of which can be implemented by the server. This allows resources to be distributed across several servers (potentially different implementations of the CS API) and connected via hyperlinks. For example, a given implementation can choose to implement only System and Deployment features and rely on other servers to host complementary metadata such as Procedures, Property Definitions and Features of Interest (i.e., domain features). This is a common use cases since procedure descriptions (i.e., system datasheets) and domain features (e.g., geographical or hydrological features) can typically be shared by many different organizations.

The CS API also help solve several issues for application running in Denied, Disrupted, Intermittent, and Limited (DDIL) environments, e.g., under tactical implementation conditions. This includes:

  • Reduction of payload sizes in contrast to predecessor standards (OGC SOS and OGC SPS) by using a resource oriented JSON API instead of remote procedure calls with XML payloads;

  • SWE Common encoding supported by the OGC API — Connected Systems — Part 2: Dynamic data allows the separation of datastream schemas from actual data values which helps to reduce payload size compared to other encoding standards;

  • Pub/Sub protocols supported by OGC API — Connected Systems — Part 3: Pub/Sub will help track changes and only download changes when required, or receive new data without continuous polling; and

  • OGC API — Connected Systems — Part 5: Binary Encoding will add even more compact encodings such as FlatGeobuf for feature resources or Protobuf and FlatBuffers for observations and commands.

7.3.  Resource Types

Figure 1 shows a UML class diagram of the Connected Systems API resources (Part 2 resources are shown with a dashed outline).

 

api-class-diagram

Figure 1 — Class diagram of API resources

All resources defined in Part 1 of this Standard are feature types, except for the Property Definition resource. Each resource type is defined in its own requirements class. The table below provides an overview of these resource types:

Table 1 — Overview of resource types defined by this Standard

Resource TypeRequirements ClassDescriptionPossible Encodings
System (Feature)Clause 9Description of system instances such as sensors, platforms, human observers, etc.GeoJSON, SML-JSON
Deployment (Feature)Clause 11Description of deployments involving one or more systems for a particular purpose.GeoJSON, SML-JSON
Procedure (Feature)Clause 13Description of procedures implemented by systems such as datasheets or methods (e.g., system types).GeoJSON, SML-JSON
Sampling FeatureClause 14Description of sampling strategies associated with specific systems (e.g., sampling geometry or method).GeoJSON
Property DefinitionClause 15Description of feature properties (observable properties, controllable properties, system properties).SML-JSON

NOTE:  The listed encodings are the ones defined in this Standard, but extensions can define additional encodings.

7.4.  Resource Encodings

This Standard also defines encodings that can be used to encode the resource types listed above. Support for these encodings is not required as each encoding is specified in its own requirements class.

Encodings are specified in Clause 19 of this Standard. Each encoding requirements class provides schemas and examples for the supported resource types.

7.5.  Resource Collections

The CS API Standard defines several resource types that are intended to be offered by the server via separate collections. These resource collections are governed by requirements from OGC API — Features — Part 1: Core. Such collections will be referred to as OGC API Collections in the rest of this document.

The CS API makes use of this collection mechanism to allow a server to provide a more organized view of its content, by grouping them into logical collections according to any criteria.

Note that a given resource can be made available through more than one collection endpoints (i.e., collections can overlap). This provides great flexibility for a server to organize resources according to multiple criteria and thus provide different view points to the client simultaneously. See the requirements classes of the different resource types for examples.

When exposing resources via a collection endpoint, the server must indicate the type of the items contained in the collection. This is done using the itemType attribute of the collection. For feature collections, the itemType is always set to feature, so this Standard defines the featureType attribute to further specify the type of features contained in the collection.

Heterogeneous feature collections (i.e., collections containing a mix of feature types) are allowed but this Standard does not define the behavior of such collections.

7.6.  API Endpoints

As described in the previous clause, all resources defined in the CS API Standard are available through collection endpoints.

However, the CS API also defines different types of endpoints that are useful for the following use cases:

  • Providing a canonical URL for a resource, independently of the collections it is part of,

  • Providing a canonical endpoint to add resources of a given type, independently of the collections it will be added to,

  • Searching for resources across all collections of a given resource type, and

  • Access resources as sub-resources of a parent resource (allows to provide a pre-filtered view of the resources).

7.6.1.  Endpoint Types

The CS API Standard defines the behavior of “resources endpoints” and “resource endpoints” associated to each resource type defined in the Standard. These endpoints are defined in a way that is independent of the actual endpoint URL so that the same behavior can be reused at different API paths.

The terms “resources endpoint” and “resource endpoint” are used as defined by OGC API — Features — Part 4: Create, Replace, Update and Delete, that is:

  • A “resource endpoint” is an API endpoint exposing a single resource; and

  • A “resources endpoint” is an API endpoint exposing a set of resources.

Several types of API endpoints are defined by the CS API Standard:

  • Canonical resources endpoints (e.g., {api_root}/systems)

  • Canonical resource endpoints (e.g., {api_root}/systems/{id})

  • Nested resources endpoints (e.g., {api_root}/systems/{id}/subsystems)

  • Collection items resources endpoints (e.g., {api_root}/collections/{id}/items)

7.6.2.  Canonical Resources Endpoints

A canonical resources endpoint exposes all resources of a given type hosted by the server. It provides a default endpoint for creating new resources (using HTTP POST), and retrieving/searching resources (using HTTP GET) of this type. The canonical resources endpoints have simple URLs located directly at the API root.

The canonical resources endpoints for resource types defined in Part 1 of the CS API Standard are:

  • {api_root}/systems

  • {api_root}/deployments

  • {api_root}/procedures

  • {api_root}/samplingFeatures

  • {api_root}/properties

7.6.3.  Canonical Resource Endpoints

A canonical resource endpoint exposes a single resource. It provides a default endpoint for retrieving, replacing, updating or deleting (using HTTP GET, PUT, PATCH and DELETE, respectively) a given resource. Any change to the resource made at its canonical endpoint will be reflected in all collections that the resource is part of.

The canonical URL for a single resource is based on the URL of the canonical resources endpoint of the corresponding resource type. This leads to the following canonical URL templates for resource types defined in Part 1 of the CS API Standard:

  • {api_root}/systems/{id}

  • {api_root}/deployments/{id}

  • {api_root}/procedures/{id}

  • {api_root}/samplingFeatures/{id}

  • {api_root}/properties/{id}

When a resource is retrieved from a URL that is NOT its canonical URL (e.g., through a collection), its canonical URL must be provided in the response.

An example of canonical link is provided in the following JSON snippet:

 

Listing

NOTE:  If the response format is not JSON based, the canonical link can still be provided in the HTTP response headers.

7.7.  Paged Responses

All resource collections support paging via the limit query parameter and the next link, as specified by the OGC API — Features — Part 1: Core Standard.

7.8.  Search & Filtering

The core search capability is based on the OGC API — Features — Part 1: Core Standard and thus supports:

  • Bounding box searches using the bbox parameter,

  • Time instant or time period searches using the datetime parameter, and

  • Equality predicates on feature properties (i.e., property=value).

The CS API Standard extends these core search capabilities to include:

  • Search by resource local ID or UID using the id parameter,

  • Geospatial searches using the geom parameter encoded as a WKT geometry, and

  • Full-text searches using the q parameter (prefix search only).

Additional filters are defined on a per resource type basis, as shown in the following table:

Table 2 — Query Parameters

Requirements ClassQuery Parameters
System Featuresparent, procedure, foi, observedProperty, controlledProperty
Deployment Featuresparent, system, foi, observedProperty, controlledProperty
Procedure FeaturesobservedProperty, controlledProperty
Sampling Featuresfoi, observedProperty, controlledProperty
Property DefinitionsbaseProperty, objectType

See Clause 16, Requirements Class “Advanced Filtering” for more details.

7.9.  Link Relation Types

The following link relation types are defined and used in this Standard:

Table 3 — Link Relation Types

Relation TypeUsed in ResourceDescription
ogc-rel:parentSystemSystem (Subsystem), Sampling FeatureLink to the parent system of the entity.
ogc-rel:subsystemsSystemLink to the subsystems of a parent system.
ogc-rel:samplingFeaturesSystem, DeploymentLink to the sampling features associated to the entity.
ogc-rel:deploymentsSystemLink to the deployments associated to the entity.
ogc-rel:proceduresSystemLink to the procedures that can be implemented by a system.
ogc-rel:parentDeploymentDeployment (Subdeployment)Link to the parent deployment of a subdeployment.
ogc-rel:subdeploymentsDeploymentLink to the subdeployments of a parent deployment.
ogc-rel:featuresOfInterestSystem, DeploymentLink to the ultimate features of interest associated to the entity.
ogc-rel:implementingSystemsProcedureLink to the systems that implement the procedure.
ogc-rel:sampledFeatureSampling FeatureLink to the the ultimate feature of interest sampled by the sampling feature.
ogc-rel:sampleOfSampling FeatureLink to other sampling features that the sampling feature is a sample of.
ogc-rel:datastreamsSystem, Deployment, Sampling FeatureLink to the datastreams that are associated to the entity.
ogc-rel:controlStreamsSystem, Deployment, Sampling FeatureLink to the controlstreams that are associated to the entity.

7.10.  Security Considerations

7.10.1.  Authentication

The expectation is that certain functionality of the CS API will be protected by an access control mechanism (e.g., RBAC), which requires each user to authenticate.

This Standard does not mandate a particular authentication method, but the following methods are commonly used and supported by OpenAPI:

  • HTTP authentication (basic, bearer),

  • API key (either as a header or as a query parameter),

  • OAuth2 Common Flows (implicit, password, application and access code) as defined in RFC6749, and

  • OpenID Connect Discovery.

    NOTE:  Some of these authentication methods are only recommended over HTTPS.

7.10.2.  Encryption

A CS API implementation will often be used to transmit confidential or sensitive data. Encryption in-transit using HTTPS (i.e., HTTP over TLS/SSL) is thus highly recommended and is now very common practice on the web.

In addition, implementations of this Standard may also store confidential or sensitive data (e.g., in a database) for extended periods of time. In this case, encryption at rest is also recommended, especially if data is hosted on a shared infrastructure (e.g., public clouds).

7.10.3.  M2M Communications

It is expected that clients implementing the CS API Standard will sometime be machines that connect to the API automatically without human intervention.

To mitigate data spoofing, it is highly recommended that this type of clients use a strong authentication method and digital signatures relying on asymmetric cryptography, and whose access can be easily revoked (e.g., PKI certificates).

7.10.4.  Common Weaknesses

Please see Clause 11 of OGC API — Features — Part 1: Core for guidance regarding the mitigation of typical web APIs weaknesses.

8.  Requirements Class “Common”

8.1.  Overview

Requirements class 1

Identifier/req/api-common
Target typeWeb API
Conformance classConformance class A.1: /conf/api-common
Prerequisiteshttp://www.opengis.net/spec/ogcapi-features-1/1.0/req/core
http://www.opengis.net/spec/ogcapi-common-1/1.0/req/core
http://www.opengis.net/spec/ogcapi-common-1/1.0/req/landing-page
http://www.opengis.net/spec/ogcapi-common-1/1.0/req/json
Normative statementsRecommendation 1: /rec/api-common/resource-uids-types
Requirement 1: /req/api-common/resource-ids
Requirement 2: /req/api-common/resource-uids
Requirement 3: /req/api-common/datetime

This requirements class regroups core dependencies that all other requirements class inherit. It also provides clarifications on the use of the OGC API — Common Standard constructs.

8.2.  API Landing Page

The landing page provides links to start exploration of the resources offered by an OGC API implementation instance. The OGC API — Common Standard already requires some common links, sufficient for this Standard.

8.3.  API Definition

Every OGC API implementation instance is required to provide a definition document that describes the capabilities of that instance. This definition document can be used by developers to understand the API capabilities, by software clients to connect to the server, or by development tools to support the implementation of servers and clients.

Implementation must comply with requirements defined in the OGC API — Common Standard when generating the API definition document.

8.4.  Resource IDs

Resource IDs are typically generated by the server and are not guaranteed to be globally unique. However, the server must ensure that IDs are unique within a given resource type and/or feature type.

Requirement 1

Identifier/req/api-common/resource-ids
Included inRequirements class 1: /req/api-common
Statement

The server SHALL ensure that resource IDs are unique across all resources of a given type (i.e., across all collections containing resources of that type).

8.5.  Unique Identifiers (UID)

This Standard mandates that some resource types (e.g., feature resources) have a globally unique identifier that is independent of the resource URL. This is needed to carry the identity of the real-world object that a resource represents across services, as multiple servers may host different representations/descriptions of the same object.

Example

Example

A Connected Systems API server implementation may hold the summary representation of a building, while the feature API server of the land register contains its 2D footprint, and the emergency response server contains its detailed 3D structure. All 3 representations should refer to the same identifier so they can be related to each other.

Requirement 2

Identifier/req/api-common/resource-uids
Included inRequirements class 1: /req/api-common
A

The server SHALL ensure that resource UIDs (Unique IDs) are unique across all its collections.

B

The server SHALL ensure that all resource UIDs are valid URIs.

Recommendation 1

Identifier/rec/api-common/resource-uids-types
Included inRequirements class 1: /req/api-common
A

The server SHOULD ensure that resource UIDs are globally unique. The recommended URI types are:

  • URNs for 128-bits Universally Unique Identifiers (UUID) (prefixed by urn:uuid:, see RFC4122)

  • URNs using a namespace registered with IANA

8.6.  Coordinate Reference Systems

As the CS API Standard extends OGC API — Features — Part 1: Core, the server is only required to implement support for CRS:84 (longitude, latitude) and CRS:84h (longitude, latitude, height). However, if support for a CRS other than CRS:84 or CRS:84h is needed, the server can also implement requirements from the OGC API — Features — Part 2: Coordinate Reference Systems by Reference Standard.

8.7.  Date/Time Query Parameter

Requirement 3

Identifier/req/api-common/datetime
Included inRequirements class 1: /req/api-common
A

When the datetime query parameter is used to filter a collection of feature types defined in this Standard, the server SHALL use the validTime attribute of the features to determine their temporal extent.

B

Only features with a validTime period that intersects the value of the datetime query parameter, or features that don’t report any temporal validity (i.e., validTime attribute is null or not set), SHALL be included in the result set.

9.  Requirements Class “System Features”

9.1.  Overview

Requirements class 2

Identifier/req/system
Target typeWeb API
Conformance classConformance class A.2: /conf/system
PrerequisiteRequirements class 1: /req/api-common
Normative statementsRequirement 4: /req/system/location-time
Requirement 5: /req/system/canonical-url
Requirement 6: /req/system/resources-endpoint
Requirement 7: /req/system/canonical-endpoint
Requirement 8: /req/system/collections

The “System Features” requirements class specifies how system descriptions are provided using the CS API.

The System resource implements the System concept defined in the Semantic Sensor Network Ontology (SOSA/SSN). System resources are used to expose metadata about several kinds of systems and their components, including sensors, actuators, samplers, processes, platforms, etc.

NOTE 1:  System resources describe system instances (e.g., a sensor device, a UAV platform) while Procedure resources are used to describe system types (e.g., a particular model of sensor or vehicle, specified using the manufacturer datasheet). Several System instances can implement the same Procedure (i.e., be of the same model).

NOTE 2:  System resources are used to model instances of sosa:System (including its subclasses: sosa:Sensor, sosa:Actuator and sosa:Sampler), as well as sosa:Platform. Semantic tagging is used to provide the exact type.

NOTE 3:  The Semantic Sensor Network Ontology (SOSA/SSN) does not define sosa:Platform as a subclass of sosa:System. However, the ontology allows an individual to be both a sosa:System and a sosa:Platform. This is the specific case that is modeled in this Standard as a System resource tagged with systemType=sosa:Platform. However, not all types of platforms need be modeled as systems (i.e., trees, buildings, etc. can also serve as platforms). Thus, this Standard does not put any restriction as to what type of Features can be used as platforms. This enables a Deployment to refer to any Feature as the platform, which includes linking to external feature stores (e.g., building databases, etc.).

Example

System Examples

  • A digital temperature probe (type: Sensor, assetType: Equipment)

  • A GPS receiver (type: Sensor, assetType: Equipment)

  • A video camera (type: Sensor, assetType: Equipment)

  • A weather forecasting system (type: Sensor, assetType: Simulation)

  • A human bird watcher (type: Sensor, assetType: Human)

  • An electric motor (type: Actuator, assetType: Equipment)

  • A motorized window blind (type: Actuator, assetType: Equipment)

  • A field technician collecting water samples (type: Sampler, assetType: Human)

  • An unmanned vehicle (type: Platform, assetType: Equipment)

  • An aircraft (type: Platform, assetType: Equipment)

  • A bulldozer (type: Platform, assetType: Equipment)

  • The Nexrad radar network (type: System, assetType: Group)

9.2.  System Resource

9.2.1.  Introduction

In the CS API Standard, System resources are a special kind of feature resource that implements the ssn:System concept.

This section defines the attributes and associations composing a System resource, but the exact way they are encoded in the payload is defined by each encoding. For encodings defined in this document, please see:

9.2.2.  Properties

The following tables describe the attributes and associations of a System resource and their mapping to SOSA/SSN.

All System resource representations provided by encoding requirements classes map to these properties.

Table 4 — System Attributes

NameSOSA/SSN PropertyDefinitionData TypeUsage
uniqueIdentifierRDF concept URIThe unique identifier of the system in the form of a URI (preferably a URN). This identifier should be persistent and independent of the actual resource URL.URIRequired
namerdfs:labelThe human readable name of the system.StringRequired
descriptionrdfs:commentA human readable description for the system.StringOptional
systemTyperdfs:typeThe type of system (see Table 6).URI or CURIERequired
assetType-The type of asset involved in the system (see Table 7).EnumOptional
validTime-The validity period of the system’s description.DateTimeOptional
locationgeo:lat/geo:lonThe current location of the system.PointOptional

Table 5 — System Associations

NameSOSA/SSN PropertyDefinitionTarget ContentUsage
systemKindssn:hasSystemKindThe description of the kind of System (e.g., datasheet).A single Procedure resource.Optional
subsystemssosa:hasSubSystemThe list of subsystems (i.e., components) attached to the System, if any.A list of System resources.Required
samplingFeatures-The Sampling Features associated to the System, if any.A list of SamplingFeature resources.Required
deploymentssosa:hasDeploymentThe Deployments that the System is part of, if any.A list of Deployment resources.Optional
proceduressosa:implementsThe Procedures that can be implemented by the System, if any.A list of Procedure resources.Optional
datastreams-The DataStreams generated by the System, if any.A list of DataStream resources.Required
controlstreams-The ControlStreams receiving commands for the System, if any.A list of ControlStream resources.Required

Table 6 — System Types

System TypeURICURIEUsage
Sensorhttp://www.w3.org/ns/sosa/Sensorsosa:SensorWhen the system’s primary activity is ‘sensing’ or ‘observing’.
Actuatorhttp://www.w3.org/ns/sosa/Actuatorsosa:ActuatorWhen the system’s primary activity is ‘actuating’.
Samplerhttp://www.w3.org/ns/sosa/Samplersosa:SamplerWhen the system’s primary activity is ‘sampling’.
Platformhttp://www.w3.org/ns/sosa/Platformsosa:PlatformWhen the system’s primary activity is ‘carrying’ other systems.
Systemhttp://www.w3.org/ns/sosa/Systemsosa:SystemFor all other system types.

NOTE:  Tagging a System resource with a particular type only carries semantic meaning and does not imply any API functionality. All types of systems can receive commands and generate datastreams.

Table 7 — Asset Types

Asset Type ValueUsage
EquipmentThe system is composed of one or more hardware devices or pieces of equipment, that interact directly with the real-world and can be either automated or manually operated (e.g., sensor or actuator device, vehicle, robot, etc.).
HumanThe system consists of one or more human beings that follow well defined procedures (e.g., conducting polls or surveys, collecting samples, carrying sensors, etc.).
LivingThingThe system consists of one or more animals or other living organisms (most often used with systemType=Platform when it carries sensors).
SimulationThe system is a software algorithm that simulates or predicts the state of the real-world (e.g., weather forecasts, mathematical models, training simulations, etc.).
ProcessThe system is a process or process chain that transforms data coming from or going to other systems.
GroupThe system represents a group of similar systems (e.g., sensor network, vehicle fleet, etc.). Such system usually has subsystems that provide detailed information about each member in the group.
OtherAny other type of asset not accounted for in this list. In this case, an application specific property can be used to provide the type.

NOTE:  Deployments can also be used to document how different types of systems are used together. For instance, a deployment may describe how a “human” (e.g., system of type platform) uses a piece of “equipment” (e.g., system of type sensor) according to a well defined procedure.

9.2.3.  Location

It is recommended that the System resource representation includes the location of the system. If the implementation decides to report the location, it must be its latest known location.

Recommendation 2

Identifier/rec/system/location
Statement

A System feature resource SHOULD include the system location.

Requirement 4

Identifier/req/system/location-time
Included inRequirements class 2: /req/system
A

If the implementation chooses to report the location of a system, it SHALL be the latest known location of the system, unless a specific snapshot date/time is requested (see Part 2).

NOTE:  If the system is a virtual asset, such as a simulation or process, reporting its location is not always desired or possible. If an implementation wishes to report such location, the recommendation is the following:

  • If the location of the computing hardware that executes the process is known, it should be used as the feature location (e.g., the location of the datacenter);

  • If the process can be run in multiple locations (e.g., distributed or redundant process), a multi-point geometry or an entire geographic area should be used as the feature location; and

  • If the location is unknown, the location is not set.

9.3.  System Canonical URL

The CS API Standard requires that every System resource has a canonical URL.

Requirement 5

Identifier/req/system/canonical-url
Included inRequirements class 2: /req/system
A

Every System resource exposed by the server SHALL be accessible through its canonical URL of the form {api_root}/systems/{id} where id is the local identifier of the System resource.

B

If a System resource is retrieved through any other URL than its canonical URL, the server response SHALL include a link to its canonical URL with relation type canonical.

9.4.  System Resources Endpoints

9.4.1.  Definition

A System resources endpoint is an endpoint exposing a set of System resources that can be further filtered using query parameters.

Requirement 6

Identifier/req/system/resources-endpoint
Included inRequirements class 2: /req/system
A

The server SHALL support the HTTP GET operation at the path associated to the System resources endpoint.

B

The operation SHALL fulfill all requirements defined in Clause 7.15.2 to 7.15.8 of OGC API — Features — Part 1: Core.

C

All features in the result set SHALL be System resources.

Clause 16.5 defines additional query parameters applicable to System resources endpoint.

9.4.2.  Canonical System Resources Endpoint

The CS API Standard requires that a canonical System resources endpoint, exposing all System resources, be made available by the server.

Requirement 7

Identifier/req/system/canonical-endpoint
Included inRequirements class 2: /req/system
A

The server SHALL expose a System resources endpoint at the path {api_root}/systems.

B

The endpoint SHALL expose all System resources available on the server.

9.5.  System Feature Collections

Any number of feature collections containing System features can be available at a CS API endpoint, but the server must at least expose one. Members of System feature collections are identified with the feature type sosa:System.

System resources can be grouped into collections according to any arbitrary criteria, as shown in the following examples.

Example

Examples of System Collections

  • All unmanned systems at URL {api_root}/collections/uxs_systems

  • All UAV systems at URL {api_root}/collections/uav_systems

  • All systems operated by organization X at URL {api_root}/collections/orgx_systems

  • All currently deployed systems at URL {api_root}/collections/deployed_systems

Note that a given system can be part of all 4 collections at the same time.

Requirement 8

Identifier/req/system/collections
Included inRequirements class 2: /req/system
A

The server SHALL expose at least one Feature collection containing System resources.

B

The server SHALL identify all Feature collections containing System resources by setting the itemType attribute to feature and the featureType attribute to sosa:System in the Collection metadata.

C

For any feature collection with featureType set to sosa:System, the HTTP GET operation at the path /collections/{collectionId}/items SHALL support the query parameters and response of a System resources endpoint.

10.  Requirements Class “Subsystems”

10.1.  Overview

Requirements class 3

Identifier/req/subsystem
Target typeWeb API
Conformance classConformance class A.3: /conf/subsystem
PrerequisiteRequirements class 2: /req/system
Normative statementsRequirement 9: /req/subsystem/collection
Requirement 10: /req/subsystem/recursive-param
Requirement 11: /req/subsystem/recursive-search-systems
Requirement 12: /req/subsystem/recursive-search-subsystems
Requirement 13: /req/subsystem/recursive-assoc

Describing complex systems in terms of a hierarchy of components (or subsystems) is often useful. The “Subsystems” requirements class specifies how such hierarchical systems are described and made discoverable in an implementation of the CS API Standard.

Subsystems (i.e., system components) are regular System features that are made available through a sub-collection of a parent System resource. Subsystems can be any kind of System and can be indefinitely nested.

10.2.  Types of System/Subsystem Associations

Subsystems can be associated to their parent system either by Composition or Aggregation.

Composition means that a subsystem is an integral part of a parent system (i.e., the subsystem cannot or is not usually taken apart from its parent system during its lifetime, except for maintenance). Composition is implemented in the API by creating subsystems as nested resources under their parent system.

Aggregation means that a subsystem is not permanently attached to its parent system (i.e., it can be taken apart and can be attached to different parent systems at different times). Aggregation is implemented in the API using Deployment resources that describe what subsystems are mounted on a parent system at any given time.

NOTE:  This definition is slightly looser that the UML definition for Composition associations. In UML, composition is used if a child cannot exist independently from the parent. In the context of the CS API Standard, composition can be used by choice if it is known that the component is rarely taken apart from its parent, even though, in principle the component could exist independently.

Example

Examples of systems modeled by composition

  • A UAV with built-in IMU, GPS and camera that cannot be changed

  • A weather station with built-in sensors

Examples of systems modeled by aggregation

  • A weather station with interchangeable sensors

  • A human operator using different sensors according to the mission

Examples of systems modeled by combining both composition and aggregation

  • A UAV with IMU, GPS, flight controller (composition since they are built-in) and interchangeable payloads such as RGB camera, thermal camera, LiDAR, etc. (aggregation since they can be changed for each mission).

  • A mobile phone with integrated sensors (composition since they are built-in) and additional sensors connected via Bluetooth (aggregation).

10.3.  Subsystem Resource

10.3.1.  Introduction

Resources representing subsystems are regular System resources that are nested under their parent System.

See Clause 9.2 for the requirements applying to System resources.

10.3.2.  Properties

A System resource that is a subsystem of a parent system also includes the following associations:

Table 8 — Subsystem Associations

NameSOSA/SSN PropertyDefinitionTarget ContentUsage
parentSysteminverse Of sosa:hasSubSystemThe parent System that this subsystem is part of.A single System resource.Required

10.4.  Subsystem Canonical URL

Since subsystems are also System resources, they are required to have a canonical URL as specified by Requirement 5: /req/system/canonical-url.

10.5.  Subsystem Resources Endpoint

Subsystems are accessible as sub-resources of their parent System.

Requirement 9

Identifier/req/subsystem/collection
Included inRequirements class 3: /req/subsystem
A

The server SHALL expose a System resources endpoint at path {api_root}/systems/{parentId}/subsystems.

B

The endpoint SHALL only expose the System resources that are subsystems of the parent System with ID parentId.

C

The endpoint SHALL expose all subsystems that are permanently attached to the parent system, and CAN also expose the subsystems that are currently deployed on the parent.

Some systems have interchangeable components that are often called “payloads” (e.g., UAV platform carrying different sensors at different times). Although such payloads can be listed as subsystems by the server, the best way to describe this is by creating a new Deployment resource every time the payloads are changed (the deployment description allows one to explicitly list which payloads are mounted on a platform during a given time period).

10.6.  System Recursive Search

By default, the canonical System resources endpoint only exposes top-level systems (i.e., subsystems are not visible).

Likewise, Subsystem resources endpoints only expose the direct subsystems, but not subsystems nested at deeper levels (i.e., the subsystems of the subsystems and so on).

The recursive query parameter changes the default behavior by instructing the server to process all subsystems recursively (at all levels below the current level).

Requirement 10

Identifier/req/subsystem/recursive-param
Included inRequirements class 3: /req/subsystem
Statement

The server SHALL support a query parameter recursive with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: recursive
in: query
required: false
schema:
  type: boolean

Requirement 11

Identifier/req/subsystem/recursive-search-systems
Included inRequirements class 3: /req/subsystem
A

HTTP GET operations at the canonical System resources endpoint {api_root}/systems SHALL support the parameter recursive.

B

If the recursive parameter is omitted or set to false, the response SHALL only include the top-level systems, and not their subsystems.

C

If the recursive parameter is set to true, the response SHALL include top-level systems as well as their subsystems, recursively.

D

Other query string parameters SHALL be applied to all processed System resources, regardless of whether they are top-level systems or subsystems.

Requirement 12

Identifier/req/subsystem/recursive-search-subsystems
Included inRequirements class 3: /req/subsystem
A

HTTP GET operations at subsystems resources endpoints {api_root}/systems/{id}/subsystems SHALL support the parameter recursive.

B

If the recursive parameter is omitted or set to false, the response SHALL only include the system’s direct subsystems.

C

If the recursive parameter is set to true, the response SHALL include all nested subsystems, recursively.

D

Other query string parameters SHALL be applied to all processed System resources, regardless of whether they are direct subsystems, or transitive subsystems.

10.7.  System Associations

If a System has subsystems, the associations listed below must reference a resource set that includes resources associated to the main system, as well as all its subsystems.

Requirement 13

Identifier/req/subsystem/recursive-assoc
Included inRequirements class 3: /req/subsystem
A

Whenever a System resource has subsystems, the target content of its associations SHALL be adjusted as indicated in Table 9.

Table 9 — System Associations

Association NameTarget Content
samplingFeaturesThe Sampling Features associated to the System and all its subsystems, recursively.
datastreamsThe DataStreams generated by the System and all its subsystems, recursively.
controlstreamsThe ControlStreams receiving commands for the System and all its subsystems, recursively.

11.  Requirements Class “Deployment Features”

11.1.  Overview

Requirements class 4

Identifier/req/deployment
Target typeWeb API
Conformance classConformance class A.4: /conf/deployment
PrerequisiteRequirements class 1: /req/api-common
Normative statementsRequirement 14: /req/deployment/canonical-url
Requirement 15: /req/deployment/resources-endpoint
Requirement 16: /req/deployment/canonical-endpoint
Requirement 17: /req/deployment/ref-from-system
Requirement 18: /req/deployment/collections

The “Deployment Features” requirements class specifies how Deployment descriptions are provided using the CS API.

The Deployment resource implements the Deployment concept defined in the Semantic Sensor Network Ontology (SOSA/SSN) and is used to provide information about the deployment of one or more Systems (with or without payloads) for a specific purpose (often at a specific location and time).

Example

Deployment Examples

  • An in-situ sensor deployed at a given location

  • A network of in-situ sensors deployed along a river

  • A network of security cameras deployed in a city

  • A mission involving one or more unmanned systems (platforms) with payloads

  • A team deployed to collect survey responses

  • A sample collection campaign involving field personnel

  • A forecast model run

11.2.  Deployment Resource

11.2.1.  Introduction

In the CS API Standard, Deployment resources are a special kind of feature resource that implements the sosa:Deployment concept.

This section defines the attributes and associations composing the Deployment resource, but the exact way attributes and associations are encoded in the payload is defined by each encoding. For encodings defined in this document, please see:

11.2.2.  Properties

The following tables describe the attributes and associations of a Deployment resource and their mapping to SOSA/SSN.

All Deployment resource representations provided by encoding requirements classes map to these properties.

Table 10 — Deployment Attributes

NameSOSA/SSN PropertyDefinitionData TypeUsage
uniqueIdentifierRDF concept URIThe unique identifier of the deployment in the form of a URI (preferably a URN). This identifier should be persistent and independent of the actual resource URL.URIRequired
namerdfs:labelThe human readable name of the deployment.StringRequired
descriptionrdfs:commentA human readable description for the deployment.StringOptional
deploymentTyperdfs:typeThe type of deployment.URIOptional
validTime-The time period during which the systems are deployed.DateTimeRequired
locationgeo:lat/geo:lonThe location or area where the systems are deployed.GeometryOptional

NOTE 1:  The deployment location is not to be confused with the features of interest or sampling features location/geometry. For in-situ and short-range remote sensors, the deployment location may include the sampling features, but it is usually not true for long range remote sensing such as space based earth observation. If the deployed systems are mobile, the deployment location should be the entire area where the systems can be moved to.

NOTE 2:  For deployments of models or processes, the location would usually not be provided, and the user should query the area covered by the sampling feature(s) instead (i.e., the geographic area covered by the model). If a deployment location is provided, it should be the location where the hardware executing the process is located, not the location of the sampling features.

Table 11 — Deployment Associations

NameSOSA/SSN PropertyDefinitionTarget ContentUsage
platformsosa:deployedOnPlatformThe platform on which the systems are deployed.A single Feature resource.Optional
deployedSystemssosa:deployedSystemThe list of Systems deployed during the Deployment, if any.A list of System resources.Required
subdeployments-The list of subdeployments that are part of the Deployment, if any.A list of Deployment resources.Required
featuresOfInterest-The ultimate features of interest that are observed and/or controlled during the Deployment.A list of Feature resources.Optional
samplingFeatures-The Sampling Features associated to Systems deployed during the Deployment.A list of Sampling Feature resources.Optional
datastreams-The Data Streams containing observations collected during the Deployment.A list of DataStream resources.Optional
controlstreams-The Control Streams that received commands issued during the Deployment.A list of ControlStream resources.Optional

NOTE:  The platform can be another System (e.g., a UAV or a station), but can also be any feature (e.g., a building or a tree).

11.3.  Deployment Canonical URL

The CS API Standard requires that every Deployment resource has a canonical URL.

Requirement 14

Identifier/req/deployment/canonical-url
Included inRequirements class 4: /req/deployment
A

Every Deployment resource exposed by the server SHALL be accessible through its canonical URL of the form {api_root}/deployments/{id} where id is the local identifier of the Deployment resource.

B

If a Deployment resource is retrieved through any other URL than its canonical URL, the server response SHALL include a link to its canonical URL with relation type canonical.

11.4.  Deployment Resources Endpoints

11.4.1.  Definition

A Deployment resources endpoint is an endpoint exposing a set of Deployment resources that can be further filtered using query parameters.

Requirement 15

Identifier/req/deployment/resources-endpoint
Included inRequirements class 4: /req/deployment
A

The server SHALL support the HTTP GET operation at the path associated to the Deployment resources endpoint.

B

The operation SHALL fulfill all requirements defined in Clause 7.15.2 to 7.15.8 of OGC API — Features — Part 1: Core.

C

All features in the result set SHALL be Deployment resources.

Clause 16.6 defines additional query parameters applicable to Deployment resources endpoint.

11.4.2.  Canonical Deployment Resources Endpoint

The CS API Standard requires that a canonical Deployment resources endpoint, exposing all Deployment resources, be made available by the server.

Requirement 16

Identifier/req/deployment/canonical-endpoint
Included inRequirements class 4: /req/deployment
A

The server SHALL expose a Deployment resources endpoint at the path {api_root}/deployments.

B

The endpoint SHALL expose all Deployment resources available on the server.

11.4.3.  Nested Deployment Resources Endpoint

Requirement 17

Identifier/req/deployment/ref-from-system
Included inRequirements class 4: /req/deployment
Conditions
A

The deployments association in a System resource representation SHALL be implemented as a link to a Deployment resources endpoint at path {api_root}/systems/{sysId}/deployments.

B

The endpoint SHALL only expose the Deployment resources where the System with ID sysId was deployed.

11.5.  Deployment Feature Collections

Any number of feature collections containing Deployment features can be available at a CS API endpoint, but the server must at least expose one. Members of Deployment feature collections are identified with the feature type sosa:Deployment.

Deployment resources can be grouped into collections according to any arbitrary criteria, as shown in the following examples.

Example

Examples of Deployment Collections

  • All saildrone deployments at URL {api_root}/collections/saildrone_missions

  • All special forces deployments at URL {api_root}/collections/sof_missions

Note that a given deployment can be part of multiple collections at the same time.

Requirement 18

Identifier/req/deployment/collections
Included inRequirements class 4: /req/deployment
A

The server SHALL expose at least one Feature collection containing Deployment resources.

B

The server SHALL identify all Feature collections containing Deployment resources by setting the itemType attribute to feature and the featureType attribute to sosa:Deployment in the Collection metadata.

C

For any feature collection with featureType set to sosa:Deployment, the HTTP GET operation at the path /collections/{collectionId}/items SHALL support the query parameters and response of a Deployment resources endpoint.

12.  Requirements Class “Subdeployments”

12.1.  Overview

Requirements class 5

Identifier/req/subdeployment
Target typeWeb API
Conformance classConformance class A.5: /conf/subdeployment
PrerequisiteRequirements class 4: /req/deployment
Normative statementsRequirement 19: /req/subdeployment/collection
Requirement 20: /req/subdeployment/recursive-param
Requirement 21: /req/subdeployment/recursive-search-deployments
Requirement 22: /req/subdeployment/recursive-search-subdeployments
Requirement 23: /req/subdeployment/recursive-assoc

Describing complex deployments in terms of a hierarchy of deployments is often useful. This requirements class specifies how such hierarchical deployments are described and made discoverable using the CS API Standard.

Subdeployments are regular Deployment features that are made available through a sub-collection of a parent Deployment resource.

Example

Examples of deployments with subdeployments

  • A deployment of many monitoring sensors along a river, where each monitoring site is described as a subdeployment.

  • A deployment of multiple unmanned systems to cover a large area divided into smaller regions, with subdeployments describing which platforms/payloads are deployed in each region.

  • A tactical military operation, where each unit is described as a subdeployment.

12.2.  Subdeployment Resource

12.2.1.  Introduction

Resources representing subdeployments are regular Deployment resources that are nested under their parent deployment.

See Clause 11.2 for the requirements applying to Deployment resources.

12.2.2.  Properties

A Deployment resource that is a subdeployment of a parent deployment also includes the following associations:

Table 12 — Subdeployment Associations

NameSOSA/SSN PropertyDefinitionTarget ContentUsage
parentDeployment-The parent Deployment that this subdeployment is part of.A single Deployment resource.Required

12.3.  Subdeployment Canonical URL

Since subdeployments are also Deployment resources, they are required to have a canonical URL as specified by Requirement 14: /req/deployment/canonical-url.

12.4.  Subdeployment Resources Endpoint

Subdeployments are accessible as sub-resources of their parent Deployment.

Requirement 19

Identifier/req/subdeployment/collection
Included inRequirements class 5: /req/subdeployment
A

The server SHALL expose subdeployments as a collection of Deployment resources at path {api_root}/deployments/{parentId}/subdeployments.

B

The content of the collection SHALL be the list of Deployment resources that are part of the parent Deployment with ID parentId.

C

The collection SHALL support the same query parameters as the ones supported by the catch-all collection {api_root}/deployments.

12.5.  Deployment Recursive Search

By default, the canonical Deployment resources endpoint only exposes top-level deployments (i.e., subdeployments are not visible).

Likewise, Subdeployment resources endpoints only expose the direct subdeployments, but not subdeployments nested at deeper levels.

The recursive query parameter changes the default behavior by instructing the server to process all subdeployments recursively (at all levels below the current level).

Requirement 20

Identifier/req/subdeployment/recursive-param
Included inRequirements class 5: /req/subdeployment
Statement

The server SHALL support a query parameter recursive with the following characteristics (using an OpenAPI Specification 3.0 fragment):

 

name: recursive
in: query
required: false
schema:
  type: boolean

Requirement 21

Identifier/req/subdeployment/recursive-search-deployments
Included inRequirements class 5: /req/subdeployment
A

HTTP GET operations at the canonical Deployment resources endpoint {api_root}/deployments SHALL support the parameter recursive.

B

If the recursive parameter is omitted or set to false, the response SHALL only include the top-level deployments, and not their subdeployments.

C

If the recursive parameter is set to true, the response SHALL include top-level deployments as well as their subdeployments, recursively.

D

Other query string parameters SHALL be applied to all processed Deployment resources, regardless of whether they are root deployments or subdeployments.

Requirement 22

Identifier/req/subdeployment/recursive-search-subdeployments
Included inRequirements class 5: /req/subdeployment
A

HTTP GET operations at subdeployments resources endpoints {api_root}/deployments/{id}/subdeployments SHALL support the parameter recursive.

B

If the recursive parameter is omitted or set to false, the response SHALL only include the deployment’s direct subdeployments.

C

If the recursive parameter is set to true, the response SHALL include all nested subdeployments, recursively.

D

Other query string parameters SHALL be applied to all processed Deployment resources, regardless of whether they are direct subdeployments, or transitive subdeployments.

12.6.  Deployment Associations

If a Deployment has subdeployments, the associations listed below must reference a resource set that includes resources associated to the main deployment, as well as all its subdeployments.

Requirement 23

Identifier/req/subdeployment/recursive-assoc
Included inRequirements class 5: /req/subdeployment
A

Whenever a Deployment resource has subdeployments, the target content of its associations SHALL be adjusted as indicated in Table 13.

Table 13 — Deployment Associations

Association NameTarget Content
deployedSystemsThe Systems deployed during the Deployment and all its subdeployments, recursively.
samplingFeaturesThe Sampling Features associated to Systems deployed during the Deployment and all its subdeployments, recursively.
featuresOfInterestThe ultimate features of interest that are observed and/or controlled during the Deployment or any of its subdeployments, recursively.
datastreamsThe DataStreams generated by systems deployed in the Deployment and all its subdeployments, recursively.
controlstreamsThe ControlStreams receiving commands for systems deployed in the Deployment and all its subdeployments, recursively.

13.  Requirements Class “Procedure Features”

13.1.  Overview

Requirements class 6

Identifier/req/procedure
Target typeWeb API
Conformance classConformance class A.6: /conf/procedure
PrerequisiteRequirements class 1: /req/api-common
Normative statementsRequirement 24: /req/procedure/location
Requirement 25: /req/procedure/canonical-url
Requirement 26: /req/procedure/resources-endpoint
Requirement 27: /req/procedure/canonical-endpoint
Requirement 28: /req/procedure/collections

The “Procedure Features” requirements class specifies how Procedure descriptions are provided using the CS API.

A Procedure resource implements the Procedure concept defined in the Semantic Sensor Network Ontology (SOSA/SSN). Procedure resources are used to provide the specifications or methodology implemented by a System to accomplish its task(s).

NOTE:  Procedure resources describe types of systems (e.g., a particular model of sensor) or procedures implemented by systems (e.g., followed by a human operator or programmed into a piece of equipment), while System resources describe system instances (e.g., a sensor device, a human observer). Several System instances can be associated to the same Procedure.

Example

Procedure Examples

For hardware equipment operating automatically, a procedure is used to describe the equipment’s specifications (i.e., datasheet).

For human sensing or sampling tasks, the procedure describes the steps or methodology that must be followed by the operator.

For cases involving both an instrument and a human operator, the procedure describes what instrument(s) is/are used by the operator and how. In some cases, the human acts as the Platform that carries one or more sensors (e.g., a mobile phone, a portable infrared thermometer).

13.2.  Procedure Resource

13.2.1.  Introduction

In the CS API Standard, Procedure resources are a special kind of feature resource that implements the sosa:Procedure concept.

This section defines the attributes and associations composing the Procedure resource, but the exact way attributes and associations are encoded in the payload is defined by each encoding. For encodings defined in this document, please see:

13.2.2.  Properties

The following tables describe the attributes and associations of a Procedure resource and their mapping to SOSA/SSN.

All Procedure resource representations provided by encoding requirements classes map to these properties.

Table 14 — Procedure Attributes

NameSOSA/SSN PropertyDefinitionData TypeUsage
uniqueIdentifierRDF concept URIThe unique identifier of the procedure in the form of a URI (preferably a URN). This identifier should be persistent and independent of the actual resource URLURIRequired
namerdfs:labelThe human readable name of the procedureStringRequired
descriptionrdfs:commentA human readable description for the procedureStringOptional
procedureTyperdfs:typeThe type of procedure (see Table 16)URIRequired
validTime-The validity period of the procedure description.DateTimeOptional

NOTE:  The validity time period of a Procedure description starts on the date that the model of the equipment was released. No System can implement the Procedure before this date. The end date should be set to a date after which no instance of the equipment is in use, or unbounded.

Table 15 — Procedure Associations

NameSOSA/SSN PropertyDefinitionTarget ContentUsage
implementingSystemsimplementedByThe Systems that implement the Procedure.A list of System resources.Optional

Table 16 — Procedure Types

Procedure TypeURICURIEImplemented ByUsage
Observinghttp://www.w3.org/ns/sosa/ObservingProceduresosa:ObservingProcedureSensorAn observation method.
Samplinghttp://www.w3.org/ns/sosa/SamplingProceduresosa:SamplingProcedureSamplerA sampling method.
Actuatinghttp://www.w3.org/ns/sosa/ActuatingProceduresosa:ActuatingProcedureActuatorAn actuation method.
Other Procedurehttp://www.w3.org/ns/sosa/Proceduresosa:ProcedureAny SystemAny other type of procedure or methodology.
Sensorhttp://www.w3.org/ns/sosa/Sensorsosa:SensorSensorA sensor datasheet.
Actuatorhttp://www.w3.org/ns/sosa/Actuatorsosa:ActuatorActuatorAn actuator datasheet.
Samplerhttp://www.w3.org/ns/sosa/Samplersosa:SamplerSamplerA sampler datasheet.
Platformhttp://www.w3.org/ns/sosa/Platformsosa:PlatformPlatformA platform datasheet.
Other Systemhttp://www.w3.org/ns/sosa/Systemsosa:SystemAny SystemAny other system datasheet.

13.2.3.  Location

A Procedure feature represents a datasheet or a methodology. It is thus a non-spatial entity.

Requirement 24

Identifier/req/procedure/location
Included inRequirements class 6: /req/procedure
Statement

A Procedure feature resource SHALL not include a location or geometry.

13.3.  Procedure Canonical URL

The CS API Standard requires that every Procedure resource has a canonical URL.

Requirement 25

Identifier/req/procedure/canonical-url
Included inRequirements class 6: /req/procedure
A

Every Procedure resource exposed by the server SHALL be accessible through its canonical URL of the form {api_root}/procedures/{id} where id is the local identifier of the Procedure resource.

B

If a Procedure resource is retrieved through any other URL than its canonical URL, the server response SHALL include a link to its canonical URL with relation type canonical.

13.4.  Procedure Resources Endpoints

13.4.1.  Definition

A Procedure resources endpoint is an endpoint exposing a set of Procedure resources that can be further filtered using query parameters.

Requirement 26

Identifier/req/procedure/resources-endpoint
Included inRequirements class 6: /req/procedure
A

The server SHALL support the HTTP GET operation at the path associated to the Procedure resources endpoint.

B

The operation SHALL fulfill all requirements defined in Clause 7.15.2 to 7.15.8 of OGC API — Features — Part 1: Core.

C

All features in the result set SHALL be Procedure resources.

Clause 16.7 defines additional query parameters applicable to Procedure resources endpoint.

13.4.2.  Canonical Procedure Resources Endpoint

The CS API Standard requires that a canonical Procedure resources endpoint, exposing all Procedure resources, be made available by the server.

Requirement 27

Identifier/req/procedure/canonical-endpoint
Included inRequirements class 6: /req/procedure
A

The server SHALL expose a Procedure resources endpoint at the path {api_root}/procedures.

B

The endpoint SHALL expose all Procedure resources available on the server.

13.5.  Procedure Feature Collections

Any number of feature collections containing Procedure features can be available at a CS API endpoint, but the server must at least expose one. Members of Procedure feature collections are identified with the feature type sosa:Procedure.

Procedure resources can be grouped into collections according to any arbitrary criteria, as shown in the following examples.

Example

Examples of Procedure Collections

  • All weather station datasheets at URL {api_root}/collections/wx_stations_datasheets

  • All bird watching procedure at URL {api_root}/collections/bird_watching_procedures

Note that a given procedure can be part of multiple collections at the same time.

Requirement 28

Identifier/req/procedure/collections
Included inRequirements class 6: /req/procedure
A

The server SHALL expose at least one Feature collection containing Procedure resources.

B

The server SHALL identify all Feature collections containing Procedure resources by setting the itemType attribute to feature and the featureType attribute to sosa:Procedure in the Collection metadata.

C

For any feature collection with featureType set to sosa:Procedure, the HTTP GET operation at the path /collections/{collectionId}/items SHALL support the query parameters and response of a Procedure resources endpoint.

14.  Requirements Class “Sampling Features”

14.1.  Overview

Requirements class 7

Identifier/req/sf
Target typeWeb API
Conformance classConformance class A.7: /conf/sf
PrerequisitesRequirements class 1: /req/api-common
Requirements class 2: /req/system
Normative statementsRequirement 29: /req/sf/canonical-url
Requirement 30: /req/sf/resources-endpoint
Requirement 31: /req/sf/canonical-endpoint
Requirement 32: /req/sf/ref-from-system
Requirement 33: /req/sf/collections

The “Sampling Features” requirements class specifies how Sampling Feature descriptions are provided using the CS API.

A Sampling Feature resource implements the Sample concept defined in the SSN Ontology. Sampling Features provide information about the sampling strategy used when observing the property of a larger feature (the Feature of Interest).

By analogy, this Standard also uses the concept of Sampling Feature to more precisely identify the part of a Feature of Interest that is being affected by an actuator or process in response to a command.

While Features of Interest exist independently from any system observing or controlling them, Sampling Features are always associated to a specific System resource (which can be either a Sensor, an Actuator or a Sampler) because they define this particular system’s sampling strategy.

Example

Sampling Feature Examples

  • A sampling point along a river

  • A trajectory at the ocean surface

  • A satellite image footprint

  • A profile of the atmosphere

  • The viewing frustum of a video camera

  • The area covered by a weather radar

  • A part in a complex machine

14.2.  Features of Interest

In the CS API Standard, the term Feature of Interest is used to specifically mean the Ultimate Feature of Interest whose properties are observed by a sensing system or changed by a controlling system. Features of interest are real-world features from an application domain and they exist independently from any sampling strategy.

While many features of interest represent physical entities or are geospatial in nature, they can also be used to model more abstract concepts.

Example

Features of Interest Examples

  • Man-built entities (e.g., a building, a room, a window, a road, a bridge)

  • Natural bodies (e.g., the earth atmosphere, a river, a water body, an aquifer, a geological layer, a forest)

  • Living organisms (e.g., a person, an animal, a tree, a cell)

  • Technological systems (e.g., a vehicle, a robot, a computer, a tool, a machine)

  • Conceptual things (e.g., an administrative area, a legal entity)

NOTE 1:  A System feature made available through the CS API can also take the role of the Feature of Interest of some observations. For example, an aircraft platform modeled as a System using the CS API may carry a GPS sensor to measure its location. In this case, the feature of interest of the GPS observations is the platform itself because the GPS observes the location of the platform. The Sampling Feature would typically be a sampling point where the GPS antenna is located.

NOTE 2:  Application domain features of interest can be hosted at the same API endpoint as the other feature types defined in this Standard since they are just another type of feature; but in many cases they will be hosted by third party servers. This API is designed to allow linking to such external entities (although implementations are encouraged to cache some of this data locally to allow for faster join queries).

The sampling feature model used in the CS API also supports “sampling chains”, where several samples are linked via sub-sampling relationships. This is often done when analyzing specimens (or material samples) in a lab, but can also be applied to other types of sampling features. A few examples are provided below.

Example

Sampling Chains Examples

  • Geology: When performing rock analysis, the ultimate feature of interest may be an entire rock formation. A large core sample (13cm in diameter) is collected in the field, then smaller core plug samples (2cm diameter) are extracted from the core. In this case, the sampling chain is specimen (core plug) → specimen (entire core) → rock formation.

  • Video Surveillance: A video camera has for ultimate feature of interest a road intersection. A viewing sector (portion of a sphere) is used to model the entire area viewable by the camera. The subset of this entire volume being viewed at any given instant is modeled by a frustum. In this case, the sampling chain is frustum → viewing sector → crossroad.

  • Oceanic Observations: A vessel measures water parameters along its trajectory. The ultimate feature of interest is the Atlantic Ocean. The path corresponding to the trajectory of the vessel is a sampling curve, and each observation point along the way is a sub-sample of the path. In this case, the sampling chain is sampling point → sampling curve (path) → ocean

In this API, observations and commands are always associated to a Sampling Feature, never directly to the ultimate Feature of Interest. Each Sampling Feature resource has an association to the sampled feature (i.e., the feature being sampled) which can be the ultimate Feature of Interest or another (larger) Sampling Feature in the case of a sampling chain.

14.3.  Sampling Feature Resource

In the CS API Standard, Sampling Feature resources are a special kind of feature resource that implements the sosa:Sample concept.

This section defines the attributes and associations that are common to all Sampling Feature resources, but the exact way attributes and associations are encoded in the payload is defined by each encoding. For encodings defined in this document, please see:

Future parts of this Standard will define concrete types of Sampling Features that can be used to document different sampling strategies.

14.3.1.  Common Properties

The following tables describe the attributes and associations that are common to all Sampling Feature resource and their mapping to SOSA/SSN.

All Sampling Feature resource representations provided by encoding requirements classes map to these properties.

Table 17 — Common Sampling Feature Attributes

NameSOSA/SSN PropertyDefinitionData TypeUsage
uniqueIdentifierRDF concept URIThe unique identifier of the sampling feature in the form of a URI (preferably a URN). This identifier must be persistent and independent of the actual resource URL.URIRequired
namerdfs:labelThe human readable name of the sampling feature.StringRequired
descriptionrdfs:commentA human readable description for the sampling feature.StringOptional
featureTyperdfs:typeThe type of sampling feature.URIRequired
validTime-The validity period of the sampling feature.DateTimeOptional

NOTE:  Valid time is used when the sampling feature is not meaningful or usable outside of a given time period, for example:

  • Biological samples are usually analyzed during a short time window after being extracted from the patient; and

  • Image footprints are synthetic features that are only valid at the time the image was collected.

Table 18 — Sampling Features Associations

Relation NameSOSA/SSN PropertyDefinitionTarget ContentUsage
parentSystem-The System that created or uses this Sampling Feature.A single System resource.Required
sampledFeaturesosa:hasSampledFeatureThe ultimate feature of interest that is being sampled or controlled.A single Feature resource.Required
sampleOfsosa:isSampleOfOther Sampling Features related to this Sampling Feature via sub-sampling.A list of Sampling Feature resources.Optional
datastreams-The Data Streams that contain observations of this Sampling Feature.A list of DataStream resources.Optional
controlstreams-The Control Streams that received commands impacting this Sampling Feature.A list of ControlStream resources.Optional

14.4.  Sampling Feature Canonical URL

The CS API Standard requires that every Sampling Feature resource has a canonical URL.

Requirement 29

Identifier/req/sf/canonical-url
Included inRequirements class 7: /req/sf
A

Every Sampling Feature resource exposed by the server SHALL be accessible through its canonical URL of the form {api_root}/samplingFeatures/{id} where id is the local identifier of the Sampling Feature resource.

B

If a Sampling Feature resource is retrieved through any other URL than its canonical URL, the server response SHALL include a link to its canonical URL with relation type canonical.

14.5.  Sampling Feature Resources Endpoints

14.5.1.  Definition

A Sampling Feature resources endpoint is an endpoint exposing a set of Sampling Feature resources that can be further filtered using query parameters.

Requirement 30

Identifier/req/sf/resources-endpoint
Included inRequirements class 7: /req/sf
A

The server SHALL support the HTTP GET operation at the path associated to the Sampling Feature resources endpoint.

B

The operation SHALL fulfill all requirements defined in Clause 7.15.2 to 7.15.8 of OGC API — Features — Part 1: Core.

C

All features in the result set SHALL be Sampling Feature resources.

Clause 16.8 defines additional query parameters applicable to Sampling Feature resources endpoint.

14.5.2.  Canonical Sampling Feature Resources Endpoint

The CS API Standard requires that a canonical Sampling Feature resources endpoint, exposing all Sampling Feature resources, be made available by the server.

Requirement 31

Identifier/req/sf/canonical-endpoint
Included inRequirements class 7: /req/sf
A

The server SHALL expose a Sampling Feature resources endpoint at the path {api_root}/samplingFeatures.

B

The endpoint SHALL expose all Sampling Feature resources available on the server.

14.5.3.  Nested Sampling Feature Resources Endpoint

Requirement 32

Identifier/req/sf/ref-from-system
Included inRequirements class 7: /req/sf
A

For each System resource, the server SHALL expose a Sampling Feature resources endpoint at the path {api_root}/systems/{sysId}/samplingFeatures.

B

This Sampling Feature resources endpoint SHALL only list Sampling Feature resources that are associated to the parent System resource with local ID sysId.

C

The samplingFeatures association in the parent System resource representation SHALL be implemented as a link to this Sampling Feature resources endpoint.

D

The parameter sysId SHALL be the local identifier of the parent System resource.

14.6.  Sampling Feature Collections

Any number of feature collections containing Sampling Features can be available at a CS API endpoint, but the server must at least expose one. Members of Sampling Feature collections are identified with the feature type sosa:Sample.

Sampling Feature resources can be grouped into collections according to any arbitrary criteria, as shown in the following examples.

Example

Examples of Sampling Feature Collections

  • All river sampling stations at URL {api_root}/collections/hydro_sampling_points

  • All satellite image footprints at URL {api_root}/collections/img_footprints

Note that a given sampling feature can be part of multiple collections at the same time.

Requirement 33

Identifier/req/sf/collections
Included inRequirements class 7: /req/sf
A

The server SHALL expose at least one Feature collection containing Sampling Feature resources.

B

The server SHALL identify all Feature collections containing Sampling Feature resources by setting the itemType attribute to feature and the featureType attribute to sosa:Sample in the Collection metadata.

C

For any feature collection with featureType set to sosa:Sample, the HTTP GET operation at the path /collections/{collectionId}/items SHALL support the query parameters and response of a Sampling Feature resources endpoint.

14.7.  Dynamic properties

When some of the sampling feature properties are dynamic, they are also modeled as observations (just like any other property observed on the feature of interest). An association with the datastream containing these observations can optionally be provided along with the sampling feature resource. The way this association is provided is encoding specific.

When the datetime parameter is included in the request, it is also possible to include a “snapshot” of these dynamic properties (i.e., the value of the property that is valid at the requested time) in the feature resource.

NOTE:  Dynamic properties can also be exposed using the OGC API — Moving Features standard.

15.  Requirements Class “Property Definitions”

15.1.  Overview

Requirements class 8

Identifier/req/property
Target typeWeb API
Conformance classConformance class A.8: /conf/property
PrerequisiteRequirements class 1: /req/api-common
Normative statementsRequirement 34: /req/property/canonical-url
Requirement 35: /req/property/resources-endpoint
Requirement 36: /req/property/canonical-endpoint
Requirement 37: /req/property/collections

The “Property Definitions” requirements class specifies how property definitions are provided using the CS API.

The Property resource implements the Property concept defined in the SSN Ontology. Properties in the scope of the CS API are features of interest properties, including:

  • Observable properties (i.e., subject of an observation, see sosa:ObservableProperty);

  • Controllable properties (i.e., subject of an actuation, see sosa:ActuatableProperty); and

  • System properties (i.e., system characteristics and capabilities, which are sometimes asserted, see ssn-system:SystemCapability).

    NOTE:  The same property can be used in all 3 contexts simultaneously (e.g., the same “engine temperature” property can be measured by a sensor, controlled by the cooling system, and asserted in a min/max specification).

The definition is provided by deriving the property from a well known entity referenced in an ontology such as QUDT Quantity Kinds.

Example

Derived Property Examples

  • Combustion Chamber Temperature (derived from qudt:Temperature)

  • Hourly Average CPU Temperature (derived from qudt:Temperature)

  • Engine Output Power (derived from qudt:Power)

  • Received X-Band RF Power (derived from qudt:Power)

15.2.  Property Resource

15.2.1.  Introduction

In the CS API Standard, Property resources are a special kind of resource that implements the sosa:Property concept.

This section defines the attributes and associations composing a Property resource, but the exact way they are encoded in the payload is defined by each encoding. For encodings defined in this document, please see:

15.2.2.  Properties

The following tables describe the attributes and associations of a Property resource and their mapping to SOSA/SSN.

All Property resource representations provided by encoding requirements classes map to these properties.

Table 19 — Property Definition Attributes

NameSOSA/SSN PropertyDefinitionData TypeUsage
uniqueIdentifierRDF concept URIThe unique identifier of the property in the form of a URI (preferably a URN). This identifier should be persistent and independent of the actual resource URL.URIRequired
namerdfs:labelThe human readable name of the property.StringRequired
descriptionrdfs:commentA human readable description for the property.StringOptional
baseProperty-Reference to the definition of the base property this property is derived from.URI or CURIERequired
objectType-Reference to the type of entity that the base property applies to.URI or CURIEOptional
statistic-Reference to the definition of the statistic applied to the base property values.URI or CURIEOptional

15.3.  Property Canonical URL

The CS API Standard requires that every Property resource has a canonical URL.

Requirement 34

Identifier/req/property/canonical-url
Included inRequirements class 8: /req/property
A

Every Property resource exposed by the server SHALL be accessible through its canonical URL of the form {api_root}/properties/{id} where id is the local identifier of the property.

B

If a Property resource is retrieved through any other URL than its canonical URL, the server response SHALL include a link to its canonical URL with relation type canonical.

15.4.  Property Resources Endpoints

15.4.1.  Definition

A Property resources endpoint is an endpoint exposing a set of Property resources that can be further filtered using query parameters.

Requirement 35

Identifier/req/property/resources-endpoint
Included inRequirements class 8: /req/property
A

The server SHALL support the HTTP GET operation at the path associated to the Property resources endpoint.

B

The operation SHALL fulfill all requirements defined in Clause 7.15.2 to 7.15.8 of OGC API — Features — Part 1: Core. All references to the term “features” or “feature” in these requirements SHALL be replaced by the terms “resources” or “resource”, respectively.

C

All resources in the result set SHALL be Property resources.

Clause 16.9 defines additional query parameters applicable to Property resources endpoint.

15.4.2.  Canonical Property Resources Endpoint

The CS API Standard requires that a canonical Property resources endpoint, exposing all Property resources, be made available by the server.

Requirement 36

Identifier/req/property/canonical-endpoint
Included inRequirements class 8: /req/property
A

The server SHALL expose a Property resources endpoint at the path {api_root}/properties.

B

The endpoint SHALL expose all Property resources available on the server.

15.5.  Property Collections

Any number of resource collections containing Property resources can be available at a CS API endpoint, but the server must at least expose one. Members of Property resource collections are identified with the item type sosa:Property.

Property resources can be grouped into collections according to any arbitrary criteria, as shown in the following examples.

Example

Examples of Property Collections

  • All standard WMO properties at URL {api_root}/collections/wmo_properties

  • All chemical properties at URL {api_root}/collections/chemical_properties

Note that a given property can be part of multiple collections at the same time.

Requirement 37

Identifier/req/property/collections
Included inRequirements class 8: /req/property
A

The server SHALL expose at least one resource collection containing Property resources.

B

The server SHALL identify all resource collections containing Property resources by setting the itemType attribute to sosa:Property in the Collection metadata.

C

For any resource collection with itemType set to sosa:Property, the HTTP GET operation at the path /collections/{collectionId}/items SHALL support the query parameters and response of a Property resources endpoint.

16.  Requirements Class “Advanced Filtering”

16.1.  Overview

Requirements class 9

Identifier/req/advanced-filtering
Target typeWeb API
Conformance classConformance class A.9: /conf/advanced-filtering
PrerequisiteRequirements class 1: /req/api-common
Indirect prerequisiteOGC 06-103r4 — Clause 7: Well-known Text Representation for Geometry
Normative statementsRequirement 38: /req/advanced-filtering/id-list-schema
Requirement 39: /req/advanced-filtering/resource-by-id
Requirement 40: /req/advanced-filtering/resource-by-keyword
Requirement 41: /req/advanced-filtering/feature-by-geom
Requirement 42: /req/advanced-filtering/system-by-parent
Requirement 43: /req/advanced-filtering/system-by-procedure
Requirement 44: /req/advanced-filtering/system-by-foi
Requirement 45: /req/advanced-filtering/system-by-obsprop
Requirement 46: /req/advanced-filtering/system-by-controlprop
Requirement 47: /req/advanced-filtering/deployment-by-parent
Requirement 48: /req/advanced-filtering/deployment-by-system
Requirement 49: /req/advanced-filtering/deployment-by-foi
Requirement 50: /req/advanced-filtering/deployment-by-obsprop
Requirement 51: /req/advanced-filtering/deployment-by-controlprop
Requirement 52: /req/advanced-filtering/procedure-by-obsprop
Requirement 53: /req/advanced-filtering/procedure-by-controlprop
Requirement 54: /req/advanced-filtering/sf-by-foi
Requirement 55: /req/advanced-filtering/sf-by-obsprop
Requirement 56: /req/advanced-filtering/sf-by-controlprop
Requirement 57: /req/advanced-filtering/prop-by-baseprop
Requirement 58: /req/advanced-filtering/prop-by-object
Requirement 59: /req/advanced-filtering/combined-filters

The “Advanced Filtering” requirements class specifies additional filtering options that may be used to select only a subset of the resources in a collection.

All filters defined in this section are implemented using URL query parameters and can be used in addition to the ones required by Clause 8.

16.2.  Definitions

16.2.1.  ID List Schema

The following requirement defines a schema for an “identifier list” that is used by several query parameters. Identifiers in the list can be either local resource IDs or UIDs (URI) but the two types of identifiers cannot be mixed in the same request.

Requirement 38

Identifier/req/advanced-filtering/id-list-schema
Included inRequirements class 9: /req/advanced-filtering
A

A query parameter of type ID_List SHALL conform to the following OpenAPI 3.0 schema:

 

description: List of resource local IDs or unique identifiers (URIs).
oneOf:
  - type: array
    title: Local IDs
    minItems: 1
    items:
      type: string
      minLength: 1
  - type: array
    title: Unique IDs
    minItems: 1
    items:
      type: string
      format: uri
B

Items in the list SHALL be valid resource IDs or resource UIDs.

C

All items in the list SHALL be of the same ID type (either all resource IDs or all resource UIDs).

16.3.  Common Resource Query Parameters

16.3.1.  Overview

The filtering options defined in this section are common to all resource types defined in this Standard, and may also be used with other resource types that are hosted at the same CS API endpoint.

When this requirements class is implemented, the requirements in this class are applicable to all HTTP GET operations used to retrieve items from any collection offered by the server (i.e., it is not allowed to implement this class only for certain collections).

16.3.2.  ID Filter

The ID filter is used to select resources that match one of the requested identifiers.

Requirement 39

Identifier/req/advanced-filtering/resource-by-id
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at any resources endpoint defined by this Standard SHALL support a parameter id of type ID_List.

B

Only resources that are assigned one of the specified identifiers SHALL be part of the result set.

C

If a UID specified in the query ends with a trailing * character, all resources that have a UID starting with the specified prefix SHALL be included in the result set.

16.3.3.  Keyword Filter

The keyword filter is used to select resources by doing a full-text search on textual content.

Requirement 40

Identifier/req/advanced-filtering/resource-by-keyword
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at any resources endpoint defined by this Standard SHALL support a parameter q with the following characteristics (using an OpenAPI 3.0 fragment):

 

name: q
in: query
description: |-
  Comma separated list of keywords used for full-text search.
  Only resources that have textual fields that contain one of the specified keywords are selected.
  The resource `name` and `description` properties are always searched.
  It is up to the server to decide which other textual fields are searched.
required: false
schema:
  type: array
  items:
    type: string
    minLength: 1
    maxLength: 50
explode: false

examples:
  case1:
    summary: One keyword
    value: 'temp'
  case2:
    summary: Several keywords
    value: 'gps,imu'
B

Only resources that have human readable content that contains one the specified keywords SHALL be part of the result set.

C

At least the name and description attributes of the resource SHALL be included in the full-text search. It is the decision of the server to choose if other resource attributes are also searched.

D

The server is allowed to run the search using the canonical form of the provided keywords rather than their exact value (lemmatization).

16.3.4.  Simple Property Filter

The property filter is used to select resources that have specific property values.

Recommendation 3

Identifier/rec/advanced-filtering/resource-by-property
A

Filtering on resource properties SHOULD be supported as specified by requirement /rec/core/fc-filters of OGC API — Features.

Example

Example queries by property value

Systems by ‘name’{api_root}/systems?name=Weather%20Station
Sampling features by ‘featureType’{api_root}/samplingFeatures?featureType=om:Specimen

16.4.  Common Feature Query Parameters

16.4.1.  Geometry Filter

The geometry filter is used to select features with a spatial geometry intersecting the query geometry.

Requirement 41

Identifier/req/advanced-filtering/feature-by-geom
Included inRequirements class 9: /req/advanced-filtering
PrerequisiteOGC 06-103r4 — Clause 7: Well-known Text Representation (WKT) for Geometry
A

The HTTP GET operation at any resources endpoint defined by this Standard that expose features with geometries SHALL support a parameter geom with the following characteristics (using an OpenAPI 3.0 fragment):

 

name: geom
in: query
description: |-
  WKT geometry and operator to filter resources on their location or geometry.
  Only features that have a geometry that intersects the value of `geom` are selected.
required: false
schema:
  type: string
examples:
  point:
    value: 'LINESTRING((-86.53 12.45), (-86.54 12.46), (-86.55 12.47))'
  polygon:
    value: 'POLYGON((0 0,4 0,4 4,0 4,0 0))'
B

The value of the geom parameter SHALL be a valid WKT geometry (as defined by BNF syntax provided in OGC 06-103r4).

C

Only features that have a spatial geometry that intersects the filter geometry SHALL be part of the result set.

D

If a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries.

E

Features with no spatial geometry SHALL be excluded from the result set.

F

The coordinate values SHALL be within the extent specified for the coordinate reference system (CRS).

16.5.  System Resources Endpoint Query Parameters

16.5.1.  Introduction

This section specifies query parameters that must be supported by the server at all System resources endpoints, including:

  • The canonical System resources endpoint at {api_root}/systems;

  • The subsystems resources endpoints at {api_root}/systems/{id}/subsystems; and

  • The items resources endpoints of System Feature collections at {api_root}/collections/{colId}/items.

16.5.2.  Parent System Filter

This filter is used to select subsystems of one or more parent systems.

Requirement 42

Identifier/req/advanced-filtering/system-by-parent
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a System resources endpoint SHALL support a parameter parent of type ID_List.

B

Only subsystems of a parent system that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Systems by parent

Subsystems by parent ID{api_root}/systems?parent=4g4ds54vv
Subsystems by parent UID{api_root}/systems?parent=urn:uuid:31f6865e-f438-430e-9b57-f965a21ee255

16.5.3.  Procedure Filter

This filter is used to select systems that implement specific procedures.

Requirement 43

Identifier/req/advanced-filtering/system-by-procedure
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a System resources endpoint SHALL support a parameter procedure of type ID_List.

B

Only systems that implement a procedure that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Systems by procedure

Systems by procedure ID{api_root}/systems?procedure=11gsd654g
Systems by procedure ID (multiple){api_root}/systems?procedure=11gsd654g,fsv4dg62
Systems by procedure UID{api_root}/systems?procedure=urn:example:procedure:451585

16.5.4.  Feature of Interest Filter

This filter is used to select systems that observe or control specific features of interest.

Requirement 44

Identifier/req/advanced-filtering/system-by-foi
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a System resources endpoint SHALL support a parameter foi of type ID_List.

B

Only systems that observe or control a feature of interest that has one of the requested identifiers SHALL be part of the result set.

C

Both sampling features and domain features of interest SHALL be included in the search.

D

If a system has subsystems, it SHALL be included in the result set if any of its subsystems (evaluated recursively) observes or controls one of the listed features of interest.

Example

Example queries to find Systems by feature of interest

Systems by feature of interest ID{api_root}/systems?foi=11gsd654g
Systems by feature of interest UID{api_root}/systems?foi=urn:mrn:itu:mmsi:538070999
Systems by feature of interest UID{api_root}/systems?foi=http://dbpedia.org/resource/Seawater

In the third example, any system associated to a sampling feature with the sampledFeature association referencing http://dbpedia.org/resource/Seawater (either directly or transitively via other sampling features) would be included in the result set.

16.5.5.  Observed Property Filter

This filter is used to select systems that can observe specific properties.

Requirement 45

Identifier/req/advanced-filtering/system-by-obsprop
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a System resources endpoint SHALL support a parameter observedProperty of type ID_List.

B

Only systems that can observe a property that has one of the requested identifiers SHALL be part of the result set.

C

If a system has subsystems, it SHALL be included in the result set if any of its subsystems (evaluated recursively) observes one of the listed properties.

Example

Example queries to find Systems by observed property

Systems by observed property ID{api_root}/systems?observedProperty=4578441
Systems by observed property UID{api_root}/systems?observedProperty=http://qudt.org/vocab/quantitykind/Temperature

16.5.6.  Controlled Property Filter

This filter is used to select systems that control specific properties.

Requirement 46

Identifier/req/advanced-filtering/system-by-controlprop
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a System resources endpoint SHALL support a parameter controlledProperty of type ID_List.

B

Only systems that can control a property that has one of the requested identifiers SHALL be part of the result set.

C

If a system has subsystems, it SHALL be included in the result set if any of its subsystems (evaluated recursively) controls one of the listed properties.

Example

Example queries to find Systems by controlled property

Systems by controlled property ID{api_root}/systems?controlledProperty=4578441
Systems by controlled property UID{api_root}/systems?controlledProperty=http://qudt.org/vocab/quantitykind/PH

16.6.  Deployment Resources Endpoint Query Parameters

16.6.1.  Introduction

This section specifies query parameters that must be supported by the server at all Deployment resources endpoints, including:

  • The canonical Deployment resources endpoint at {api_root}/deployments

  • The subdeployments resources endpoints at {api_root}/deployments/{id}/subdeployments

  • The items resources endpoints of Deployment Feature collections at {api_root}/collections/{colId}/items

16.6.2.  Parent Deployment Filter

This filter is used to select subdeployments of a specific parent deployment.

Requirement 47

Identifier/req/advanced-filtering/deployment-by-parent
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Deployment resources endpoint SHALL support a parameter parent of type ID_List.

B

Only deployments that are part of a parent deployment that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Deployments by parent

Subdeployments by parent ID{api_root}/deployments?parent=4g4ds54vv
Subdeployments by parent UID{api_root}/deployments?parent=urn:uuid:31f6865e-f438-430e-9b57-f965a21ee255

16.6.3.  Deployed System Filter

This filter is used to select deployments during which certain systems are deployed.

Requirement 48

Identifier/req/advanced-filtering/deployment-by-system
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Deployment resources endpoint SHALL support a parameter system of type ID_List.

B

Only deployments during which a system that has one of the requested identifiers is deployed SHALL be part of the result set.

Example

Example queries to find Deployments by deployed systems

Deployments by deployed system ID{api_root}/deployments?system=b5bxc988rf
Deployments by deployed system UID{api_root}/deployments?system=urn:mrn:itu:mmsi:538070999

16.6.4.  Feature of Interest Filter

This filter is used to select deployments during which deployed systems observe or control specific features of interest.

Requirement 49

Identifier/req/advanced-filtering/deployment-by-foi
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Deployment resources endpoint SHALL support a parameter foi of type ID_List.

B

Only deployments during which a deployed system observe or control a feature of interest that has one of the requested identifiers SHALL be part of the result set.

C

Both sampling features and domain features of interest SHALL be included in the search.

Example

Example queries to find Deployments by feature of interest

Deployments by feature of interest ID{api_root}/deployments?foi=g4sd56ht41
Deployments by feature of interest UID{api_root}/deployments?foi=urn:example:river:41148

16.6.5.  Observed Property Filter

This filter is used to select deployments during which certain properties are observed.

Requirement 50

Identifier/req/advanced-filtering/deployment-by-obsprop
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Deployment resources endpoint SHALL support a parameter observedProperty of type ID_List.

B

Only deployments during which a deployed system observes a property that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Deployments by observed property

Deployments by observed property ID{api_root}/deployments?observedProperty=4578441
Deployments by observed property UID{api_root}/deployments?observedProperty=http://mmisw.org/ont/cf/parameter/wind_speed

16.6.6.  Controlled Property Filter

This filter is used to select deployments during which certain properties are controlled.

Requirement 51

Identifier/req/advanced-filtering/deployment-by-controlprop
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Deployment resources endpoint SHALL support a parameter controlledProperty of type ID_List.

B

Only deployments during which a deployed system controls a property that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Deployments by controlled property

Deployments by controlled property ID{api_root}/deployments?controlledProperty=146687
Deployments by controlled property UID{api_root}/deployments?controlledProperty=http://qudt.org/vocab/quantitykind/Velocity

16.7.  Procedure Resources Endpoint Query Parameters

16.7.1.  Introduction

This section specifies query parameters that must be supported by the server at all Procedure resources endpoints, including:

  • The canonical Procedure resources endpoint at {api_root}/procedures

  • The items resources endpoints of Procedure Feature collections at {api_root}/collections/{colId}/items

16.7.2.  Observed Property Filter

This filter is used to select procedures that are designed to observe certain properties.

Requirement 52

Identifier/req/advanced-filtering/procedure-by-obsprop
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Procedure resources endpoint SHALL support a parameter observedProperty of type ID_List.

B

Only procedures that can be used to observe a property that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Procedures by observed property

Procedures by observed property ID{api_root}/procedures?observedProperty=4578441
Procedures by observed property UID{api_root}/procedures?observedProperty=http://mmisw.org/ont/cf/parameter/air_pressure

16.7.3.  Controlled Property Filter

This filter is used to select procedures that are designed to control certain properties.

Requirement 53

Identifier/req/advanced-filtering/procedure-by-controlprop
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Procedure resources endpoint SHALL support a parameter controlledProperty of type ID_List.

B

Only procedures that can be used to control a property that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Procedures by controlled property

Procedures by controlled property ID{api_root}/procedures?controlledProperty=146687
Procedures by controlled property UID{api_root}/procedures?controlledProperty=urn:example:prop:fuelmixratio

16.8.  Sampling Feature Resources Endpoint Query Parameters

16.8.1.  Introduction

This section specifies query parameters that must be supported by the server at all Sampling Feature resources endpoints, including:

  • The canonical Sampling Feature resources endpoint at {api_root}/samplingFeatures; and

  • The items resources endpoints of Sampling Feature collections at {api_root}/collections/{colId}/items.

16.8.2.  Feature of Interest Filter

This filter is used to select sampling features that sample specific features of interest.

Requirement 54

Identifier/req/advanced-filtering/sf-by-foi
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Sampling Feature resources endpoint SHALL support a parameter foi of type ID_List.

B

Only sampling features that are associated to a feature of interest that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Sampling Features by feature of interest

Sampling Features by feature of interest ID{api_root}/samplingFeatures?foi=g4sd56ht41
Sampling Features by feature of interest UID{api_root}/samplingFeatures?foi=urn:example:river:41148

16.8.3.  Observed Property Filter

This filter is used to select sampling features with certain observed properties.

Requirement 55

Identifier/req/advanced-filtering/sf-by-obsprop
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Sampling Feature resources endpoint SHALL support a parameter observedProperty of type ID_List.

B

Only sampling features with an observed property that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Sampling Features by observed property

Sampling Features by observed property ID{api_root}/samplingFeatures?observedProperty=221785
Sampling Features by observed property UID{api_root}/samplingFeatures?observedProperty=http://qudt.org/vocab/quantitykind/Voltage

16.8.4.  Controlled Property Filter

This filter is used to select sampling features with certain controlled properties.

Requirement 56

Identifier/req/advanced-filtering/sf-by-controlprop
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Sampling Feature resources endpoint SHALL support a parameter controlledProperty of type ID_List.

B

Only sampling features with a controlled property that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Sampling Features by controlled property

Sampling Features by controlled property ID{api_root}/samplingFeatures?controlledProperty=146687
Sampling Features by controlled property UID{api_root}/samplingFeatures?controlledProperty=http://qudt.org/vocab/quantitykind/Velocity

16.9.  Property Resources Endpoint Query Parameters

16.9.1.  Introduction

This section specifies query parameters that must be supported by the server at all Property resources endpoints, including:

  • The canonical Property resources endpoint at {api_root}/samplingFeatures; and

  • The items resources endpoints of Property resource collections at {api_root}/collections/{colId}/items.

16.9.2.  Base Property Filter

This filter is used to select properties that are derived from a base property.

Requirement 57

Identifier/req/advanced-filtering/prop-by-baseprop
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Property resources endpoint SHALL support a parameter baseProperty of type ID_List.

B

Only properties that are derived, directly or indirectly, from a base property that has one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Property Definitions by base property

Property by base property ID{api_root}/properties?baseProperty=g4sd56ht41
Property by base property UID{api_root}/properties?baseProperty=http://qudt.org/vocab/quantitykind/AmbientPressure

16.9.3.  Object Type Filter

This filter is used to select properties that are associated to a specific kind of object.

Requirement 58

Identifier/req/advanced-filtering/prop-by-object
Included inRequirements class 9: /req/advanced-filtering
A

The HTTP GET operation at a Property resources endpoint SHALL support a parameter objectType of type ID_List.

B

Only properties with the objectType attribute set to one of the requested identifiers SHALL be part of the result set.

Example

Example queries to find Property Definitions by object

Property by object kind UID{api_root}/properties?object=https://dbpedia.org/page/Watercraft
Property by object kind UID{api_root}/properties?object=https://dbpedia.org/page/Engine

16.10.  Combination of Filter Parameters

Requirement 59

Identifier/req/advanced-filtering/combined-filters
Included inRequirements class 9: /req/advanced-filtering
Statement

When several filters are used in the same request, they SHALL be combined with the AND operator.

Example

Example queries combining multiple filters

Systems by type and keyword{api_root}/systems?featureType=sosa:Sensor&q=weather
Deployments by deployed system ID and time{api_root}/deployments?datetime=2021-04-01T00:00:00Z/2021-07-01T00:00:00Z&system=gs54v1fds6

16.11.  Indirect Associations

It is recommended that servers implement certain filtering capabilities in a way that does not require a “direct association” to exist between resources.

Recommendation 4

Identifier/rec/advanced-filtering/indirect-prop
Statement

When evaluating observedProperty or controlledProperty filters, the server SHOULD also evaluate all properties that derive from the specified property, that is properties whose baseProperty attribute point to the specified property, either directly or transitively.

Recommendation 5

Identifier/rec/advanced-filtering/indirect-foi
Statement

When evaluating foi filters, the server SHOULD also evaluate all sampling features that are related to the specified feature of interest through a sampledFeature association. This allows a client to request resources by ultimate feature of interest even if it is not directly associated to the resource.

17.  Requirements Class “Create/Replace/Delete”

17.1.  Overview

Requirements class 10

Identifier/req/create-replace-delete
Target typeWeb API
Conformance classConformance class A.10: /conf/create-replace-delete
PrerequisitesRequirements class 1: /req/api-common
http://www.opengis.net/spec/ogcapi-features-4/1.0/req/create-replace-delete
Normative statementsRequirement 60: /req/create-replace-delete/system
Requirement 61: /req/create-replace-delete/system-delete-cascade
Requirement 62: /req/create-replace-delete/subsystem
Requirement 63: /req/create-replace-delete/deployment
Requirement 64: /req/create-replace-delete/subdeployment
Requirement 65: /req/create-replace-delete/procedure
Requirement 66: /req/create-replace-delete/sampling-feature
Requirement 67: /req/create-replace-delete/property
Requirement 68: /req/create-replace-delete/create-in-collection
Requirement 69: /req/create-replace-delete/replace-in-collection
Requirement 70: /req/create-replace-delete/delete-in-collection
Requirement 71: /req/create-replace-delete/add-to-collection

The “Create/Replace/Delete” requirements class specifies how instances of the resource types defined in this Standard are created, replaced and deleted via a CS API endpoint.

All resources are created, replaced and deleted using CREATE (HTTP POST), REPLACE (HTTP PUT) and DELETE (HTTP DELETE) operations, respectively, as defined by the OGC API — Features — Part 4: Create, Replace, Update and Delete Standard.

OGC API — Features — Part 4: Create, Replace, Update and Delete uses the terms “resources endpoint” and “resource endpoint” to identify the paths where these operations are supported by the server. The following sections provide these endpoints for each resource type defined by the CS API Standard.

17.2.  Systems

Requirement 60

Identifier/req/create-replace-delete/system
Included inRequirements class 10: /req/create-replace-delete
Conditions

The server implements Requirements Class “System Features”

A

The server SHALL support the CREATE operation at the System resources endpoints defined by the following URI template:

  • {api_root}/systems

B

The server SHALL support the REPLACE and DELETE operations at the System resources endpoints defined by the following URI template:

  • {api_root}/systems/{id}

C

The id parameter SHALL be the local identifier of the System resource to replace or delete.

The following constraints must be implemented by the server.

Requirement 61

Identifier/req/create-replace-delete/system-delete-cascade
Included inRequirements class 10: /req/create-replace-delete
Conditions

The server implements Requirements Class “System Features”

A

By default (cascade parameter is not set), the server SHALL reject a DELETE request on a System resource that has nested resources (i.e., subsystems, sampling features, datastreams, control streams) or is associated with a deployment.

B

If the request contains the cascade parameter, the server SHALL accept the DELETE request and delete the System resource as well as all its nested resources.

C

If the System resource is associated with a Deployment resource, the Deployment resource SHALL be be updated, removing the link to the System.

17.3.  Subsystems

Subsystems (i.e., system components) can only be created as sub-resources of a parent system, but are updated/deleted at their canonical URL just like any other System resource.

Requirement 62

Identifier/req/create-replace-delete/subsystem
Included inRequirements class 10: /req/create-replace-delete
Conditions

The server implements Requirements Class “Subsystems”

A

The server SHALL support the CREATE operation at the System resources endpoints defined by the following URI template:

  • {api_root}/systems/{parentId}/subsystems

B

The operation SHALL result in the creation of a new System and its association with the System system with id parentId.

NOTE:  There is no operation to “move” a subsystem from one parent to another. To achieve this, the client must first delete the subsystem at its canonical URI and recreate it under another parent system.

17.4.  Deployments

Requirement 63

Identifier/req/create-replace-delete/deployment
Included inRequirements class 10: /req/create-replace-delete
Conditions

The server implements Requirements Class “Deployment Features”

A

The server SHALL support the CREATE operation at the Deployment resources endpoints defined by the following URI template:

  • {api_root}/deployments

B

The server SHALL support the REPLACE and DELETE operations at the Deployment resources endpoints defined by the following URI template:

  • {api_root}/deployments/{id}

C

The id parameter SHALL be the local identifier of the Deployment resource to replace or delete.

17.5.  Subdeployments

Subdeployments can only be created as sub-resources of a parent deployment, but are updated/deleted at their canonical URL just like any other Deployment resource.

Requirement 64

Identifier/req/create-replace-delete/subdeployment
Included inRequirements class 10: /req/create-replace-delete
Conditions

The server implements Requirements Class “Subdeployments”

A

The server SHALL support the CREATE operation at the Deployment resources endpoints defined by the following URI template:

  • {api_root}/deployments/{parentId}/subdeployments

B

The operation SHALL result in the creation of a new Deployment and its association with the parent Deployment with id parentId.

17.6.  Procedures

Requirement 65

Identifier/req/create-replace-delete/procedure
Included inRequirements class 10: /req/create-replace-delete
Conditions

The server implements Requirements Class “Procedure Features”

A

The server SHALL support the CREATE operation at the Procedure resources endpoints defined by the following URI template:

  • {api_root}/procedures

B

The server SHALL support the REPLACE and DELETE operations at the Procedure resources endpoints defined by the following URI template:

  • {api_root}/procedures/{id}

C

The id parameter SHALL be the local identifier of the Procedure resource to replace or delete.

17.7.  Sampling Features

Sampling Features are created as sub-resources of a parent system.

Requirement 66

Identifier/req/create-replace-delete/sampling-feature
Included inRequirements class 10: /req/create-replace-delete
Conditions

The server implements Requirements Class “Sampling Features”

A

The server SHALL support the CREATE operation at the Sampling Feature resources endpoints defined by the following URI template:

  • {api_root}/systems/{sysId}/samplingFeatures

B

The server SHALL support the REPLACE and DELETE operations at the Sampling Feature resources endpoints defined by the following URI templates:

  • {api_root}/samplingFeatures/{id}

C

The sysId parameter SHALL be the local identifier of the parent System resource that the new sampling feature will be attached to.
The id parameter SHALL be the local identifier of the Sampling Feature resource to replace or delete.

17.8.  Property Definitions

Property resources are created, replaced and deleted using HTTP POST, PUT and DELETE operations, respectively.

Requirement 67

Identifier/req/create-replace-delete/property
Included inRequirements class 10: /req/create-replace-delete
Conditions

The server implements [clause-derived-properties]

A

The server SHALL support the CREATE operation at the Property resources endpoints defined by the following URI template:

  • {api_root}/properties

B

The server SHALL support the REPLACE and DELETE operations at the Property resources endpoints defined by the following URI template:

  • {api_root}/properties/{id}

C

The id parameter SHALL be the local identifier of the Property resource to replace or delete.

17.9.  Custom Collections

This clause defines the expected behavior of the server when Resource Collections other than the root collections are exposed by the server (this causes the same resource to be accessible via multiple collections simultaneously).

Requirement 68

Identifier/req/create-replace-delete/create-in-collection
Included inRequirements class 10: /req/create-replace-delete
A

When a resource defined in the CS API Standard is successfully created by the server at any endpoint, the server SHALL always make it available in the root collection corresponding to the resource type.

Requirement 69

Identifier/req/create-replace-delete/replace-in-collection
Included inRequirements class 10: /req/create-replace-delete
A

If a resource is successfully replaced by the server, the server SHALL reflect this change in all other collections that the resource is part of.

Requirement 70

Identifier/req/create-replace-delete/delete-in-collection
Included inRequirements class 10: /req/create-replace-delete
A

If a resource is deleted from a root collection, the server SHALL also delete it from all other collections that the resource is part of.

B

If a resource is deleted from a collection other than the root collection, the server SHALL only delete it from this collection.

Adding existing resources to one or more custom collections is done by posting a list of resource URIs to the collection endpoint.

Requirement 71

Identifier/req/create-replace-delete/add-to-collection
Included inRequirements class 10: /req/create-replace-delete
A

The server SHALL support adding existing resources to a collection by reference.

B

The Content-Type header of the request SHALL be set to text/uri-list.

C

The body of the POST request SHALL contain the list of URIs of resources that need to be added to the collection, formatted with one URI per line (see https://www.iana.org/assignments/media-types/text/uri-list).

D

All URIs included in the content body SHALL be canonical URLs or unique identifiers (UID) of resources available at the same API endpoint.

18.  Requirements Class “Update”

18.1.  Overview

Requirements class 11

Identifier/req/update
Target typeWeb API
Conformance classConformance class A.11: /conf/update
PrerequisitesRequirements class 10: /req/create-replace-delete
http://www.opengis.net/spec/ogcapi-features-4/1.0/req/update
Normative statementsRequirement 72: /req/update/system
Requirement 73: /req/update/deployment
Requirement 74: /req/update/procedure
Requirement 75: /req/update/sampling-feature
Requirement 76: /req/update/property

The “Update” requirements class specifies how instances of the feature types defined previously are updated via a CS API endpoint.

All resources are updated using the UPDATE (HTTP PATCH) operation, as defined by the OGC API — Features — Part 4: Create, Replace, Update and Delete Standard.

OGC API — Features — Part 4: Create, Replace, Update and Delete uses the terms “resource endpoint” to identify the paths where the UPDATE operation is supported by the server. The following sections provide these endpoints for each resource type defined by the CS API Standard.

18.2.  Systems

Requirement 72

Identifier/req/update/system
Included inRequirements class 11: /req/update
Conditions

The server implements Requirements Class “System Features”

A

The server SHALL support the UPDATE operation at the System resources endpoints defined by the following URI template:

  • {api_root}/systems/{id}

B

The id parameter SHALL be the local identifier of the System resource to update.

18.3.  Deployments

Requirement 73

Identifier/req/update/deployment
Included inRequirements class 11: /req/update
Conditions

The server implements Requirements Class “Deployment Features”

A

The server SHALL support the UPDATE operation at the Deployment resources endpoints defined by the following URI template:

  • {api_root}/deployments/{id}

B

The id parameter SHALL be the local identifier of the Deployment resource to update.

18.4.  Procedures

Requirement 74

Identifier/req/update/procedure
Included inRequirements class 11: /req/update
Conditions

The server implements Requirements Class “Procedure Features”

A

The server SHALL support the UPDATE operation at the Procedure resources endpoints defined by the following URI template:

  • {api_root}/procedures/{id}

B

The id parameter SHALL be the local identifier of the Procedure resource to update.

18.5.  Sampling Features

Requirement 75

Identifier/req/update/sampling-feature
Included inRequirements class 11: /req/update
Conditions

The server implements Requirements Class “Sampling Features”

A

The server SHALL support the UPDATE operation at the Sampling Feature resources endpoints defined by the following URI template:

  • {api_root}/samplingFeatures/{id}

B

The id parameter SHALL be the local identifier of the Sampling Feature resource to update.

18.6.  Derived Properties

Requirement 76

Identifier/req/update/property
Included inRequirements class 11: /req/update
Conditions

The server implements [clause-derived-properties]

A

The server SHALL support the UPDATE operation at the Property resources endpoints defined by the following URI template:

  • {api_root}/properties/{id}

19.  Requirements Classes for Encodings

19.1.  Requirements Class “GeoJSON Format”

19.1.1.  Overview

Requirements class 12

Identifier/req/geojson
Target typeWeb API
Conformance classConformance class A.12: /conf/geojson
PrerequisitesRequirements class 1: /req/api-common
http://www.opengis.net/spec/ogcapi-features-1/1.0/req/geojson
Normative statementsRequirement 77: /req/geojson/mediatype-read
Requirement 78: /req/geojson/mediatype-write
Requirement 79: /req/geojson/relation-types
Requirement 80: /req/geojson/feature-attribute-mapping
Requirement 81: /req/geojson/system-schema
Requirement 82: /req/geojson/system-mappings
Requirement 83: /req/geojson/deployment-schema
Requirement 84: /req/geojson/deployment-mappings
Requirement 85: /req/geojson/procedure-schema
Requirement 86: /req/geojson/procedure-mappings
Requirement 87: /req/geojson/sf-schema
Requirement 88: /req/geojson/sf-mappings

The “GeoJSON Format” requirements class specifies how resources defined by the CS API Standard are encoded using the GeoJSON format. All feature types defined by this Standard can be encoded as GeoJSON.

The server must also implement Requirements Class “GeoJSON” as specified in the OGC API — Features — Part 1: Core Standard.

19.1.2.  Media Type

The media type used for GeoJSON encoded resources is application/geo+json.

Requirement 77

Identifier/req/geojson/mediatype-read
Included inRequirements class 12: /req/geojson
Statement

The server SHALL support the media type application/geo+json in the HTTP Accept header and respond with a JSON document corresponding to the requested resource type.

Requirement 78

Identifier/req/geojson/mediatype-write
Included inRequirements class 12: /req/geojson
Conditions

The server implements Requirements Class “Create/Replace/Delete”.

Statement

The server SHALL support the media type application/geo+json in the HTTP Content-Type header and parse the JSON body according to the resource type.

19.1.3.  Link Relation Types

Requirement 79

Identifier/req/geojson/relation-types
Included inRequirements class 12: /req/geojson
Statement

For all associations encoded in the links member of the JSON response, the link relation type must be set to the association name.

19.1.4.  Common Encoding Rules

Requirement 80

Identifier/req/geojson/feature-attribute-mapping
Included inRequirements class 12: /req/geojson
Statement

A GeoJSON document representing a Feature resource SHALL implement the mappings specified in Table 39.

Table 39 — GeoJSON Mappings of Common Attributes

Attribute NameJSON MemberUsage
uniqueIdentifierproperties/uidValue is a JSON string that is a valid URI.
nameproperties/nameValue is a JSON string.
descriptionproperties/descriptionValue is a JSON string.

19.1.5.  System Representation

Requirement 81

Identifier/req/geojson/system-schema
Included inRequirements class 12: /req/geojson
A

A GeoJSON document containing a single System feature SHALL be valid against the JSON schema system.json.

B

A GeoJSON document containing a collection of System features SHALL be valid against the JSON schema systemCollection.json.

Requirement 82

Identifier/req/geojson/system-mappings
Included inRequirements class 12: /req/geojson
Statement

A GeoJSON document representing a System resource SHALL implement the mappings specified in Table 40 and Table 41.

Table 40 — GeoJSON Encoding of System Attributes

Attribute Name (see Table 4)JSON MemberUsage
systemTypeproperties/featureTypeUse the URI or CURIE from Table 6 as the value.
assetTypeproperties/assetTypeUse the URI or CURIE from Table 7 as the value.
validTimeproperties/validTimeValue SHALL be a JSON array with min/max bounds encoded as a ISO8601 date/time string.
locationgeometryValue SHALL be a GeoJSON Point geometry.

Table 41 — GeoJSON Encoding of System Associations

Association Name (see Table 5)JSON MemberUsage
systemKindproperties/systemKind@linkValue is a weblink resolving to a Procedure resource.
parentSystemlinksValue is a weblink* resolving to a System resource.
subsystemslinksValue is a weblink* resolving to a System resources endpoint.
samplingFeatureslinksValue is a weblink* resolving to a Sampling Feature resources endpoint.
deploymentslinksValue is a weblink* resolving to a Deployment resources endpoint.
procedureslinksValue is a weblink* resolving to a Procedure resources endpoint.
datastreamslinksValue is a weblink* resolving to a DataStream resources endpoint**.
controlstreamslinksValue is a weblink* resolving to a ControlStream resources endpoint**.
* The link relation type (rel property) must be set to the association name prefixed by ogc-rel:.
** DataStream and ControlStream resources are defined in OGC API — Connected Systems — Part 2.

Example — A System Feature in GeoJSON format

This is a simple description of a fixed in-situ sensor in GeoJSON, with a link to its alternate SensorML representation.

 

{
 
"type": "Feature",
 
"id": "123",
 
"geometry": {
   
"type": "Point",
   
"coordinates": [41.8781, -87.6298]
 
},
 
"properties": {
   
"uid": "urn:x-ogc:systems:001",
   
"name": "Outdoor Thermometer 001",
   
"description": "Digital thermometer located on first floor window 1",
   
"featureType": "http://www.w3.org/ns/sosa/Sensor",
   
"assetType": "Equipment",
   
"systemKind@link": {
     
"href": "https://data.example.org/api/procedures/TP60S?f=json",
     
"uid": "urn:x-myorg:datasheets:ThermoPro:TP60S:v001",
     
"title": "Thermo Pro TP60S",
     
"type" : "application/geo+json"
   
}
 
},
 
"links": [
   
{
     
"rel" : "self",
     
"title" : "this document",
     
"href" : "https://data.example.org/api/systems/123?f=json",
     
"type" : "application/geo+json"
   
}, {
     
"rel" : "alternate",
     
"title" : "this resource as SensorML",
     
"href" : "https://data.example.org/api/systems/123?f=sml",
     
"type" : "application/sml+json"
   
}
 
]
}

19.1.6.  Deployment Representation

Requirement 83

Identifier/req/geojson/deployment-schema
Included inRequirements class 12: /req/geojson
A

A GeoJSON document containing a single Deployment feature SHALL be valid against the JSON schema deployment.json.

B

A GeoJSON document containing a collection of Deployment features SHALL be valid against the JSON schema deploymentCollection.json.

Requirement 84

Identifier/req/geojson/deployment-mappings
Included inRequirements class 12: /req/geojson
Statement

A GeoJSON document representing a Deployment resource SHALL implement the mappings specified in Table 42 and Table 43.

Table 42 — GeoJSON Encoding of Deployment Attributes

Attribute Name (see Table 10)JSON MemberUsage
deploymentTypeproperties/featureTypeUse the URI or CURIE identifying the type of deployment as the value.
validTimeproperties/validTime-
locationgeometryValue is a GeoJSON geometry.

Table 43 — GeoJSON Encoding of Deployment Associations

Association Name (see Table 11)JSON MemberUsage
platformproperties/platform@linkValue is a weblink resolving to a System resource.
deployedSystemsproperties/deployedSystems@linkValue is a JSON Array of links*** to System resources.
parentDeploymentlinksValue is a weblink* resolving to a Deployment resource.
subdeploymentslinksValue is a weblink* resolving to a Deployment resources endpoint.
featuresOfInterestlinksValue is a weblink* resolving to a Feature resources endpoint.
samplingFeatureslinksValue is a weblink* resolving to a Sampling Feature resources endpoint.
datastreamslinksValue is a weblink* resolving to a DataStream resources endpoint**.
controlstreamslinksValue is a weblink* resolving to a ControlStream resources endpoint**.
* The link relation type (rel property) must be set to the association name prefixed by ogc-rel:.
** DataStream and ControlStream resources are defined in OGC API — Connected Systems — Part 2.
* When inserting or modifying a link to a system stored locally, the link url (href property) shall be set to the uniqueID of the system to be linked.

Example — A Deployment Feature in GeoJSON format

 

{
 
"type": "Feature",
 
"id": "iv3f2kcq27gfi",
 
"geometry": {
   
"type": "Polygon",
   
"coordinates": [[
     
[53.76,-173.7],
     
[53.76,-155.07],
     
[75.03,-155.07],
     
[75.03,-173.7],
     
[53.76,-173.7]
   
]]
 
},
 
"properties": {
   
"uid": "urn:x-ogc:deployments:D001",
   
"name": "Saildrone - 2017 Arctic Mission",
   
"featureType": "http://www.w3.org/ns/sosa/Deployment",
   
"description": "In July 2017, three saildrones were launched from Dutch Harbor, Alaska, in partnership with NOAA Research...",
   
"validTime": ["2017-07-17T00:00:00Z", "2017-09-29T00:00:00Z"],
   
"platform@link": {
     
"href": "https://data.example.org/api/systems/27559?f=sml",
     
"uid": "urn:x-saildrone:platforms:SD-1003",
     
"title": "Saildrone SD-1003"
   
},
   
"deployedSystems@link": [
     
{
       
"href": "https://data.example.org/api/systems/41548?f=sml",
       
"uid": "urn:x-saildrone:sensors:temp01",
       
"title": "Air Temperature Sensor"
     
},
     
{
       
"href": "https://data.example.org/api/systems/36584?f=sml",
       
"uid": "urn:x-saildrone:sensors:temp02",
       
"title": "Water Temperature Sensor"
     
},
     
{
       
"href": "https://data.example.org/api/systems/47752?f=sml",
       
"uid": "urn:x-saildrone:sensors:wind01",
       
"title": "Wind Speed and Direction Sensor"
     
}
   
]
 
},
 
"links": [
   
{
     
"rel" : "self",
     
"href" : "https://data.example.org/api/deployments/iv3f2kcq27gfi?f=json",
     
"type" : "application/geo+json",
     
"title" : "this document"
   
}, {
     
"rel" : "alternate",
     
"href" : "https://data.example.org/api/deployments/iv3f2kcq27gfi?f=sml",
     
"type" : "application/sml+json",
     
"title" : "this resource as SensorML"
   
}
 
]
}

19.1.7.  Procedure Representation

Requirement 85

Identifier/req/geojson/procedure-schema
Included inRequirements class 12: /req/geojson
A

A GeoJSON document containing a single Procedure feature SHALL be valid against the JSON schema procedure.json.

B

A GeoJSON document containing a collection of Procedure features SHALL be valid against the JSON schema procedureCollection.json.

Requirement 86

Identifier/req/geojson/procedure-mappings
Included inRequirements class 12: /req/geojson
Statement

A GeoJSON document representing a Procedure resource SHALL implement the mappings specified in Table 44 and Table 45.

Table 44 — GeoJSON Encoding of Procedure Attributes

Attribute Name (see Table 14)JSON MemberUsage
procedureTypeproperties/featureTypeUse the URI or CURIE from Table 16 as the value.
validTimeproperties/validTimeValue SHALL be a JSON array with min/max bounds encoded as a ISO8601 date/time string.

Table 45 — GeoJSON Encoding of Procedure Associations

Association Name (see Table 15)JSON MemberUsage
implementingSystemslinksValue is a weblink* resolving to a System resources endpoint.
* The link relation type (rel property) must be set to the association name prefixed by ogc-rel:.

Example — A Procedure Feature in GeoJSON format

 

{
 
"type": "Feature",
 
"id": "iv3f2kcq27gfi",
 
"geometry": null,
 
"properties": {
   
"uid": "urn:x-gill:datasheets:windmaster:v1",
   
"name": "Gill WindMaster",
   
"description": "Precision 3-axis ultrasonic anemometer",
   
"featureType": "http://www.w3.org/ns/ssn-system/SensorKind"
 
},
 
"links": [
   
{
     
"href" : "https://data.example.org/api/procedures/iv3f2kcq27gfi?f=json",
     
"rel" : "self",
     
"type" : "application/geo+json",
     
"title" : "this document"
   
}, {
     
"href" : "https://data.example.org/api/procedures/iv3f2kcq27gfi?f=sml",
     
"rel" : "alternate",
     
"type" : "application/sml+json",
     
"title" : "this resource as SensorML"
   
}
 
]
}

19.1.8.  Sampling Feature Representation

Requirement 87

Identifier/req/geojson/sf-schema
Included inRequirements class 12: /req/geojson
A

A GeoJSON document containing a single Sampling Feature SHALL be valid against the JSON schema samplingFeature.json.

B

A GeoJSON document containing a collection of Sampling Features SHALL be valid against the JSON schema samplingFeatureCollection.json.

Requirement 88

Identifier/req/geojson/sf-mappings
Included inRequirements class 12: /req/geojson
Statement

A GeoJSON document representing a Sampling Feature resource SHALL implement the mappings specified in Table 46 and Table 47.

Table 46 — GeoJSON Encoding of Sampling Feature Attributes

Attribute Name (see Table 17)JSON MemberUsage
featureTypeproperties/featureTypeUse the URI or CURIE specific to a sampling feature type.
validTimeproperties/validTimeValue SHALL be a JSON array with min/max bounds encoded as a ISO8601 date/time string.

Table 47 — GeoJSON Encoding of Sampling Feature Associations

Association Name (see Table 18)JSON MemberUsage
sampledFeatureproperties/sampledFeature@linkValue is a weblink resolving to a Feature resource.
parentSystemlinksValue is a weblink* resolving to a System resource.
sampleOflinksValue is a weblink* resolving to a Sampling Feature resources endpoint.
datastreamslinksValue is a weblink* resolving to a DataStream resources endpoint**.
controlstreamslinksValue is a weblink* resolving to a ControlStream resources endpoint**.
* The link relation type (rel property) must be set to the association name prefixed by ogc-rel:.
** DataStream and ControlStream resources are defined in OGC API — Connected Systems — Part 2.

Example 1 — A Sampling Point Feature in GeoJSON format

 

{
 
"type": "Feature",
 
"id": "SP001",
 
"geometry": {
   
"type": "Point",
   
"coordinates": [ 12.31, -86.98, -21]
 
},
 
"properties": {
   
"uid": "urn:x-usgs:sites:301244087575701:sf:bottom",
   
"name": "Bottom of Well - USGS Site #301244087575701",
   
"description": "Sampling point is 2-4 inches above the bottom of the well",
   
"featureType": "http://www.opengis.net/def/samplingFeatureType/OGC-OM/2.0/SF_SamplingPoint",
   
"sampledFeature@link": {
     
"href": "https://api.usgs.gov/collections/hydrological_features/items/112TRRC?f=json",
     
"type" : "application/geo+json",
     
"title": "Aquifer 112TRRC"
   
}
 
}
}

Example 2 — A Specimen Feature in GeoJSON format

 

{
 
"type": "Feature",
 
"id": "f6b464cf",
 
"geometry": {
   
"type": "Point",
   
"coordinates": [ 30.706, -134.196, 272 ]
 
},
 
"properties": {
   
"uid": "urn:x-csiro:samples:1114457888",
   
"name": "Rock Sample CSIRO:1114457888",
   
"description": "Rock sample collected on traverse",
   
"featureType": "http://www.opengis.net/def/samplingFeatureType/OGC-OM/2.0/SF_Specimen",
   
"samplingTime": "2007-01-24T12:14:50Z",
   
"materialClass": "http://dbpedia.org/resource/Rock_(geology)",
   
"sampledFeature@link": {
     
"href": "https://api.usgs.gov/collections/geological_features/items/1458955?f=json",
     
"type" : "application/geo+json",
     
"title": "Geological Unit 235"
   
}
 
},
 
"links": [
   
{
     
"rel": "parentSystem",
     
"href": "https://data.example.org/api/systems/2ad45f69?f=json",
     
"type" : "application/geo+json",
     
"title": "Field Technician #123 (Rock Sampler)"
   
}
 
]
}

Example 3 — A System Part Feature in GeoJSON format

 

{
 
"type": "Feature",
 
"id": "1a0f80f9",
 
"geometry": null,
 
"properties": {
   
"uid": "urn:x-ogc:sf:456",
   
"name": "CPU 2",
   
"description": "CPU 2 located in the robot chassis",
   
"featureType": "http://www.opengis.net/def/samplingFeatureType/OGC-SML/2.0/FeaturePart",
   
"sampledFeature@link": {
     
"href": "https://data.example.org/api/systems/8624d054?f=json",
     
"type" : "application/geo+json",
     
"title": "Tactical Ground Robot 457"
   
}
 
},
 
"links": [
   
{
     
"rel": "parentSystem",
     
"href": "https://data.example.org/api/systems/447845?f=json",
     
"type" : "application/geo+json",
     
"title": "Water Level Sensor"
   
}
 
]
}

19.2.  Requirements Class “SensorML Format”

19.2.1.  Overview

Requirements class 13

Identifier/req/sensorml
Target typeWeb API
Conformance classConformance class A.13: /conf/sensorml
PrerequisitesRequirements class 1: /req/api-common
http://www.opengis.net/spec/sensorML/3.0/req/json-simple-process
http://www.opengis.net/spec/sensorML/3.0/req/json-physical-system
http://www.opengis.net/spec/sensorML/3.0/req/json-deployment
http://www.opengis.net/spec/sensorML/3.0/req/json-derived-property
Normative statementsRequirement 89: /req/sensorml/mediatype-read
Requirement 90: /req/sensorml/mediatype-write
Requirement 91: /req/sensorml/relation-types
Requirement 92: /req/sensorml/resource-id
Requirement 93: /req/sensorml/feature-attribute-mapping
Requirement 94: /req/sensorml/system-schema
Requirement 95: /req/sensorml/system-sml-class
Requirement 96: /req/sensorml/system-mappings
Requirement 97: /req/sensorml/deployment-schema
Requirement 98: /req/sensorml/deployment-mappings
Requirement 99: /req/sensorml/procedure-schema
Requirement 100: /req/sensorml/procedure-sml-class
Requirement 101: /req/sensorml/procedure-mappings
Requirement 102: /req/sensorml/property-schema
Requirement 103: /req/sensorml/property-mappings

The “SensorML Format” requirements class specifies how resources defined by the CS API Standard are encoded using the SensorML JSON format defined in SensorML 3.0.

All feature types defined by this Standard, except Sampling Features, can be encoded in SensorML. The SensorML format allows the provision of more advanced metadata such as application specific identifiers and classifiers, security and legal constraints, characteristics and capabilities, contact information, attached documents, reference frames, etc.

19.2.2.  Media Type

NOTE:  Implementations should use application/vnd.ogc.sml+json as a preliminary media type until the SensorML 3.0 Standard is stable to avoid confusing future implementations accessing JSON documents from draft versions of the Standard. The media type application/sml+json will be registered for SensorML-JSON, if and once this Standard is approved by the OGC Members. This note will be removed before publishing this Standard.

The media type used for SensorML encoded resources is application/sml+json.

Requirement 89

Identifier/req/sensorml/mediatype-read
Included inRequirements class 13: /req/sensorml
Statement

The server SHALL support the media type application/sml+json in the HTTP Accept header and respond with a JSON document corresponding to the requested resource type.

Requirement 90

Identifier/req/sensorml/mediatype-write
Included inRequirements class 13: /req/sensorml
Conditions

The server implements /req/create-replace-delete.

Statement

The server SHALL support the media type application/sml+json in the HTTP Content-Type header and parse the JSON body according to the resource type.

19.2.3.  Link Relation Types

Requirement 91

Identifier/req/sensorml/relation-types
Included inRequirements class 13: /req/sensorml
Statement

For all associations encoded in the links member of the JSON response, the link relation type must be set to the association name.

19.2.4.  Common Encoding Rules

The following requirement provides the mapping between common resource properties and the corresponding JSON members when encoded in SensorML-JSON.

Requirement 92

Identifier/req/sensorml/resource-id
Included inRequirements class 13: /req/sensorml
A

The JSON member id SHALL be used to provide the local identifier of the resource.

B

The value of the id JSON member SHALL be the same as the {id} portion in the URL.

Requirement 93

Identifier/req/sensorml/feature-attribute-mapping
Included inRequirements class 13: /req/sensorml
Statement

A SensorML JSON document representing a Feature resource SHALL implement the mappings specified in Table 48.

Table 48 — SensorML Mappings of Common Attributes

Attribute NameJSON MemberUsage
uniqueIdentifieruniqueIdValue is a JSON string that is a valid URI.
namelabelValue is a JSON string.
descriptiondescriptionValue is a JSON string.

19.2.5.  System Representation

Requirement 94

Identifier/req/sensorml/system-schema
Included inRequirements class 13: /req/sensorml
Conditions

The server implements /req/system-features.

A

A request or response body with media type application/sml+json containing a single System resource SHALL be valid against the JSON schema system.json.

B

A request or response body with media type application/sml+json containing a collection of System resources SHALL be valid against the JSON schema systemCollection.json.

Requirement 95

Identifier/req/sensorml/system-sml-class
Included inRequirements class 13: /req/sensorml
A

SensorML class PhysicalComponent or PhysicalSystem SHALL be used to describe hardware equipment or human observers.

B

SensorML class SimpleProcess or AggregateProcess SHALL be used to describe a simulation or process.

Requirement 96

Identifier/req/sensorml/system-mappings
Included inRequirements class 13: /req/sensorml
Statement

A SensorML JSON document representing a System resource SHALL implement the mappings specified in Table 49 and Table 50.

Table 49 — SensorML Mappings of System Attributes

Attribute Name (see Table 4)JSON MemberUsage
systemTypedefinitionUse the URI or CURIE from Table 6 as the value.
assetTypeclassifiersUse a classifier with definition cs:AssetType, and the URI or CURIE from Table 7 as the value.
validTimevalidTime-
locationpositionInclude location either as a GeoJSON geometry, or as part of a 3D Pose object (see OGC 23-000 for a description of the 3D Pose object).

Table 50 — SensorML Mappings of System Associations

Association Name (see Table 5)JSON MemberUsage
systemKindtypeOfValue is a weblink resolving to a Procedure resource.
parentSystemattachedToValue is a weblink resolving to a System resource.
subsystemslinksValue is a weblink* resolving to a System resources endpoint.
samplingFeatureslinksValue is a weblink* resolving to a Sampling Feature resources endpoint.
deploymentslinksValue is a weblink* resolving to a Deployment resources endpoint.
procedureslinksValue is a weblink* resolving to a Procedure resources endpoint.
datastreamslinksValue is a weblink* resolving to a DataStream resources endpoint**.
controlstreamslinksValue is a weblink* resolving to a ControlStream resources endpoint**.
* The link relation type (rel property) must be set to the association name prefixed by ogc-rel:.
** DataStream and ControlStream resources are defined in OGC API — Connected Systems — Part 2.

Example — A System Feature in SensorML format

This is a simple description of a fixed in-situ sensor with identification and contact information.

 

{
 
"type": "PhysicalSystem",
 
"id": "123",
 
"definition": "http://www.w3.org/ns/sosa/Sensor",
 
"uniqueId": "urn:x-ogc:systems:001",
 
"label": "Outdoor Thermometer 001",
 
"description": "Digital thermometer located on first floor window 1",
 
"typeOf": {
   
"href": "https://data.example.org/api/procedures/TP60S?f=sml",
   
"uid": "urn:x-myorg:datasheets:ThermoPro:TP60S:v001",
   
"title": "ThermoPro TP60S",
   
"type" : "application/sml+json"
 
},
 
"identifiers": [
   
{
     
"definition": "http://sensorml.com/ont/swe/property/SerialNumber",
     
"label": "Serial Number",
     
"value": "0123456879"
   
}
 
],
 
"contacts": [
   
{
     
"role": "http://sensorml.com/ont/swe/roles/Operator",
     
"organisationName": "Field Maintenance Corp."
   
}
 
],
 
"position": {
   
"type": "Point",
   
"coordinates": [41.8781, -87.6298]
 
}
}

19.2.6.  Deployment Representation

Requirement 97

Identifier/req/sensorml/deployment-schema
Included inRequirements class 13: /req/sensorml
Conditions

The server implements /req/deployment-features.

A

A request or response body with media type application/sml+json containing a single Deployment resource SHALL be valid against the JSON schema deployment.json.

B

A request or response body with media type application/sml+json containing a collection of Deployment resources SHALL be valid against the JSON schema deploymentCollection.json.

Requirement 98

Identifier/req/sensorml/deployment-mappings
Included inRequirements class 13: /req/sensorml
Statement

A SensorML JSON document representing a Deployment resource SHALL implement the mappings specified in Table 51 and Table 52.

Table 51 — SensorML Mappings of Deployment Attributes

Attribute Name (see Table 10)JSON MemberUsage
deploymentTypedefinitionUse the URI or CURIE identifying the type of deployment as the value.
validTimevalidTime-
locationlocationValue is a GeoJSON geometry

Table 52 — SensorML Mappings of Deployment Associations

Association Name (see Table 11)JSON MemberUsage
platformplatformValue is a weblink resolving to a System resource.
deployedSystemsdeployedSystemsValue is a JSON Array of DeployedSystem objects, each of which contains a link*** to a System resource.
parentDeploymentlinksValue is a weblink* resolving to a Deployment resource.
subdeploymentslinksValue is a weblink* resolving to a Deployment resources endpoint.
featuresOfInterestlinksValue is a weblink* resolving to a Feature resources endpoint.
samplingFeatureslinksValue is a weblink* resolving to a Sampling Feature resources endpoint.
datastreamslinksValue is a weblink* resolving to a DataStream resources endpoint**.
controlstreamslinksValue is a weblink* resolving to a ControlStream resources endpoint**.
* The link relation type (rel property) must be set to the association name prefixed by ogc-rel:.
** DataStream and ControlStream resources are defined in OGC API — Connected Systems — Part 2.
* When inserting or modifying a link to a system stored locally, the link url (href property) shall be set to the uniqueID of the system to be linked.

Example — A Deployment Feature in SensorML format

 

{
 
"type": "Deployment",
 
"id": "iv3f2kcq27gfi",
 
"definition": "http://www.w3.org/ns/sosa/Deployment",
 
"uniqueId": "urn:x-saildrone:mission:2025",
 
"label": "Saildrone - 2017 Arctic Mission",
 
"description": "In July 2017, three saildrones were launched from Dutch Harbor, Alaska, in partnership with NOAA Research...",
 
"classifiers": [
   
{
     
"definition": "https://schema.org/DefinedRegion",
     
"label": "Region",
     
"value": "Arctic"
   
}
 
],
 
"contacts": [
   
{
     
"role": "http://sensorml.com/ont/swe/property/Operator",
     
"organisationName": "Saildrone, Inc.",
     
"contactInfo": {
       
"website": "https://www.saildrone.com/",
       
"address": {
         
"deliveryPoint": "1050 W. Tower Ave.",
         
"city": "Alameda",
         
"postalCode": "94501",
         
"administrativeArea": "CA",
         
"country": "USA"
       
}
     
}
   
},
   
{
     
"role": "http://sensorml.com/ont/swe/property/DataProvider",
     
"organisationName": "NOAA Pacific Marine Environmental Laboratory (PMEL)",
     
"contactInfo": {
       
"website": "https://www.pmel.noaa.gov"
     
}
   
}
 
],
 
"validTime": [
   
"2017-07-17T00:00:00Z",
   
"2017-09-29T00:00:00Z"
 
],
 
"location": {
   
"type": "Polygon",
   
"coordinates": [[
     
[-173.70, 53.76],
     
[-173.70, 75.03],
     
[-155.07, 75.03],
     
[-155.07, 53.76],
     
[-173.70, 53.76]
   
]]
 
},
 
"platform": {
   
"system": {
     
"href": "https://data.example.org/api/systems/27559?f=sml",
     
"uid": "urn:x-saildrone:platforms:SD-1003",
     
"title": "Saildrone SD-1003"
   
}
 
},
 
"deployedSystems": [
   
{
     
"name": "air_temp_sensor",
     
"description": "Air temperature sensor installed in the boom",
     
"system": {
       
"href": "https://data.example.org/api/systems/41548?f=sml",
       
"uid": "urn:x-saildrone:sensors:temp01",
       
"title": "Air Temperature Sensor"
     
},
     
"configuration": {
       
"setValues": [{
         
"ref": "parameters/sampling_rate",
         
"value": 0.1
       
}]
     
}
   
},
   
{
     
"name": "water_temp_sensor",
     
"description": "Water temperature sensor installed on the keel",
     
"system": {
       
"href": "https://data.example.org/api/systems/36584?f=sml",
       
"uid": "urn:x-saildrone:sensors:temp02",
       
"title": "Water Temperature Sensor"
     
}
   
},
   
{
     
"name": "wind_sensor",
     
"description": "Wind sensor installed at the top of the mast",
     
"system": {
       
"href": "https://data.example.org/api/systems/47752?f=sml",
       
"uid": "urn:x-saildrone:sensors:wind01",
       
"title": "Wind Speed and Direction Sensor"
     
}
   
}
 
],
 
"links": [
   
{
     
"rel" : "self",
     
"href" : "https://data.example.org/api/deployments/iv3f2kcq27gfi?f=sml",
     
"type" : "application/sml+json",
     
"title" : "this document"
   
}, {
     
"rel" : "alternate",
     
"href" : "https://data.example.org/api/deployments/iv3f2kcq27gfi?f=json",
     
"type" : "application/geo+json",
     
"title" : "this resource as GeoJSON"
   
}
 
]
}

19.2.7.  Procedure Representation

Requirement 99

Identifier/req/sensorml/procedure-schema
Included inRequirements class 13: /req/sensorml
Conditions

The server implements /req/procedure-features.

A

A request or response body with media type application/sml+json containing a single Procedure resource SHALL be valid against the JSON schema procedure.json.

B

A request or response body with media type application/sml+json containing a collection of Procedure resources SHALL be valid against the JSON schema procedureCollection.json.

Requirement 100

Identifier/req/sensorml/procedure-sml-class
Included inRequirements class 13: /req/sensorml
A

SensorML class PhysicalComponent or PhysicalSystem SHALL be used to describe hardware equipment specifications (i.e., datasheet).

B

SensorML class SimpleProcess or AggregateProcess SHALL be used to describe a procedure implemented by humans, such as a methodology or steps.

C

No position information SHALL be provided as part of the procedure description.

Requirement 101

Identifier/req/sensorml/procedure-mappings
Included inRequirements class 13: /req/sensorml
Statement

A SensorML JSON document representing a Procedure resource SHALL implement the mappings specified in Table 53 and Table 54.

Table 53 — SensorML Mappings of Procedure Attributes

Attribute Name (see Table 14)JSON MemberUsage
procedureTypedefinitionUse the URI or CURIE from Table 16 as the value.
validTimevalidTime-

Table 54 — SensorML Mappings of Procedure Associations

Association Name (see Table 15)JSON MemberUsage
implementingSystemslinksValue is a weblink* resolving to a System resources endpoint.
* The link relation type (rel property) must be set to the association name prefixed by ogc-rel:.

Example — A Procedure Feature (datasheet) in SensorML format

 

{
 
"type": "PhysicalComponent",
 
"id": "iv3f2kcq27gfi",
 
"definition": "http://www.w3.org/ns/ssn-system/SensorKind",
 
"uniqueId": "urn:osh:sensors:saildrone:S0004",
 
"label": "3D Ultrasonic Anemometer",
 
"description": "Precision 3-axis ultrasonic anemometer",
 
"identifiers": [
   
{
     
"definition": "http://sensorml.com/ont/swe/property/Manufacturer",
     
"label": "Manufacturer Name",
     
"value": "Gill"
   
},
   
{
     
"definition": "http://sensorml.com/ont/swe/property/ModelNumber",
     
"label": "Model Number",
     
"value": "WindMaster"
   
}
 
],
 
"classifiers": [
   
{
     
"definition": "http://sensorml.com/ont/swe/property/SensorType",
     
"label": "Sensor Type",
     
"value": "Anemometer"
   
}
 
],
 
"capabilities": [
   
{
     
"definition": "http://www.w3.org/ns/ssn/systems/SystemCapability",
     
"label": "Speed Measurement Capabilities",
     
"capabilities": [
       
{
         
"name": "range",
         
"type": "QuantityRange",
         
"definition": "http://www.w3.org/ns/ssn/systems/MeasurementRange",
         
"label": "Measurement Range",
         
"uom": {
           
"code": "m/s"
         
},
         
"value": [0.0,50.0]
       
},
       
{
         
"name": "resolution",
         
"type": "Quantity",
         
"definition": "http://www.w3.org/ns/ssn/systems/Resolution",
         
"label": "Resolution",
         
"uom": {
           
"code": "m/s"
         
},
         
"value": 0.01
       
},
       
{
         
"name": "accuracy",
         
"type": "Quantity",
         
"definition": "http://sensorml.com/ont/swe/property/RelativeAccuracy",
         
"label": "Relative Accuracy",
         
"uom": {
           
"code": "%"
         
},
         
"value": 1.5
       
}
     
]
   
}
 
],
 
"links": [
   
{
     
"href" : "https://data.example.org/api/procedures/iv3f2kcq27gfi?f=sml",
     
"rel" : "self",
     
"type" : "application/sml+json",
     
"title" : "this document"
   
}, {
     
"href" : "https://data.example.org/api/procedures/iv3f2kcq27gfi?f=json",
     
"rel" : "alternate",
     
"type" : "application/geo+json",
     
"title" : "this resource as GeoJSON"
   
}
 
]
}

19.2.8.  Property Representation

Requirement 102

Identifier/req/sensorml/property-schema
Included inRequirements class 13: /req/sensorml
Conditions

The server implements /req/property-definitions.

A

A request or response body with media type application/sml+json containing a single Property resource SHALL be valid against the JSON schema property.json.

B

A request or response body with media type application/sml+json containing a collection of Property resources SHALL be valid against the JSON schema propertyCollection.json.

Requirement 103

Identifier/req/sensorml/property-mappings
Included inRequirements class 13: /req/sensorml
Statement

A SensorML JSON document representing a Property resource SHALL implement the mappings specified in Table 55.

Table 55 — SensorML Mappings of Property Attributes

Attribute Name (see Table 19)JSON MemberUsage
basePropertybasePropertyValue is a JSON string that is a valid URI.
objectTypeobjectTypeValue is a JSON string that is a valid URI.
statisticstatisticValue is a JSON string that is a valid URI.

Example — A Property Definition in SensorML format

 

{
 
"id": "AverageCpuTemp",
 
"label": "Average CPU Temp",
 
"description": "Hourly average of the CPU temperature",
 
"baseProperty": "http://qudt.org/vocab/quantitykind/Temperature",
 
"objectType": "http://dbpedia.org/resource/Central_processing_unit",
 
"statistic": "http://sensorml.com/ont/x-stats/HourlyMean"
}

Annex A
(normative)
Conformance Class Abstract Test Suite

A.1.  Supporting Tests

These tests are not associated to any specific requirement but are referenced by other tests.

Abstract test A.1

Identifier/conf/api-common/canonical-resources
Test purpose

Retrieve all items from their canonical endpoint.
This is a parameterized test that requires the resource-type parameter

Test method

Given the resource-type parameter:

  1. Issue an HTTP GET request to the URL /{resource-type} with the Accepted header set to a media type supported by the server.

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

  3. Iterate through the list of resources in the response, following next links as appropriate.

Abstract test A.2

Identifier/conf/api-common/collection-items
Test purpose

Retrieve items of a collection.
This is a parameterized test that requires the collectionId parameter

Test method
  1. Retrieve the media types supported by the server for the collection items by inspecting the links with relation type items.

  2. If the server does not offer any media type supported by the testing engine, issue a warning and skip the test.

  3. Issue an HTTP GET request to the URL /collections/{collectionId}/items where {collectionId} is the ID of the desired collection.

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

  5. Iterate through all items in the collection, following next links as appropriate.

A.2.  Conformance Class “Common”

Conformance class A.1

Identifier/conf/api-common
Requirements classRequirements class 1: /req/api-common
Prerequisiteshttp://www.opengis.net/spec/ogcapi-1/1.0/conf/core
http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/core
http://www.opengis.net/spec/ogcapi-common-1/1.0/conf/landing-page
http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/collections
http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/simple-query
Target TypeWeb API
Conformance testsAbstract test A.3: /conf/api-common/resource-ids
Abstract test A.4: /conf/api-common/resource-uids
Abstract test A.5: /conf/api-common/resource-uids-types
Abstract test A.6: /conf/api-common/datetime

Abstract test A.3

Identifier/conf/api-common/resource-ids
RequirementRequirement 1: /req/api-common/resource-ids
Test purpose

Validate that resource IDs assigned by the server are unique for a given resource type.

Test method

For each resource type supported by the server:

  1. Retrieve all resources as described in test _conf_api-common_canonical-resources.

  2. For each resource in the response, retrieve its local ID.

  3. Compare the ID with all IDs read previously from resources of the same type and make sure it is unique.

Abstract test A.4

Identifier/conf/api-common/resource-uids
RequirementRequirement 2: /req/api-common/resource-uids
Test purpose

Validate that resource UIDs exposed by the server are unique across all collections.

Test method

For each resource type supported by the server:

  1. Retrieve resources as described in test _conf_api-common_canonical-resources.

  2. Retrieve the unique ID of each resource in the response.

  3. Compare the UID with all UIDs previously read from any resource and make sure it is unique.

Abstract test A.5

Identifier/conf/api-common/resource-uids-types
RequirementRecommendation 1: /rec/api-common/resource-uids-types
Test purpose

Validate that resource UIDs are valid URIs, with a high probability of uniqueness.

Test method

For each resource type supported by the server:

  1. Retrieve resources as described in test _conf_api-common_canonical-resources.

  2. Retrieve the unique ID of each resource in the response.

  3. Validate that the unique ID is either a UUID or a URN with a known registered namespace. Issue a warning if not.

Abstract test A.6

Identifier/conf/api-common/datetime
RequirementRequirement 3: /req/api-common/datetime
Test purpose

Validate that the server correctly filters features when the datetime query parameter is set.

Test method

For each collection advertised by the server:

  1. Retrieve the temporal extent of the collection.

  2. Execute the Date/Time parameter test of http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core/fc-time-response, using the validTime property of the features in the response as the temporal geometry.

A.3.  Conformance Class “System Features”

Conformance class A.2

Identifier/conf/system
Requirements classRequirements class 2: /req/system
PrerequisiteConformance class A.1: /conf/api-common
Target TypeWeb API
Conformance testsAbstract test A.7: /conf/system/location
Abstract test A.8: /conf/system/location-time
Abstract test A.9: /conf/system/canonical-url
Abstract test A.10: /conf/system/resources-endpoint
Abstract test A.11: /conf/system/canonical-endpoint
Abstract test A.12: /conf/system/collections

Abstract test A.7

Identifier/conf/system/location
RequirementRecommendation 2: /rec/system/location
Test purpose

Validate that system features include a location.

Test method
  1. Retrieve System resources by running test _conf_api-common_canonical-resources with resource-type=systems.

  2. For each System resource in the response that does not have assetType set to Simulation or Process, check that the resource representation contains a location. Issue a warning if not.

Abstract test A.8

Identifier/conf/system/location-time
RequirementRequirement 4: /req/system/location-time
Test purpose

Validate that the server updates the system location when it changes.

Test method

Given the ID sysId of a mobile system that is known to change location.

  1. Issue an HTTP GET request to the URL {api_root}/systems/{sysId}.

  2. Wait until the system has changed location.

  3. Issue an HTTP GET request to the URL {api_root}/systems/{sysId}.

  4. Verify that the locations reported in the two responses are different.

Abstract test A.9

Identifier/conf/system/canonical-url
RequirementRequirement 5: /req/system/canonical-url
Test purpose

Validate that every System resource is accessible via its canonical URL.

Test method

For every collection advertised by the server with the featureType property set to sosa:System:

  1. Retrieve the collection items as described in test _conf_api-common_collection-items.

  2. For each item, check that a link with relation type canonical is included.

  3. Dereference this link and validate that a document is returned with a status code 200.

  4. Check that the returned document has the same content as the resource originally included in the collection items (except for the canonical link).

Abstract test A.10

Identifier/conf/system/resources-endpoint
RequirementRequirement 6: /req/system/resources-endpoint
Test purpose

Validate that the server implements a System resources endpoint correctly.
This is a parameterized test that requires the endpoint URL as a parameter

Test method
  1. Issue an HTTP GET request to the endpoint URL.

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

  3. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is application/geo+json, execute test _conf_geojson_system-schema.

    2. If the response content type is application/sml+json, execute test _conf_sensorml_system-schema.

    3. For other response content types not supported by the testing engine, issue a warning and skip this test.

Abstract test A.11

Identifier/conf/system/canonical-endpoint
RequirementRequirement 7: /req/system/canonical-endpoint
Test purpose

Validate that the server exposes the canonical System resources endpoint.

Test method

Validate that the server implements a System resources endpoint at path {api_root}/systems using test _conf_system_resources-endpoint.

Abstract test A.12

Identifier/conf/system/collections
RequirementRequirement 8: /req/system/collections
Test purpose

Validate that System collections are tagged with the proper feature type.

Test method

For every collection advertised by the server with the featureType property set to sosa:System:

  1. Retrieve the collection items as described in test _conf_api-common_collection-items.

  2. For each item, retrieve its type.

  3. Check that the reported type is one of the URI or CURIE listed in Table 6.

  4. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is application/geo+json, execute test _conf_geojson_system-schema.

    2. If the response content type is application/sml+json, execute test _conf_sensorml_system-schema.

    3. For other response content types not supported by the testing engine, issue a warning and skip this test.

A.4.  Conformance Class “Subsystems”

Conformance class A.3

Identifier/conf/subsystem
Requirements classRequirements class 3: /req/subsystem
PrerequisiteConformance class A.2: /conf/system
Target TypeWeb API
Conformance testsAbstract test A.13: /conf/subsystem/collection
Abstract test A.14: /conf/subsystem/recursive-param
Abstract test A.15: /conf/subsystem/recursive-search-systems
Abstract test A.16: /conf/subsystem/recursive-search-subsystems
Abstract test A.17: /conf/subsystem/recursive-assoc

Abstract test A.13

Identifier/conf/subsystem/collection
RequirementRequirement 9: /req/subsystem/collection
Test purpose

Verify that subsystems are available as a sub-collection of a parent system.

Test method

Given the ID sysId of a parent system that has subsystems:

  1. Retrieve the parent system resource at {api_root}/systems/{sysId}.

  2. Verify that the response contains a link with relation type subsystems.

  3. Verify that the link target is the URL {api_root}/systems/{id}/subsystems.

  4. Dereference this link and validate that a document is returned with a status code 200.

  5. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is application/geo+json, execute test _conf_geojson_system-schema.

    2. If the response content type is application/sml+json, execute test _conf_sensorml_system-schema.

    3. For other response content types not supported by the testing engine, issue a warning and skip this test.

Abstract test A.14

Identifier/conf/subsystem/recursive-param
RequirementRequirement 10: /req/subsystem/recursive-param
Test purpose

Validate that the recursive query parameter is of type boolean

Test method
  1. Validate that the request contains a query parameter named recursive.

  2. Validate that the parameter value is set to true or false.

Abstract test A.15

Identifier/conf/subsystem/recursive-search-systems
RequirementRequirement 11: /req/subsystem/recursive-search-systems
Test purpose

Verify that subsystems can be queried using the recursive query parameter.

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

  2. Verify that subsystems are not included in the response.

  3. Issue an HTTP GET request to the URL {api_root}/systems?recursive=false.

  4. Verify that subsystems are not included in the response.

  5. Issue an HTTP GET request to the URL {api_root}/systems?recursive=true.

  6. Verify that all subsystems (at all nesting levels) are included in the response.

Abstract test A.16

Identifier/conf/subsystem/recursive-search-subsystems
RequirementRequirement 12: /req/subsystem/recursive-search-subsystems
Test purpose

Verify that nested subsystems can be queried using the recursive query parameter.

Test method

Given the ID sysId of a parent system that has subsystems:

  1. Issue an HTTP GET request to the URL {api_root}/systems/{sysId}/subsystems.

  2. Verify that only direct subsystems are included in the response.

  3. Issue an HTTP GET request to the URL {api_root}/systems/{sysId}/subsystems?recursive=false.

  4. Verify that only direct subsystems are included in the response.

  5. Issue an HTTP GET request to the URL {api_root}/systems/{sysId}/subsystems?recursive=true.

  6. Verify that all subsystems (at all nesting levels) are included in the response.

Abstract test A.17

Identifier/conf/subsystem/recursive-assoc
RequirementRequirement 13: /req/subsystem/recursive-assoc
Test purpose

Verify that a system’s nested resources endpoints include resources from its subsystems.

Test method

For each System resource with local ID sysId that has subsystems:

  1. If the server implements Sampling Feature resources, verify that all nested sampling features are returned

    1. Issue an HTTP GET request to the URL {api_root}/systems/{sysId}/samplingFeatures.

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

    3. Validate that the response includes all Sampling Feature resources associated to the parent system or any of its subsystems (at all nesting levels).

  2. If the server implements DataStream resources, verify that all nested datastreams are returned

    1. Issue an HTTP GET request to the URL {api_root}/systems/{sysId}/datastreams.

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

    3. Validate that the response includes all DataStream resources associated to the parent system or any of its subsystems (at all nesting levels).

  3. If the server implements ControlStream resources, verify that all nested controlstreams are returned

    1. Issue an HTTP GET request to the URL {api_root}/systems/{sysId}/controlstreams.

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

    3. Validate that the response includes all ControlStream resources associated to the parent system or any of its subsystems (at all nesting levels).

A.5.  Conformance Class “Deployment Features”

Conformance class A.4

Identifier/conf/deployment
Requirements classRequirements class 4: /req/deployment
PrerequisiteConformance class A.1: /conf/api-common
Target TypeWeb API
Conformance testsAbstract test A.18: /conf/deployment/canonical-url
Abstract test A.19: /conf/deployment/resources-endpoint
Abstract test A.20: /conf/deployment/canonical-endpoint
Abstract test A.22: /conf/deployment/ref-from-system
Abstract test A.21: /conf/deployment/collections

Abstract test A.18

Identifier/conf/deployment/canonical-url
RequirementRequirement 14: /req/deployment/canonical-url
Test purpose

Validate that every Deployment resource is accessible via its canonical URL.

Test method

For every collection advertised by the server with the featureType property set to sosa:Deployment:

  1. Retrieve the collection items as described in test _conf_api-common_collection-items.

  2. For each item, check that a link with relation type canonical is included.

  3. Dereference this link and validate that a document is returned with a status code 200.

  4. Check that the returned document has the same content as the resource originally included in the collection items (except for the canonical link).

Abstract test A.19

Identifier/conf/deployment/resources-endpoint
RequirementRequirement 15: /req/deployment/resources-endpoint
Test purpose

Validate that the server implements a Deployment resources endpoint correctly.
This is a parameterized test that requires the endpoint URL as a parameter

Test method
  1. Issue an HTTP GET request to the endpoint URL.

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

  3. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is application/geo+json, execute test _conf_geojson_deployment-schema.

    2. If the response content type is application/sml+json, execute test _conf_sensorml_deployment-schema.

    3. For other response content types not supported by the testing engine, issue a warning and skip this test.

Abstract test A.20

Identifier/conf/deployment/canonical-endpoint
RequirementRequirement 16: /req/deployment/canonical-endpoint
Test purpose

Validate that the server exposes the canonical Deployment resources endpoint.

Test method

Validate that the server implements a Deployment resources endpoint at path {api_root}/deployments using test _conf_deployment_resources-endpoint.

Abstract test A.21

Identifier/conf/deployment/collections
RequirementRequirement 18: /req/deployment/collections
Test purpose

Validate that Deployment collections are tagged with the proper feature type.

Test method

For every collection advertised by the server with the featureType property set to sosa:Deployment:

  1. Retrieve the collection items as described in test _conf_api-common_collection-items.

  2. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is application/geo+json, execute test _conf_geojson_deployment-schema.

    2. If the response content type is application/sml+json, execute test _conf_sensorml_deployment-schema.

    3. For other response content types not supported by the testing engine, issue a warning and skip this test.

Abstract test A.22

Identifier/conf/deployment/ref-from-system
RequirementRequirement 17: /req/deployment/ref-from-system
Test purpose

Validate that Deployment resources associated to a System are available as sub-resources.

Test method
  1. Retrieve all System resources by executing test _conf_api-common_canonical-resources with parameter resource-type=systems.

  2. For each System resource in the response:

    1. Issue an HTTP GET request at path {api_root}/systems/{sysId}/deployments, where sysId is the local ID of the System resource.

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

    3. Iterate through the list of resources in the response, following next links as appropriate.

    4. If the response content type is application/geo+json, execute test _conf_geojson_deployment-schema.

    5. If the response content type is {sensorml-mediatype}, execute test _conf_sensorml_deployment-schema.

    6. Check that the Deployment resource contains a link to the System with ID sysId.

A.6.  Conformance Class “Subdeployments”

Conformance class A.5

Identifier/conf/subdeployment
Requirements classRequirements class 5: /req/subdeployment
PrerequisiteConformance class A.4: /conf/deployment
Target TypeWeb API
Conformance testsAbstract test A.23: /conf/subdeployment/collection
Abstract test A.24: /conf/subdeployment/recursive-param
Abstract test A.25: /conf/subdeployment/recursive-search-deployments
Abstract test A.26: /conf/subdeployment/recursive-search-subdeployments
Abstract test A.27: /conf/subdeployment/recursive-assoc

Abstract test A.23

Identifier/conf/subdeployment/collection
RequirementRequirement 19: /req/subdeployment/collection
Test purpose

Verify that subdeployments are available as a sub-collection of a parent deployment.

Test method

Given the ID depId of a parent deployment that has subdeployments:

  1. Retrieve the parent deployment resource at {api_root}/deployments/{depId}.

  2. Verify that the response contains a link with relation type subdeployments.

  3. Verify that the link target is the URL {api_root}/deployments/{id}/subdeployments.

  4. Dereference this link and validate that a document is returned with a status code 200.

  5. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is application/geo+json, execute test _conf_geojson_deployment-schema.

    2. If the response content type is application/sml+json, execute test _conf_sensorml_deployment-schema.

    3. For other response content types not supported by the testing engine, issue a warning and skip this test.

Abstract test A.24

Identifier/conf/subdeployment/recursive-param
RequirementRequirement 20: /req/subdeployment/recursive-param
Test purpose

Validate that the recursive query parameter is of type boolean

Test method
  1. Validate that the request contains a query parameter named recursive.

  2. Validate that the parameter value is set to true or false.

Abstract test A.25

Identifier/conf/subdeployment/recursive-search-deployments
RequirementRequirement 21: /req/subdeployment/recursive-search-deployments
Test purpose

Verify that subdeployments can be queried using the recursive query parameter.

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

  2. Verify that subdeployments are not included in the response.

  3. Issue an HTTP GET request to the URL {api_root}/deployments?recursive=false.

  4. Verify that subdeployments are not included in the response.

  5. Issue an HTTP GET request to the URL {api_root}/deployments?recursive=true.

  6. Verify that all subdeployments (at all nesting levels) are included in the response.

Abstract test A.26

Identifier/conf/subdeployment/recursive-search-subdeployments
RequirementRequirement 22: /req/subdeployment/recursive-search-subdeployments
Test purpose

Verify that nested subdeployments can be queried using the recursive query parameter.

Test method

Given the ID depId of a parent deployment that has subdeployments:

  1. Issue an HTTP GET request to the URL {api_root}/deployments/{depId}/subdeployments.

  2. Verify that only direct subdeployments are included in the response.

  3. Issue an HTTP GET request to the URL {api_root}/deployments/{depId}/subdeployments?recursive=false.

  4. Verify that only direct subdeployments are included in the response.

  5. Issue an HTTP GET request to the URL {api_root}/deployments/{depId}/subdeployments?recursive=true.

  6. Verify that all subdeployments (at all nesting levels) are included in the response.

Abstract test A.27

Identifier/conf/subdeployment/recursive-assoc
RequirementRequirement 23: /req/subdeployment/recursive-assoc
Test purpose

Verify that a deployment’s nested resources endpoints include resources from its subdeployments.

Test method

For each Deployment resource with local ID depId that has subdeployments:

  1. If the Deployment resource contains a link with relation type deployedSystems, verify that all deployed systems are returned

    1. Issue an HTTP GET request to the link URL.

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

    3. Validate that the response includes all System resources associated to the parent deployment or any of its subdeployments (at all nesting levels).

  2. If the Deployment resource contains a link with relation type featuresOfInterest, verify that all related features of interest are returned

    1. Issue an HTTP GET request to the link URL.

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

    3. Validate that the response includes all Feature of Interest resources associated to the parent deployment or any of its subdeployments (at all nesting levels).

  3. If the Deployment resource contains a link with relation type samplingFeatures, verify that all related sampling features are returned

    1. Issue an HTTP GET request to the link URL.

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

    3. Validate that the response includes all Sampling Feature resources associated to the parent deployment or any of its subdeployments (at all nesting levels).

  4. If the Deployment resource contains a link with relation type datastreams, verify that all related datastreams are returned

    1. Issue an HTTP GET request to the link URL.

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

    3. Validate that the response includes all DataStream resources associated to the parent deployment or any of its subdeployments (at all nesting levels).

  5. If the Deployment resource contains a link with relation type controlstreams, verify that all related controlstreams are returned

    1. Issue an HTTP GET request to the link URL.

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

    3. Validate that the response includes all ControlStream resources associated to the parent deployment or any of its subdeployments (at all nesting levels).

A.7.  Conformance Class “Procedure Features”

Conformance class A.6

Identifier/conf/procedure
Requirements classRequirements class 6: /req/procedure
PrerequisiteConformance class A.1: /conf/api-common
Target TypeWeb API
Conformance testsAbstract test A.28: /conf/procedure/location
Abstract test A.29: /conf/procedure/canonical-url
Abstract test A.30: /conf/procedure/resources-endpoint
Abstract test A.31: /conf/procedure/canonical-endpoint
Abstract test A.32: /conf/procedure/collections

Abstract test A.28

Identifier/conf/procedure/location
RequirementRequirement 24: /req/procedure/location
Test purpose

Validate that Procedure features never include a location.

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

  2. Iterate through the items of the response, following next links as appropriate.

  3. For each item, check that no location is not provided.

    1. If the response content type is application/geo+json, check that the geometry member is set to null.

    2. If the response content type is application/sml+json, check that the position member is not present.

    3. For other response content types not supported by the testing engine, issue a warning and skip this test.

Abstract test A.29

Identifier/conf/procedure/canonical-url
RequirementRequirement 25: /req/procedure/canonical-url
Test purpose

Validate that every Procedure resource is accessible via its canonical URL.

Test method

For every collection advertised by the server with the featureType property set to sosa:Procedure:

  1. Retrieve the collection items as described in test _conf_api-common_collection-items.

  2. For each item, check that a link with relation type canonical is included.

  3. Dereference this link and validate that a document is returned with a status code 200.

  4. Check that the returned document has the same content as the resource originally included in the collection items (except for the canonical link).

Abstract test A.30

Identifier/conf/procedure/resources-endpoint
RequirementRequirement 26: /req/procedure/resources-endpoint
Test purpose

Validate that the server implements a Procedure resources endpoint correctly.
This is a parameterized test that requires the endpoint URL as a parameter

Test method
  1. Issue an HTTP GET request to the endpoint URL.

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

  3. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is application/geo+json, execute test _conf_geojson_procedure-schema.

    2. If the response content type is application/sml+json, execute test _conf_sensorml_procedure-schema.

    3. For other response content types not supported by the testing engine, issue a warning and skip this test.

Abstract test A.31

Identifier/conf/procedure/canonical-endpoint
RequirementRequirement 27: /req/procedure/canonical-endpoint
Test purpose

Validate that the server exposes the canonical Procedure resources endpoint.

Test method

Validate that the server implements a Procedure resources endpoint at path {api_root}/procedures using test _conf_procedure_resources-endpoint.

Abstract test A.32

Identifier/conf/procedure/collections
RequirementRequirement 28: /req/procedure/collections
Test purpose

Validate that Procedure collections are tagged with the proper feature type.

Test method

For every collection advertised by the server with the featureType property set to sosa:Procedure:

  1. Retrieve the collection items as described in test _conf_api-common_collection-items.

  2. For each item, retrieve its type.

  3. Check that the reported type is one of the URI or CURIE listed in Table 16.

  4. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is application/geo+json, execute test _conf_geojson_procedure-schema.

    2. If the response content type is application/sml+json, execute test _conf_sensorml_procedure-schema.

    3. For other response content types not supported by the testing engine, issue a warning and skip this test.

A.8.  Conformance Class “Sampling Features”

Conformance class A.7

Identifier/conf/sf
Requirements classRequirements class 7: /req/sf
PrerequisiteConformance class A.2: /conf/system
Target TypeWeb API
Conformance testsAbstract test A.33: /conf/sf/canonical-url
Abstract test A.34: /conf/sf/resources-endpoint
Abstract test A.35: /conf/sf/canonical-endpoint
Abstract test A.37: /conf/sf/ref-from-system
Abstract test A.36: /conf/sf/collections

Abstract test A.33

Identifier/conf/sf/canonical-url
RequirementRequirement 29: /req/sf/canonical-url
Test purpose

Validate that every Sampling Feature resource is accessible via its canonical URL.

Test method

For every collection advertised by the server with the featureType property set to sosa:Sample:

  1. Retrieve the collection items as described in test _conf_api-common_collection-items.

  2. For each item, check that a link with relation type canonical is included.

  3. Dereference this link and validate that a document is returned with a status code 200.

  4. Check that the returned document has the same content as the resource originally included in the collection items (except for the canonical link).

Abstract test A.34

Identifier/conf/sf/resources-endpoint
RequirementRequirement 30: /req/sf/resources-endpoint
Test purpose

Validate that the server implements a Sampling Feature resources endpoint correctly.
This is a parameterized test that requires the endpoint URL as a parameter

Test method
  1. Issue an HTTP GET request to the endpoint URL.

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

  3. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is application/geo+json, execute test _conf_geojson_sf-schema.

    2. For other response content types not supported by the testing engine, issue a warning and skip this test.

Abstract test A.35

Identifier/conf/sf/canonical-endpoint
RequirementRequirement 31: /req/sf/canonical-endpoint
Test purpose

Validate that the server exposes the canonical Sampling Feature resources endpoint.

Test method

Validate that the server implements a Sampling Feature resources endpoint at path {api_root}/samplingFeatures using test _conf_sf_resources-endpoint.

Abstract test A.36

Identifier/conf/sf/collections
RequirementRequirement 33: /req/sf/collections
Test purpose

Validate that Sampling Feature collections are tagged with the proper feature type.

Test method

For every collection advertised by the server with the featureType property set to sosa:Sample:

  1. Retrieve the collection items as described in test _conf_api-common_collection-items.

  2. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is application/geo+json, execute test _conf_geojson_sf-schema.

    2. For other response content types not supported by the testing engine, issue a warning and skip this test.

Abstract test A.37

Identifier/conf/sf/ref-from-system
RequirementRequirement 32: /req/sf/ref-from-system
Test purpose

Validate that Sampling Features attached to a given system are available as a sub-resources.

Test method
  1. Retrieve all System resources by executing test _conf_api-common_canonical-resources with parameter resource-type=systems.

  2. For each System resource in the response:

    1. Issue an HTTP GET request at path {api_root}/systems/{sysId}/samplingFeatures, where sysId is the local ID of the System resource.

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

    3. Iterate through the list of resources in the response, following next links as appropriate.

    4. If the response content type is application/geo+json, execute test _conf_geojson_sf-schema.

A.9.  Conformance Class “Property Definitions”

Conformance class A.8

Identifier/conf/property
Requirements classRequirements class 8: /req/property
PrerequisiteConformance class A.1: /conf/api-common
Target TypeWeb API
Conformance testsAbstract test A.38: /conf/property/canonical-url
Abstract test A.39: /conf/property/resources-endpoint
Abstract test A.40: /conf/property/canonical-endpoint
Abstract test A.41: /conf/property/collections

Abstract test A.38

Identifier/conf/property/canonical-url
RequirementRequirement 34: /req/property/canonical-url
Test purpose

Validate that every Property resource is accessible via its canonical URL.

Test method

For every collection advertised by the server with the itemType property set to sosa:Property:

  1. Retrieve the collection items as described in test _conf_api-common_collection-items.

  2. For each item, check that a link with relation type canonical is included.

  3. Dereference this link and validate that a document is returned with a status code 200.

  4. Check that the returned document has the same content as the resource originally included in the collection items (except for the canonical link).

Abstract test A.39

Identifier/conf/property/resources-endpoint
RequirementRequirement 35: /req/property/resources-endpoint
Test purpose

Validate that the server implements a Property resources endpoint correctly.
This is a parameterized test that requires the endpoint URL as a parameter

Test method
  1. Issue an HTTP GET request to the endpoint URL.

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

  3. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is {sensorml-mediatype}, execute test _conf_sensorml_property-schema.

    2. For other response content types not supported by the testing engine, issue a warning and skip this test.

Abstract test A.40

Identifier/conf/property/canonical-endpoint
RequirementRequirement 36: /req/property/canonical-endpoint
Test purpose

Validate that the server exposes the canonical Property resources endpoint.

Test method

Validate that the server implements a Property resources endpoint at path {api_root}/properties using test _conf_property_resources-endpoint.

Abstract test A.41

Identifier/conf/property/collections
RequirementRequirement 37: /req/property/collections
Test purpose

Validate that Property collections are tagged with the proper item type.

Test method

For every collection advertised by the server with the itemType property set to sosa:Property:

  1. Retrieve the collection items as described in test _conf_api-common_collection-items.

  2. Validate that the contents of the returned document conform to the media type reported by the response Content-Type header.

    1. If the response content type is {sensorml-mediatype}, execute test _conf_sensorml_property-schema.

    2. For other response content types not supported by the testing engine, issue a warning and skip this test.

A.10.  Conformance Class “Advanced Filtering”

Conformance class A.9

Identifier/conf/advanced-filtering
Requirements classRequirements class 9: /req/advanced-filtering
PrerequisiteConformance class A.1: /conf/api-common
Target TypeWeb API
Conformance testsAbstract test A.42: /conf/advanced-filtering/id-list-schema
Abstract test A.43: /conf/advanced-filtering/resource-by-id
Abstract test A.44: /conf/advanced-filtering/resource-by-keyword
Abstract test A.45: /conf/advanced-filtering/resource-by-property
Abstract test A.46: /conf/advanced-filtering/feature-by-geom
Abstract test A.47: /conf/advanced-filtering/system-by-parent
Abstract test A.48: /conf/advanced-filtering/system-by-procedure
Abstract test A.49: /conf/advanced-filtering/system-by-foi
Abstract test A.50: /conf/advanced-filtering/system-by-obsprop
Abstract test A.51: /conf/advanced-filtering/system-by-controlprop
Abstract test A.52: /conf/advanced-filtering/deployment-by-parent
Abstract test A.53: /conf/advanced-filtering/deployment-by-system
Abstract test A.54: /conf/advanced-filtering/deployment-by-foi
Abstract test A.55: /conf/advanced-filtering/deployment-by-obsprop
Abstract test A.56: /conf/advanced-filtering/deployment-by-controlprop
Abstract test A.57: /conf/advanced-filtering/procedure-by-obsprop
Abstract test A.58: /conf/advanced-filtering/procedure-by-controlprop
Abstract test A.59: /conf/advanced-filtering/sf-by-foi
Abstract test A.60: /conf/advanced-filtering/sf-by-obsprop
Abstract test A.61: /conf/advanced-filtering/sf-by-controlprop
Abstract test A.62: /conf/advanced-filtering/prop-by-baseprop
Abstract test A.63: /conf/advanced-filtering/prop-by-object
Abstract test A.64: /conf/advanced-filtering/combined-filters
Abstract test A.65: /conf/advanced-filtering/indirect-prop
Abstract test A.66: /conf/advanced-filtering/indirect-foi

Abstract test A.42

Identifier/conf/advanced-filtering/id-list-schema
RequirementRequirement 38: /req/advanced-filtering/id-list-schema
Test purpose

Validate that query parameters of type ID List are constructed correctly.

Test method

Validate that the parameter is a comma separated list of string values.

Abstract test A.43

Identifier/conf/advanced-filtering/resource-by-id
RequirementRequirement 39: /req/advanced-filtering/resource-by-id
Test purpose

Validate that the id query parameter is processed correctly.

Test method

For every canonical resources endpoint:

  1. Generate an id parameter set to a list of resource IDs (see test _conf_advanced-filtering_id-list-schema).

  2. Issue an HTTP GET request at the resources endpoint URL with the previously generated id parameter in the query string.

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

  4. Validate that the returned collection only includes the resources with the selected identifiers.

  5. Repeat the previous steps with an id parameter containing a list of UIDs.

Abstract test A.44

Identifier/conf/advanced-filtering/resource-by-keyword
RequirementRequirement 40: /req/advanced-filtering/resource-by-keyword
Test purpose

Validate that the q query parameter is processed correctly.

Test method

For every canonical resources endpoint:

  1. Generate a q parameter set to a list of keywords, as specified by the provided OpenAPI 3.0 schema.

  2. Issue an HTTP GET request at the resources endpoint URL with the q parameter in the query string.

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

  4. Validate that the returned collection only includes resources with plain text content that includes the keyword.

Abstract test A.45

Identifier/conf/advanced-filtering/resource-by-property
RequirementRecommendation 3: /rec/advanced-filtering/resource-by-property
Test purpose

Validate that custom property query parameters are processed correctly.

Test method

For every canonical resources endpoint:

  1. Generate a custom parameter with the same name as a feature property, and set the value to a possible value of the property.

  2. Issue an HTTP GET request at the resources endpoint URL with the custom parameter in the query string.

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

  4. Validate that the returned collection only includes resources with matching property values.

Abstract test A.46

Identifier/conf/advanced-filtering/feature-by-geom
RequirementRequirement 41: /req/advanced-filtering/feature-by-geom
Test purpose

Validate that the geom query parameter is processed correctly.

Test method

For each of the systems, deployments and samplingFeatures canonical resources endpoints:

  1. Generate a geom parameter set to a WKT geometry conforming to the provided OpenAPI 3.0 schema.

  2. Issue an HTTP GET request at the resources endpoint URL with the geom parameter in the query string.

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

  4. Validate that the returned collection only includes resources with a geometry intersecting the provided geometry.

Abstract test A.47

Identifier/conf/advanced-filtering/system-by-parent
RequirementRequirement 42: /req/advanced-filtering/system-by-parent
Test purpose

Validate that the parent query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/systems?parent={idList} where {idList} is a list of one or more local IDs of System resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_system_resources-endpoint.

  3. For each System resource in the returned collection:

    1. Follow the parentSystem association to retrieve the parent system description.

    2. Verify that the system has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the parent parameter set to a list of one or more UIDs of System resources..

Abstract test A.48

Identifier/conf/advanced-filtering/system-by-procedure
RequirementRequirement 43: /req/advanced-filtering/system-by-procedure
Test purpose

Validate that the procedure query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/systems?procedure={idList} where {idList} is a list of one or more local IDs of Procedure resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_system_resources-endpoint.

  3. For each System resource in the returned collection:

    1. Follow the procedure association to retrieve the procedure description.

    2. Verify that the procedure has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the procedure parameter set to a list of one or more UIDs of Procedure resources.

Abstract test A.49

Identifier/conf/advanced-filtering/system-by-foi
RequirementRequirement 44: /req/advanced-filtering/system-by-foi
Test purpose

Validate that the foi query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/systems?foi={idList} where {idList} is a list of one or more local IDs of Feature resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_system_resources-endpoint.

  3. For each System resource in the returned collection:

    1. Retrieve the system’s sampling features by issuing an HTTP GET request at {systemCanonicalUrl}/samplingFeatures?recursive=true.

    2. For each Sampling Feature resource in the returned collection:

      1. Follow the sampleOf links to retrieve the target features, recursively. If a link does not resolve or the link media type is not supported by the testing engine, use the link target as the identifier of the feature.

    3. Verify that at least one of the collected features has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the foi parameter set to a list of one or more UIDs of Feature resources.

Abstract test A.50

Identifier/conf/advanced-filtering/system-by-obsprop
RequirementRequirement 45: /req/advanced-filtering/system-by-obsprop
Test purpose

Validate that the observedProperty query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/systems?observedProperty={idList} where {idList} is a list of one or more local IDs of Property resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_system_resources-endpoint.

  3. For each System resource in the returned collection:

    1. Retrieve all its nested subsystems by issuing an HTTP GET request at {systemCanonicalUrl}/components?recursive=true.

    2. Retrieve all observed properties referenced by the main system or one of its subsystems.

    3. Verify that at least one of the collected properties has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the observedProperty parameter set to a list of one or more URIs of Property resources.

Abstract test A.51

Identifier/conf/advanced-filtering/system-by-controlprop
RequirementRequirement 46: /req/advanced-filtering/system-by-controlprop
Test purpose

Validate that the controlledProperty query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/systems?controlledProperty={idList} where {idList} is a list of one or more local IDs of Property resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_system_resources-endpoint.

  3. For each System resource in the returned collection:

    1. Retrieve all its nested subsystems by issuing an HTTP GET request at {systemCanonicalUrl}/components?recursive=true.

    2. Retrieve all controlled properties referenced by the main system or one of its subsystems.

    3. Verify that at least one of the collected properties has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the controlledProperty parameter set to a list of one or more URIs of Property resources.

Abstract test A.52

Identifier/conf/advanced-filtering/deployment-by-parent
RequirementRequirement 47: /req/advanced-filtering/deployment-by-parent
Test purpose

Validate that the parent query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/deployments?parent={idList} where {idList} is a list of one or more local IDs of Deployment resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_deployment_resources-endpoint.

  3. For each Deployment resource in the returned collection:

    1. Follow the parentSystem association to retrieve the parent deployment description.

    2. Verify that the deployment has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the parent parameter set to a list of one or more UIDs of Deployment resources..

Abstract test A.53

Identifier/conf/advanced-filtering/deployment-by-system
RequirementRequirement 48: /req/advanced-filtering/deployment-by-system
Test purpose

Validate that the system query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/deployments?system={idList} where {idList} is a list of one or more local IDs of System resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_deployment_resources-endpoint.

  3. For each Deployment resource in the returned collection:

    1. Retrieve all deployed systems by issuing an HTTP GET request at {deploymentCanonicalUrl}/deployedSystems?recursive=true.

    2. Verify that at least one of the systems has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the foi parameter set to a list of one or more UIDs of System resources.

Abstract test A.54

Identifier/conf/advanced-filtering/deployment-by-foi
RequirementRequirement 49: /req/advanced-filtering/deployment-by-foi
Test purpose

Validate that the foi query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/deployments?foi={idList} where {idList} is a list of one or more local IDs of Feature resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_deployment_resources-endpoint.

  3. For each Deployment resource in the returned collection:

    1. Retrieve the deployment’s features of interest by issuing an HTTP GET request at {deploymentCanonicalUrl}/featuresOfInterest

    2. Verify that at least one of the features has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the foi parameter set to a list of one or more UIDs of Feature resources.

Abstract test A.55

Identifier/conf/advanced-filtering/deployment-by-obsprop
RequirementRequirement 50: /req/advanced-filtering/deployment-by-obsprop
Test purpose

Validate that the observedProperty query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/deployments?observedProperty={idList} where {idList} is a list of one or more local IDs of Property resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_deployment_resources-endpoint.

  3. For each Deployment resource in the returned collection:

    1. Retrieve all deployed systems by issuing an HTTP GET request at {deploymentCanonicalUrl}/deployedSystems?recursive=true.

    2. For each Deployed System resource in the returned collection:

      1. Retrieve the system description by following the system association link.

      2. Collect all observed properties referenced by the system description.

    3. Verify that at least one of the collected properties has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the observedProperty parameter set to a list of one or more URIs of Property resources.

Abstract test A.56

Identifier/conf/advanced-filtering/deployment-by-controlprop
RequirementRequirement 51: /req/advanced-filtering/deployment-by-controlprop
Test purpose

Validate that the controlledProperty query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/deployments?controlledProperty={idList} where {idList} is a list of one or more local IDs of Property resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_deployment_resources-endpoint.

  3. For each Deployment resource in the returned collection:

    1. Retrieve all deployed systems by issuing an HTTP GET request at {deploymentCanonicalUrl}/deployedSystems?recursive=true.

    2. For each Deployed System resource in the returned collection:

      1. Retrieve the system description by following the system association link.

      2. Collect all controlled properties referenced by the system description.

    3. Verify that at least one of the collected properties has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the controlledProperty parameter set to a list of one or more URIs of Property resources.

Abstract test A.57

Identifier/conf/advanced-filtering/procedure-by-obsprop
RequirementRequirement 52: /req/advanced-filtering/procedure-by-obsprop
Test purpose

Validate that the observedProperty query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/procedures?observedProperty={idList} where {idList} is a list of one or more local IDs of Property resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_procedure_resources-endpoint.

  3. For each Procedure resource in the returned collection:

    1. Retrieve all observed properties referenced by the procedure description.

    2. Verify that at least one of the collected properties has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the observedProperty parameter set to a list of one or more URIs of Property resources.

Abstract test A.58

Identifier/conf/advanced-filtering/procedure-by-controlprop
RequirementRequirement 53: /req/advanced-filtering/procedure-by-controlprop
Test purpose

Validate that the controlledProperty query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/procedures?controlledProperty={idList} where {idList} is a list of one or more local IDs of Property resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_procedure_resources-endpoint.

  3. For each Procedure resource in the returned collection:

    1. Retrieve all controlled properties referenced by the procedure description.

    2. Verify that at least one of the collected properties has one of the identifiers included in {idList}.

  4. Repeat the previous steps with the controlledProperty parameter set to a list of one or more URIs of Property resources.

Abstract test A.59

Identifier/conf/advanced-filtering/sf-by-foi
RequirementRequirement 54: /req/advanced-filtering/sf-by-foi
Test purpose

Validate that the foi query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/samplingFeatures?foi={idList} where {idList} is a list of one or more local IDs of Feature resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_sf_resources-endpoint.

  3. For each Sampling Feature resource in the returned collection:

    1. Follow the sampleOf links to collect the target features, recursively. If a link does not resolve or the link media type is not supported by the testing engine, use the link target as the identifier of the feature.

  4. Verify that at least one of the collected features has one of the identifiers included in {idList}.

  5. Repeat the previous steps with the foi parameter set to a list of one or more UIDs of Feature resources.

Abstract test A.60

Identifier/conf/advanced-filtering/sf-by-obsprop
RequirementRequirement 55: /req/advanced-filtering/sf-by-obsprop
Test purpose

Validate that the observedProperty query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/samplingFeatures?observedProperty={idList} where {idList} is a list of one or more local IDs of Property resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_sf_resources-endpoint.

  3. For each Sampling Feature resource in the returned collection:

    1. Follow the datastreams links to get the datastreams containing observations for this sampling feature.

    2. Verify that at least one of the datastreams has one or more of the observed properties included in {idList}.

  4. Repeat the previous steps with the observedProperty parameter set to a list of one or more URIs of Property resources.

Abstract test A.61

Identifier/conf/advanced-filtering/sf-by-controlprop
RequirementRequirement 56: /req/advanced-filtering/sf-by-controlprop
Test purpose

Validate that the controlledProperty query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/samplingFeatures?controlledProperty={idList} where {idList} is a list of one or more local IDs of Property resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_sf_resources-endpoint.

  3. For each Sampling Feature resource in the returned collection:

    1. Follow the controlstreams links to get the control streams with commands targeting this sampling feature.

    2. Verify that at least one of the control streams has one or more of the controlled properties included in {idList}.

  4. Repeat the previous steps with the controlledProperty parameter set to a list of one or more URIs of Property resources.

Abstract test A.62

Identifier/conf/advanced-filtering/prop-by-baseprop
RequirementRequirement 57: /req/advanced-filtering/prop-by-baseprop
Test purpose

Validate that the baseProperty query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/properties?baseProperty={idList} where {idList} is a list of one or more local IDs of Property resources.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_property_resources-endpoint.

  3. For each Property resource in the returned collection:

    1. Follow the baseProperty links to collect the base property, recursively. If a link does not resolve or the link media type is not supported by the testing engine, use the link target as the identifier of the property.

  4. Verify that at least one of the collected properties has one of the identifiers included in {idList}.

  5. Repeat the previous steps with the baseProperty parameter set to a list of one or more UIDs of Property resources.

Abstract test A.63

Identifier/conf/advanced-filtering/prop-by-object
RequirementRequirement 58: /req/advanced-filtering/prop-by-object
Test purpose

Validate that the objectType query parameter is processed correctly.

Test method
  1. Issue an HTTP GET request at URL {api_root}/properties?objectType={uriList} where {uriList} is a list of one or more URIs of feature/object types.
    See test _conf_advanced-filtering_id-list-schema

  2. Validate the response using the steps described in test _conf_property_resources-endpoint.

  3. Verify that each Property resource in the result set has its objectType property set to one of the URIs included in {uriList}.

Abstract test A.64

Identifier/conf/advanced-filtering/combined-filters
RequirementRequirement 59: /req/advanced-filtering/combined-filters
Test purpose

Validate that the server correctly implements a logical AND between query filters.

Test method

For each canonical resources endpoint:

  1. Issue HTTP GET requests at the resources endpoint URL with different combinations of query parameters that are available for this resource type.

  2. Verify that each resource in the result set passes the checks described in the test corresponding to each filter.

Abstract test A.65

Identifier/conf/advanced-filtering/indirect-prop
RequirementRecommendation 4: /rec/advanced-filtering/indirect-prop
Test purpose

Check if the server can follow baseProperty associations transitively.

Test method

For each Property resource available at the canonical resources endpoint:

  1. Retrieve the value of the id attribute. Store it as propId.

  2. Retrieve the value of the baseProperty attribute. Store it as basePropId.

  3. Verify that the server supports querying systems using transitive base properties:

    1. Issue an HTTP GET request at URL {api_root}/systems?observedProperty={propId}. Store the response as set 1.

    2. Issue an HTTP GET request at URL {api_root}/systems?observedProperty={basePropId}. Store the response as set 2.

    3. Check that set 2 contains all resources from set 1. Issue a warning if not.

  4. Verify that the server supports querying deployments using transitive base properties:

    1. Issue an HTTP GET request at URL {api_root}/deployments?observedProperty={propId}. Store the response as set 1.

    2. Issue an HTTP GET request at URL {api_root}/deployments?observedProperty={basePropId}. Store the response as set 2.

    3. Check that set 2 contains all resources from set 1. Issue a warning if not.

  5. Verify that the server supports querying procedures using transitive base properties:

    1. Issue an HTTP GET request at URL {api_root}/procedures?observedProperty={propId}. Store the response as set 1.

    2. Issue an HTTP GET request at URL {api_root}/procedures?observedProperty={basePropId}. Store the response as set 2.

    3. Check that set 2 contains all resources from set 1. Issue a warning if not.

  6. Verify that the server supports querying sampling features using transitive base properties:

    1. Issue an HTTP GET request at URL {api_root}/systems?observedProperty={propId}. Store the response as set 1.

    2. Issue an HTTP GET request at URL {api_root}/systems?observedProperty={basePropId}. Store the response as set 2.

    3. Check that set 2 contains all resources from set 1. Issue a warning if not.

  7. Verify that the server supports querying properties using transitive base properties:

    1. Issue an HTTP GET request at URL {api_root}/properties?baseProperty={propId}. Store the response as set 1.

    2. Issue an HTTP GET request at URL {api_root}/properties?baseProperty={basePropId}. Store the response as set 2.

    3. Check that set 2 contains all resources from set 1. Issue a warning if not.

Abstract test A.66

Identifier/conf/advanced-filtering/indirect-foi
RequirementRecommendation 5: /rec/advanced-filtering/indirect-foi
Test purpose

Check if the server can follow sampledFeature and sampleOf associations transitively.

Test method

For each SamplingFeature resource available at the canonical resources endpoint:

  1. Retrieve the value of the id attribute. Store it as sfId.

  2. Retrieve the feature referenced by the sampledFeature property. Retrieve the value of the feature id attribute and store it as ultimateFoiId.

  3. Retrieve one of the features referenced by the sampleOf association. Retrieve the value of the feature id attribute and store it as parentSfId.

  4. Verify that the server supports querying sampling features using transitive sampleOf associations:

    1. Issue an HTTP GET request at URL {api_root}/samplingFeatures?foi={parentSfId}. Store the response as set 1.

    2. Issue an HTTP GET request at URL {api_root}/samplingFeatures?foi={ultimateFoiId}. Store the response as set 2.

    3. Check that both resource sets contain the Sampling Feature with local ID sfId.

  5. Verify that the server supports querying systems using transitive sampled features:

    1. Issue an HTTP GET request at URL {api_root}/systems?foi={sfId}. Store the response as set 1.

    2. Issue an HTTP GET request at URL {api_root}/systems?foi={parentSfId}. Store the response as set 2.

    3. Issue an HTTP GET request at URL {api_root}/systems?foi={ultimateFoiId}. Store the response as set 3.

    4. Check that set 3 contains all resources from set 1. Issue a warning if not.

    5. Check that set 3 contains all resources from set 2. Issue a warning if not.

    6. Check that set 2 contains all resources from set 1. Issue a warning if not.

  6. Verify that the server supports querying deployments using transitive base properties:

    1. Issue an HTTP GET request at URL {api_root}/deployments?foi={sfId}. Store the response as set 1.

    2. Issue an HTTP GET request at URL {api_root}/deployments?foi={parentSfId}. Store the response as set 2.

    3. Issue an HTTP GET request at URL {api_root}/deployments?foi={ultimateFoiId}. Store the response as set 3.

    4. Check that set 3 contains all resources from set 1. Issue a warning if not.

    5. Check that set 3 contains all resources from set 2. Issue a warning if not.

    6. Check that set 2 contains all resources from set 1. Issue a warning if not.

A.11.  Conformance Class “Create/Replace/Delete”

Conformance class A.10

Identifier/conf/create-replace-delete
Requirements classRequirements class 10: /req/create-replace-delete
PrerequisitesConformance class A.1: /conf/api-common
http://www.opengis.net/spec/ogcapi-4/1.0/conf/create-replace-delete
Target TypeWeb API
Conformance testsAbstract test A.67: /conf/create-replace-delete/system
Abstract test A.68: /conf/create-replace-delete/system-delete-cascade
Abstract test A.69: /conf/create-replace-delete/subsystem
Abstract test A.70: /conf/create-replace-delete/deployment
Abstract test A.71: /conf/create-replace-delete/subdeployment
Abstract test A.72: /conf/create-replace-delete/procedure
Abstract test A.73: /conf/create-replace-delete/sampling-feature
Abstract test A.74: /conf/create-replace-delete/property
Abstract test A.75: /conf/create-replace-delete/create-in-collection
Abstract test A.76: /conf/create-replace-delete/replace-in-collection
Abstract test A.77: /conf/create-replace-delete/delete-in-collection
Abstract test A.78: /conf/create-replace-delete/add-to-collection

Abstract test A.67

Identifier/conf/create-replace-delete/system
RequirementRequirement 60: /req/create-replace-delete/system
Test purpose

Validate that the server implements CREATE/REPLACE/DELETE operations correctly on System collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/create-replace-delete at the following endpoints:

    1. At resources endpoint {api_root}/systems (for CREATE)

    2. At resource endpoint {api_root}/systems/{id} (for REPLACE and DELETE)

Abstract test A.68

Identifier/conf/create-replace-delete/system-delete-cascade
RequirementRequirement 61: /req/create-replace-delete/system-delete-cascade
Test purpose

Validate that the server implements the cascade query parameter correctly.

Test method
  1. Given a System resource with ID sysId that has sub-resources:

    1. Issue an HTTP DELETE request at URL {api_root}/systems/{sysId}?cascade=false.

    2. Verify that the server responds with an error code 409.

    3. Issue an HTTP DELETE request at URL {api_root}/systems/{sysId}?cascade=true.

    4. Verify that the system and all its sub-resources have been deleted.

  2. Given a System resource with ID sysId that is referenced by a Deployment with ID deploymentId which has links to multiple other systems:

    1. Issue an HTTP DELETE request at URL {api_root}/systems/{sysId}?cascade=false.

    2. Verify that the server responds with an error code 409.

    3. Issue an HTTP DELETE request at URL {api_root}/systems/{sysId}?cascade=true.

    4. Verify that the deployment with ID deploymentId is still present

    5. Verify that the deployment with ID deploymentId does not reference the system with ID sysId anymore

    6. Verify that the system with ID sysId is deleted

Abstract test A.69

Identifier/conf/create-replace-delete/subsystem
RequirementRequirement 62: /req/create-replace-delete/subsystem
Test purpose

Validate that the server implements the CREATE operation correctly on subsystem collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/create-replace-delete at the following endpoints:

    1. For each subsystem collection nested in a parent system:

      • Resources endpoint {api_root}/systems/{sysId}/subsystems (for CREATE)

  2. Verify that the subsystem is also available at its canonical URL:

    1. Issue an HTTP GET request at the system canonical URL.

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

    3. Validate that the received document has the same content as the one provided for the CREATE operation.

Abstract test A.70

Identifier/conf/create-replace-delete/deployment
RequirementRequirement 63: /req/create-replace-delete/deployment
Test purpose

Validate that the server implements CREATE/REPLACE/DELETE operations correctly on Deployment collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/create-replace-delete at the following endpoints:

    1. At resources endpoint {api_root}/deployments (for CREATE)

    2. At resource endpoint {api_root}/deployments/{id} (for REPLACE and DELETE)

Abstract test A.71

Identifier/conf/create-replace-delete/subdeployment
RequirementRequirement 64: /req/create-replace-delete/subdeployment
Test purpose

Validate that the server implements the CREATE operation correctly on subdeployment collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/create-replace-delete at the following endpoints:

    1. For each subdeployment collection nested in a parent deployment:

      • Resources endpoint {api_root}/deployments/{depId}/subdeployments (for CREATE)

  2. Verify that the subdeployment is also available at its canonical URL:

    1. Issue an HTTP GET request at the system canonical URL.

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

    3. Validate that the received document has the same content as the one provided for the CREATE operation.

Abstract test A.72

Identifier/conf/create-replace-delete/procedure
RequirementRequirement 65: /req/create-replace-delete/procedure
Test purpose

Validate that the server implements CREATE/REPLACE/DELETE operations correctly on Procedure collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/create-replace-delete at the following endpoints:

    1. At resources endpoint {api_root}/procedures (for CREATE)

    2. At resource endpoint {api_root}/procedures/{id} (for REPLACE and DELETE)

Abstract test A.73

Identifier/conf/create-replace-delete/sampling-feature
RequirementRequirement 66: /req/create-replace-delete/sampling-feature
Test purpose

Validate that the server implements CREATE/REPLACE/DELETE operations correctly on Sampling Feature collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/create-replace-delete at the following endpoints:

    1. At resources endpoint {api_root}/systems/{sysId}/samplingFeatures (for CREATE)

    2. At resource endpoint {api_root}/samplingFeatures/{id} (for REPLACE and DELETE)

Abstract test A.74

Identifier/conf/create-replace-delete/property
RequirementRequirement 67: /req/create-replace-delete/property
Test purpose

Validate that the server implements CREATE/REPLACE/DELETE operations correctly on Property collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/create-replace-delete at the following endpoints:

    1. At resources endpoint {api_root}/properties (for CREATE)

    2. At resource endpoint {api_root}/properties/{id} (for REPLACE and DELETE)

Abstract test A.75

Identifier/conf/create-replace-delete/create-in-collection
RequirementRequirement 68: /req/create-replace-delete/create-in-collection
Test purpose

Validate that the server implements the correct behavior when creating new resources in custom collections.

Test method

For each resource type among System, Procedure, Deployment, Sampling Feature, Property:

  1. Find a resource collection for a resource of that type. Assume its ID is colId.

  2. Add a new resource at the resources endpoint {api_root}/collections/{colId}/items by following requirements for the CREATE operation (see tests http://www.opengis.net/spec/ogcapi-features-4/1.0/create-replace-delete/conf/post*).

  3. Retrieve the canonical URL of the resource that must be included in the response.

  4. Verify that the new resource exists at the canonical resources endpoint:

    1. Issue an HTTP GET request at the resource’s canonical URL.

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

    3. Validate that the received document has the same content as the one provided in the POST request.

Abstract test A.76

Identifier/conf/create-replace-delete/replace-in-collection
RequirementRequirement 69: /req/create-replace-delete/replace-in-collection
Test purpose

Validate that the server implements the correct behavior when replacing resources in custom collections.

Test method

For each resource type among System, Procedure, Deployment, Sampling Feature, Property:

  1. Find a resource collection for a resource of that type. Assume its ID is colId.

  2. Replace the resource at the resource endpoint {api_root}/collections/{colId}/items/{id} by following requirements for the REPLACE operation (see tests http://www.opengis.net/spec/ogcapi-features-4/1.0/create-replace-delete/conf/put*).

  3. Verify that the resource has been updated at its canonical location:

    1. Issue an HTTP GET request at the resource’s canonical URL.

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

    3. Validate that the received document has the same content as the one provided in the PUT request.

Abstract test A.77

Identifier/conf/create-replace-delete/delete-in-collection
RequirementRequirement 70: /req/create-replace-delete/delete-in-collection
Test purpose

Validate that the server implements the correct behavior when deleting resources in custom collections.

Test method

For each resource type among System, Procedure, Deployment, Sampling Feature, Property:

  1. Find a resource collection for a resource of that type. Assume its ID is colId.

  2. Delete the resource at the resource endpoint {api_root}/collections/{colId}/items/{id} by following requirements for the DELETE operation (see tests http://www.opengis.net/spec/ogcapi-features-4/1.0/create-replace-delete/conf/delete*).

  3. Verify that the resource is still available at its canonical location:

    1. Issue an HTTP GET request at the resource’s canonical URL.

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

Abstract test A.78

Identifier/conf/create-replace-delete/add-to-collection
RequirementRequirement 71: /req/create-replace-delete/add-to-collection
Test purpose

Validate that the server implements the correct behavior when adding existing resources to custom collections.

Test method

For each resource type among System, Procedure, Deployment, Sampling Feature, Property:

  1. Find a resource collection for a resource of that type. Assume its ID is colId.

  2. Add links to existing resources by issuing a POST request at the resources endpoint {api_root}/collections/{colId}/items.

    1. Follow requirements for the CREATE operation (see tests http://www.opengis.net/spec/ogcapi-features-4/1.0/create-replace-delete/conf/post*).

    2. Set the POST request Content-Type header to text/uri-list.

    3. Set the POST request body to a list of canonical URLs of existing resources on the same server, and of a type compatible with the selected resource collection.

  3. Verify that the resources have been added to the custom collection:

    1. For each added resource, extract its id from the canonical URL.

      1. Issue an HTTP GET request at the resource endpoint {api_root}/collections/{colId}/items/{id}.

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

      3. Validate that the received document has the same content as the one received when connecting at the canonical URL.

A.12.  Conformance Class “Update”

Conformance class A.11

Identifier/conf/update
Requirements classRequirements class 11: /req/update
PrerequisitesConformance class A.1: /conf/api-common
http://www.opengis.net/spec/ogcapi-4/1.0/conf/update
Target TypeWeb API
Conformance testsAbstract test A.79: /conf/update/system
Abstract test A.80: /conf/update/deployment
Abstract test A.81: /conf/update/procedure
Abstract test A.82: /conf/update/sampling-feature
Abstract test A.83: /conf/update/property

Abstract test A.79

Identifier/conf/update/system
RequirementRequirement 72: /req/update/system
Test purpose

Validate that the server implements the UPDATE operation correctly on System collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/update at the following endpoints:

    1. For the System canonical resources endpoint:

      • Resource endpoint {api_root}/systems/{id}

    2. For each System Feature Collection advertised by the server:

      • Resource endpoint {api_root}/collections/{systemCollectionId}/items/{id}

Abstract test A.80

Identifier/conf/update/deployment
RequirementRequirement 73: /req/update/deployment
Test purpose

Validate that the server implements the UPDATE operation correctly on Deployment collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/update at the following endpoints:

    1. For the Deployment canonical resources endpoint:

      • Resource endpoint {api_root}/deployments/{id}

    2. For each Deployment Feature Collection advertised by the server:

      • Resource endpoint {api_root}/collections/{deploymentCollectionId}/items/{id}

Abstract test A.81

Identifier/conf/update/procedure
RequirementRequirement 74: /req/update/procedure
Test purpose

Validate that the server implements the UPDATE operation correctly on Procedure collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/update at the following endpoints:

    1. For the Procedure canonical resources endpoint:

      • Resource endpoint {api_root}/procedures/{id}

    2. For each Procedure Feature Collection advertised by the server:

      • Resource endpoint {api_root}/collections/{procedureCollectionId}/items/{id}

Abstract test A.82

Identifier/conf/update/sampling-feature
RequirementRequirement 75: /req/update/sampling-feature
Test purpose

Validate that the server implements the UPDATE operation correctly on Sampling Feature collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/update at the following endpoints:

    1. For the Sampling Feature canonical resources endpoint:

      • Resource endpoint {api_root}/samplingFeatures/{id}

    2. For each Sampling Feature Collection advertised by the server:

      • Resource endpoint {api_root}/collections/{sfCollectionId}/items/{id}

Abstract test A.83

Identifier/conf/update/property
RequirementRequirement 76: /req/update/property
Test purpose

Validate that the server implements the UPDATE operation correctly on Property collections.

Test method
  1. Execute all tests from conformance class http://www.opengis.net/spec/ogcapi-features-4/1.0/conf/update at the following endpoints:

    1. For the Property canonical resources endpoint:

      • Resource endpoint {api_root}/properties/{id}

    2. For each Property Resource Collection advertised by the server:

      • Resource endpoint {api_root}/collections/{sfCollectionId}/items/{id}

A.13.  Conformance Class “GeoJSON”

Conformance class A.12

Identifier/conf/geojson
Requirements classRequirements class 12: /req/geojson
PrerequisitesConformance class A.1: /conf/api-common
http://www.opengis.net/spec/ogcapi-1/1.0/conf/geojson
Target TypeWeb API
Conformance testsAbstract test A.84: /conf/geojson/mediatype-read
Abstract test A.85: /conf/geojson/mediatype-write
Abstract test A.86: /conf/geojson/relation-types
Abstract test A.87: /conf/geojson/feature-attribute-mapping
Abstract test A.88: /conf/geojson/system-schema
Abstract test A.89: /conf/geojson/system-mappings
Abstract test A.90: /conf/geojson/deployment-schema
Abstract test A.91: /conf/geojson/deployment-mappings
Abstract test A.92: /conf/geojson/procedure-schema
Abstract test A.93: /conf/geojson/procedure-mappings
Abstract test A.94: /conf/geojson/sf-schema
Abstract test A.95: /conf/geojson/sf-mappings

Abstract test A.84

Identifier/conf/geojson/mediatype-read
RequirementRequirement 77: /req/geojson/mediatype-read
Test purpose

Verify that the server advertises support for the GeoJSON format on retrieval operations.

Test method
  1. Execute test http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson/definition.

  2. Verify that server advertises support for media type application/geo+json in the API definition for GET operations:

    1. On the canonical resources endpoints of resource types supported by the server.

    2. On the custom collection endpoints advertised by the server.

Abstract test A.85

Identifier/conf/geojson/mediatype-write
RequirementRequirement 78: /req/geojson/mediatype-write
Test purpose

Verify that the server advertises support for the GeoJSON format on transactional operations.

Test method
  1. Verify that server advertises support for media type application/geo+json in the API definition for CREATE or REPLACE operations, for at least one canonical resources endpoint.

Abstract test A.86

Identifier/conf/geojson/relation-types
RequirementRequirement 79: /req/geojson/relation-types
Test purpose

Verify that correct link relation types are used.

Test-method-type

Manual Inspection

Test method

Given the GeoJSON representation of a resource returned by the server:

  1. Inspect the links in the links property of the response document.

  2. Check that the relation types are used as described in the associations mapping table of Clause 19.1 corresponding to the resource type.

Abstract test A.87

Identifier/conf/geojson/feature-attribute-mapping
RequirementRequirement 80: /req/geojson/feature-attribute-mapping
Test purpose

Verify that common feature properties are used correctly.

Test-method-type

Manual Inspection

Test method

Given the GeoJSON representation of a feature resource returned by the server:

  1. Inspect the contents of the GeoJSON Feature object.

  2. Check that the properties are used as described in the mapping table Table 39.

Abstract test A.88

Identifier/conf/geojson/system-schema
RequirementRequirement 81: /req/geojson/system-schema
Test purpose

Validate that the GeoJSON representation of System resources is valid.

Test method
  1. Request a single System resource.

    1. Issue an HTTP GET request at {api_root}/systems/{id} with the Accept header set to application/geo+json.

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

    3. Validate the document against the schema system.json using a JSON Schema validator.

  2. Request multiple System resources.

    1. Issue an HTTP GET request at {api_root}/systems with the Accept header set to application/geo+json.

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

    3. Validate the document against the schema systemCollection.json using a JSON Schema validator.

Abstract test A.89

Identifier/conf/geojson/system-mappings
RequirementRequirement 82: /req/geojson/system-mappings
Test purpose

Verify that System properties are used correctly.

Test-method-type

Manual Inspection

Test method

Given the GeoJSON representation of a System resource returned by the server:

  1. Inspect the contents of the GeoJSON Feature object.

  2. Check that the properties are used as described in Table 40 and Table 41.

Abstract test A.90

Identifier/conf/geojson/deployment-schema
RequirementRequirement 83: /req/geojson/deployment-schema
Test purpose

Validate that the GeoJSON representation of Deployment resources is valid.

Test method
  1. Request a single Deployment resource.

    1. Issue an HTTP GET request at {api_root}/deployments/{id} with the Accept header set to application/geo+json.

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

    3. Validate the document against the schema deployment.json using a JSON Schema validator.

  2. Request multiple Deployment resources.

    1. Issue an HTTP GET request at {api_root}/deployments with the Accept header set to application/geo+json.

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

    3. Validate the document against the schema deploymentCollection.json using a JSON Schema validator.

Abstract test A.91

Identifier/conf/geojson/deployment-mappings
RequirementRequirement 84: /req/geojson/deployment-mappings
Test purpose

Verify that Deployment properties are used correctly.

Test-method-type

Manual Inspection

Test method

Given the GeoJSON representation of a Deployment resource returned by the server:

  1. Inspect the contents of the GeoJSON Feature object.

  2. Check that the properties are used as described in Table 42 and Table 43.

Abstract test A.92

Identifier/conf/geojson/procedure-schema
RequirementRequirement 85: /req/geojson/procedure-schema
Test purpose

Validate that the GeoJSON representation of Procedure resources is valid.

Test method
  1. Request a single Procedure resource.

    1. Issue an HTTP GET request at {api_root}/procedures/{id} with the Accept header set to application/geo+json.

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

    3. Validate the document against the schema procedure.json using a JSON Schema validator.

  2. Request multiple Procedure resources.

    1. Issue an HTTP GET request at {api_root}/procedures with the Accept header set to application/geo+json.

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

    3. Validate the document against the schema procedureCollection.json using a JSON Schema validator.

Abstract test A.93

Identifier/conf/geojson/procedure-mappings
RequirementRequirement 86: /req/geojson/procedure-mappings
Test purpose

Verify that Procedure properties are used correctly.

Test-method-type

Manual Inspection

Test method

Given the GeoJSON representation of a Procedure resource returned by the server:

  1. Inspect the contents of the GeoJSON Feature object.

  2. Check that the properties are used as described in Table 44 and Table 45.

Abstract test A.94

Identifier/conf/geojson/sf-schema
RequirementRequirement 87: /req/geojson/sf-schema
Test purpose

Validate that the GeoJSON representation of Sampling Feature resources is valid.

Test method
  1. Request a single Sampling Feature resource.

    1. Issue an HTTP GET request at {api_root}/samplingFeatures/{id} with the Accept header set to application/geo+json.

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

    3. Validate the document against the schema samplingFeature.json using a JSON Schema validator.

  2. Request multiple Sampling Feature resources.

    1. Issue an HTTP GET request at {api_root}/samplingFeatures with the Accept header set to application/geo+json.

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

    3. Validate the document against the schema samplingFeatureCollection.json using a JSON Schema validator.

Abstract test A.95

Identifier/conf/geojson/sf-mappings
RequirementRequirement 88: /req/geojson/sf-mappings
Test purpose

Verify that Sampling Feature properties are used correctly.

Test-method-type

Manual Inspection

Test method

Given the GeoJSON representation of a Sampling Feature resource returned by the server:

  1. Inspect the contents of the GeoJSON Feature object.

  2. Check that the properties are used as described in Table 46 and Table 47.

A.14.  Conformance Class “SensorML”

Conformance class A.13

Identifier/conf/sensorml
Requirements classRequirements class 13: /req/sensorml
PrerequisiteConformance class A.1: /conf/api-common
Indirect prerequisitehttp://www.opengis.net/spec/sensorml/2.1/conf/json
Target TypeWeb API
Conformance testsAbstract test A.96: /conf/sensorml/mediatype-read
Abstract test A.97: /conf/sensorml/mediatype-write
Abstract test A.98: /conf/sensorml/relation-types
Abstract test A.99: /conf/sensorml/resource-id
Abstract test A.100: /conf/sensorml/feature-attribute-mapping
Abstract test A.101: /conf/sensorml/system-schema
Abstract test A.102: /conf/sensorml/system-sml-class
Abstract test A.103: /conf/sensorml/system-mappings
Abstract test A.104: /conf/sensorml/deployment-schema
Abstract test A.105: /conf/sensorml/deployment-mappings
Abstract test A.106: /conf/sensorml/procedure-schema
Abstract test A.107: /conf/sensorml/procedure-sml-class
Abstract test A.108: /conf/sensorml/procedure-mappings
Abstract test A.109: /conf/sensorml/property-schema
Abstract test A.110: /conf/sensorml/property-mappings

Abstract test A.96

Identifier/conf/sensorml/mediatype-read
RequirementRequirement 89: /req/sensorml/mediatype-read
Test purpose

Verify that the server advertises support for the SensorML format on retrieval operations.

Test method
  1. Verify that server advertises support for media type application/sml+json in the API definition for GET operations:

    1. On the canonical resources endpoints of resource types supported by the server.

    2. On the custom collection endpoints advertised by the server.

Abstract test A.97

Identifier/conf/sensorml/mediatype-write
RequirementRequirement 90: /req/sensorml/mediatype-write
Test purpose

Verify that the server advertises support for the SensorML format on transactional operations.

  1. Verify that server advertises support for media type application/sml+json in the API definition for CREATE or REPLACE operations, for at least one canonical resources endpoint.

Abstract test A.98

Identifier/conf/sensorml/relation-types
RequirementRequirement 91: /req/sensorml/relation-types
Test purpose

Verify that correct link relation types are used.

Test-method-type

Manual Inspection

Test method

Given the SensorML representation of a resource returned by the server:

  1. Inspect the links in the links property of the response document.

  2. Check that the relation types are used as described in the associations mapping table of Clause 19.2 corresponding to the resource type.

Abstract test A.99

Identifier/conf/sensorml/resource-id
RequirementRequirement 92: /req/sensorml/resource-id
Test purpose

Verify that the resource ID is set properly in the response.

Test method

Given the SensorML representation of a resource obtained from its canonical URL:

  1. Inspect the contents of the SensorML object.

  2. Verify that the id property is set to the same value as the {id} portion of the canonical resource URL.

Abstract test A.100

Identifier/conf/sensorml/feature-attribute-mapping
RequirementRequirement 93: /req/sensorml/feature-attribute-mapping
Test purpose

Verify that common feature properties are used correctly.

Test-method-type

Manual Inspection

Test method

Given the SensorML representation of a resource returned by the server:

  1. Inspect the contents of the SensorML object.

  2. Check that the properties are used as described in the mapping table Table 48.

Abstract test A.101

Identifier/conf/sensorml/system-schema
RequirementRequirement 94: /req/sensorml/system-schema
Test purpose

Validate that the SensorML representation of System resources is valid.

Test method
  1. Request a single System resource.

    1. Issue an HTTP GET request at {api_root}/systems/{id} with the Accept header set to application/sml+json.

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

    3. Validate the document against the schema system.json using a JSON Schema validator.

  2. Request multiple System resources.

    1. Issue an HTTP GET request at {api_root}/systems with the Accept header set to application/sml+json.

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

    3. Validate the document against the schema systemCollection.json using a JSON Schema validator.

Abstract test A.102

Identifier/conf/sensorml/system-sml-class
RequirementRequirement 95: /req/sensorml/system-sml-class
Test purpose

Verify that System SensorML types are used correctly.

Test-method-type

Manual Inspection

Test method

Given the SensorML representation of a System resource returned by the server:

  1. Inspect the contents of the SensorML object.

  2. Check that the value of the type property is compatible with the system being described (i.e., process/simulation vs. physical thing).

Abstract test A.103

Identifier/conf/sensorml/system-mappings
RequirementRequirement 96: /req/sensorml/system-mappings
Test purpose

Verify that System properties are used correctly.

Test-method-type

Manual Inspection

Test method

Given the SensorML representation of a System resource returned by the server:

  1. Inspect the contents of the SensorML object.

  2. Check that the properties are used as described in Table 49 and Table 50.

Abstract test A.104

Identifier/conf/sensorml/deployment-schema
RequirementRequirement 97: /req/sensorml/deployment-schema
Test purpose

Validate that the SensorML representation of Deployment resources is valid.

Test method
  1. Request a single Deployment resource.

    1. Issue an HTTP GET request at {api_root}/deployments/{id} with the Accept header set to application/sml+json.

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

    3. Validate the document against the schema deployment.json using a JSON Schema validator.

  2. Request multiple Deployment resources.

    1. Issue an HTTP GET request at {api_root}/deployments with the Accept header set to application/sml+json.

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

    3. Validate the document against the schema deploymentCollection.json using a JSON Schema validator.

Abstract test A.105

Identifier/conf/sensorml/deployment-mappings
RequirementRequirement 98: /req/sensorml/deployment-mappings
Test purpose

Verify that Deployment properties are used correctly.

Test-method-type

Manual Inspection

Test method

Given the SensorML representation of a Deployment resource returned by the server:

  1. Inspect the contents of the SensorML object.

  2. Check that the properties are used as described in Table 51 and Table 52.

Abstract test A.106

Identifier/conf/sensorml/procedure-schema
RequirementRequirement 99: /req/sensorml/procedure-schema
Test purpose

Validate that the SensorML representation of Procedure resources is valid.

Test method
  1. Request a single Procedure resource.

    1. Issue an HTTP GET request at {api_root}/procedures/{id} with the Accept header set to application/sml+json.

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

    3. Validate the document against the schema procedure.json using a JSON Schema validator.

  2. Request multiple Procedure resources.

    1. Issue an HTTP GET request at {api_root}/procedures with the Accept header set to application/sml+json.

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

    3. Validate the document against the schema procedureCollection.json using a JSON Schema validator.

Abstract test A.107

Identifier/conf/sensorml/procedure-sml-class
RequirementRequirement 100: /req/sensorml/procedure-sml-class
Test purpose

Verify that Procedure SensorML types are used correctly.

Test-method-type

Manual Inspection

Test method

Given the SensorML representation of a Procedure resource returned by the server:

  1. Inspect the contents of the SensorML object.

  2. Check that the value of the type property is compatible with the procedure being described (i.e., process/simulation/methodology vs. datasheet of hardware equipment).

Abstract test A.108

Identifier/conf/sensorml/procedure-mappings
RequirementRequirement 101: /req/sensorml/procedure-mappings
Test purpose

Verify that Procedure properties are used correctly.

Test-method-type

Manual Inspection

Test method

Given the SensorML representation of a Procedure resource returned by the server:

  1. Inspect the contents of the SensorML object.

  2. Check that the properties are used as described in Table 53 and Table 54.

Abstract test A.109

Identifier/conf/sensorml/property-schema
RequirementRequirement 102: /req/sensorml/property-schema
Test purpose

Validate that the SensorML representation of Property resources is valid.

Test method
  1. Request a single Property resource.

    1. Issue an HTTP GET request at {api_root}/properties/{id} with the Accept header set to application/sml+json.

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

    3. Validate the document against the schema property.json using a JSON Schema validator.

  2. Request multiple Property resources.

    1. Issue an HTTP GET request at {api_root}/properties with the Accept header set to application/sml+json.

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

    3. Validate the document against the schema propertyCollection.json using a JSON Schema validator.

Abstract test A.110

Identifier/conf/sensorml/property-mappings
RequirementRequirement 103: /req/sensorml/property-mappings
Test purpose

Verify that Property properties are used correctly.

Test-method-type

Manual Inspection

Test method

Given the SensorML representation of a Property resource returned by the server:

  1. Inspect the contents of the SensorML object.

  2. Check that the properties are used as described in Table 55.


Annex B
(informative)
Examples

More JSON examples are available in the project’s GitHub repository at:

https://schemas.opengis.net/ogcapi/connected-systems/part1/1.0/openapi/examples


Annex C
(informative)
Relationship with other OGC/ISO standards (Informative)

C.1.  W3C Semantic Sensor Network Ontology

The W3C Semantic Sensor Network Ontology (SOSA/SSN) Recommendation provides the semantic model from which the resource model of the OGC API — Connected Systems Standard (CS API) is derived.

The CS API does not use any SOSA/SSN serialization (e.g., RDF, Turtle, etc.) directly as a resource representation format. Instead, GeoJSON, SensorML-JSON or in some cases plain JSON and even binary representations are used, with references to SOSA/SSN concepts (by URI or CURIE) whenever appropriate (e.g., System Types, Procedure Types, etc.).

Divergence from the SOSA/SSN Patterns

The CS API resource model diverges from currently used SOSA/SSN patterns in the following ways.

  1. In the CS API, all systems can have both datastreams and controlstreams, even though they are tagged with only one type (i.e.sosa:Sensor, sosa:Actuator, sosa:Sampler or sosa:Platform). Semantic tagging is only used to provide the main role of the system or subsystem without limiting other API functionality. This design simplifies the description of sensors that can also accept commands (e.g., even simple sensors often have commands to change the sampling rate or the sensitivity), or actuators that output data (e.g., most actuators provide some kind of state information). The same effect can be achieved when using the SOSA/SSN ontology by creating RDF resources that have several parent classes such as:
    <Motor1> a sosa:System, sosa:Sensor, sosa:Actuator ; …​
    <UAV1> a sosa:System, sosa:Platform ; …​

  2. In the CS API, an observation can be associated to more than one observed property, and a command to more than one controlled property, while SOSA/SSN has a cardinality of one on these associations. This also means that observations are not limited to scalar results, and commands are not limited to scalar parameters. Discussions in the SOSA/SSN working group have shown that such vectorization of observed properties and corresponding observation results is an accepted practice and will be clearly documented in the next revision of the SOSA/SSN standard.

  3. We use the concepts of ObservationCollection and ActuationCollection (in the form of DataStream and ControlStream respectively) to factor out many properties that are common to observations/actuations associated to the same sensor/actuator. Note that such collections are not part of the current version of SOSA/SSN at the time of writing but will be incorporated in the next revision.

These patterns are used in the CS API to reduce the number (and sometimes the size) of resources that one needs to create and maintain in order to fully describe complex systems and their data feeds. Where a few resources are necessary using the CS API, the SOSA/SSN model would require many more small resources to achieve the same functionality, which leads to complexity for API consumers.

Rather than imposing a very verbose schema, these changes give more flexibility for choosing the appropriate level of granularity used when describing hierarchical systems, while still allowing the API implementation to exchange all required dynamic data feeds. Granularity can range from creating a different sensor or actuator for every single scalar property observed or acted on, all the way to a single resource that is used to represent an entire complex system as a “black box”.

C.2.  OGC Sensor Modeling Language (SensorML) Standard

OGC Sensor Model Language (SensorML) is one of the foundational building blocks of the OGC API — Connected Systems Standard (CS API).

Many of the foundational ideas for the CS API Standard are inherited from SensorML, although original models have been converted to a resource oriented approach and aligned with SOSA/SSN in the process of creating the API.

The CS API Standard specifies how to use SensorML JSON encodings as a resource encoding format, but the XML version of SensorML can also be used as a response format by the API server.

Currently, SensorML is the only encoding format supporting the provision of detailed specsheets for systems, procedures, and deployments.

C.3.  OGC/ISO Observations, Measurements and Samples (OMS) Standard

The Observations, Measurements and Samples (OMS) Standard is one of the foundational building blocks of the OGC API — Connected Systems Standard, through the use of the Semantic Sensor Network Ontology (SOSA/SSN). Indeed, SOSA/SSN was originally based on a previous version of OMS, Observations and Measurements (O&M), so many concepts from OMS are naturally carried over to the CS API Standard.

The following table indicates which classes of OMS Conceptual Observation Schema and Conceptual Sample Schema are implemented by OGC API — Connected Systems (CS API):

OMS ClassO&M ClassCS API ResourceComments
ObservationOM_ObservationObservation
ObservablePropertyGFI_PropertyTypeProperty
ProcedureOM_ProcessProcedure (type=sosa:Procedure)
ObservingProcedureOM_ProcessProcedure (type=sosa-oms:ObservingProcedure)
ObserverOM_ProcessSystem (type=sosa:Sensor)
Host-System (type=sosa:Platform)
Deployment-Deployment
SampleSF_SamplingFeatureSamplingFeature
SamplingProcedure-Procedure (type=sosa-oms:SamplingProcedure)
Sampler-System (type=sosa:Sampler)

C.4.  IETF GeoJSON

GeoJSON is one of the main encoding formats specified in the OGC API — Connected Systems Standard. A GeoJSON profile for each feature type is provided in Clause 19.1, with complete JSON schemas and mappings to the abstract resource model.

Since SensorML is available for cases where detailed information about systems, procedures and deployments is needed (e.g., contact information, detailed system datasheets, etc.), the GeoJSON profile is intentionally kept simple and is intended to be used as a summary representation.

Although not mandated by the Standard, a typical workflow would be to retrieve collections of feature descriptions (e.g., as the result of search) by requesting the GeoJSON representation first, since the GeoJSON encoding leads to much smaller documents than the SensorML-JSON encoding. Then, after reviewing the summary descriptions provided as GeoJSON, the full SensorML description could be fetched (typically only for some of the features of the collection).

C.5.  OGC Features and Geometries JSON (JSON-FG)

Similarly to GeoJSON, a profile of JSON-FG could be defined to provide an alternative representation of feature types defined in the CS API Standard. The JSON-FG requirements class has been left out of Part 1 but will be considered at a later stage once more implementation experience has been collected.

C.6.  OGC API — Features Standard

The OGC API — Connected Systems Standard is an extension of the OGC API — Features Standard, and thus inherits all requirements from OGC API — Features — Part 1: Core. In addition, requirements from OGC API — Features — Part 4: Create, Replace, Update and Delete are inherited by Requirements Class “Create/Replace/Delete” and Requirements Class “Update”. Requirements from OGC API — Features — Part 2: Coordinate Reference Systems by Reference also apply if coordinate reference systems other than CRS:84 or CRS:84h are to be used.

Additionally, some resources defined by the CS API Standard are designed to link to feature resources hosted by other servers (e.g., domain features) that act as features of interest of observations (e.g., rivers, roads, buildings, etc.). Such domain features can typically be hosted by separate implementation instances of OGC API — Features. This linking capability allows OGC API — Connected Systems implementation instances to refer to existing feature repositories such as land registers, building databases, transportation networks, hydrographic networks, oceanic features, etc, without duplicating the data.

C.7.  OGC API — Moving Features Standard

The OGC API — Moving Features Standard defines an alternative way to provide dynamic feature property data, but is more limited in scope. The key difference between OGC API — Moving Features and OGC API — Connected Systems is that the former does not implement the O&M or SSN models, and thus does not support the provision of metadata about the observation process, nor does it support tasking capabilities.

If needed, both APIs can be implemented at the same endpoint (since both extend OGC API — Features) to provide two complementary viewpoints of the same underlying dynamic data.

C.8.  OGC API — Environmental Data Retrieval (EDR) Standard

The OGC API — Environmental Data Retrieval (EDR) Standard can also be used to retrieve observation data. EDR is especially suited for extracting data from large multi-dimensional coverages and can be used jointly with the OGC API — Connected Systems Standard.

Weblinks can be used to associate resources exposed by OGC API — EDR and OGC API — Connected Systems (CS API). Such links can be used to implement the following client functionality.

  • An EDR API client can retrieve more information about the observing system that produced the data (i.e., the data in an EDR collection or instance) from the CS API.

  • Conversely, a Connected Systems API client can be redirected to an EDR accessible collection or instance in order to benefit from the advanced query operators defined in the EDR Standard (e.g., radius, cube, trajectory, corridor, etc.), and thus extract data from large coverage results more efficiently.

To this effect, the following weblinks can be added to OGC API — EDR resources to refer to OGC API — Connected Systems (CS API) resources:

EDR ResourceTarget CS API ResourcesComments
Collection MetadataSystem
Deployment
DataStream
Instance MetadataSystem
Deployment
DataStream

And the following weblinks can be added to OGC API — Connected Systems resources to refer to OGC API — EDR resources:

CS API ResourceTarget EDR ResourcesComments
SystemCollection
Instance
DataStreamCollection
Instance

C.9.  OGC SensorThings API Standard

The SensorThings API (STA) is another OGC Standard designed to provide access to sensor observations and tasking through a REST API.

Although the two API Standards are in some ways similar, the SensorThings API was designed to solve IoT use cases and does not address the need of all sensor systems. OGC API — Connected Systems takes a more generic approach to the problem by extending OGC API — Features and using SOSA/SSN and SensorML as the main conceptual and implementation models behind the API.

The following table compares the design choices made in OGC API — Connected Systems and SensorThings API:

Design ChoiceConnected SystemsSensorThings
API PlatformExtension of OGC API Common and OGC — API Features.OData Version 4.0
Query LanguageQuery string arguments, decoupled from resource encoding.Generic query language inherited from OData.
Resource ModelBased on SOSA/SSN/OMS and SensorML.Simplified and adapted from O&M.
Supported Observation TypesScalar, vector, N-D coverage, video.Scalar and simple records only.
Multiple Format SupportYes, including non-JSON such as Protocol Buffers or other binary formats.OData compatible JSON only.

The next table shows a comparison of SensorThings and OGC API — Connected Systems (CS API) resources:

STA ResourceCS API ResourceComments
ThingSystemtype = sosa:Platform
LocationObservationLocation is implemented as a specific kind of observation whose result is a location vector.
HistoricalLocationDataStreamHistorical locations are implemented as a DataStream containing location observations (see above).
DatastreamDataStream
SensorSystemtype = sosa:Sensor
ObservedPropertyProperty
ObservationObservation
FeatureOfInterestSamplingFeatureThe sampling feature is a proxy to any other feature resource.
ActuatorSystemtype = sosa:Actuator
TaskingCapabilityCommandStream
TaskCommand
-Procedure
-Deployment

If needed, the following weblinks can be added to OGC API — Connected Systems resources to refer to SensorThings API resources:

CS API ResourceTarget STA ResourcesComments
SystemThing
Sensor
Actuator
DataStreamDatastream
ControlStreamTaskingCapability

C.10.  Coverages

Observation results are sometimes coverages (e.g., satellite imagery, weather forecast, etc.). In the case of large coverages, providing access to the observation result is better handled by APIs that allow subsetting the coverage along its various dimensions.

Instead of duplicating existing functionality, OGC API — Connected Systems supports linking to coverage datasets hosted by other API implementations or web services when appropriate, instead of including the coverage result data inline in the observation.

In particular, links to implementation instances of the following OGC services and APIs are possible:

  • OGC API — Coverages

  • OGC API — Maps

  • OGC API — EDR

  • OGC Web Coverage Service

  • OGC Web Map Service

The exact mechanism for linking Connected Systems resources and Coverage datasets is implemented will be specified in a future OGC Best Practice document.

C.11.  3D Features

The following OGC Standards can be used to represent and/or transfer complex 3D content and/or scenes:

  • OGC CityGML Standard

  • OGC CityJSON Community Standard

  • OGC 3D Tiles Community Standard

  • OGC Indexed 3d Scene Layer (I3S) Community Standard

  • OGC API — 3D GeoVolumes (Draft)

Such 3D scenes contain feature objects (i.e., features of interest) that can be the target of observations or commands (e.g., a building feature in the 3D model of a city, a mechanical part in the 3D model of an engine, etc.).

These features of interest can be referenced by OGC API — Connected Systems resources, enabling clients to associate the observations to the exact object in the 3D scene (e.g., the user could click an object in the scene and be presented with a chart or a list of dynamic data stream about this object). The reverse link going from the 3D model to the Connected Systems datastream is also desirable.

The exact mechanism for linking Connected Systems resources and 3D objects is implemented will be specified in a future OGC Best Practice document.

C.12.  OGC Sensor Observation Service (SOS) Standard

The functionality provided by a conformant implementation of the OGC SOS Standard (web service) is fully supported by Parts 1 and 2 of the OGC API — Connected Systems Standard. The following table lists the mappings between SOS service operations and corresponding OGC API — Connected Systems (CS API) resources:

SOS OperationCS API ResourceAPI VerbComments
GetCapabilitiesLanding PageGET
DescribeSensorSystemGETGET on collection using the UID filter.
InsertSensorSystemPOST
DeleteSensorSystemDELETE
GetObservationObservationGETGET on collection.
GetObservationByIdObservationGETGET on resource ID.
InsertObservationObservationPOST+ POST on SamplingFeature to add embedded features of interest.
GetResultObservationGETmust use SWE Common format.
InsertResultObservationPOSTmust use SWE Common format.
GetResultTemplateDataStreamSchemaGETRetrieve the DataStream schema.
InsertResultTemplateDataStreamPOSTCreate a DataStream with its schema.
GetFeatureOfInterestSamplingFeatureGET

C.13.  OGC Sensor Planning Service (SPS) Standard

The functionality provided by a conformant implementation of the SPS Standard (web service) is fully supported by Parts 1 and 2 of the OGC API — Connected Systems Standard. The following table lists the mappings between SPS service operations and corresponding OGC API — Connected Systems (CS API) resources:

SPS OperationCS API ResourceAPI VerbComments
GetCapabilitiesLanding PageGET
DescribeSensorSystemGETGET on collection using the UID filter.
DescribeTaskingControlStreamGETRetrieve the ControlStream schema.
SubmitCommandPOST
UpdateCommandPUT or PATCH
CancelCommandDELETE
GetStatusCommandStatusGET
GetTaskCommandGET
DescribeResultAccessCommandResultGET
GetFeasibiltyCommandPOSTFeasibility workflow implemented as a linked CommandStream. Feasibilty result provided as CommandResult.
ReserveCommandPOSTReservation/confirmation workflow implemented as a linked CommandStream.
ConfirmCommandPOSTReservation/confirmation workflow implemented as a linked CommandStream.

Annex D
(informative)
Revision History

DateReleaseEditorPrimary clauses modifiedDescription
2022-12-161.0 draftAlex RobinAllInitial draft version
2023-04-211.0 draftAlex RobinAllMigration to Metanorma
2023-12-071.0 draftAlex RobinAllIncorporated feedback from various SWG
2024-05-211.0 draftAlex RobinAllIncorporated OAB feedback (“resources endpoint” terminology)
2024-09-051.0 draftAlex RobinAllUpdated ATS
2025-03-181.0 draftChristian AutermannAllIncorporated feedback from public comments

Bibliography

[1]  Simon Cox: OGC 10-004r3, Topic 20 — Observations and Measurements. Open Geospatial Consortium (2013). http://www.opengis.net/doc/as/om/2.0.

[2]  Katharina Schleidt, Ilkka Rinne: OGC 20-082r4, Topic 20 — Observations, measurements and samples. Open Geospatial Consortium (2023). http://www.opengis.net/doc/as/om/3.0.

[3]  Mark Burgoyne, David Blodgett, Charles Heazel, Chris Little: OGC 19-086r6, OGC API — Environmental Data Retrieval Standard. Open Geospatial Consortium (2023). http://www.opengis.net/doc/IS/ogcapi-edr-1/1.1.0.

[4]  Taehoon Kim, Kyoung-Sook Kim, Mahmoud SAKR, Martin Desruisseaux: OGC 22-003r3, OGC API — Moving Features — Part 1: Core. Open Geospatial Consortium (2024). http://www.opengis.net/doc/IS/ogcapi-movingfeatures-1/1.0.

[5]  Steve Liang, Tania Khalafbeigi, Hylke van der Schaaf: OGC 18-088, OGC SensorThings API Part 1: Sensing Version 1.1. Open Geospatial Consortium (2021). http://www.opengis.net/doc/is/sensorthings/1.1.0.

[6]  Steve Liang, Tania Khalafbeigi: OGC 17-079r1, OGC SensorThings API Part 2 – Tasking Core. Open Geospatial Consortium (2019). http://www.opengis.net/doc/IS/sensorthings-part2-TaskingCore/1.0.0.

[7]  Arne Bröring, Christoph Stasch, Johannes Echterhoff: OGC 12-006, OGC® Sensor Observation Service Interface Standard. Open Geospatial Consortium (2012). http://www.opengis.net/doc/IS/SOS/2.0.0.

[8]  Ingo Simonis, Johannes Echterhoff: OGC 09-000, OGC® Sensor Planning Service Implementation Standard. Open Geospatial Consortium (2011). https://portal.ogc.org/files/?artifact_id=38478.

[9]  QUDT Quantity Kinds, Version 2.1. https://www.qudt.org/doc/DOC_VOCAB-QUANTITY-KINDS.html