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:
Name | Affiliation |
---|---|
Alex Robin (Editor) | GeoRobotix, Inc. |
Christian Autermann | 52°North Spatial Information Research GmbH |
Chuck Heazel | Heazeltech (for NGA) |
Glenn Laughlin | Pelagis Data Solutions |
Mike Botts | Botts Innovative Research, Inc. |
Patrick Cozzi | Cesium GS, Inc. |
Sam Bolling | Riverside Research |
Additional contributors to this Standard include the following:
Name | Affiliation |
---|---|
Chris Tucker | GeoRobotix, Inc. |
Ian Patterson | Botts Innovative Research, Inc. |
Qihua Li | GovTech Singapore |
Rob Atkinson | Open Geospatial Consortium, Inc. |
Simon Cox | Open Geospatial Consortium, Inc. |
Jan Speckamp | 52°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.
Clause 8, Requirements Class “Common” defines requirements that are shared by several other requirements classes.
Clause 9, Requirements Class “System Features” defines requirements for System resources.
Clause 10, Requirements Class “Subsystems” defines requirements for Subsystem resources.
Clause 11, Requirements Class “Deployment Features” defines requirements for Deployment resources.
Clause 12, Requirements Class “Subdeployments” defines requirements for Subdeployment resources.
Clause 13, Requirements Class “Procedure Features” defines requirements for Procedure resources.
Clause 14, Requirements Class “Sampling Features” defines requirements for Sampling Feature resources.
Clause 15, Requirements Class “Property Definitions” defines requirements for Property resources.
Clause 16, Requirements Class “Advanced Filtering” defines requirements for additional filters that can be used to query CS resources*.
Clause 17, Requirements Class “Create/Replace/Delete” defines requirements for creating, replacing, and deleting CS resources*.
Clause 18, Requirements Class “Update” defines requirements for updating CS resources*.
Clause 19.1, Requirements Class “GeoJSON Format” defines requirements for encoding CS resources* as GeoJSON.
Clause 19.2, Requirements Class “SensorML Format” defines requirements for encoding CS resources* as SensorML-JSON.
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).
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 Type | Requirements Class | Description | Possible Encodings |
---|---|---|---|
System (Feature) | Clause 9 | Description of system instances such as sensors, platforms, human observers, etc. | GeoJSON, SML-JSON |
Deployment (Feature) | Clause 11 | Description of deployments involving one or more systems for a particular purpose. | GeoJSON, SML-JSON |
Procedure (Feature) | Clause 13 | Description of procedures implemented by systems such as datasheets or methods (e.g., system types). | GeoJSON, SML-JSON |
Sampling Feature | Clause 14 | Description of sampling strategies associated with specific systems (e.g., sampling geometry or method). | GeoJSON |
Property Definition | Clause 15 | Description 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:
{
"type": "Feature",
"id": "123",
...
"links": [
{
"rel" : "self",
"title" : "this document",
"href" : "https://data.example.org/api/collections/uav_systems/123?f=json",
"type" : "application/geo+json"
}, {
"rel" : "canonical",
"title" : "this resource canonical URL",
"href" : "https://data.example.org/api/systems/123?f=json",
"type" : "application/geo+json"
}
]
}
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 Class | Query Parameters |
---|---|
System Features | parent, procedure, foi, observedProperty, controlledProperty |
Deployment Features | parent, system, foi, observedProperty, controlledProperty |
Procedure Features | observedProperty, controlledProperty |
Sampling Features | foi, observedProperty, controlledProperty |
Property Definitions | baseProperty, 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 Type | Used in Resource | Description |
---|---|---|
ogc-rel:parentSystem | System (Subsystem), Sampling Feature | Link to the parent system of the entity. |
ogc-rel:subsystems | System | Link to the subsystems of a parent system. |
ogc-rel:samplingFeatures | System, Deployment | Link to the sampling features associated to the entity. |
ogc-rel:deployments | System | Link to the deployments associated to the entity. |
ogc-rel:procedures | System | Link to the procedures that can be implemented by a system. |
ogc-rel:parentDeployment | Deployment (Subdeployment) | Link to the parent deployment of a subdeployment. |
ogc-rel:subdeployments | Deployment | Link to the subdeployments of a parent deployment. |
ogc-rel:featuresOfInterest | System, Deployment | Link to the ultimate features of interest associated to the entity. |
ogc-rel:implementingSystems | Procedure | Link to the systems that implement the procedure. |
ogc-rel:sampledFeature | Sampling Feature | Link to the the ultimate feature of interest sampled by the sampling feature. |
ogc-rel:sampleOf | Sampling Feature | Link to other sampling features that the sampling feature is a sample of. |
ogc-rel:datastreams | System, Deployment, Sampling Feature | Link to the datastreams that are associated to the entity. |
ogc-rel:controlStreams | System, Deployment, Sampling Feature | Link 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
Identifier | /req/api-common |
---|---|
Target type | Web API |
Conformance class | Conformance class A.1: /conf/api-common |
Prerequisites | http://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 statements | Recommendation 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.
Identifier | /req/api-common/resource-ids |
---|---|
Included in | Requirements 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.
Identifier | /req/api-common/resource-uids |
---|---|
Included in | Requirements 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. |
Identifier | /rec/api-common/resource-uids-types |
---|---|
Included in | Requirements class 1: /req/api-common |
A | The server SHOULD ensure that resource UIDs are globally unique. The recommended URI types are:
|
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
Identifier | /req/api-common/datetime |
---|---|
Included in | Requirements 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
Identifier | /req/system |
---|---|
Target type | Web API |
Conformance class | Conformance class A.2: /conf/system |
Prerequisite | Requirements class 1: /req/api-common |
Normative statements | Requirement 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
Name | SOSA/SSN Property | Definition | Data Type | Usage |
---|---|---|---|---|
uniqueIdentifier | RDF concept URI | The 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. | URI | Required |
name | rdfs:label | The human readable name of the system. | String | Required |
description | rdfs:comment | A human readable description for the system. | String | Optional |
systemType | rdfs:type | The type of system (see Table 6). | URI or CURIE | Required |
assetType | - | The type of asset involved in the system (see Table 7). | Enum | Optional |
validTime | - | The validity period of the system’s description. | DateTime | Optional |
location | geo:lat/geo:lon | The current location of the system. | Point | Optional |
Table 5 — System Associations
Name | SOSA/SSN Property | Definition | Target Content | Usage |
---|---|---|---|---|
systemKind | ssn:hasSystemKind | The description of the kind of System (e.g., datasheet). | A single Procedure resource. | Optional |
subsystems | sosa:hasSubSystem | The 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 |
deployments | sosa:hasDeployment | The Deployments that the System is part of, if any. | A list of Deployment resources. | Optional |
procedures | sosa:implements | The 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 Type | URI | CURIE | Usage |
---|---|---|---|
Sensor | http://www.w3.org/ns/sosa/Sensor | sosa:Sensor | When the system’s primary activity is ‘sensing’ or ‘observing’. |
Actuator | http://www.w3.org/ns/sosa/Actuator | sosa:Actuator | When the system’s primary activity is ‘actuating’. |
Sampler | http://www.w3.org/ns/sosa/Sampler | sosa:Sampler | When the system’s primary activity is ‘sampling’. |
Platform | http://www.w3.org/ns/sosa/Platform | sosa:Platform | When the system’s primary activity is ‘carrying’ other systems. |
System | http://www.w3.org/ns/sosa/System | sosa:System | For 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 Value | Usage |
---|---|
Equipment | The 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.). |
Human | The system consists of one or more human beings that follow well defined procedures (e.g., conducting polls or surveys, collecting samples, carrying sensors, etc.). |
LivingThing | The system consists of one or more animals or other living organisms (most often used with systemType=Platform when it carries sensors). |
Simulation | The system is a software algorithm that simulates or predicts the state of the real-world (e.g., weather forecasts, mathematical models, training simulations, etc.). |
Process | The system is a process or process chain that transforms data coming from or going to other systems. |
Group | The 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. |
Other | Any 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.
Identifier | /rec/system/location |
---|---|
Statement | A System feature resource SHOULD include the system location. |
Identifier | /req/system/location-time |
---|---|
Included in | Requirements 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.
Identifier | /req/system/canonical-url |
---|---|
Included in | Requirements 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.
Identifier | /req/system/resources-endpoint |
---|---|
Included in | Requirements 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.
Identifier | /req/system/canonical-endpoint |
---|---|
Included in | Requirements 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.
Identifier | /req/system/collections |
---|---|
Included in | Requirements 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
Identifier | /req/subsystem |
---|---|
Target type | Web API |
Conformance class | Conformance class A.3: /conf/subsystem |
Prerequisite | Requirements class 2: /req/system |
Normative statements | Requirement 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
Name | SOSA/SSN Property | Definition | Target Content | Usage |
---|---|---|---|---|
parentSystem | inverse Of sosa:hasSubSystem | The 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.
Identifier | /req/subsystem/collection |
---|---|
Included in | Requirements 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).
Identifier | /req/subsystem/recursive-param |
---|---|
Included in | Requirements 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 |
Identifier | /req/subsystem/recursive-search-systems |
---|---|
Included in | Requirements 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. |
Identifier | /req/subsystem/recursive-search-subsystems |
---|---|
Included in | Requirements 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.
Identifier | /req/subsystem/recursive-assoc |
---|---|
Included in | Requirements 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 Name | Target Content |
---|---|
samplingFeatures | The Sampling Features associated to the System and all its subsystems, recursively. |
datastreams | The DataStreams generated by the System and all its subsystems, recursively. |
controlstreams | The ControlStreams receiving commands for the System and all its subsystems, recursively. |
11. Requirements Class “Deployment Features”
11.1. Overview
Identifier | /req/deployment |
---|---|
Target type | Web API |
Conformance class | Conformance class A.4: /conf/deployment |
Prerequisite | Requirements class 1: /req/api-common |
Normative statements | Requirement 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
Name | SOSA/SSN Property | Definition | Data Type | Usage |
---|---|---|---|---|
uniqueIdentifier | RDF concept URI | The 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. | URI | Required |
name | rdfs:label | The human readable name of the deployment. | String | Required |
description | rdfs:comment | A human readable description for the deployment. | String | Optional |
deploymentType | rdfs:type | The type of deployment. | URI | Optional |
validTime | - | The time period during which the systems are deployed. | DateTime | Required |
location | geo:lat/geo:lon | The location or area where the systems are deployed. | Geometry | Optional |
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
Name | SOSA/SSN Property | Definition | Target Content | Usage |
---|---|---|---|---|
platform | sosa:deployedOnPlatform | The platform on which the systems are deployed. | A single Feature resource. | Optional |
deployedSystems | sosa:deployedSystem | The 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.
Identifier | /req/deployment/canonical-url |
---|---|
Included in | Requirements 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.
Identifier | /req/deployment/resources-endpoint |
---|---|
Included in | Requirements 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.
Identifier | /req/deployment/canonical-endpoint |
---|---|
Included in | Requirements 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
Identifier | /req/deployment/ref-from-system |
---|---|
Included in | Requirements 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.
Identifier | /req/deployment/collections |
---|---|
Included in | Requirements 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
Identifier | /req/subdeployment |
---|---|
Target type | Web API |
Conformance class | Conformance class A.5: /conf/subdeployment |
Prerequisite | Requirements class 4: /req/deployment |
Normative statements | Requirement 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
Name | SOSA/SSN Property | Definition | Target Content | Usage |
---|---|---|---|---|
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.
Identifier | /req/subdeployment/collection |
---|---|
Included in | Requirements 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).
Identifier | /req/subdeployment/recursive-param |
---|---|
Included in | Requirements 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 |
Identifier | /req/subdeployment/recursive-search-deployments |
---|---|
Included in | Requirements 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. |
Identifier | /req/subdeployment/recursive-search-subdeployments |
---|---|
Included in | Requirements 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.
Identifier | /req/subdeployment/recursive-assoc |
---|---|
Included in | Requirements 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 Name | Target Content |
---|---|
deployedSystems | The Systems deployed during the Deployment and all its subdeployments, recursively. |
samplingFeatures | The Sampling Features associated to Systems deployed during the Deployment and all its subdeployments, recursively. |
featuresOfInterest | The ultimate features of interest that are observed and/or controlled during the Deployment or any of its subdeployments, recursively. |
datastreams | The DataStreams generated by systems deployed in the Deployment and all its subdeployments, recursively. |
controlstreams | The ControlStreams receiving commands for systems deployed in the Deployment and all its subdeployments, recursively. |
13. Requirements Class “Procedure Features”
13.1. Overview
Identifier | /req/procedure |
---|---|
Target type | Web API |
Conformance class | Conformance class A.6: /conf/procedure |
Prerequisite | Requirements class 1: /req/api-common |
Normative statements | Requirement 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
Name | SOSA/SSN Property | Definition | Data Type | Usage |
---|---|---|---|---|
uniqueIdentifier | RDF concept URI | The 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 URL | URI | Required |
name | rdfs:label | The human readable name of the procedure | String | Required |
description | rdfs:comment | A human readable description for the procedure | String | Optional |
procedureType | rdfs:type | The type of procedure (see Table 16) | URI | Required |
validTime | - | The validity period of the procedure description. | DateTime | Optional |
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
Name | SOSA/SSN Property | Definition | Target Content | Usage |
---|---|---|---|---|
implementingSystems | implementedBy | The Systems that implement the Procedure. | A list of System resources. | Optional |
Table 16 — Procedure Types
Procedure Type | URI | CURIE | Implemented By | Usage |
---|---|---|---|---|
Observing | http://www.w3.org/ns/sosa/ObservingProcedure | sosa:ObservingProcedure | Sensor | An observation method. |
Sampling | http://www.w3.org/ns/sosa/SamplingProcedure | sosa:SamplingProcedure | Sampler | A sampling method. |
Actuating | http://www.w3.org/ns/sosa/ActuatingProcedure | sosa:ActuatingProcedure | Actuator | An actuation method. |
Other Procedure | http://www.w3.org/ns/sosa/Procedure | sosa:Procedure | Any System | Any other type of procedure or methodology. |
Sensor | http://www.w3.org/ns/sosa/Sensor | sosa:Sensor | Sensor | A sensor datasheet. |
Actuator | http://www.w3.org/ns/sosa/Actuator | sosa:Actuator | Actuator | An actuator datasheet. |
Sampler | http://www.w3.org/ns/sosa/Sampler | sosa:Sampler | Sampler | A sampler datasheet. |
Platform | http://www.w3.org/ns/sosa/Platform | sosa:Platform | Platform | A platform datasheet. |
Other System | http://www.w3.org/ns/sosa/System | sosa:System | Any System | Any other system datasheet. |
13.2.3. Location
A Procedure feature represents a datasheet or a methodology. It is thus a non-spatial entity.
Identifier | /req/procedure/location |
---|---|
Included in | Requirements 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.
Identifier | /req/procedure/canonical-url |
---|---|
Included in | Requirements 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.
Identifier | /req/procedure/resources-endpoint |
---|---|
Included in | Requirements 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.
Identifier | /req/procedure/canonical-endpoint |
---|---|
Included in | Requirements 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.
Identifier | /req/procedure/collections |
---|---|
Included in | Requirements 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
Identifier | /req/sf |
---|---|
Target type | Web API |
Conformance class | Conformance class A.7: /conf/sf |
Prerequisites | Requirements class 1: /req/api-common Requirements class 2: /req/system |
Normative statements | Requirement 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
Name | SOSA/SSN Property | Definition | Data Type | Usage |
---|---|---|---|---|
uniqueIdentifier | RDF concept URI | The 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. | URI | Required |
name | rdfs:label | The human readable name of the sampling feature. | String | Required |
description | rdfs:comment | A human readable description for the sampling feature. | String | Optional |
featureType | rdfs:type | The type of sampling feature. | URI | Required |
validTime | - | The validity period of the sampling feature. | DateTime | Optional |
NOTE: Valid time is used when the sampling feature is not meaningful or usable outside of a given time period, for example:
|
Table 18 — Sampling Features Associations
Relation Name | SOSA/SSN Property | Definition | Target Content | Usage |
---|---|---|---|---|
parentSystem | - | The System that created or uses this Sampling Feature. | A single System resource. | Required |
sampledFeature | sosa:hasSampledFeature | The ultimate feature of interest that is being sampled or controlled. | A single Feature resource. | Required |
sampleOf | sosa:isSampleOf | Other 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.
Identifier | /req/sf/canonical-url |
---|---|
Included in | Requirements 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.
Identifier | /req/sf/resources-endpoint |
---|---|
Included in | Requirements 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.
Identifier | /req/sf/canonical-endpoint |
---|---|
Included in | Requirements 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
Identifier | /req/sf/ref-from-system |
---|---|
Included in | Requirements 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.
Identifier | /req/sf/collections |
---|---|
Included in | Requirements 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
Identifier | /req/property |
---|---|
Target type | Web API |
Conformance class | Conformance class A.8: /conf/property |
Prerequisite | Requirements class 1: /req/api-common |
Normative statements | Requirement 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
Name | SOSA/SSN Property | Definition | Data Type | Usage |
---|---|---|---|---|
uniqueIdentifier | RDF concept URI | The 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. | URI | Required |
name | rdfs:label | The human readable name of the property. | String | Required |
description | rdfs:comment | A human readable description for the property. | String | Optional |
baseProperty | - | Reference to the definition of the base property this property is derived from. | URI or CURIE | Required |
objectType | - | Reference to the type of entity that the base property applies to. | URI or CURIE | Optional |
statistic | - | Reference to the definition of the statistic applied to the base property values. | URI or CURIE | Optional |
15.3. Property Canonical URL
The CS API Standard requires that every Property resource has a canonical URL.
Identifier | /req/property/canonical-url |
---|---|
Included in | Requirements 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.
Identifier | /req/property/resources-endpoint |
---|---|
Included in | Requirements 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.
Identifier | /req/property/canonical-endpoint |
---|---|
Included in | Requirements 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.
Identifier | /req/property/collections |
---|---|
Included in | Requirements 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
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.
Identifier | /req/advanced-filtering/id-list-schema |
---|---|
Included in | Requirements 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). |
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.
Identifier | /req/advanced-filtering/resource-by-id |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/resource-by-keyword |
---|---|
Included in | Requirements 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 |
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.
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.
Identifier | /req/advanced-filtering/feature-by-geom |
---|---|
Included in | Requirements class 9: /req/advanced-filtering |
Prerequisite | OGC 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 |
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.
Identifier | /req/advanced-filtering/system-by-parent |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/system-by-procedure |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/system-by-foi |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/system-by-obsprop |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/system-by-controlprop |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/deployment-by-parent |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/deployment-by-system |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/deployment-by-foi |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/deployment-by-obsprop |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/deployment-by-controlprop |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/procedure-by-obsprop |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/procedure-by-controlprop |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/sf-by-foi |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/sf-by-obsprop |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/sf-by-controlprop |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/prop-by-baseprop |
---|---|
Included in | Requirements 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.
Identifier | /req/advanced-filtering/prop-by-object |
---|---|
Included in | Requirements 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
Identifier | /req/advanced-filtering/combined-filters |
---|---|
Included in | Requirements 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.
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. |
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
Identifier | /req/create-replace-delete |
---|---|
Target type | Web API |
Conformance class | Conformance class A.10: /conf/create-replace-delete |
Prerequisites | Requirements class 1: /req/api-common http://www.opengis.net/spec/ogcapi-features-4/1.0/req/create-replace-delete |
Normative statements | Requirement 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
Identifier | /req/create-replace-delete/system |
---|---|
Included in | Requirements 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:
|
B | The server SHALL support the REPLACE and DELETE operations at the System resources endpoints defined by the following URI template:
|
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.
Identifier | /req/create-replace-delete/system-delete-cascade |
---|---|
Included in | Requirements 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.
Identifier | /req/create-replace-delete/subsystem |
---|---|
Included in | Requirements 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:
|
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
Identifier | /req/create-replace-delete/deployment |
---|---|
Included in | Requirements 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:
|
B | The server SHALL support the REPLACE and DELETE operations at the Deployment resources endpoints defined by the following URI template:
|
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.
Identifier | /req/create-replace-delete/subdeployment |
---|---|
Included in | Requirements 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:
|
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
Identifier | /req/create-replace-delete/procedure |
---|---|
Included in | Requirements 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:
|
B | The server SHALL support the REPLACE and DELETE operations at the Procedure resources endpoints defined by the following URI template:
|
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.
Identifier | /req/create-replace-delete/sampling-feature |
---|---|
Included in | Requirements 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:
|
B | The server SHALL support the REPLACE and DELETE operations at the Sampling Feature resources endpoints defined by the following URI templates:
|
C | The sysId parameter SHALL be the local identifier of the parent System resource that the new sampling feature will be attached to. |
17.8. Property Definitions
Property resources are created, replaced and deleted using HTTP POST, PUT and DELETE operations, respectively.
Identifier | /req/create-replace-delete/property |
---|---|
Included in | Requirements 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:
|
B | The server SHALL support the REPLACE and DELETE operations at the Property resources endpoints defined by the following URI template:
|
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).
Identifier | /req/create-replace-delete/create-in-collection |
---|---|
Included in | Requirements 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. |
Identifier | /req/create-replace-delete/replace-in-collection |
---|---|
Included in | Requirements 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. |
Identifier | /req/create-replace-delete/delete-in-collection |
---|---|
Included in | Requirements 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.
Identifier | /req/create-replace-delete/add-to-collection |
---|---|
Included in | Requirements 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
Identifier | /req/update |
---|---|
Target type | Web API |
Conformance class | Conformance class A.11: /conf/update |
Prerequisites | Requirements class 10: /req/create-replace-delete http://www.opengis.net/spec/ogcapi-features-4/1.0/req/update |
Normative statements | Requirement 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
Identifier | /req/update/system |
---|---|
Included in | Requirements 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:
|
B | The id parameter SHALL be the local identifier of the System resource to update. |
18.3. Deployments
Identifier | /req/update/deployment |
---|---|
Included in | Requirements 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:
|
B | The id parameter SHALL be the local identifier of the Deployment resource to update. |
18.4. Procedures
Identifier | /req/update/procedure |
---|---|
Included in | Requirements 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:
|
B | The id parameter SHALL be the local identifier of the Procedure resource to update. |
18.5. Sampling Features
Identifier | /req/update/sampling-feature |
---|---|
Included in | Requirements 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:
|
B | The id parameter SHALL be the local identifier of the Sampling Feature resource to update. |
18.6. Derived Properties
Identifier | /req/update/property |
---|---|
Included in | Requirements 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:
|
19. Requirements Classes for Encodings
19.1. Requirements Class “GeoJSON Format”
19.1.1. Overview
Identifier | /req/geojson |
---|---|
Target type | Web API |
Conformance class | Conformance class A.12: /conf/geojson |
Prerequisites | Requirements class 1: /req/api-common http://www.opengis.net/spec/ogcapi-features-1/1.0/req/geojson |
Normative statements | Requirement 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.
Identifier | /req/geojson/mediatype-read |
---|---|
Included in | Requirements 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. |
Identifier | /req/geojson/mediatype-write |
---|---|
Included in | Requirements 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
Identifier | /req/geojson/relation-types |
---|---|
Included in | Requirements 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
Identifier | /req/geojson/feature-attribute-mapping |
---|---|
Included in | Requirements 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 Name | JSON Member | Usage |
---|---|---|
uniqueIdentifier | properties/uid | Value is a JSON string that is a valid URI. |
name | properties/name | Value is a JSON string. |
description | properties/description | Value is a JSON string. |
19.1.5. System Representation
Identifier | /req/geojson/system-schema |
---|---|
Included in | Requirements 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. |
Identifier | /req/geojson/system-mappings |
---|---|
Included in | Requirements 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 Member | Usage |
---|---|---|
systemType | properties/featureType | Use the URI or CURIE from Table 6 as the value. |
assetType | properties/assetType | Use the URI or CURIE from Table 7 as the value. |
validTime | properties/validTime | Value SHALL be a JSON array with min/max bounds encoded as a ISO8601 date/time string. |
location | geometry | Value SHALL be a GeoJSON Point geometry. |
Table 41 — GeoJSON Encoding of System Associations
Association Name (see Table 5) | JSON Member | Usage |
---|---|---|
systemKind | properties/systemKind@link | Value is a weblink resolving to a Procedure resource. |
parentSystem | links | Value is a weblink* resolving to a System resource. |
subsystems | links | Value is a weblink* resolving to a System resources endpoint. |
samplingFeatures | links | Value is a weblink* resolving to a Sampling Feature resources endpoint. |
deployments | links | Value is a weblink* resolving to a Deployment resources endpoint. |
procedures | links | Value is a weblink* resolving to a Procedure resources endpoint. |
datastreams | links | Value is a weblink* resolving to a DataStream resources endpoint**. |
controlstreams | links | Value 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
Identifier | /req/geojson/deployment-schema |
---|---|
Included in | Requirements 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. |
Identifier | /req/geojson/deployment-mappings |
---|---|
Included in | Requirements 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 Member | Usage |
---|---|---|
deploymentType | properties/featureType | Use the URI or CURIE identifying the type of deployment as the value. |
validTime | properties/validTime | - |
location | geometry | Value is a GeoJSON geometry. |
Table 43 — GeoJSON Encoding of Deployment Associations
Association Name (see Table 11) | JSON Member | Usage |
---|---|---|
platform | properties/platform@link | Value is a weblink resolving to a System resource. |
deployedSystems | properties/deployedSystems@link | Value is a JSON Array of links*** to System resources. |
parentDeployment | links | Value is a weblink* resolving to a Deployment resource. |
subdeployments | links | Value is a weblink* resolving to a Deployment resources endpoint. |
featuresOfInterest | links | Value is a weblink* resolving to a Feature resources endpoint. |
samplingFeatures | links | Value is a weblink* resolving to a Sampling Feature resources endpoint. |
datastreams | links | Value is a weblink* resolving to a DataStream resources endpoint**. |
controlstreams | links | Value 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
Identifier | /req/geojson/procedure-schema |
---|---|
Included in | Requirements 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. |
Identifier | /req/geojson/procedure-mappings |
---|---|
Included in | Requirements 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 Member | Usage |
---|---|---|
procedureType | properties/featureType | Use the URI or CURIE from Table 16 as the value. |
validTime | properties/validTime | Value 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 Member | Usage |
---|---|---|
implementingSystems | links | Value 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
Identifier | /req/geojson/sf-schema |
---|---|
Included in | Requirements 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. |
Identifier | /req/geojson/sf-mappings |
---|---|
Included in | Requirements 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 Member | Usage |
---|---|---|
featureType | properties/featureType | Use the URI or CURIE specific to a sampling feature type. |
validTime | properties/validTime | Value 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 Member | Usage |
---|---|---|
sampledFeature | properties/sampledFeature@link | Value is a weblink resolving to a Feature resource. |
parentSystem | links | Value is a weblink* resolving to a System resource. |
sampleOf | links | Value is a weblink* resolving to a Sampling Feature resources endpoint. |
datastreams | links | Value is a weblink* resolving to a DataStream resources endpoint**. |
controlstreams | links | Value 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
Identifier | /req/sensorml |
---|---|
Target type | Web API |
Conformance class | Conformance class A.13: /conf/sensorml |
Prerequisites | Requirements 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 statements | Requirement 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.
Identifier | /req/sensorml/mediatype-read |
---|---|
Included in | Requirements 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. |
Identifier | /req/sensorml/mediatype-write |
---|---|
Included in | Requirements 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
Identifier | /req/sensorml/relation-types |
---|---|
Included in | Requirements 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.
Identifier | /req/sensorml/resource-id |
---|---|
Included in | Requirements 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. |
Identifier | /req/sensorml/feature-attribute-mapping |
---|---|
Included in | Requirements 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 Name | JSON Member | Usage |
---|---|---|
uniqueIdentifier | uniqueId | Value is a JSON string that is a valid URI. |
name | label | Value is a JSON string. |
description | description | Value is a JSON string. |
19.2.5. System Representation
Identifier | /req/sensorml/system-schema |
---|---|
Included in | Requirements 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. |
Identifier | /req/sensorml/system-sml-class |
---|---|
Included in | Requirements 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. |
Identifier | /req/sensorml/system-mappings |
---|---|
Included in | Requirements 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 Member | Usage |
---|---|---|
systemType | definition | Use the URI or CURIE from Table 6 as the value. |
assetType | classifiers | Use a classifier with definition cs:AssetType, and the URI or CURIE from Table 7 as the value. |
validTime | validTime | - |
location | position | Include 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 Member | Usage |
---|---|---|
systemKind | typeOf | Value is a weblink resolving to a Procedure resource. |
parentSystem | attachedTo | Value is a weblink resolving to a System resource. |
subsystems | links | Value is a weblink* resolving to a System resources endpoint. |
samplingFeatures | links | Value is a weblink* resolving to a Sampling Feature resources endpoint. |
deployments | links | Value is a weblink* resolving to a Deployment resources endpoint. |
procedures | links | Value is a weblink* resolving to a Procedure resources endpoint. |
datastreams | links | Value is a weblink* resolving to a DataStream resources endpoint**. |
controlstreams | links | Value 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
Identifier | /req/sensorml/deployment-schema |
---|---|
Included in | Requirements 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. |
Identifier | /req/sensorml/deployment-mappings |
---|---|
Included in | Requirements 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 Member | Usage |
---|---|---|
deploymentType | definition | Use the URI or CURIE identifying the type of deployment as the value. |
validTime | validTime | - |
location | location | Value is a GeoJSON geometry |
Table 52 — SensorML Mappings of Deployment Associations
Association Name (see Table 11) | JSON Member | Usage |
---|---|---|
platform | platform | Value is a weblink resolving to a System resource. |
deployedSystems | deployedSystems | Value is a JSON Array of DeployedSystem objects, each of which contains a link*** to a System resource. |
parentDeployment | links | Value is a weblink* resolving to a Deployment resource. |
subdeployments | links | Value is a weblink* resolving to a Deployment resources endpoint. |
featuresOfInterest | links | Value is a weblink* resolving to a Feature resources endpoint. |
samplingFeatures | links | Value is a weblink* resolving to a Sampling Feature resources endpoint. |
datastreams | links | Value is a weblink* resolving to a DataStream resources endpoint**. |
controlstreams | links | Value 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
Identifier | /req/sensorml/procedure-schema |
---|---|
Included in | Requirements 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. |
Identifier | /req/sensorml/procedure-sml-class |
---|---|
Included in | Requirements 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. |
Identifier | /req/sensorml/procedure-mappings |
---|---|
Included in | Requirements 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 Member | Usage |
---|---|---|
procedureType | definition | Use the URI or CURIE from Table 16 as the value. |
validTime | validTime | - |
Table 54 — SensorML Mappings of Procedure Associations
Association Name (see Table 15) | JSON Member | Usage |
---|---|---|
implementingSystems | links | Value 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
Identifier | /req/sensorml/property-schema |
---|---|
Included in | Requirements 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. |
Identifier | /req/sensorml/property-mappings |
---|---|
Included in | Requirements 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 Member | Usage |
---|---|---|
baseProperty | baseProperty | Value is a JSON string that is a valid URI. |
objectType | objectType | Value is a JSON string that is a valid URI. |
statistic | statistic | Value 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.
Identifier | /conf/api-common/canonical-resources |
---|---|
Test purpose | Retrieve all items from their canonical endpoint. |
Test method | Given the resource-type parameter:
|
Identifier | /conf/api-common/collection-items |
---|---|
Test purpose | Retrieve items of a collection. |
Test method |
|
A.2. Conformance Class “Common”
Identifier | /conf/api-common |
---|---|
Requirements class | Requirements class 1: /req/api-common |
Prerequisites | http://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 Type | Web API |
Conformance tests | Abstract 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 |
Identifier | /conf/api-common/resource-ids |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/api-common/resource-uids |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/api-common/resource-uids-types |
---|---|
Requirement | Recommendation 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:
|
Identifier | /conf/api-common/datetime |
---|---|
Requirement | Requirement 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:
|
A.3. Conformance Class “System Features”
Identifier | /conf/system |
---|---|
Requirements class | Requirements class 2: /req/system |
Prerequisite | Conformance class A.1: /conf/api-common |
Target Type | Web API |
Conformance tests | Abstract 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 |
Identifier | /conf/system/location |
---|---|
Requirement | Recommendation 2: /rec/system/location |
Test purpose | Validate that system features include a location. |
Test method |
|
Identifier | /conf/system/location-time |
---|---|
Requirement | Requirement 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.
|
Identifier | /conf/system/canonical-url |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/system/resources-endpoint |
---|---|
Requirement | Requirement 6: /req/system/resources-endpoint |
Test purpose | Validate that the server implements a System resources endpoint correctly. |
Test method |
|
Identifier | /conf/system/canonical-endpoint |
---|---|
Requirement | Requirement 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. |
Identifier | /conf/system/collections |
---|---|
Requirement | Requirement 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:
|
A.4. Conformance Class “Subsystems”
Identifier | /conf/subsystem |
---|---|
Requirements class | Requirements class 3: /req/subsystem |
Prerequisite | Conformance class A.2: /conf/system |
Target Type | Web API |
Conformance tests | Abstract 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 |
Identifier | /conf/subsystem/collection |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/subsystem/recursive-param |
---|---|
Requirement | Requirement 10: /req/subsystem/recursive-param |
Test purpose | Validate that the recursive query parameter is of type boolean |
Test method |
|
Identifier | /conf/subsystem/recursive-search-systems |
---|---|
Requirement | Requirement 11: /req/subsystem/recursive-search-systems |
Test purpose | Verify that subsystems can be queried using the recursive query parameter. |
Test method |
|
Identifier | /conf/subsystem/recursive-search-subsystems |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/subsystem/recursive-assoc |
---|---|
Requirement | Requirement 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:
|
A.5. Conformance Class “Deployment Features”
Identifier | /conf/deployment |
---|---|
Requirements class | Requirements class 4: /req/deployment |
Prerequisite | Conformance class A.1: /conf/api-common |
Target Type | Web API |
Conformance tests | Abstract 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 |
Identifier | /conf/deployment/canonical-url |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/deployment/resources-endpoint |
---|---|
Requirement | Requirement 15: /req/deployment/resources-endpoint |
Test purpose | Validate that the server implements a Deployment resources endpoint correctly. |
Test method |
|
Identifier | /conf/deployment/canonical-endpoint |
---|---|
Requirement | Requirement 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. |
Identifier | /conf/deployment/collections |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/deployment/ref-from-system |
---|---|
Requirement | Requirement 17: /req/deployment/ref-from-system |
Test purpose | Validate that Deployment resources associated to a System are available as sub-resources. |
Test method |
|
A.6. Conformance Class “Subdeployments”
Identifier | /conf/subdeployment |
---|---|
Requirements class | Requirements class 5: /req/subdeployment |
Prerequisite | Conformance class A.4: /conf/deployment |
Target Type | Web API |
Conformance tests | Abstract 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 |
Identifier | /conf/subdeployment/collection |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/subdeployment/recursive-param |
---|---|
Requirement | Requirement 20: /req/subdeployment/recursive-param |
Test purpose | Validate that the recursive query parameter is of type boolean |
Test method |
|
Identifier | /conf/subdeployment/recursive-search-deployments |
---|---|
Requirement | Requirement 21: /req/subdeployment/recursive-search-deployments |
Test purpose | Verify that subdeployments can be queried using the recursive query parameter. |
Test method |
|
Identifier | /conf/subdeployment/recursive-search-subdeployments |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/subdeployment/recursive-assoc |
---|---|
Requirement | Requirement 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:
|
A.7. Conformance Class “Procedure Features”
Identifier | /conf/procedure |
---|---|
Requirements class | Requirements class 6: /req/procedure |
Prerequisite | Conformance class A.1: /conf/api-common |
Target Type | Web API |
Conformance tests | Abstract 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 |
Identifier | /conf/procedure/location |
---|---|
Requirement | Requirement 24: /req/procedure/location |
Test purpose | Validate that Procedure features never include a location. |
Test method |
|
Identifier | /conf/procedure/canonical-url |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/procedure/resources-endpoint |
---|---|
Requirement | Requirement 26: /req/procedure/resources-endpoint |
Test purpose | Validate that the server implements a Procedure resources endpoint correctly. |
Test method |
|
Identifier | /conf/procedure/canonical-endpoint |
---|---|
Requirement | Requirement 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. |
Identifier | /conf/procedure/collections |
---|---|
Requirement | Requirement 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:
|
A.8. Conformance Class “Sampling Features”
Identifier | /conf/sf |
---|---|
Requirements class | Requirements class 7: /req/sf |
Prerequisite | Conformance class A.2: /conf/system |
Target Type | Web API |
Conformance tests | Abstract 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 |
Identifier | /conf/sf/canonical-url |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/sf/resources-endpoint |
---|---|
Requirement | Requirement 30: /req/sf/resources-endpoint |
Test purpose | Validate that the server implements a Sampling Feature resources endpoint correctly. |
Test method |
|
Identifier | /conf/sf/canonical-endpoint |
---|---|
Requirement | Requirement 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. |
Identifier | /conf/sf/collections |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/sf/ref-from-system |
---|---|
Requirement | Requirement 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 |
|
A.9. Conformance Class “Property Definitions”
Identifier | /conf/property |
---|---|
Requirements class | Requirements class 8: /req/property |
Prerequisite | Conformance class A.1: /conf/api-common |
Target Type | Web API |
Conformance tests | Abstract 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 |
Identifier | /conf/property/canonical-url |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/property/resources-endpoint |
---|---|
Requirement | Requirement 35: /req/property/resources-endpoint |
Test purpose | Validate that the server implements a Property resources endpoint correctly. |
Test method |
|
Identifier | /conf/property/canonical-endpoint |
---|---|
Requirement | Requirement 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. |
Identifier | /conf/property/collections |
---|---|
Requirement | Requirement 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:
|
A.10. Conformance Class “Advanced Filtering”
Identifier | /conf/advanced-filtering/id-list-schema |
---|---|
Requirement | Requirement 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. |
Identifier | /conf/advanced-filtering/resource-by-id |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/advanced-filtering/resource-by-keyword |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/advanced-filtering/resource-by-property |
---|---|
Requirement | Recommendation 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:
|
Identifier | /conf/advanced-filtering/feature-by-geom |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/advanced-filtering/system-by-parent |
---|---|
Requirement | Requirement 42: /req/advanced-filtering/system-by-parent |
Test purpose | Validate that the parent query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/system-by-procedure |
---|---|
Requirement | Requirement 43: /req/advanced-filtering/system-by-procedure |
Test purpose | Validate that the procedure query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/system-by-foi |
---|---|
Requirement | Requirement 44: /req/advanced-filtering/system-by-foi |
Test purpose | Validate that the foi query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/system-by-obsprop |
---|---|
Requirement | Requirement 45: /req/advanced-filtering/system-by-obsprop |
Test purpose | Validate that the observedProperty query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/system-by-controlprop |
---|---|
Requirement | Requirement 46: /req/advanced-filtering/system-by-controlprop |
Test purpose | Validate that the controlledProperty query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/deployment-by-parent |
---|---|
Requirement | Requirement 47: /req/advanced-filtering/deployment-by-parent |
Test purpose | Validate that the parent query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/deployment-by-system |
---|---|
Requirement | Requirement 48: /req/advanced-filtering/deployment-by-system |
Test purpose | Validate that the system query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/deployment-by-foi |
---|---|
Requirement | Requirement 49: /req/advanced-filtering/deployment-by-foi |
Test purpose | Validate that the foi query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/deployment-by-obsprop |
---|---|
Requirement | Requirement 50: /req/advanced-filtering/deployment-by-obsprop |
Test purpose | Validate that the observedProperty query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/deployment-by-controlprop |
---|---|
Requirement | Requirement 51: /req/advanced-filtering/deployment-by-controlprop |
Test purpose | Validate that the controlledProperty query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/procedure-by-obsprop |
---|---|
Requirement | Requirement 52: /req/advanced-filtering/procedure-by-obsprop |
Test purpose | Validate that the observedProperty query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/procedure-by-controlprop |
---|---|
Requirement | Requirement 53: /req/advanced-filtering/procedure-by-controlprop |
Test purpose | Validate that the controlledProperty query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/sf-by-foi |
---|---|
Requirement | Requirement 54: /req/advanced-filtering/sf-by-foi |
Test purpose | Validate that the foi query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/sf-by-obsprop |
---|---|
Requirement | Requirement 55: /req/advanced-filtering/sf-by-obsprop |
Test purpose | Validate that the observedProperty query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/sf-by-controlprop |
---|---|
Requirement | Requirement 56: /req/advanced-filtering/sf-by-controlprop |
Test purpose | Validate that the controlledProperty query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/prop-by-baseprop |
---|---|
Requirement | Requirement 57: /req/advanced-filtering/prop-by-baseprop |
Test purpose | Validate that the baseProperty query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/prop-by-object |
---|---|
Requirement | Requirement 58: /req/advanced-filtering/prop-by-object |
Test purpose | Validate that the objectType query parameter is processed correctly. |
Test method |
|
Identifier | /conf/advanced-filtering/combined-filters |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/advanced-filtering/indirect-prop |
---|---|
Requirement | Recommendation 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:
|
Identifier | /conf/advanced-filtering/indirect-foi |
---|---|
Requirement | Recommendation 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:
|
A.11. Conformance Class “Create/Replace/Delete”
Identifier | /conf/create-replace-delete/system |
---|---|
Requirement | Requirement 60: /req/create-replace-delete/system |
Test purpose | Validate that the server implements CREATE/REPLACE/DELETE operations correctly on System collections. |
Test method |
|
Identifier | /conf/create-replace-delete/system-delete-cascade |
---|---|
Requirement | Requirement 61: /req/create-replace-delete/system-delete-cascade |
Test purpose | Validate that the server implements the cascade query parameter correctly. |
Test method |
|
Identifier | /conf/create-replace-delete/subsystem |
---|---|
Requirement | Requirement 62: /req/create-replace-delete/subsystem |
Test purpose | Validate that the server implements the CREATE operation correctly on subsystem collections. |
Test method |
|
Identifier | /conf/create-replace-delete/deployment |
---|---|
Requirement | Requirement 63: /req/create-replace-delete/deployment |
Test purpose | Validate that the server implements CREATE/REPLACE/DELETE operations correctly on Deployment collections. |
Test method |
|
Identifier | /conf/create-replace-delete/subdeployment |
---|---|
Requirement | Requirement 64: /req/create-replace-delete/subdeployment |
Test purpose | Validate that the server implements the CREATE operation correctly on subdeployment collections. |
Test method |
|
Identifier | /conf/create-replace-delete/procedure |
---|---|
Requirement | Requirement 65: /req/create-replace-delete/procedure |
Test purpose | Validate that the server implements CREATE/REPLACE/DELETE operations correctly on Procedure collections. |
Test method |
|
Identifier | /conf/create-replace-delete/sampling-feature |
---|---|
Requirement | Requirement 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 |
|
Identifier | /conf/create-replace-delete/property |
---|---|
Requirement | Requirement 67: /req/create-replace-delete/property |
Test purpose | Validate that the server implements CREATE/REPLACE/DELETE operations correctly on Property collections. |
Test method |
|
Identifier | /conf/create-replace-delete/create-in-collection |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/create-replace-delete/replace-in-collection |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/create-replace-delete/delete-in-collection |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/create-replace-delete/add-to-collection |
---|---|
Requirement | Requirement 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:
|
A.12. Conformance Class “Update”
Identifier | /conf/update |
---|---|
Requirements class | Requirements class 11: /req/update |
Prerequisites | Conformance class A.1: /conf/api-common http://www.opengis.net/spec/ogcapi-4/1.0/conf/update |
Target Type | Web API |
Conformance tests | Abstract 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 |
Identifier | /conf/update/system |
---|---|
Requirement | Requirement 72: /req/update/system |
Test purpose | Validate that the server implements the UPDATE operation correctly on System collections. |
Test method |
|
Identifier | /conf/update/deployment |
---|---|
Requirement | Requirement 73: /req/update/deployment |
Test purpose | Validate that the server implements the UPDATE operation correctly on Deployment collections. |
Test method |
|
Identifier | /conf/update/procedure |
---|---|
Requirement | Requirement 74: /req/update/procedure |
Test purpose | Validate that the server implements the UPDATE operation correctly on Procedure collections. |
Test method |
|
Identifier | /conf/update/sampling-feature |
---|---|
Requirement | Requirement 75: /req/update/sampling-feature |
Test purpose | Validate that the server implements the UPDATE operation correctly on Sampling Feature collections. |
Test method |
|
Identifier | /conf/update/property |
---|---|
Requirement | Requirement 76: /req/update/property |
Test purpose | Validate that the server implements the UPDATE operation correctly on Property collections. |
Test method |
|
A.13. Conformance Class “GeoJSON”
Identifier | /conf/geojson |
---|---|
Requirements class | Requirements class 12: /req/geojson |
Prerequisites | Conformance class A.1: /conf/api-common http://www.opengis.net/spec/ogcapi-1/1.0/conf/geojson |
Target Type | Web API |
Conformance tests | Abstract 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 |
Identifier | /conf/geojson/mediatype-read |
---|---|
Requirement | Requirement 77: /req/geojson/mediatype-read |
Test purpose | Verify that the server advertises support for the GeoJSON format on retrieval operations. |
Test method |
|
Identifier | /conf/geojson/mediatype-write |
---|---|
Requirement | Requirement 78: /req/geojson/mediatype-write |
Test purpose | Verify that the server advertises support for the GeoJSON format on transactional operations. |
Test method |
|
Identifier | /conf/geojson/relation-types |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/geojson/feature-attribute-mapping |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/geojson/system-schema |
---|---|
Requirement | Requirement 81: /req/geojson/system-schema |
Test purpose | Validate that the GeoJSON representation of System resources is valid. |
Test method |
|
Identifier | /conf/geojson/system-mappings |
---|---|
Requirement | Requirement 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: |
Identifier | /conf/geojson/deployment-schema |
---|---|
Requirement | Requirement 83: /req/geojson/deployment-schema |
Test purpose | Validate that the GeoJSON representation of Deployment resources is valid. |
Test method |
|
Identifier | /conf/geojson/deployment-mappings |
---|---|
Requirement | Requirement 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: |
Identifier | /conf/geojson/procedure-schema |
---|---|
Requirement | Requirement 85: /req/geojson/procedure-schema |
Test purpose | Validate that the GeoJSON representation of Procedure resources is valid. |
Test method |
|
Identifier | /conf/geojson/procedure-mappings |
---|---|
Requirement | Requirement 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: |
Identifier | /conf/geojson/sf-schema |
---|---|
Requirement | Requirement 87: /req/geojson/sf-schema |
Test purpose | Validate that the GeoJSON representation of Sampling Feature resources is valid. |
Test method |
|
Identifier | /conf/geojson/sf-mappings |
---|---|
Requirement | Requirement 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: |
A.14. Conformance Class “SensorML”
Identifier | /conf/sensorml/mediatype-read |
---|---|
Requirement | Requirement 89: /req/sensorml/mediatype-read |
Test purpose | Verify that the server advertises support for the SensorML format on retrieval operations. |
Test method |
|
Identifier | /conf/sensorml/mediatype-write |
---|---|
Requirement | Requirement 90: /req/sensorml/mediatype-write |
Test purpose | Verify that the server advertises support for the SensorML format on transactional operations.
|
Identifier | /conf/sensorml/relation-types |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/sensorml/resource-id |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/sensorml/feature-attribute-mapping |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/sensorml/system-schema |
---|---|
Requirement | Requirement 94: /req/sensorml/system-schema |
Test purpose | Validate that the SensorML representation of System resources is valid. |
Test method |
|
Identifier | /conf/sensorml/system-sml-class |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/sensorml/system-mappings |
---|---|
Requirement | Requirement 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: |
Identifier | /conf/sensorml/deployment-schema |
---|---|
Requirement | Requirement 97: /req/sensorml/deployment-schema |
Test purpose | Validate that the SensorML representation of Deployment resources is valid. |
Test method |
|
Identifier | /conf/sensorml/deployment-mappings |
---|---|
Requirement | Requirement 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: |
Identifier | /conf/sensorml/procedure-schema |
---|---|
Requirement | Requirement 99: /req/sensorml/procedure-schema |
Test purpose | Validate that the SensorML representation of Procedure resources is valid. |
Test method |
|
Identifier | /conf/sensorml/procedure-sml-class |
---|---|
Requirement | Requirement 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:
|
Identifier | /conf/sensorml/procedure-mappings |
---|---|
Requirement | Requirement 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: |
Identifier | /conf/sensorml/property-schema |
---|---|
Requirement | Requirement 102: /req/sensorml/property-schema |
Test purpose | Validate that the SensorML representation of Property resources is valid. |
Test method |
|
Identifier | /conf/sensorml/property-mappings |
---|---|
Requirement | Requirement 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:
|
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.
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 ; …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.
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 Class | O&M Class | CS API Resource | Comments |
---|---|---|---|
Observation | OM_Observation | Observation | |
ObservableProperty | GFI_PropertyType | Property | |
Procedure | OM_Process | Procedure (type=sosa:Procedure) | |
ObservingProcedure | OM_Process | Procedure (type=sosa-oms:ObservingProcedure) | |
Observer | OM_Process | System (type=sosa:Sensor) | |
Host | - | System (type=sosa:Platform) | |
Deployment | - | Deployment | |
Sample | SF_SamplingFeature | SamplingFeature | |
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 Resource | Target CS API Resources | Comments |
---|---|---|
Collection Metadata | System Deployment DataStream | |
Instance Metadata | System Deployment DataStream |
And the following weblinks can be added to OGC API — Connected Systems resources to refer to OGC API — EDR resources:
CS API Resource | Target EDR Resources | Comments |
---|---|---|
System | Collection Instance | |
DataStream | Collection 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 Choice | Connected Systems | SensorThings |
---|---|---|
API Platform | Extension of OGC API Common and OGC — API Features. | OData Version 4.0 |
Query Language | Query string arguments, decoupled from resource encoding. | Generic query language inherited from OData. |
Resource Model | Based on SOSA/SSN/OMS and SensorML. | Simplified and adapted from O&M. |
Supported Observation Types | Scalar, vector, N-D coverage, video. | Scalar and simple records only. |
Multiple Format Support | Yes, 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 Resource | CS API Resource | Comments |
---|---|---|
Thing | System | type = sosa:Platform |
Location | Observation | Location is implemented as a specific kind of observation whose result is a location vector. |
HistoricalLocation | DataStream | Historical locations are implemented as a DataStream containing location observations (see above). |
Datastream | DataStream | |
Sensor | System | type = sosa:Sensor |
ObservedProperty | Property | |
Observation | Observation | |
FeatureOfInterest | SamplingFeature | The sampling feature is a proxy to any other feature resource. |
Actuator | System | type = sosa:Actuator |
TaskingCapability | CommandStream | |
Task | Command | |
- | Procedure | |
- | Deployment |
If needed, the following weblinks can be added to OGC API — Connected Systems resources to refer to SensorThings API resources:
CS API Resource | Target STA Resources | Comments |
---|---|---|
System | Thing Sensor Actuator | |
DataStream | Datastream | |
ControlStream | TaskingCapability |
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 Operation | CS API Resource | API Verb | Comments |
---|---|---|---|
GetCapabilities | Landing Page | GET | |
DescribeSensor | System | GET | GET on collection using the UID filter. |
InsertSensor | System | POST | |
DeleteSensor | System | DELETE | |
GetObservation | Observation | GET | GET on collection. |
GetObservationById | Observation | GET | GET on resource ID. |
InsertObservation | Observation | POST | + POST on SamplingFeature to add embedded features of interest. |
GetResult | Observation | GET | must use SWE Common format. |
InsertResult | Observation | POST | must use SWE Common format. |
GetResultTemplate | DataStreamSchema | GET | Retrieve the DataStream schema. |
InsertResultTemplate | DataStream | POST | Create a DataStream with its schema. |
GetFeatureOfInterest | SamplingFeature | GET |
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 Operation | CS API Resource | API Verb | Comments |
---|---|---|---|
GetCapabilities | Landing Page | GET | |
DescribeSensor | System | GET | GET on collection using the UID filter. |
DescribeTasking | ControlStream | GET | Retrieve the ControlStream schema. |
Submit | Command | POST | |
Update | Command | PUT or PATCH | |
Cancel | Command | DELETE | |
GetStatus | CommandStatus | GET | |
GetTask | Command | GET | |
DescribeResultAccess | CommandResult | GET | |
GetFeasibilty | Command | POST | Feasibility workflow implemented as a linked CommandStream. Feasibilty result provided as CommandResult. |
Reserve | Command | POST | Reservation/confirmation workflow implemented as a linked CommandStream. |
Confirm | Command | POST | Reservation/confirmation workflow implemented as a linked CommandStream. |
Annex D
(informative)
Revision History
Date | Release | Editor | Primary clauses modified | Description |
---|---|---|---|---|
2022-12-16 | 1.0 draft | Alex Robin | All | Initial draft version |
2023-04-21 | 1.0 draft | Alex Robin | All | Migration to Metanorma |
2023-12-07 | 1.0 draft | Alex Robin | All | Incorporated feedback from various SWG |
2024-05-21 | 1.0 draft | Alex Robin | All | Incorporated OAB feedback (“resources endpoint” terminology) |
2024-09-05 | 1.0 draft | Alex Robin | All | Updated ATS |
2025-03-18 | 1.0 draft | Christian Autermann | All | Incorporated 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