Approved

OGC Standard

OGC SensorThings API Extension: STAplus 1.0
Andreas Matheus Editor
Version: 1.0
Additional Formats: PDF
OGC Standard

Approved

Document number:22-022r1
Document type:OGC Standard
Document subtype:Implementation
Document stage:Approved
Document language:English

License Agreement

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

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




I.  Abstract

The OGC SensorThings API Extension: STAplus 1.0 Standard specifies a backwards-compatible extension to the OGC Standard SensorThings API Part 1: Sensing and Sensing 1.1 data model.

The motivation for specifying this STAplus extension is based on requirements from the Citizen Science community.

The dominant use for the OGC SensorThings API data model and API can be coined with the use case “single authority provides sensor readings to consumers.” However, in Citizen Science there are many contributors (citizens) who – together – create the big picture with their observations.

The STAplus extension is designed to support a model in which observations are owned by different users. This results in requirements for the ownership concept. In addition to the ownership, users may express a license for ensuring proper re-use of their observations. The STAplus extension also supports expressing explicit relations between observations as well as between observations and external resources. Relations can enrich observations to enable future extensions supporting Linked Data, RDF and SPARQL. Observation group(s) allow the grouping of observations that belong together.

The STAplus extension is believed to be an important contribution towards the realization of the FAIR principles as STAplus strengthens the “I” (Interoperability) through a common data model and API as well as the “R” (Re-usability) by allowing expressing standards-based queries that may consider licensing conditions which is relevant for reuse of other users’ observations.

The STAplus Data Model and Business Logic also enriches existing deployments as the extension can be seamlessly added and thereby offers new capabilities to create and manage the “big picture” with multi-user capabilities.

The key work for crafting this OGC Standard was undertaken in the Co-designed Citizen Observatories Services for the EOS-Cloud (Cos4Cloud) project, which received funding from the European Union’s Horizon 2020 research and innovation program and the Enhancing Citizen Observatories for healthy, sustainable, resilient and inclusive cities (CitiObs) project, which received funding from the European Union’s Horizon Europe research and innovation program. Testing of this extension was done with data from the Framework biodiversity project, which received funding from the European Union’s Horizon 2020 research and innovation program.

II.  Keywords

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

OGC Standard, API, SensorThings, STAplus


III.  Preface

STAplus — OGC SensorThings API Extension: STAplus 1.0 — defines a SensorThings data model extension to improve FAIR principles when exchanging sensor data including licensing and ownership information.

The STAplus extension is fully backwards compatible to the existing OGC SensorThings API Part 1: Sensing as well as Sensing Version 1.1 and thereby offers existing deployments an easy upgrade to STAplus.

IV.  Security Considerations

A STAplus service implementation that supports the Create, Update, or Delete of entities should also implement authentication and a “fit-for-purpose” business logic that enforces the required access conditions to ensure ownership of all entities, including SensorThings core entities.

The Business Logic makes the full power of STAplus useful! For example, sealed (closed) ObservationGroups — aka a group of observations that may include relations — could be used for interdisciplinary research by simply exchanging the group’s URL. But, it is essential to trust such a group which requires a verifiable group author and the business logic to support integrity of such a closed group.

As each business logic flow may be different from service to service deployment, the operator of the service should describe the business logic and make it available to developers that intend to use the STAplus service. The specification of a conformance class Business Logic, reflecting the semantics of the logic in a standardized and machine readable fashion, is out of scope for this Standard but could be defined in an extension to STAplus.

Without an appropriate business logic, enforcing ownership and ensuring integrity in a multi-user scenario, it is possible that “junk” or “spam” is associated to a party without their knowledge. In such a multi-user CRUD access scenario, it would also be possible to “steal” an entire Datastream entity by simply updating the associated Party entity. Further, observations could be modified or even deleted without the owning user’s approval. While not specific to STAplus, these Business Logic considerations and concerns should be identical for any deployed SensorThings API service.

The STAplus data model does not support the recording of provenance. If the business logic allows the update or even deletion of entities, there is no history of who did what and when. The data served from a service implementation is a snapshot in time which may cause pagination to produce non deterministic results.

For implementations of the Create, Update, and Delete conformance class it is paramount to check all user uploads for malicious content. Typical SQL injection checks are mandatory but also JavaScript code injection must be tackled. For example, it is likely that the value of an observation will be displayed on some HTML page. To prevent malicious code or virus injection, similar to cross-site-scripting attacks, pattern checking on any uploaded data should be accomplished.

The STAplus data model does not support the storage of personal data with a Party entity. Neither offers the Party entity the usual properties property to ensure personal data is not stored there. As a result, any requirement for accessing and sharing of personal data must take place with another system. Such system is likely connected to the same authentication as the STAplus service to ensure alignment between the authId within STAplus and the management of personal data stored at the other system. As personal data gets associated with STAplus user identifiers, it is recommended to operate the other system controlling the exchange of personal information. Such a system could be designed on an opt-in basis: A user is asking the other system for personal data to be used in a particular context of another user via the identifier. Once the user has approved the use of the personal data for the given context, the data received from STAplus can be linked with the personal data from the other system based on the user’s identifier (authId). Even though the STAplus data model does not support the direct storage of personal data, it could be possible that in a wider eco-system personal data can be linked with user’s identifier from STAplus.

The use of a unique authId is mandatory to ensure integrity and confidentiality of data when STAplus is used as a multi-user service. In case that multiple authentication systems are to be supported, the resulting authId has to be unique for the service. One possibility would be to require that acceptable authentication systems support the Decentralized Identifiers (DIDs) v1.0. The use of World Wide Web Consortium (W3C) Decentralized Identifiers (DIDs) helps by the DID structure that identifiers of each authentication system become globally unique.

The authId or the displayName can be used in $filter or $select to craft STAplus queries on entities that belong to a particular user. However, it is important to recognize that the authId for a user will not change but the displayName may.

Even though not a direct feature of STAplus, storage of location and time is possible as inherited from STA. An implementation’s business logic may obfuscate the location of a sensor or observations based on internal logic. It is also possible that the user’s application that uploads the time/location values obfuscates values according to user’s discretion. This would ensure disconnect between location of observations and tracking location of people.

The exposure of time/location may become sensitive information in certain cases. The business logic should implement certain conditions that at least ensure compliance with the law.

The upload of binary data or graphical language must be sanitized in compliance with the law. In particular, ethical aspects must be considered to ensure that observation values are not misused i.e., to result into personal harassment.

V.  Submitting Organizations

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

VI.  Submitters

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

NameRepresentingOGC Member
Andreas MatheusSecure Dimensions GmbHYes
Joan MasoCentre de Recerca Ecològica i Aplicacions Forestals (CREAF)Yes
Hylke van der SchaafFraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.Yes

OGC SensorThings API Extension: STAplus 1.0

1.  Scope

While the OGC SensorThings API provides an open Standard-based and geospatial-enabled framework to interconnect the Internet of Things, OGC STAplus extends the scope of SensorThings API to use cases where sensors are deployed by different actors structured in one or more campaigns. The STAplus Standard also allows for relating observations to other internal or external observations and group observations. The open STAplus Standard is backwards-compatible with SensorThings API and uses the same web API and MQTT mechanisms. The grouping and relations can be used for linking sensor data beyond the original link to semantic definitions in ObservedProperty and unitOfMeasurement, and includes terms of use and licenses. Both additions improve the reusability aspect of the FAIR principles. This Standard also emphasizes on how to use an implementation in multi-user environments.

2.  Conformance

All requirements-classes and conformance-classes described in this document are owned by the standard(s) identified.

2.1.  Introduction

The STAplus 1.0 standard defines an extension to the OGC Standards OGC SensorThings API Part 1: Sensing (SensorThings API v1.0) and OGC SensorThings API Part 1: Sensing Version 1.1 (SensorThings API v1.1) by adding additional entity types to the data model. Access to the STAplus entities via HTTP is defined in the Read, Create, Update, and Delete Requirements Classes. The use of MQTT for STAplus entities is defined in the MQTT Requirements Class. A default default-CRS is defined via the Default-CRS Requirements Class and additional geometry encodings are defined in the Geometry FG and Geometry WKT Requirements Class. The Authentication Requirements Class supports the unique identification of acting users. The Business Logic Requirements Class supports the textual description of the implemented business logic. An example of such a Business Logic is described in the OGC Best Practice for using SensorThings API with Citizen Science.

2.2.  STAplus 1.0 Conformance Classes

This OGC Standard defines one mandatory and several optional conformance classes.

Conformance with this Standard shall be checked using all the relevant tests specified in Annex A of this document. The framework, concepts, and methodology for testing, and the criteria to be achieved to claim conformance are specified in the OGC Compliance Testing Policies and Procedures and the OGC Compliance Testing web site.

In order to conform to this OGC Standard, a software implementation shall choose to implement:

  • The one mandatory conformance class Core;

  • Any one of the optional conformance classes; and

  • Pass all applicable tests as defined in Annex A.

This is the list of STAplus Conformance Classes.

  • Core (mandatory): This Conformance Class incorporates the capabilities to support the Read of STAplus entities via HTTP. It also includes the Default-CRS Requirements Class to ensure interoperability with geometry encodings in the feature and location properties.

  • Create (optional): This Conformance Class supports to create STAplus entities via HTTP.

  • Update (optional): This Conformance Class supports to update STAplus entities via HTTP.

  • Delete (optional): This Conformance Class supports to delete STAplus entities via HTTP.

  • Authentication (optional): This Conformance Class supports user authentication and their unique identification.

  • Geometry-FG (optional): This Conformance Class supports the alternative geometry encoding for the feature and location properties based on Features and their Geometries.

    NOTE:    This Conformance Class remains informative until OGC Features and Geometries JSON - Part 1: Core is an adopted OGC Standard.

2.2.1.  Conformance Class Core

The Core Conformance Class is defined as follows:

Conformance class 1: Core

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Requirements classRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
Requirements class 2: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/party
Requirements class 3: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/license
Requirements class 4: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/group
Requirements class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/relation
Requirements class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/campaign
Requirements class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/read
Requirements class 15: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/default-crs
Target TypeImplementation
Conformance testsConformance test A.1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/common-control-information
Conformance test A.2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/entities
Conformance test A.3: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/read
Conformance test A.4: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/default-crs/crs-definition
Conformance test A.5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/default-crs/axis-order
Conformance test A.6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/default-crs/media-type
Conformance test A.7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/default-crs/processing

2.2.2.  Conformance Class Create

The Create Conformance Class is defined as follows:

Conformance class 2: Create

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/create
Requirements classRequirements class 8: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/create
PrerequisiteConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Target TypeImplementation
Conformance testConformance test A.8: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/create/http

2.2.3.  Conformance Class Update

The Update Conformance Class is defined as follows:

Conformance class 3: Update

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/update
Requirements classRequirements class 9: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/update
PrerequisiteConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Target TypeImplementation
Conformance testsConformance test A.9: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/update/put
Conformance test A.10: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/update/patch

2.2.4.  Conformance Class Delete

The Delete Conformance Class is defined as follows:

Conformance class 4: Delete

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/delete
Requirements classRequirements class 10: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/delete
PrerequisiteConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Target TypeImplementation
Conformance testConformance test A.11: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/delete/entity

2.2.8.  Conformance Class MQTT Subscribe STA v1.0

The MQTT Subscribe STA v1.0 Conformance Class is defined as follows:

Conformance class 8: MQTT Subscribe STA v1.0

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-10
Requirements classRequirements class 11: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/mqtt-subscribe-sta-10
PrerequisiteConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Target TypeImplementation
Conformance testsConformance test A.33: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-10/definition
Conformance test 8-2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-10

2.2.9.  Conformance Class MQTT Subscribe STA v1.1

The MQTT Subscribe STA v1.1 Conformance Class is defined as follows:

Conformance class 9: MQTT Subscribe STA v1.1

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-11
Requirements classRequirements class 12: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/mqtt-subscribe-sta-11
PrerequisiteConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Target TypeImplementation
Conformance testsConformance test A.34: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-11/definition
Conformance test 9-2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-11

2.2.10.  Conformance Class Business Logic

The Business Logic Conformance Class is defined as follows:

Conformance class 10: Business Logic

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic
Requirements classRequirements class 13: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/business-logic
PrerequisiteConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Target TypeImplementation
Conformance testsConformance test A.17: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic/definition
Conformance test A.18: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic/location

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.

OGC, OGC SensorThings API Part 1: Sensing, OGC (2016), https://docs.ogc.org/is/15-078r6/15-078r6.html

OGC, OGC SensorThings API Part 1: Sensing Version 1.1, OGC (2020), https://docs.ogc.org/is/18-088/18-088.html

IETF, The GeoJSON Format, (2016), https://www.rfc-editor.org/rfc/rfc7946.html

ISO, Geographic information — Simple features access — Part 1: Common architecture, 2004, https://portal.opengeospatial.org/files/?artifact_id=25355

4.  Terms, definitions and abbreviated terms

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.

4.1.  Terms and definitions

4.1.1. Campaign

An event or an activity that results in or is linked to a collection of MultiDatastream, Datastream, and/or ObservationGroup. A campaign is commonly limited in space and time and can be managed by one party.

4.1.2. License

An agreement between a party and other parties to gain access and use primarily observations but also groups of observations and campaigns. The agreement can include, among others, clauses about how to share data with others not involved in the licensing agreement, the capability to execute commercial activities, the authorization to share modified versions of the data, and the need for attributing the original authors. Associating a license with a MultiDatastream, Datastream expresses re-use conditions for all associated observations. Associating a license to an ObservationGroup or a Campaign expresses their re-use conditions.

4.1.3. ObservationGroup

A collection of observations that are grouped together for a particular purpose.

4.1.4. Ownership

The right of possession over entities such as things, campaigns, observation groups, and other entities related to them. Ownership is required to properly manage create, update, and delete operations in a multi-user environment.

4.1.5. Party

A user, interacting with the service facilitating the creation of observations and managing owned resources. A party can own a thing, decide on the license of a datastream of observations, manage a campaign, be responsible of an observation group, etc.

4.1.6. Relation

A relationship established between two observations or an observation and an external resource for a particular reason.

4.2.  Abbreviated terms

API

Application Programming Interface

CC

Creative Commons

CRUD

Create Read Update Delete

DID

Decentralized Identifier

GDPR

European General Data Protection Regulation

MQTT

Message Queuing Telemetry Transport

STA

Sensor Things API

STAplus

Sensor Things API PLUS extension

5.  Conventions

This Clause provides details and examples for any conventions used in the document. Examples of conventions are symbols, abbreviations, use of XML schema, or special notes regarding how to read the document.

5.1.  Identifiers

The normative provisions in this standard are denoted by the URI

http://www.opengis.net/spec/sensorthings-staplus/1.0

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

6.  Introduction

The STAplus 1.0 Standard defines an extension to the OGC SensorThings API (STA). This STAplus extension originally started with motivations and requirements from the Citizen Science community. However, the STAplus extension has wider applicability than just Citizen Science.

STAplus is a 100% backwards compatible extension to the STA data model of version 1.0 and 1.1 and as such can be added to existing STA deployments.

In addition to the data model extension, this Standard defines different concepts that support operating an implementation in a multi-user CRUD deployment.

6.1.  Concept of Ownership

In Citizen Science, users participate in campaigns or projects, offered by different Citizen Science portals. These portals, typically operated by different organizations, have one feature in common: Contributions, uploaded by users are associated with the user and the ownership does not change. There is an explicit relationship between the observation (resource) and the user. Expressed as ownership, users can undertake certain actions on their resources.

With the SensorThings API, observations are linked to a data stream that is linked to a sensor which belongs to a thing. The data model does not provide a class that supports explicitly linking a user to an observation. This limits the use of the STA data model and API to a simple use case: One operator can create data objects and all other users have read-only access. This limits the options for applications to interact with the API.

Even though the STA v1.1 data model offers the generic use of properties, expressing ownership buried in properties is not wise. Storing personal data in those properties makes compliance with the European General Data Protection Regulation (GDPR) difficult. This is because it is unclear if properties store personal data and therefore fall under GDPR. Also, this decreases interoperability tremendously as an application developer would need to know which attribute can be used to express ownership. Lastly, querying observations based on unstructured properties is extremely complex and difficult.

Therefore, the STAplus extension defines the class Party for expressing the association from a Datastream or MultiDatastream to a user. All uploaded observations, associated to a Datastream instance belong to the party associated to the Datastream. Parties can also own Things and ObservationGroups, and participate in Campaigns.

6.2.  Improving F A I R

In general, there are many aspects when it comes to ensuring the reusability of (existing) data. Licensing is a fundamental aspect, not just in the context of Citizen Science. Very many users contribute to Citizen Science with the motivation of doing meaningful things for the common good. At the same time, users like to be credited when it comes to re-use of their contribution(s). Therefore, most contributions in Citizen Science are freely accessible (open access) and the re-use is “open” but restrictions may apply. In order to get credited, users might associate a license like CC-BY (Creative Commons Attribution License). Even though the data is still freely accessible, there is a condition that must be followed as expressed in the license.

6.3.  Licensing

Applying licensing is a difficult task. In particular in a deployment like Citizen Science, where users may decide which license gets applied to their contributions. Too many different and perhaps incompatible licenses exist which may risk a proper re-use. STAplus supports licensing in a flexible way by only demanding that a license has unique URI based identifier (definition property). Even though STAplus does not constraint which license types to use, an implementation should constraint the proliferation of licenses via the Business Logic. As illustrated in the OGC Best Practice for using SensorThings API with Citizen Science, an implementation may create all License entities and disallow that users create their own licenses. For the Creative Commons licensing framework, this leads to the existence of seven recommended licenses which ensures a proper re-use as license compatibility can easily be computed.

When it comes to attribution licenses, the re-use requires the provision of a citation to name the original author. For the Creative Commons licensing framework, best practices exist that do not need any additional consideration in the STAplus data model. However, a user may want to be able to express an individual attribution to be used with the license. Such information — the actual attribution text — could be stored in the properties of the License entity. But this would require that the business logic allows creation of License entities. To make sure that still only a particular licensing framework can be used, the Business Logic could allow a user to create a License entity and store the individual citation into a property like attributionText but constrain the definition property to those URIs that include the attribution license building block.

6.4.  Creating Observation Groups

When contributing to Citizen Science, the relevant information is often a set or bag of individual observations that belong together — i.e., may belong to the same observation event. For example, a camera trap event consists of a picture, a textual observation expanding the likelihood of species prediction and sensor readings for environmental context (temperature, humidity, luminance, air pressure, GPS location). All of these observations potentially created by different sensors could be grouped when created at the same time/location.

Another use case for applying grouping to existing observations is to create a package of observations for the purpose of building the fundamentals for research or to be used in workflows. For researching and later evaluation of a particular phenomenon, the same group of observations could be exchanged via the grouping concept.

Also, over time a user community might link other observations and even provide cross links to other databases. These can be semantically tagged with the Relation entity which is described next in this document.

The STAplus extension defines a flexible grouping concept by adding the ObservationGroup entity to the STA data model.

6.5.  Expressing Relations

Supporting search based on explicit relations is important for Citizen Science. While the STA ObservedProperty entity supports links to external resources, the Observation entity does not. The STAplus Relation entity adds external linking support to Observation entities.

The Relation entity supports creating generic “– to” relation from an Observation entity. The “to” can point to another observation or to any external resource. This allows the generic expression of meaning, leveraging existing semantic concepts that exist elsewhere, for example Dublin or Darwin Core. Adding relations to an ObservationGroup entity helps to reason how observations are related even if they were not observed in a same observation event, but instead were linked later to a particular community process (as linking to other databases).

The use of Relation entities as defined in STAplus can be applied to already existing SensorThings deployments to semantically enrich the data.

6.6.  Data Model Extension

The STAplus data model extension allows expressing the following additional characteristics.

  • Party: The Party entity supports linking a user to a Datastream, MultiDatastream, Campaign or ObservationGroup and Thing.

  • License: The License entity supports expressing reuse conditions by linking a License to a Datastream, MultiDatastream, and / or to a ObservationGroup. A License on a Datastream has the result that all Observation entities of that Datastream or MultiDatastream (as well as entities of the Thing, Sensor, and ObservedProperty) have the associated license. A License on an ObservationGroup gives the bag or set of Observations (represented by the ObservationGroup) a license for reuse. Note that the license for each Observation must still be followed.

  • Union: The ObservationGroup entity supports packaging individual Observations as a bag or set either as deep copy or via linking

  • Semantics: The Relation entity supports expressing relationships between Observation entities using the “-to” role type. It is also possible to create relations between Observation entities and external resources using the URI scheme. This allows in particular expressing a relation to any entity of the database (via their external URI). Relation entities can exist on their own or be included into an ObservationGroup to enrich a bag or set of Observation entities.

  • Campaign: The Campaign entity is a container of Datastream, MultiDatastream and ObservationGroup entities that supports organizing a campaign or project and to provide metadata as well as legal information such as terms of use and a privacy statement, in case it is relevant.

7.  STAplus Entity Type Requirements

Party, License, ObservationGroup, Relation, and Campaign are the STAplus entity types.

In this section, the properties for each STAplus entity type and the direct relation to other entity types are explained.

NOTE:    Please be aware that all of the Requirements Classes in this section are part of the Conformance Class Clause 2.2.1.

7.1.  Requirements Class Entity Control Information

NOTE:    For more information, please see OGC SensorThings API Part 1: Sensing Version 1.1, §8.1.

Requirements class 1: Entity Control Information

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
Obligationrequirement
Target typeTarget Type: Implementation
Conformance classConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
PrerequisiteOGC SensorThings API Part 1: Sensing or OGC SensorThings API Part 1: Sensing Version 1.1
Normative statementRequirement 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/common-control-information

Requirement 1

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/common-control-information
Included inRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
Statement

Each STAplus entity SHALL have the following common control information listed in Table 1.

Table 1 — Common control information

NameDefinitionData typeMultiplicity and use

id

id is the system-generated identifier of an entity that is unique among the entities of the same entity type in a SensorThings API service instance.

Any

One (mandatory)

selfLink

selfLink is the absolute URL of an entity that is unique among all other entities.

URL

One (mandatory)

navigationLink

navigationLink is the relative or absolute URL that retrieves content of related entities.

URL

One-to-many
(mandatory)

7.2.  Requirements Class Party

The Party entity can be used to represent acting users and to model ownership.

One example for ownership is that a satellite Thing is owned by a space agency. This ownership may entitle the space agency to be the only party that can update the thing’s location. Other parties can then mount their sensor on the satellite and provide Datastream, or MultiDatastream entities to upload observations generated by their sensors. Via the association to the Datastream resp. MultiDatastream their ownership of the observations is guaranteed. By associating a license to the (multi)datastream, they could also define re-use conditions.

Requirements class 2: Party

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/party
Obligationrequirement
Target typeTarget Type: Implementation
PrerequisiteRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
Normative statementsRequirement 2: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/party/properties
Requirement 3: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/party/relations

Requirement 2

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/party/properties
Included inRequirements class 2: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/party
Statement

Each Party entity SHALL have the mandatory properties and MAY have the optional properties listed in Table 2.

Table 2 — Properties of a Party entity

NameDefinitionData typeCardinality and use

role

This is the role of the party

CharacterString [‘individual’, ‘institutional’]

One (mandatory)

description

This is a short description of the party

CharacterString

Zero or One (optional)

displayName

A property commonly used for saluting the party

CharacterString

Zero or One (optional)

authId

A system wide unique property (e.g., REMOTE_USER or SUB from authentication) to uniquely identify the party

CharacterString

Zero or One (optional)

Requirement 3

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/party/relations
Included inRequirements class 2: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/party
Statement

An implementation SHALL allow each Party to have direct associations to other entity types listed in Table 3 and Table 4.

Table 3 — Direct relation from a Party entity to other entity types

Relation nameEntity typeCardinalityDescription

Datastreams

Datastream

Zero to Many

A Party has zero-to-many Datastreams.

MultiDatastreams (optional)

MultiDatastream

Zero to Many

A Party has zero-to-many MultiDatastreams.

Things

Thing

Zero to Many

A Party has zero-to-many Things.

ObservationGroups

ObservationGroup

Zero to Many

A Party has zero-to-many ObservationGroups.

Campaigns

Campaign

Zero to Many

A Party has zero-to-many Campaigns.

Table 4 — Direct relation from a SensorThings entity type to Party

Relation nameSource Entity typeCardinalityDescription

Party

Datastream

Zero or One

A Datastream has zero-to-one Party.

Party (optional)

MultiDatastream

Zero or One

A MultiDatastream has zero-to-one Party.

Party

Thing

Zero or One

A Thing has zero-to-one Party.

7.3.  Requirements Class License

The License entity can be used to associate a re-use condition to observations via a Datastream or MultiDatastream. It can also be used to express re-use conditions for an ObservationGroup or Campaign.

Requirements class 3: License

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/license
Obligationrequirement
Target typeTarget Type: Implementation
PrerequisiteRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
Normative statementsRequirement 4: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/license/properties
Requirement 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/license/relations

Requirement 4

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/license/properties
Included inRequirements class 3: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/license
Statement

Each License entity SHALL have the mandatory properties and MAY have the optional properties listed in Table 5.

Table 5 — Properties of a License entity

NameDefinitionData typeCardinality and use

name

A property provides a label for License entity, commonly a descriptive name.

CharacterString

One (mandatory)

description

This is a short description of the corresponding License entity.

CharacterString

Zero or One (optional)

definition

This is a URI referencing the License entity.

URI

One (mandatory)

logo

This is the URI of the logo for the License entity.

CharacterString

Zero or One (optional)

attributionText

The text to be used as attribution when mandated by the license.

CharacterString

Zero or One (optional)

Requirement 5

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/license/relations
Included inRequirements class 3: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/license
Statement

An implementation SHALL allow each License to have direct associations to other entity types listed in Table 6 and Table 7.

Table 6 — Direct relation from a License entity to other entity types

Relation nameEntity typeCardinalityDescription

Datastreams

Datastream

Zero to Many

A License has zero-to-many Datastreams.

MultiDatastreams (optional)

MultiDatastream

Zero to Many

A License has zero-to-many MultiDatastreams.

Campaigns

Campaign

Zero to Many

A License has zero-to-many Campaigns.

ObservationGroups

ObservationGroup

Zero to Many

A License has zero-to-many ObservationGroups.

Table 7 — Direct relation from a SensorThings entity type to License

Relation nameSource Entity typeCardinalityDescription

License

Datastream

Zero or One

A Datastream MAY have zero-to-one License.

License (optional)

MultiDatastream

Zero or One

A MultiDatastream MAY have zero-to-one License.

7.4.  Requirements Class ObservationGroup

The ObservationGroup entity is a bag of observations and/or relations that can be shared and re-used.

Requirements class 4: ObservationGroup

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/group
Obligationrequirement
Target typeTarget Type: Implementation
PrerequisiteRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
Normative statementsRequirement 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/group/properties
Requirement 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/group/relations

Requirement 6

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/group/properties
Included inRequirements class 4: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/group
Statement

Each ObservationGroup entity SHALL have the mandatory properties and MAY have the optional properties listed in Table 8.

Table 8 — Properties of a ObservationGroup entity

NameDefinitionData typeCardinality and use

name

A property provides a label for ObservationGroup entity, commonly a descriptive name.

CharacterString

One (mandatory)

description

This is a short description of the corresponding ObservationGroup entity.

CharacterString

One (mandatory)

purpose

This is a short description of the purpose for the ObservationGroup entity.

CharacterString

Zero or One (optional)

creationTime

This is the time when the ObservationGroup was created.

TM Instant

One (mandatory)

endTime

This is the end time of the ObservationGroup entity. The exact semantics depend on the business logic.

TM Instant

Zero or One (optional)

termsOfUse

Express the term of use for the ObservationGroup entity.

CharacterString

Zero or One (optional)

privacyPolicy

Express the term of use for personal data that are contained in the ObservationGroup entity.

CharacterString

Zero or One (optional)

dataQuality

The quality information of the observations in the group

JSON Object

Zero or One (optional)

properties

The SensorThings API definition applies

JSON Object

Zero or One (optional)

Requirement 7

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/group/relations
Included inRequirements class 4: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/group
Statement

An implementation SHALL allow each ObservationGroup to have direct associations to other entity types listed in Table 9 and Table 10.

Table 9 — Direct relation from a ObservationGroup entity to other entity types

Relation nameEntity typeCardinalityDescription

License

License

Zero or One

A ObservationGroup has zero-to-one License.

Observations

Observation

Zero to Many

A ObservationGroup has zero-to-many Observations.

Relations

Relation

Zero to Many

A ObservationGroup has zero-to-many Relations.

Party

Party

Zero or One

A ObservationGroup has zero-to-one Party.

Campaigns

Campaign

Zero to Many

A ObservationGroup has zero-to-many Campaigns.

Table 10 — Direct relation from a SensorThings entity type to ObservationGroup

Relation nameSource Entity typeCardinalityDescription

ObservationGroups

Observation

Zero to Many

An Observation has zero-to-many ObservationGroups.

7.5.  Requirements Class Relation

The Relation entity can either be used to describe relationships between two observations, or one observation and a resolvable external resource identified by a URI.

Requirements class 5: Relation

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/relation
Obligationrequirement
Target typeTarget Type: Implementation
PrerequisiteRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
Normative statementsRequirement 8: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/relation/properties
Requirement 9: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/relation/relations

Requirement 8

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/relation/properties
Included inRequirements class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/relation
Statement

Each Relation entity SHALL have the mandatory properties and MAY have the optional properties listed in Table 11.

Table 11 — Properties of a Relation entity

NameDefinitionData typeCardinality and use

role

This URI references the definition of the Relation entity.

URI

One (mandatory)

description

This is a short description of the corresponding Relation entity.

CharacterString

Zero or One (optional)

externalResource

This URI references the external resource for the Relation entity.

URI

Zero or One (optional)

properties

The SensorThings API definition applies

JSON Object

Zero or One (optional)

NOTE:    The subject of a relation entity is always an observation. For expressing the object of a relation, the Object relation XOR externalResource property must be used.

Requirement 9

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/relation/relations
Included inRequirements class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/relation
Statement

An implementation SHALL allow each Relation to have direct associations to other entity types listed in Table 12.

Table 12 — Direct relation from a Relation entity to other entity types

Relation nameEntity typeCardinalityDescription

Subject

Observation

Zero or One

A Relation SHALL have one Subject.

Object

Observation

Zero or One

A Relation has zero-to-one Object.

ObservationGroups

ObservationGroup

Zero to Many

A Relation has zero-to-many ObservationGroups.

NOTE:    For expressing the object of a relation, the following constrain applies: Object relation XOR externalResource property.

Table 13 — Direct relation from a SensorThings entity type to Relation

Relation nameSource Entity typeCardinalityDescription

Objects

Observation

Zero to Many

An Observation/Subject has zero-to-many Relation/Objects.

Subjects

Observation

Zero to Many

An Observation/Object has zero-to-many Relation/Subjects.

7.6.  Requirements Class Campaign

The Campaign entity is a container of Datastream or MultiDatastream entities. A Campaign can have a particular purpose and a managing party.

Requirements class 6: Campaign

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/campaign
Obligationrequirement
Target typeTarget Type: Implementation
PrerequisiteRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
Normative statementsRequirement 10: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/campaign/properties
Requirement 11: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/campaign/relations

Requirement 10

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/campaign/properties
Included inRequirements class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/campaign
Statement

Each Campaign entity SHALL have the mandatory properties and MAY have the optional properties listed in Table 14.

Table 14 — Properties of a Campaign entity

NameDefinitionData typeCardinality and use

name

A property provides a label for Campaign entity, commonly a descriptive name.

CharacterString

One (mandatory)

description

This is a short description of the corresponding Campaign entity.

CharacterString

One (mandatory)

classification

Determines if the data stream(s), multi data stream(s) or group(s) of the Campaign entity contain sensitive information.

ValueCode

Zero or One (optional)

termsOfUse

Express the term of use for the Campaign entity.

CharacterString

One (mandatory)

privacyPolicy

Express the terms of use for personal data that are contained in the Campaign entity.

CharacterString

Zero or One (optional)

url

This is the URL for the Campaign entity that provides additional information that cannot be captured in this entity alone.

URL

Zero or One (optional)

creationTime

This is the time when the Campaign entity was created.

TM Instant

One (mandatory)

startTime

This is the starting time of the Campaign entity. The exact semantics depend on the business logic.

TM Instant

Zero or One (optional)

endTime

This is the ending time of the Campaign entity. The exact semantics depend on the business logic.

TM Instant

Zero or One (optional)

Requirement 11

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/campaign/relations
Included inRequirements class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/campaign
Statement

An implementation SHALL allow each Campaign to have direct associations to other entity types listed in Table 15 and Table 16.

Table 15 — Direct relation from a Campaign entity to other entity types

Relation nameEntity typeCardinalityDescription

Datastreams

Datastream

Zero to Many

A Campaign has zero-to-many Datastreams.

MultiDatastreams (optional)

MultiDatastream

Zero to Many

A Campaign has zero-to-many MultiDatastreams.

Party

Party

Zero or One

A Campaign has zero-to-one Party.

ObservationGroups

ObservationGroup

Zero to Many

A Campaign has zero-to-many ObservationGroup.

License

License

Zero or One

A Campaign MAY have zero-to-one License.

Table 16 — Direct relation from a SensorThings entity type to Campaign

Relation nameSource Entity typeCardinalityDescription

Campaigns

Datastream

Zero to Many

A Datastream has zero-to-many Campaigns.

Campaigns (optional)

MultiDatastream

Zero to Many

A MultiDatastream has zero-to-many Campaigns.

8.  STAplus Read, Create, Update and Delete Requirements

8.1.  Overview

As many IoT devices are resource-constrained, the SensorThings API adopts the efficient REST web service style. That means the Read, Create, Update, Delete actions can be performed on a STAplus entity type.

8.2.  Requirements Class Read

Requirements class 7: Read

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/read
Obligationrequirement
Target typeTarget Type: Implementation
PrerequisiteRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
Normative statementRequirement 12: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/read/entity

Requirement 12

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/read/entity
Included inRequirements class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/read
Statement

To read a STAplus entity or a collection of STAplus entities, the client SHALL send a HTTP GET request to that entity or the collection’s URL.

If the target URL for the collection is a navigationLink, the entity is automatically linked to the entity or entities represented by the navigationLink.

Upon successful completion, the response SHALL contain the representation of the entity or entities.

8.3.  Requirements Class Create

Requirements class 8: Create

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/create
Obligationrequirement
Target typeTarget Type: Implementation
Conformance classConformance class 2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/create
PrerequisiteRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
Normative statementsRequirement 13: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/entity
Requirement 14: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/link-to-existing-entities
Requirement 15: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/deep-insert
Requirement 16: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/deep-insert-status-code

Requirement 13

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/entity
Included inRequirements class 8: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/create
Statement

To create a STAplus entity in a collection, the client SHALL send a HTTP POST request to that collection’s URL. The POST body SHALL contain a single valid entity representation.

If the target URL for the collection is a navigationLink, the new entity is automatically linked to the entity containing the navigationLink.

Upon successful completion, the response SHALL contain a HTTP location header that contains the selfLink of the created entity.

Upon successful completion the service SHALL respond with either 201 Created, or 204 No Content.

Adapted from OData Version 4.01. Part 1: Protocol, §11.4.2 Create an Entity

Requirement 14

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/link-to-existing-entities
Included inRequirements class 8: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/create
Statement

A STAplus implementation that supports entity creation SHALL support linking new STAplus entities to existing entities upon creation. To create a new entity with links to existing entities in a single request, the client SHALL include the unique identifiers of the related entities associated with the corresponding navigation properties in the request body.

Requirement 15

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/deep-insert
Included inRequirements class 8: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/create
Statement

A request to create a STAplus entity that includes related entities, represented using the appropriate inline representation, is referred to as a “deep insert”. A STAplus implementation that supports entity creation SHALL support deep insert.

If the inline representation contains a value for a computed property (i.e., id), the service SHALL ignore that value when creating the related entity.

On success, the service SHALL create all entities and relate them. On failure, the service SHALL NOT create any of the entities.

Adapted from OData Version 4.01. Part 1: Protocol, §11.4.2.2 Create Related Entities When Creating an Entity

Requirement 16

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/deep-insert-status-code
Included inRequirements class 8: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/create
Statement

Upon successfully creating a STAplus entity, the service response SHALL contain a Location header that contains the URL of the created entity. Upon successful completion the service SHALL respond with 201 Created.

8.4.  Requirements Class Update

Requirements class 9: Update

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/update
Obligationrequirement
Target typeTarget Type: Implementation
Conformance classConformance class 3: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/update
PrerequisitesRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
https://docs.ogc.org/is/18-088/18-088.html#req-create-update-delete-update-entity
https://docs.ogc.org/is/18-088/18-088.html#req-create-update-delete-update-entity-put
https://docs.ogc.org/is/18-088/18-088.html#req-create-update-delete-update-entity-jsonpatch
Normative statementsRequirement 17: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/update/entity
Requirement 18: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/update/entity-put
Requirement 19: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/update/entity-jsonpatch

Requirement 17

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/update/entity
Included inRequirements class 9: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/update
Statement

To update a STAplus entity in a collection a STAplus implementation SHALL follow the requirements as defined in https://docs.ogc.org/is/18-088/18-088.html#req-create-update-delete-update-entity.

Requirement 18

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/update/entity-put
Included inRequirements class 9: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/update
Statement

A STAplus implementation that supports updates with PUT SHALL follow the requirements as defined in https://docs.ogc.org/is/18-088/18-088.html#req-create-update-delete-update-entity.

Requirement 19

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/update/entity-jsonpatch
Included inRequirements class 9: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/update
Statement

A STAplus implementation that supports updates with the JSON PATCH format SHALL follow the requirements as defined in https://docs.ogc.org/is/18-088/18-088.html#req-create-update-delete-update-entity-jsonpatch

8.5.  Requirements Class Delete

Requirements class 10: Delete

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/delete
Obligationrequirement
Target typeTarget Type: Implementation
Conformance classConformance class 4: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/delete
PrerequisitesRequirements class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/entity-control-information
https://docs.ogc.org/is/18-088/18-088.html#req-create-update-delete-delete-entity
Normative statementRequirement 20: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/delete/entity

Requirement 20

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/delete/entity
Included inRequirements class 10: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/delete
Statement

To delete a STAplus entity in a collection a STAplus implementation SHALL follow the requirements as defined in https://docs.ogc.org/is/18-088/18-088.html#req-create-update-delete-delete-entity.

9.  STAplus MQTT Requirements

The MQTT capability defined in this Standard allows that a client receives changes on STAplus entities via MQTT.

NOTE:    The ability for the creation of observations via MQTT is inherited from the SensorThings API Part 1: Sensing and Sensing v1.1 Standard.

9.1.  Overview

In the context of MQTT, all STAplus entities as defined in this Standard are equivalent to the STA entities. Therefore, the implementation of MQTT capabilities must be compliant with the SensorThings API Part 1: Sensing and Sensing v1.1 Standard.

9.2.  Requirements Class MQTT Subscribe STA v1.0

Requirements class 11: MQTT Subscribe STA v1.0

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/mqtt-subscribe-sta-10
Obligationrequirement
Target typeTarget Type: Implementation
Conformance classConformance test 8-2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-10
Prerequisitehttp://www.opengis.net/spec/iot_sensing/1.0/req/receive-updates-via-mqtt
Normative statementRequirement 21: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/mqtt-subscribe-sta-10

Requirement 21

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/mqtt-subscribe-sta-10
Included inRequirements class 11: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/mqtt-subscribe-sta-10
Statement

For the entities defined in STAplus, a STAplus implementation SHALL support the receiving of entity updates with MQTT Subscribe as defined in http://www.opengis.net/spec/iot_sensing/1.0/req/receive-updates-via-mqtt.

9.3.  Requirements Class MQTT Subscribe STA v1.1

Requirements class 12: MQTT Subscribe STA v1.1

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/mqtt-subscribe-sta-11
Obligationrequirement
Target typeTarget Type: Implementation
Conformance classConformance test 9-2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-11
Prerequisitehttp://www.opengis.net/spec/iot_sensing/1.1/req/receive-updates-via-mqtt
Normative statementRequirement 22: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/mqtt-subscribe-sta-11

Requirement 22

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/mqtt-subscribe-sta-11
Included inRequirements class 12: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/mqtt-subscribe-sta-11
Statement

For the entities defined in STAplus, a STAplus implementation SHALL support the receiving of entity updates with MQTT Subscribe as defined in http://www.opengis.net/spec/iot_sensing/1.1/req/receive-updates-via-mqtt.

10.  STAplus Business Logic Requirements

10.1.  Overview

The STAplus extension is defined based on requirements from the Citizen Science community. One major requirement from the Citizen Science community is that an implementation of STAplus can be used by many users simultaneously to read, create, update, and delete observations. To ensure integrity of all entities and to prevent inconsistencies in the observations, it is important that an implementation is not only compliant with this Standard but also has functionality that ensures entity consistency.

Even though the business logic can be very complex and most likely depend on many factors, it should be possible providing a hint to developers and guiding end users of the implementation in case a request results in an unexpected response.

As a machine readable and understandable description of the implemented business logic is preferred, the idea of the business logic requirements class is to allow the description of the logic in English text.

10.2.  Requirements Class Business Logic

Requirements class 13: Business Logic

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/business-logic
Obligationrequirement
Target typeTarget Type: Implementation
Conformance classConformance class 10: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic
Normative statementsRequirement 23: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/business-logic/definition
Requirement 24: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/business-logic/location

Requirement 23

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/business-logic/definition
Included inRequirements class 13: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/business-logic
Statement

The implementation’s business logic SHALL be described in English text.

Requirement 24

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/business-logic/location
Included inRequirements class 13: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/business-logic
Statement

The STAplus implementation SHALL provide a JSON object in the serverSettings object on the root URI with the name http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic that contains a property href which value is the URL of the HTML page describing the business logic.

11.  STAplus Authentication Requirements

11.1.  Overview

To regulate access to entities using CRUD operations, implementations may wish to use information from user / client application authentication to make access control decisions.

In addition, some implementations may wish to link the authentication identifier (e.g., REMOTE_USER) with the Party/authId. Therefore, the STAplus authentication must provide service-wide unique user identifiers.

11.2.  Requirements Class Authentication

Requirements class 14: Authentication

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/authentication
Obligationrequirement
Target typeTarget Type: Implementation
Conformance classConformance class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication
PrerequisiteRequirements class 2: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/party
Normative statementsRequirement 25: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id
Requirement 27: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-create
Requirement 26: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-read
Requirement 28: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-update
Requirement 29: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-delete

Requirement 25

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id
Included inRequirements class 14: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/authentication
Statement

The STAplus authentication SHALL provide a user identifier permanent for same user but different for each user.

Requirement 26

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-read
Included inRequirements class 14: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/authentication
Statement

The STAplus implementation SHALL ensure that the Party/authId property is exposed in any response and can be used in STA operators such as $filter or $select.

Requirement 27

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-create
Included inRequirements class 14: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/authentication
Statement

The STAplus implementation SHALL overwrite any existing value and SHALL set the Party/authId property with the user’s identification value provided by the authentication (e.g., REMOTE_USER).

Requirement 28

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-update
Included inRequirements class 14: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/authentication
Statement

The STAplus implementation SHALL ensure that the Party/authId property cannot be changed (ensure read-only).

Requirement 29

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-delete
Included inRequirements class 14: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/authentication
Statement

The STAplus implementation SHALL ensure that the Party/authId property cannot be deleted.

12.  STAplus Feature and Location Geometry Encoding Requirements

12.1.  Overview

The Location and FeatureOfInterest entities enable storing data objects with unspecified structure. Both entities potentially store geometry information. The STAplus extension supports multi-user interactions including the creation, updating, reading, and deletion of information. For example in Citizen Science, one service endpoint could accept that users can upload data using different applications. These applications might be developed by different parties and serve different purposes, and thus use different geometry structures and coordinate reference systems (CRS) to encode the coordinates of the geometries. This can result in the situation where the interoperability of uploaded geometry in the Location and FeatureOfInterest entities might become an issue.

For an implementation of STAplus, this situation becomes complicated when a $filter is leveraged that includes spatial conditions such as ST_Within. The filter expression does not carry any CRS information. Therefore, how does the implementation “know” how to apply a spatial filter to geometries stored in feature and location properties uploaded by different applications? Because the SensorThings data model does not define how to store CRS information inside the feature and location, it only recommends using GeoJSON. So, applying the $filter with spatial operators introduces two problems. First, the CRS data would need to be stored in a standardized location inside feature and location properties. Second, the implementation would need to apply coordinate transformation ‘on the fly’ when processing a spatial filter condition and stored geometries are encoded in different CRS. The first problem causes interoperability issues and the later inevitably causes performance issues.

To get out of this situation, the STAplus Standard defines a default-CRS based on WGS84 with axis-order longitude/latitude as defined in GeoJSON. Any uploaded geometry data encoded in the default-CRS will be stored as-is. Any uploaded geometry data encoded differently will be rejected.

To indicate that the default-CRS and GeoJSON geometry encoding is used, the encodingType property of the FeatureOfInterest and Location entity is to be used with the value application/geo+json.

In addition, the STAplus extension supports other (commonly used) encodings via the Geometry Encoding Requirements Class.

12.2.  Default-CRS Requirements Class

This Requirements Class defines the default-CRS with axis-order and its media-type.

Requirements class 15: Defaul-CRS

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/default-crs
Obligationrequirement
Target typeTarget Type: Implementation
PrerequisiteGeoJSON
Normative statementsRequirement 30: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/crs-definition
Requirement 31: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/axis-order
Requirement 32: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/media-type
Requirement 33: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/processing

Requirement 30

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/crs-definition
Included inRequirements class 15: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/default-crs
Statement

The STAplus implementation SHALL use the GeoJSON CRS urn:ogc:def:crs:OGC::CRS84 as the default-CRS.

Requirement 31

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/axis-order
Included inRequirements class 15: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/default-crs
Statement

The STAplus implementation SHALL use the GeoJSON axis-order with the default-CRS.

Requirement 32

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/media-type
Included inRequirements class 15: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/default-crs
Statement

The STAplus implementation SHALL accept the media-type application/geo+json value for the encodingType property to indicate that the structuring of the FeatureOfInterest and Location entities geometry encoding is compliant with the RFC GeoJSON.

Requirement 33

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/processing
Included inRequirements class 15: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/default-crs
Statement

The STAplus implementation SHALL enforce the default-CRS to any geometry data contained in the FeatureOfInterest and Location entity. The STAplus implementation SHALL reject any geometry not encoded in the default-CRS without further processing.

12.3.  Geometry-FG Requirements Class

NOTE:    This Requirements Class remains informative until OGC Features and Geometries JSON - Part 1: Core is an adopted OGC Standard.

This Requirements Class defines the use of geometry encoding compliant with the OGC Draft Standard OGC Features and Geometries JSON - Part 1: Core

Requirements class 16: Geometry-FG

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-fg
Obligationrequirement
Target typeTarget Type: Implementation
Conformance classConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
PrerequisiteOGC Features and Geometries JSON - Part 1: Core
Normative statementsRequirement 34: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/media-type
Requirement 35: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/default-crs
Requirement 36: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/supported-crs
Requirement 37: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/crs-error
Requirement 38: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/processing
Requirement 39: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/out

Requirement 34

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/media-type
Included inRequirements class 16: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-fg
Statement

The STAplus implementation SHALL accept the media-type application/vnd.ogc.fg+json as value to the encodingType property of the FeatureOfInterest and Location entities to indicate that the structuring of the geometry is be compliant with OGC Features and Geometries JSON - Part 1: Core

Requirement 35

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/default-crs
Included inRequirements class 16: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-fg
Statement

The STAplus implementation SHALL advertise the default-CRS on the conformance page.

Requirement 36

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/supported-crs
Included inRequirements class 16: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-fg
Statement

The STAplus implementation SHALL advertise the list of the supported CRS on the conformance page.

Requirement 37

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/crs-error
Included inRequirements class 16: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-fg
Statement

The STAplus implementation SHALL return an error if the geometry data inside feature or location properties is encoded in an unsupported CRS.

Requirement 38

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/processing
Included inRequirements class 16: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-fg
Statement

If necessary, the implementation SHALL apply a CRS transformation to the default-CRS if necessary before further processing or storing the geometry data.

Requirement 39

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/out
Included inRequirements class 16: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-fg
Statement

The STAplus implementation SHALL use the default-CRS to encode the feature and location geometries in a response.

12.4.  Geometry WKT Requirements Class

This Requirements Class defines the use of geometry encoding compliant with Well Known Text (WKT).

Requirements class 17: Geometry WKT

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-wkt
Obligationrequirement
Target typeTarget Type: Implementation
Conformance classConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
PrerequisiteGeographic information - Simple features access - Part 1: Common architecture
Normative statementsRequirement 40: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/media-type
Requirement 17-2: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/crs-defintion
Requirement 42: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/default-crs
Requirement 43: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/supported-crs
Requirement 44: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/crs-error
Requirement 45: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/value
Requirement 46: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/processing
Requirement 47: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/out

Requirement 40

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/media-type
Included inRequirements class 17: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-wkt
Statement

The STAplus implementation SHALL accept the media-type application/wkt as value for the encodingType property of the FeatureOfInterest and Location entities.

NOTE:    Media type application/wkt is currently pending approval by IANA.

Requirement 41

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/crs-definition
Statement

If a non-default-CRS is used then either the CRS identifier SHALL be put into a property crs, or the CRS identifier (number) SHALL be put into a property srid of the properties property of the FeatureOfInterest or Location entity.

Requirement 42

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/default-crs
Included inRequirements class 17: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-wkt
Statement

The STAplus implementation SHALL provide a JSON object in the serverSettings object on the root URI with the name http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt that contains a property default-crs whose value represents the default-CRS identifier.

Requirement 43

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/supported-crs
Included inRequirements class 17: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-wkt
Statement

The STAplus implementation SHALL provide a JSON object in the serverSettings object on the root URI with the name http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt that contains a property supported-crs of type Array which values represent the supported CRS identifiers.

Requirement 44

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/crs-error
Included inRequirements class 17: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-wkt
Statement

The STAplus implementation SHALL return an error if the geometry data inside the FeatureOfInterest or Location is encoded in an unsupported CRS.

Requirement 45

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/value
Included inRequirements class 17: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-wkt
Statement

The WKT encoded geometry SHALL be the value of the feature or location property (the type Any is a String).

Requirement 46

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/processing
Included inRequirements class 17: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-wkt
Statement

The STAplus implementation SHALL apply CRS transformation to the default-CRS if necessary before further processing or storing the geometry data.

Requirement 47

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/out
Included inRequirements class 17: http://www.opengis.net/spec/sensorthings-staplus/1.0/req-class/geometry-wkt
Statement

The STAplus implementation SHALL use the default-CRS to encode the feature and location geometries in a response.

13.  Media Types for FeatureOfInterest and Location Encoding

This Standard offers support for different structuring of the FeatureOfInterest and Location entities. To indicate the support for a particular structure, an implementation can use one of the following media-types:


Annex A
(normative)
Conformance Class Abstract Test Suite

This normative section defines the STAplus 1.0 Conformance Class tests.

NOTE:    A STAplus compliant implementation must also be compliant with the SensorThings API conformance as defined in OGC SensorThings API Part 1: Sensing, respectively OGC SensorThings API Part 1: Sensing Version 1.1.

A.1.  STAplus Core Conformance Class Tests

Conformance test A.1

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/common-control-information
RequirementsConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Requirement 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/common-control-information
Included inConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Test purpose

To verify that the common control information is available as defined in the requirement.

Test-method-type

Manually Inspect

Test method

Inspect the full JSON object of the entity sets (i.e., without $select) to identify, if each entity has the common control information defined in Requirement Class Clause 7.1 and the service sends appropriate responses as defined in this Standard.

Conformance test A.2

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/entities
RequirementsConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Requirement 2: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/party/properties
Requirement 3: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/party/relations
Requirement 4: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/license/properties
Requirement 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/license/relations
Requirement 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/group/properties
Requirement 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/group/relations
Requirement 8: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/relation/properties
Requirement 9: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/relation/relations
Requirement 10: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/campaign/properties
Requirement 11: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/campaign/relations
Included inConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
PrerequisiteConformance test A.1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/common-control-information
Test purpose

Verify that each STAplus entity has the mandatory properties and mandatory relations as defined in this Standard.

Test-method-type

Manually Inspect

Test method

Evaluate for each STAplus entity:

A

Inspect the full JSON object of the entity sets (i.e., without $select) to identify, if each entity has the mandatory properties defined in the corresponding requirement.

B

Inspect the full JSON object of each entity set (i.e., without using the $select query option) to identify, if each entity has the mandatory relations (i.e., @iot.navigationLink) defined in the corresponding requirement.

Conformance test A.3

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/read
RequirementsConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Requirement 12: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/read/entity
Included inConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
PrerequisiteConformance test A.2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/entities
Test purpose

Verify that the implementation supports reading STAplus entities via HTTP GET.

Test-method-type

Manually Inspect

Test method

Evaluate that the implementation accepts a Sensor Things API compliant HTTP Get request to the STAplus entities:

A

Construct a URL to the Party entity and verify the response.

B

Construct a URL to the License entity and verify the response.

C

Construct a URL to the ObservationGroup entity and verify the response.

D

Construct a URL to the Relation entity and verify the response.

E

Construct a URL to the Campaign entity and verify the response.

Conformance test A.4

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/default-crs/crs-definition
RequirementsConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Requirement 30: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/crs-definition
Included inConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Test purpose

Verify that the implementation supports and uses the default-CRS.

Test method

Evaluate that the implementation uses the default-CRS.

A

Construct a Location entity that contains a Location property whose geometry is encoded using the default-CRS and check that the implementation is processing the geometry accordingly and that the geometry data is stored using the default-CRS.

B

Construct a FeatureOfInterest entity that contains a Feature property whose geometry is encoded using the default-CRS and check that the implementation is processing the geometry accordingly and that the geometry data is stored using the default-CRS.

Conformance test A.5

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/default-crs/axis-order
RequirementsConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Requirement 31: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/axis-order
Included inConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Test purpose

Verify that the implementation supports and uses the default axis-order.

Test method

Evaluate that the implementation uses the default axis-order.

A

Construct a Location entity that contains a location property whose geometry is encoded using the default axis-order and check that the implementation is processing the geometry accordingly and that the geometry data is stored using the default-CRS.

B

Construct a FeatureOfInterest entity that contains a feature property whose geometry is encoded using the default axis-order and check that the implementation is processing the geometry accordingly and that the geometry data is stored using the default-CRS.

Conformance test A.6

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/default-crs/media-type
RequirementsConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Requirement 32: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/media-type
Included inConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Test purpose

Verify that the implementation supports and uses the default media-type.

Test method

Evaluate that the implementation uses the default media-type.

A

Construct a Location entity that contains a location property whose geometry is encoded using the default-CRS and axis-order where the encodingType property’s value is application/geo+json and check that the implementation is processing the geometry accordingly and that the geometry data is stored using the default-CRS and axis-order.

B

Construct a FeatureOfInterest entity that contains a feature property whose geometry is encoded using the default-CRS and axis-order where the encodingType property’s value is application/geo+json and check that the implementation is processing the geometry accordingly and that the geometry data is stored using the default-CRS and axis-order.

Conformance test A.7

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core/default-crs/processing
RequirementsConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Requirement 33: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/default-crs/processing
Included inConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Test purpose

Verify that the implementation stores geometry that is encoded in the default-CRS and axis-order without processing.

Test method

Evaluate that the implementation stores geometry that is encoded in the default-CRS and axis-order without processing.

A

Construct a Location entity that contains a location property whose geometry is encoded using the default-CRS and axis-order where the encodingType property’s value is application/geo+json and check that the implementation is stores the geometry data without processing.

B

Construct a FeatureOfInterest entity that contains a feature property whose geometry is encoded using the default-CRS and axis-order where the encodingType property’s value is application/geo+json and check that the implementation is storing the geometry data without a CRS transformation.

A.2.  STAplus Create Conformance Class Tests

Conformance test A.8

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/create/http
RequirementsConformance class 2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/create
Requirement 13: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/entity
Requirement 14: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/link-to-existing-entities
Requirement 15: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/deep-insert
Requirement 16: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/create/deep-insert-status-code
Included inConformance class 2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/create
Test purpose

To verify that the service implementation supports the creation of entities as defined in this Standard.

Test method

For each STAplus entity:

A

Create an entity instance by following the integrity constraints and creating the related entities with a single request (i.e., deep insert), check if the entity instance is successfully created and the implementation responds as defined in this Standard.

B

Create an entity instance and its related entities with a deep insert request that does not conform to the Standard (e.g., missing a mandatory property), check if the service fails the request without creating any entity within the deep insert request and responds the appropriate HTTP status code.

C

Issue an entity creation request that does not follow the integrity constraints with deep insert, check if the service fails the request without creating any entity within the deep insert request and responds the appropriate HTTP status code.

D

Create an entity instance by linking to existing entities with a single request, check if the server responds as defined in this Standard.

E

Create an entity instance that does not follow the integrity constraints by linking to existing entities with a single request, check if the server responds as defined in this Standard.

A.3.  STAplus Update Conformance Class Tests

Conformance test A.9

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/update/put
RequirementsConformance class 3: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/update
Requirement 17: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/update/entity
Requirement 18: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/update/entity-put
Included inConformance class 3: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/update
Test purpose

To verify that the service implementation supports the update of entities as defined in this Standard.

Test method

For each STAplus entity:

A

Send an update request with HTTP PATCH and check if the service responds as defined.

Conformance test A.10

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/update/patch
RequirementsConformance class 3: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/update
Requirement 17: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/update/entity
Requirement 19: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/update/entity-jsonpatch
Included inConformance class 3: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/update
Test purpose

To verify that the service implementation supports the update of entities as defined in this Standard.

Test method

For each STAplus entity:

A

Send an update request with PATCH, check (1) if the properties provided in the payload corresponding to updatable properties replace the value of the corresponding property in the entity and (2) if the missing properties of the containing entity or complex property are not directly altered.

B

Send an update request with PATCH that contains related entities as inline content, check if the service fails the request and returns appropriate HTTP status code.

C

Send an update request with PATCH that contains binding information for navigation properties, check if the service updates the navigationLink accordingly.

A.4.  STAplus Delete Conformance Class Tests

Conformance test A.11

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/delete/entity
RequirementsConformance class 4: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/delete
Requirement 20: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/delete/entity
Included inConformance class 4: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/delete
Test purpose

To verify that the service implementation supports the deletion of entities as defined.

Test method

For each STAplus entity:

A

Delete an entity instance, and check if the service responds as defined.

A.5.  STAplus Authentication Conformance Class Tests

Conformance test A.12

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication/id
RequirementsConformance class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication
Requirement 25: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id
Included inConformance class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication
Test purpose

To verify that the user’s identifier is permanent and unique.

Test method

Verify the following:

A

Compare the user identifier after repeated login of the same user and verify that the identifier is identical.

B

Compare the user identifier for different users and verify that the identifiers are different.

Conformance test A.13

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication/id-create
RequirementsConformance class 1: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/core
Requirement 27: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-create
Included inConformance class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication
Test purpose

To verify that the identifier value stored in Party/authId is the value set by the authentication.

Test method

For a non-existing Party entity:

A

Submit a HTTP POST request to create a Party entity where the authId is not set.

B

Observe the response to find the location URI for the created Party entity.

C

Issue a HTTP GET request to the location URI and verify that the Party/authId is set with the unique identifier that represents the user.

D

Submit a HTTP POST request to create a Party entity where the authId is set with some value.

E

Observe the response status code and verify it is 400.

Conformance test A.14

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication/id-read
RequirementsConformance class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication
Requirement 26: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-read
Included inConformance class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication
Test purpose

To verify that the Party/authId is exposed in a response.

Test method

Verify that response from any Party entity includes the authId:

A

Construct a HTTP GET request to some Party entity and verify that the authId is contained in the response.

Conformance test A.15

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication/id-update
RequirementsConformance class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication
Requirement 28: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-update
Included inConformance class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication
Test purpose

To verify that a user can not update the identifier stored in Party/authId.

Test method

Verify that changing the authId is not possible for the user itself:

A

Have the user authenticate and identify the corresponding Party.

B

Construct a HTTP PATCH request to that same Party entity where the authId is set with some value.

C

Issue a HTTP GET request to that Party and verify that the value of the authId has not changed.

Test method

Verify that changing the authId is not possible for any other user:

D

Have the user authenticate and identify the corresponding Party.

E

Construct a HTTP PATCH request to another existing Party entity where the authId is set with some value.

F

Issue a HTTP GET request to that other Party and verify that the value of the authId has not changed.

Conformance test A.16

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication/id-delete
RequirementsConformance class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication
Requirement 29: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/authentication/id-delete
Included inConformance class 5: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/authentication
Test purpose

To verify that a user can not delete the identifier stored in Party/authId.

Test method

Verify that deleting the authId is not possible for the user itself:

A

Have the user authenticate and identify the corresponding Party.

B

Construct a HTTP DELETE request to that Party entity.

C

Issue a HTTP GET request to that Party and verify that the entity still exists.

Test method

Verify that deleting the authId is not possible for any other user:

D

Have the user authenticate and identify the corresponding Party.

E

Construct a HTTP DELETE request to another existing Party.

F

Issue a HTTP GET request to that other Party and verify that the entity still exists.

A.6.  STAplus Business Logic Conformance Class Tests

Conformance test A.17

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic/definition
RequirementsConformance class 10: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic
Requirement 23: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/business-logic/definition
Included inConformance class 10: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic
Test purpose

To verify that the description of the business logic is human readable and in English.

Test method

Verify that the HTML page for the business logic is in English language.

Conformance test A.18

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic/location
RequirementsConformance class 10: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic
Requirement 24: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/business-logic/location
Included inConformance class 10: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic
Test purpose

To verify that the business logic is available from the provided URL.

Test method

On the service root URI, find the JSON object with name http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/business-logic and follow the link provided in the href property. Verify that the loaded HTML page contains the description of the business logic.

A.7.  STAplus Geometry FG Conformance Class Tests

NOTE:    These Conformance Class Tests remain informative until OGC Features and Geometries JSON - Part 1: Core is an adopted OGC Standard.

Conformance test A.19

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg//media-type
RequirementsConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Requirement 34: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/media-type
Included inConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Test purpose

To verify that the implementation accepts media-type for Geometry-FG.

Test method

Verify that the implementation supports the use of the media-type for Geometry-FG.

Conformance test A.20

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg/default-crs
RequirementsConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Requirement 35: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/default-crs
Included inConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Test purpose

To verify that the default-CRS is used for processing geometry data from Feature and Location.

Test method

Verify that the implementation applies the default-CRS advertised in the conformance page to the geometry data from Feature and Location.

Conformance test A.21

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg/supported-crs
RequirementsConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Requirement 36: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/supported-crs
Included inConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Test purpose

To verify that all CRS, advertised as supported in the conformance page are accepted.

Test method

Verify that the implementation accepts geometry encodings for Feature and Location. For each supported CRS:

A

Construct a geometry and create a Location and FeatureOfInterest entity. Verify that the geometry data is accepted by the implementation.

Conformance test A.22

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg/crs-error
RequirementsConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Requirement 37: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/crs-error
Included inConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Test purpose

To verify that no additional CRS, as advertised in the conformance page, are accepted.

Test method

Verify that the implementation does not accept geometry encodings for Feature and Location that are not listed as supported. For a CRS not listed as supported:

A

Construct a geometry and create a Location and FeatureOfInterest entity. Verify that the geometry data is rejected by the implementation.

Conformance test A.23

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg/processing
RequirementsConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Requirement 38: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/processing
Included inConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Test purpose

To verify that a geometry not encoded in the default-CRS is transformed before storage.

Test method

Verify that the implementation accepts geometry encodings for Feature and Location that use a supported CRS:

A

Construct a geometry and create a Location and FeatureOfInterest entity. Verify that the geometry data is accepted and transformed to the default-CRS before processed and stored by the implementation.

Conformance test A.24

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg/out
RequirementsConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Requirement 39: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-fg/out
Included inConformance class 6: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-fg
Test purpose

To verify that a geometry included in a response is encoded in the default-CRS.

Test method

Verify that the geometry data for a Feature and Location is using default-CRS, independent from the geometry CRS used with the creation or updating of the entity.

A.8.  STAplus Geometry WKT Conformance Class Tests

Conformance test A.25

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt/media-type
RequirementsConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Requirement 40: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/media-type
Included inConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Test purpose

To verify that the implementation accepts media-type for WKT.

Test method

Verify that the implementation supports the use of the media-type for WKT.

Conformance test A.26

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt/crs-definition
RequirementsConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Requirement 41: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/crs-definition
Included inConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Test purpose

To verify that the implementation accepts CRS definition provided in the associated property.

Test method

Verify that the implementation supports the use of the CRS property.

A

Construct a WKT geometry in a CRS different from the default-crs.

B

Set the crs property to the CRS identifier.

C

Verify that the implementation processes the geometry honoring the CRS identified by the crs value.

D

Set the srid property to the CRS identifier number.

E

Verify that the implementation processes the geometry honoring the CRS identified by the srid value.

Conformance test A.27

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt/default-crs
RequirementsConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Requirement 42: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/default-crs
Included inConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Test purpose

To verify that the default-CRS is used for processing geometry data from feature and location property.

Test method

Verify that the implementation defines and applies the default-CRS to the geometry data from feature and location property.

A

Find the JSON object in the serverSettings object on the root URI with the name http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt and check the value of the property default-crs.

B

Verify that the default-crs is applied to a WKT geometry if no crs or srid property is used.

Conformance test A.28

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt/supported-crs
RequirementsConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Requirement 43: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/supported-crs
Included inConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Test purpose

To verify that all supported CRS are accepted.

Test method

Verify that the implementation accepts geometry encodings for feature and location properties. For each supported CRS:

A

Execute test http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt/crs-definition and verify that the implementation processes the geometry correctly.

Conformance test A.29

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt/crs-error
RequirementsConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Requirement 44: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/crs-error
Included inConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Test purpose

To verify that only supported CRSs are accepted.

Test method

Verify that the implementation does not accept geometry encodings for feature and location properties that are not listed as supported. For a CRS not listed as supported:

A

Execute test http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt/crs-definition and verify that the geometry data is rejected by the implementation.

Conformance test A.30

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt/value
RequirementsConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Requirement 45: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/value
Included inConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Test purpose

To verify that the geometry value, compliant to WKT is accepted as value for the feature and location property.

Test method

Verify that the implementation accepts WKT geometry values for feature and location properties.

Conformance test A.31

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt/processing
RequirementsConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Requirement 46: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/processing
Included inConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Test purpose

To verify that a geometry not encoded in the default-CRS is transformed before storage.

Test method

Verify that the implementation accepts geometry encodings for Feature and Location that use a supported CRS:

A

Construct a geometry and create a Location and FeatureOfInterest entity. Verify that the geometry data in the location and feature properties is accepted and transformed to the default-CRS before processed and stored by the implementation.

Conformance test A.32

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt/out
RequirementsConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Requirement 47: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/geometry-wkt/out
Included inConformance class 7: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/geometry-wkt
Test purpose

To verify that a geometry included in a response is encoded in the default-CRS.

Test method

Verify that the geometry data for a feature and location properties is using default-CRS, independent from the geometry CRS used with the creation or updating of the entity.

A.9.  STAplus MQTT Subscribe STA v1.0 Conformance Class Tests

Conformance test A.33

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-10/definition
RequirementsConformance test 8-2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-10
Requirement 21: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/mqtt-subscribe-sta-10
Included inConformance test 8-2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-10
Test purpose

To verify that a client can receive notifications for the updates of a STAplus entity set or an individual entity with MQTT.

Test method

For each STAplus entity:

A

Subscribe to an entity set with MQTT Subscribe. Then create a new entity of the subscribed entity set. Check if a complete JSON representation of the newly created entity through MQTT is received.

B

Subscribe to an entity set with MQTT Subscribe. Then update an existing entity of the subscribed entity set. Check if a complete JSON representation of the updated entity through MQTT is received.

C

Subscribe to an entity’s property with MQTT Subscribe. Then update the property with PATCH. Check if the JSON object of the updated property is received.

Description

Subscribe to multiple properties of an entity set with MQTT Subscribe. Then create a new entity of the entity set. Check if a JSON object of the subscribed properties is received.

part

Subscribe to multiple properties of an entity set with MQTT Subscribe. Then update an existing entity of the entity set with PATCH. Check if a JSON object of the subscribed properties is received.

A.10.  STAplus MQTT Subscribe STA v1.1 Conformance Class Tests

Conformance test A.34

Identifierhttp://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-11/definition
RequirementsConformance test 9-2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-11
Requirement 22: http://www.opengis.net/spec/sensorthings-staplus/1.0/req/mqtt-subscribe-sta-11
Included inConformance test 9-2: http://www.opengis.net/spec/sensorthings-staplus/1.0/conf/mqtt-subscribe-sta-11
Test purpose

To verify that a client can receive notifications for the updates of a STAplus entity set or an individual entity with MQTT.

Test method

For each STAplus entity:

A

Subscribe to an entity set with MQTT Subscribe. Then create a new entity of the subscribed entity set. Check if a complete JSON representation of the newly created entity through MQTT is received.

B

Subscribe to an entity set with MQTT Subscribe. Then update an existing entity of the subscribed entity set. Check if a complete JSON representation of the updated entity through MQTT is received.

C

Subscribe to an entity’s property with MQTT Subscribe. Then update the property with PATCH. Check if the JSON object of the updated property is received.

Description

Subscribe to multiple properties of an entity set with MQTT Subscribe. Then create a new entity of the entity set. Check if a JSON object of the subscribed properties is received.

part

Subscribe to multiple properties of an entity set with MQTT Subscribe. Then update an existing entity of the entity set with PATCH. Check if a JSON object of the subscribed properties is received.


Annex B
(informative)
STAplus Data Model (informative)

This appendix contains the Data Model UML diagrams in large for improved readability.

B.1.  STAplus Data Model connected to Datastream

STAplus Entities connected to Datastream

Figure B.1

B.2.  STAplus Data Model connected to MultiDatastream

STAplus Entities connected to MultiDatastream

Figure B.2


Annex C
(informative)
Revision History

Table C.1

DateReleaseEditorPrimary clauses modifiedDescription
2022-09-210.1Andreas MatheusallInitial version
2022-10-210.2Andreas Matheusmainly Annex A, BUpdating conformance class structure and abstract test site
2022-11-030.3Andreas Matheussection Business Logic, Annex A, BSection added for Business Logic, Control Information and Authentication, Updating conformance class structure and abstract test site to include Business Logic, Adding Requirements and Tests for accessing personal data
2022-12-190.4Andreas MatheusSTAplus Feature and Location Encoding, Annex A, Annex B, Conformanceincorporating requirements for encoding Feature and Location entities reflecting results from SensorThings SWG session on 7 December 2022
2023-01-170.5Andreas MatheusMainly normative sections and Annex A, BApplied OGC NA-Policy using Metanorma annotations, Annex-B merged into Annex-A, Conformance Class definition now in section Conformance
2023-01-200.6Andreas MatheusAll sectionsTitle adopted to include versions, updated requirements for Business Logic and CRS conformance classes, incorporated proof read from Hylke van der Schaaf
2023-02-060.7Andreas MatheusAll sectionsCarl Reed comments incorporated
2023-05-100.8Andreas MatheusAll sectionsResults from RFC incorporated, Party entity property personalData removed, Authentication class requirements and conformance tests adopted accordingly, security considerations section extended
2023-07-260.9Andreas MatheusAll sectionsFinal edits to adopt the motion of the STA SWG from 19th July (changes in data model: Project into Campaign, Group into ObservationGroup, fixed Subject and Object associations); adding tables to improve association definitions from STA to STAplus entity types, improved wording

Bibliography

[1]  OGC, Best Practice for using SensorThings API with Citizen Science, (2022), https://docs.ogc.org/bp/21-068.pdf

[2]  OGC, OGC Features and Geometries JSON — Part 1: Core, (2021), https://docs.ogc.org/DRAFTS/21-045.html3

[3]  W3C, Decentralized Identifiers (DIDs) v1.0, (2022), https://www.w3.org/TR/did-core/

[4]  OASIS, OData Version 4.01. Part 1: Protocol, (2020), http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html.