Disclaimer
ReferenceRGS/CIM-009v171KeywordsAPI, architecture, digital twins, GAP, information model, interoperability, NGSI-LD, smart agriculture, smart city, smart industry, smart manufacturing,smart water, WoTETSI650 Route des LuciolesF-06921 Sophia Antipolis Cedex - FRANCETel.: +33 4 92 94 42 00 Fax: +33 4 93 65 47 16Siret N° 348 623 562 00017 - APE 7112BAssociation à but non lucratif enregistrée à laSous-Préfecture de Grasse (06) N° w061004871Important notice
Notice of disclaimer & limitation of liability
Intellectual Property Rights 12
3 Definition of terms, symbols and abbreviations 16
4 Context Information Management Framework 20
4.2 NGSI-LD Information Model 21
4.2.3 Cross Domain Ontology 23
4.2.4 NGSI-LD domain-specific models and instantiation 24
4.3 NGSI-LD Architectural Considerations 25
4.3.2 Centralized architecture 25
4.3.3 Distributed architecture 26
4.3.4 Federated architecture 27
4.3.5 NGSI-LD API Structure and Implementation Options 28
4.3.6 Distributed Operations 31
4.4 Core and user NGSI-LD @context 34
4.5 NGSI-LD Data Representation 35
4.5.1 NGSI-LD Entity Representation 35
4.5.2 NGSI-LD Property Representations 36
4.5.3 NGSI-LD Relationship Representations 39
4.5.4 Simplified Representation 42
4.5.5 Multi-Attribute Support 46
4.5.6 Temporal Representation of an Entity 47
4.5.7 Temporal Representation of a Property 47
4.5.8 Temporal Representation of a Relationship 47
4.5.9 Simplified temporal representation of an Entity 48
4.5.10 Entity Type List Representation 51
4.5.11 Detailed Entity Type List Representation 51
4.5.12 Entity Type Information Representation 52
4.5.13 Attribute List Representation 52
4.5.14 Detailed Attribute List Representation 52
4.5.15 Attribute Information Representation 52
4.5.16 GeoJSON Representation of Entities 53
4.5.17 Simplified GeoJSON Representation of Entities 54
4.5.18 NGSI-LD LanguageProperty Representations 55
4.5.19 Aggregated temporal representation of an Entity 57
4.5.20 NGSI-LD VocabProperty Representations 59
4.5.21 NGSI-LD ListProperty Representations 60
4.5.22 NGSI-LD ListRelationship Representations 61
4.5.23 NGSI-LD Linked Entity Retrieval 63
4.5.24 NGSI-LD JsonProperty Representations 64
4.5.25 NGSI-LD EntityMap Representation 65
4.6 Data Representation Restrictions 65
4.6.1 Supported text encodings 65
4.6.3 Supported data types for Values 66
4.6.5 Supported data types for LanguageMaps 67
4.6.6 Ordering of Entities in arrays having more than one instance of the same Entity 67
4.7.2 Representation of GeoJSON Geometries in JSON-LD 68
4.7.3 Concise NGSI-LD GeoProperty 68
4.10 NGSI-LD Geoquery Language 77
4.11 NGSI-LD Temporal Query Language 79
4.13 Counting the Number of Results 80
4.14 Supporting Multiple Tenants 81
4.15 NGSI-LD Language Filter 81
4.16 Supporting Multiple Entity Types 82
4.17 NGSI-LD Entity Type Selection Language 82
4.19 NGSI-LD Scope Query Language 83
4.20 NGSI-LD Distributed Operation names 84
4.21 NGSI-LD Attribute Projection Language 85
5.2.16 BatchOperationResult 102
5.2.34 RegistrationManagementInfo 110
5.2.40 Context Source Identity 121
5.3 Notification data types 121
5.3.3 TriggerReasonEnumeration 123
5.5.3 Error response payload body 124
5.5.4 General NGSI-LD validation 125
5.5.5 Default @context assignment 125
5.5.7 Term to URI expansion or compaction 125
5.5.8 Partial Update Patch Behaviour 126
5.5.9 Pagination Behaviour 128
5.5.10 Multi-Tenant Behaviour 129
5.5.11 More than one instance of the same Entity in an Entity array 129
5.5.12 Merge Patch Behaviour 130
5.5.13 Limiting operations to local scope 132
5.5.14 Distributed Transactional Behaviour 132
5.6 Context Information Provision 133
5.6.4 Partial Attribute update 138
5.6.7 Batch Entity Creation 142
5.6.8 Batch Entity Creation or Update (Upsert) 144
5.6.10 Batch Entity Delete 149
5.6.11 Create or Update (Upsert) Temporal Evolution of an Entity 150
5.6.12 Add Attributes to Temporal Evolution of an Entity 152
5.6.13 Delete Attribute from Temporal Evolution of an Entity 153
5.6.14 Modify Attribute instance in Temporal Evolution of an Entity 155
5.6.15 Delete Attribute instance from Temporal Evolution of an Entity 157
5.6.16 Delete Temporal Evolution of an Entity 158
5.7 Context Information Consumption 167
5.7.3 Retrieve Temporal Evolution of an Entity 174
5.7.4 Query Temporal Evolution of Entities 176
5.7.5 Retrieve Available Entity Types 179
5.7.6 Retrieve Details of Available Entity Types 180
5.7.7 Retrieve Available Entity Type Information 181
5.7.8 Retrieve Available Attributes 181
5.7.9 Retrieve Details of Available Attributes 182
5.7.10 Retrieve Available Attribute Information 183
5.7.11 Architecture-related aspects of retrieval of Entity Types and Attributes 184
5.8 Context Information Subscription 185
5.8.3 Retrieve Subscription 188
5.8.6 Notification behaviour 191
5.9 Context Source Registration 193
5.9.2 Register Context Source 193
5.9.3 Update Context Source Registration 195
5.9.4 Delete Context Source Registration 196
5.10 Context Source Discovery 197
5.10.1 Retrieve Context Source Registration 197
5.10.2 Query Context Source Registrations 198
5.11 Context Source Registration Subscription 201
5.11.2 Create Context Source Registration Subscription 201
5.11.3 Update Context Source Registration Subscription 203
5.11.4 Retrieve Context Source Registration Subscription 204
5.11.5 Query Context Source Registration Subscriptions 204
5.11.6 Delete Context Source Registration Subscription 205
5.11.7 Notification behaviour 206
5.12 Matching Context Source Registrations 207
5.13 Storing, Managing and Serving @contexts 208
5.13.5 Delete and Reload @context 212
5.14 Context Source Entity Mapping 213
5.15 Context Source Identity Information 216
5.15.1 Retrieve Context Source Identity Information 216
6.2 Global Definitions and Resource Structure 217
6.3.4 HTTP request preconditions 222
6.3.5 JSON-LD @context resolution 223
6.3.6 HTTP response common requirements 224
6.3.7 Representation of Entities 224
6.3.8 Notification behaviour 225
6.3.9 Csource Notification behaviour 226
6.3.10 Pagination behaviour 226
6.3.11 Including system generated Temporal Attributes 227
6.3.12 Simplified or aggregated temporal representation of Entities 228
6.3.13 Counting number of results 228
6.3.14 Tenant specification 229
6.3.15 GeoJSON representation of spatially bound entities 229
6.3.16 Expiration time for cached @contexts 229
6.3.17 Distributed Operations Caching and Timeout Behaviour 229
6.3.18 Limiting Distributed Operations 230
6.3.19 Extra information to provide when contacting Context Source 231
6.5 Resource: entities/{entityId} 236
6.6 Resource: entities/{entityId}/attrs/ 242
6.7 Resource: entities/{entityId}/attrs/{attrId} 245
6.8 Resource: csourceRegistrations/ 249
6.9 Resource: csourceRegistrations/{registrationId} 252
6.10 Resource: subscriptions/ 255
6.10.2 Resource definition 255
6.11 Resource: subscriptions/{subscriptionId} 257
6.11.2 Resource definition 257
6.12 Resource: csourceSubscriptions/ 259
6.12.2 Resource definition 259
6.13 Resource: csourceSubscriptions/{subscriptionId} 261
6.13.2 Resource definition 261
6.14 Resource: entityOperations/create 263
6.14.2 Resource definition 264
6.15 Resource: entityOperations/upsert 265
6.15.2 Resource definition 265
6.16 Resource: entityOperations/update 267
6.16.2 Resource definition 268
6.17 Resource: entityOperations/delete 269
6.17.2 Resource definition 269
6.18 Resource: temporal/entities/ 271
6.18.2 Resource definition 271
6.19 Resource: temporal/entities/{entityId} 274
6.19.2 Resource definition 274
6.20 Resource: temporal/entities/{entityId}/attrs/ 277
6.20.2 Resource definition 278
6.21 Resource: temporal/entities/{entityId}/attrs/{attrId} 279
6.21.2 Resource definition 279
6.22 Resource: temporal/entities/{entityId}/attrs/{attrId}/ {instanceId} 280
6.22.2 Resource definition 280
6.23 Resource: entityOperations/query 282
6.23.2 Resource definition 282
6.24 Resource: temporal/entityOperations/query 283
6.24.2 Resource definition 283
6.25.2 Resource definition 284
6.26 Resource: types/{type} 285
6.26.2 Resource definition 286
6.27 Resource: attributes/ 287
6.27.2 Resource definition 287
6.28 Resource: attributes/{attrId} 288
6.28.2 Resource definition 288
6.29 Resource: jsonldContexts/ 289
6.29.2 Resource definition 289
6.30 Resource: jsonldContexts/{contextId} 291
6.30.2 Resource definition 291
6.31 Resource: entityOperations/merge 293
6.31.2 Resource definition 293
6.32 Resource: entityMaps/{entityMapId} 295
6.32.2 Resource definition 295
6.33 Resource: info/sourceIdentity 297
6.33.2 Resource definition 297
7 API MQTT Notification Binding 298
7.2 Notification behaviour 298
C.3 Context Source Registration 327
C.5 HTTP REST API Examples 329
C.5.2 Create Entity of Type Vehicle 329
C.5.4 Query Entities (Pagination) 330
C.5.6 Temporal Query (Simplified Representation) 332
C.5.7 Retrieve Available Entity Types 333
C.5.8 Retrieve Details of Available Entity Types 333
C.5.9 Retrieve Available Entity Type Information 334
C.5.10 Retrieve Available Attributes 335
C.5.11 Retrieve Details of Available Attributes 336
C.5.12 Retrieve Available Attribute Information 337
C.5.13 Query Entities (Natural Language Filtering) 338
C.5.14 Temporal Query (Aggregated Representation) 338
C.5.16 Temporal Scope Queries 341
C.7 @context utilization clarifications 343
C.8 Link header utilization clarifications 345
C.9 @context processing clarifications 346
D.2 Algorithm for transforming an NGSI-LD Entity into a JSON-LD document (ALG1) 348
D.3 Algorithm for transforming an NGSI-LD Property into JSON-LD (ALG1.1) 349
D.4 Algorithm for transforming an NGSI-LD Relationship into JSON-LD (ALG1.2) 350
G.1.1 Associating an Entity with a Natural Language 353
G.1.2 Associating a Property with a Natural Language 353
G.1.3 Associating as equivalent entity 354
G.2 Natural Language Collation Support 354
G.2.1 Maintain collations as metadata 355
G.2.2 Route language sensitive queries via a proxy 355
G.3 Localization of Dates, Currency formats, etc. 355
H.1 Actuators and feedback to the consumer 357
H.2 Architecture for actuation 357
H.3 Structure of Commands and additional Properties 358
H.3.1 Property for listing available commands 359
H.3.2 Properties for command endpoints 359
H.4.1 Possible communication models 361
H.4.2 Subscription/notification model 361
H.5 Implementation of the subscription-based actuation workflow 363
H.6 Implementation of the registration-based actuation workflow 364
IPRs essential or potentially essential to normative deliverables may have been declared to ETSI. The declarations pertaining to these essential IPRs, if any, are publicly available for ETSI members and non-members, and can be found in ETSI SR 000 314: "Intellectual Property Rights (IPRs); Essential, or potentially Essential, IPRs notified to ETSI in respect of ETSI standards", which is available from the ETSI Secretariat. Latest updates are available on the ETSI Web server (https://ipr.etsi.org/).
Pursuant to the ETSI Directives including the ETSI IPR Policy, no investigation regarding the essentiality of IPRs, including IPR searches, has been carried out by ETSI. No guarantee can be given as to the existence of other IPRs not referenced in ETSI SR 000 314 (or the updates on the ETSI Web server) which are, or may be, or may become, essential to the present document.
The present document may include trademarks and/or tradenames which are asserted and/or registered by their owners. ETSI claims no ownership of these except for any which are indicated as being the property of ETSI, and conveys no right to use or reproduce any trademark and/or tradename. Mention of those trademarks in the present document does not constitute an endorsement by ETSI of products, services or organizations associated with those trademarks.
DECT™, PLUGTESTS™, UMTS™ and the ETSI logo are trademarks of ETSI registered for the benefit of its Members. 3GPP™ and LTE™ are trademarks of ETSI registered for the benefit of its Members and of the 3GPP Organizational Partners. oneM2M™ logo is a trademark of ETSI registered for the benefit of its Members and of the oneM2M Partners. GSM® and the GSM logo are trademarks registered and owned by the GSM Association.
This Group Specification (GS) has been produced by ETSI Industry Specification Group (ISG) cross-cutting Context Information Management (CIM).
In the present document "shall", "shall not", "should", "should not", "may", "need not", "will", "will not", "can" and "cannot" are to be interpreted as described in clause 3.2 of the ETSI Drafting Rules (Verbal forms for the expression of provisions).
"must" and "must not" are NOT allowed in ETSI deliverables except when used in direct citation.
The present document formally describes the Context Information Management API (NGSI-LD) Specification. The Context Information Management API allows users to provide, consume and subscribe to context information in multiple scenarios and involving multiple stakeholders. Context information is modelled as attributes (properties and relationships) of context entities, also referred to as "digital twins", representing real-world assets. It enables close to real-time access to information coming from many different sources (not only IoT data sources).
The present document defines the NGSI-LD API Specification. This Context Information Management API allows users to provide, consume and subscribe to context information in multiple scenarios and involving multiple stakeholders. Context information is modelled as attributes of context entities, also referred to as "digital twins", representing real-world assets (e.g. a bus in a city or a luggage claim ticket). Because of that, the NGSI-LD API is often used to bring standardized access to digital twin data.
The ongoing status of the NGSI-LD API can be found in [i.17].
The ETSI ISG CIM has decided to give the name "NGSI-LD" to the Context Information Management API. The rationale is to reinforce the fact that the present document leverages on the former OMA NGSI 9 and 10 interfaces [i.3] and FIWARE® NGSIv2 [i.9] to incorporate the latest advances from Linked Data.
Most of the NGSI-LD API and the ETSI ISG CIM information model work referenced here was created with the support of the following European Union Horizon 2020 research projects: No. 732851 (FI-NEXT), No. 723156 (WISE-IoT), No. 732240 (SynchroniCity) and No. 731993 (AutoPilot), No. 814918 (Fed4IoT), No. 779852 (IoTCrawler), No. 731884 (IoF2020), including many contributions from members of the FIWARE® Community.
The purpose of the present document is the definition of a standard API for Context Information Management (NGSI-LD API) enabling close to real-time (right-time) access to context/digital twin information coming from many different sources (not only IoT data sources). The present document defines how such an API enables applications to perform updates on context, register context providers which can be queried to get updates on context, query information on current and historic context information and subscribe to receive notifications of context changes. The criteria for choice of the API characteristics are based on requirements resulting from the Use Cases ETSI GR CIM 002 [i.1] and other work items ETSI GR CIM 007 [i.2] and ETSI GS CIM 006 [i.8] on security and on the information model. The present document supersedes prior versions, including ETSI GS CIM 004 [i.16].
References are either specific (identified by date of publication and/or edition number or version number) or non-specific. For specific references, only the cited version applies. For non-specific references, the latest version of the referenced document (including any amendments) applies.
Referenced documents which are not found to be publicly available in the expected location might be found at https://docbox.etsi.org/Reference/.
The following referenced documents are necessary for the application of the present document.
References are either specific (identified by date of publication and/or edition number or version number) or non-specific. For specific references, only the cited version applies. For non-specific references, the latest version of the referenced document (including any amendments) applies.
The following referenced documents are not necessary for the application of the present document but they assist the user with regard to a particular subject area.
For the purposes of the present document, the following terms apply:
NGSI-LD Attribute: reference to both an NGSI-LD Property and to an NGSI-LD Relationship
NGSI-LD Attribute Instance (in case of temporal representation of NGSI-LD Entities): reference to an NGSI-LD Attribute, at a specific moment in time of its temporal evolution, usually identified by its instanceId
NGSI-LD Central Broker: NGSI-LD Context Broker that only uses a local storage when serving NGSI-LD requests, without involving any external Context Sources
NGSI-LD Context Broker: architectural component that implements all the NGSI-LD interfaces
NGSI-LD Context Consumer: agent that uses the query and subscription functionality of NGSI-LD to retrieve context information
NGSI-LD Context Producer: agent that uses the NGSI-LD context provision and/or registration functionality to provide or announce the availability of its context information to an NGSI-LD Context Broker
NGSI-LD Context Registry: software functional element where Context Sources register the information that they can provide
NGSI-LD Context Source: source of context information which implements the NGSI-LD consumption and subscription (and possibly provision) interfaces defined by the present document
NGSI-LD Context Source Registration: description of the information that can be provided by a Context Source, which is used when registering the Context Source with the Context Registry
NGSI-LD Core API: core part of the NGSI-LD API that has to be implemented by all Brokers, including operations for providing or managing Entities and Attributes, operations for consuming Entities and checking which Entity Types and Attributes Entities are available in the system and operations for subscribing to Entities, receiving notifications and managing subscriptions
NGSI-LD Distribution Broker: NGSI-LD Context Broker that uses both local context information and registration information from an NGSI-LD Context Registry, to access matching context information from a set of distributed Context Sources
NGSI-LD Entity Map: mapping of NGSI-LD Entity ids to Context Source Registrations used in maintaining atomicity of transactions performed by Distribution Brokers and Federation Brokers
NGSI-LD Element: any JSON element that is defined by the NGSI-LD API
NGSI-LD Entity: informational representative of something that is supposed to exist in the real world, physically or conceptually
NGSI-LD Entity Type: categorization of an NGSI-LD Entity as belonging to a class of similar entities, or sharing a set of characteristic properties
NGSI-LD External Linked Entity: Linked Entity that is identified through a dereferenceable URI which does not exist within the current NGSI-LD system
NGSI-LD Federation Broker: Distribution Broker that federates information from multiple underlying NGSI-LD Context Brokers and across domains
NGSI-LD GeoProperty: subclass of NGSI-LD Property which is a description instance which associates a main characteristic, i.e. an NGSI-LD Value, to either an NGSI-LD Entity, an NGSI-LD Relationship or another NGSI-LD Property, that uses the special hasValue property to define its target value and holds a geographic location in GeoJSON format
NGSI-LD Internal Linked Entity: Linked Entity that exists within the current NGSI-LD system
NGSI-LD LanguageProperty: subclass of NGSI-LD Property which is a description instance which associates a set of strings in different natural languages as a defined main characteristic, i.e. an NGSI-LD Map, to an NGSI-LD Entity, an NGSI-LD Relationship or another NGSI-LD Property and that uses the special hasLanguageMap (a subproperty of hasValue) property to define its target value
NGSI-LD JSONLDContext API: part of the NGSI-LD API that is used to host, serve and manage JSON-LD @contexts
NGSI-LD JsonProperty: subclass of NGSI-LD Property which is a description instance which associates a raw JSON literal value as a defined main characteristic to an NGSI-LD Entity, an NGSI-LD Relationship or another NGSI-LD Property and that uses the special hasJson (a subproperty of hasValue) property to define its target value. The target value contains data which is not available for interpretation.
NGSI-LD Linked Entity: NGSI-LD Entity referenced from another NGSI-LD Entity (the linking NGSI-LD Entity) via an NGSI-LD Relationship
NGSI-LD Linking Entity: NGSI-LD Entity which is the subject of a Relationship to another NGSI-LD Entity (the linked NGSI-LD Entity) or an external resource (identified by a URI)
NGSI-LD ListProperty: description instance which associates an ordered array of main characteristics, i.e. NGSI-LD Values, to either an NGSI-LD Entity, an NGSI-LD Relationship or another NGSI-LD Property and that uses the special hasValueList property to define its target value
NGSI-LD ListRelationship: description of an ordered array of directed links between a subject which is either an NGSI-LD Entity, an NGSI-LD Property or another NGSI-LD Relationship on one hand, and a series of objects, which are NGSI-LD Entities, on the other hand, and which uses the special hasObjectList property to define its target objects
NGSI-LD Map: JSON-LD language map in the form of key-value pairs holding the string representation of a main characteristic in a series of natural languages
NGSI-LD Null: "urn:ngsi-ld:null" or {"@none": "urn:ngsi-ld:null"} used as an encoding for null values
NGSI-LD Property: description instance which associates a main characteristic, i.e. an NGSI-LD Value, to either an NGSI-LD Entity, an NGSI-LD Relationship or another NGSI-LD Property and that uses the special hasValue property to define its target value
NGSI-LD Query: collection of criteria used to select a sub-set of NGSI-LD Entities, matching the criteria
NGSI-LD Registry API: part of the NGSI-LD API that is implemented by the Context Registry, including operations for registering Context Sources and managing Context Source Registrations (CSRs), operations for retrieving and discovering CSRs, and operations for subscribing to CSRs and receiving notifications
NGSI-LD Relationship: description of a directed link between a subject which is either an NGSI-LD Entity, an NGSI-LD Property or another NGSI-LD Relationship on one hand, and an object, or unordered array of objects, each of which is an NGSI-LD Entity, on the other hand, and which uses the special hasObject property to define its target object
NGSI-LD Scope: hierarchical structuring of Entities that enables restricting query results and notifications
NGSI-LD Temporal API: part of the NGSI-LD API pertaining to the Temporal Evolution of Entities, including operations for providing and managing the Temporal Evolution of Entities and Attributes, and operations for consuming the Temporal Evolution of Entities
NGSI-LD Temporal Evolution of an Entity: sequence of values attributed to an NGSI-LD Entity over time, i.e. its history or future predictions
NGSI-LD Tenant: user or group of users that utilize a single instance of a system implementing the NGSI-LD API (NGSI-LD Context Source or NGSI-LD Broker) in isolation from other users or groups of users of the same instance, so that any information related to one Tenant (e.g. Entities, Subscriptions, Context Source Registrations) are only visible to users of the same Tenant, but not to users of a different Tenant
NGSI-LD Value: JSON value (i.e. a string, a number, true or false, an object, an array), or JSON-LD typed value (i.e. a string as the lexical form of the value together with a type, defined by an XSD base type or more generally an IRI), or JSON-LD structured value (i.e. a set, a list, a language-tagged string)
NGSI-LD VocabProperty: subclass of NGSI-LD Property which is a description instance which associates a string value which can be coerced to a URI as a defined main characteristic to an NGSI-LD Entity, an NGSI-LD Relationship or another NGSI-LD Property and that uses the special hasVocab (a subproperty of hasValue) property to define its target value
Void.
For the purposes of the present document, the following abbreviations apply:
This clause describes the technical design principles behind the context information management framework supported by NGSI-LD. As stated in clause 3.1, the letters "NGSI-LD" which are part of most terms, to confirm that they are distinct from other terms of similar/same name in use in other organizations, are generally omitted in the present document for brevity. In the present document, a number of rather obvious typographic conventions and syntax guidelines are followed, and the reader is referred to Annex F for details.
The NGSI-LD Information Model prescribes the structure of context information that shall be supported by an NGSI-LD system. It specifies the data representation mechanisms that shall be used by the NGSI-LD API itself. In addition, it specifies the structure of the Context Information Management vocabularies to be used in conjunction with the API.
The NGSI-LD Information Model is defined at two levels (see Figure 4.2.1‑1): the foundation classes which correspond to the Core Meta-model and the Cross-Domain Ontology. The former amounts to a formal specification of the "property graph" model [i.6]. The latter is a set of generic, transversal classes which are aimed at avoiding conflicting or redundant definitions of the same classes in each of the domain-specific ontologies. Below these two levels, domain-specific ontologies or vocabularies can be devised. For instance, the SAREF Ontology ETSI TS 103 264 [i.4] can be mapped to the NGSI-LD Information Model, so that smart home applications will benefit from this Context Information Management API specification.
The version of the cross-domain model proposed by the present document is a minimal one, aimed at defining the classes used in this release of the API specification. It has been extended by other work items like ETSI GS CIM 006 [i.8], with classes defining extra concepts such as mobile vs. stationary entities, instantaneous vs. static properties, etc.
Figure 4.2.2‑1 provides a graphical representation of the NGSI-LD Meta-Model in terms of classes and their relationships. To provide additional clarity an informal (non-normative) mapping to the Property Graph Model is also presented.
![]() |
[With capital initial]. Used to refer to a class that is a subclass of
Entity or Value
|
---|---|
![]() |
[With capital initial]. Used to refer to a class that is a subclass of
Property or Relationship, but which is not itself a property or a
relationship. These classes serve as super-classes for a set of
properties or relationships in the same domain or aspect
|
![]() ![]() |
[With small initial]. Used to refer to a proper (direct) class of
properties or relationships
|
![]() |
[With small initial and underlined text]. Used to refer to the name of a
property that is considered to be "lite" in its informational
representation since it shall not be reified, rather a value is directly
attached to it
|
![]() |
[With small or capital initial]. Used to refer to a class or a
vocabulary that is inherited from another publicly available standard or
ontology
|
Implementations shall support the NGSI-LD Meta-model as follows:
![]() |
[With capital initial]. Used to refer to a class that is a subclass of
Entity or Value
|
---|---|
![]() |
[With capital initial]. Used to refer to a class that is a subclass of
Property or Relationship, but which is not itself a property or a
relationship. These classes serve as super-classes for a set of
properties or relationships in the same domain or aspect
|
![]() ![]() |
[With small initial]. Used to refer to a proper (direct) class of
properties or relationships
|
![]() |
[With small initial and underlined text]. Used to refer to the name of a
property that is considered to be "lite" in its informational
representation since it shall not be reified, rather a value is directly
attached to it
|
![]() |
[With small or capital initial]. Used to refer to a class or a
vocabulary that is inherited from another publicly available standard or
ontology
|
Figure 4.2.3‑1 describes the concepts introduced by the NGSI-LD Cross-Domain Ontology, which shall be supported by implementations as follows:
Clause 4.4 defines the Core JSON-LD @context which includes the URIs which correspond to the concepts introduced above.
This clause is informative and is intended to illustrate the relationship between the NGSI-LD Information Model and NGSI-LD Domain-specific models.
Figure 4.2.4‑1 shows an example of an NGSI-LD domain-specific model. Domain-specific models introduce the specific entity types required for a particular domain. Figure 4.2.4‑1 shows the types "Car", "Parking", "Street", "Gate". Entity types can have further subtypes, e.g. "OffStreetParking" as subtype of "Parking".
In addition, two different NGSI-LD Properties are introduced (hasState, reliability).
The adjacentTo Relationship links entities of type "Parking" with entities of type "Street".
This clause is informative and is intended to show how the NGSI-LD information model could be described using UML diagrams. The aim of this diagram is to help those readers less familiar with ontology representations or RDF [1] to understand the NGSI-LD Information Model.
In Figure 4.2.5‑1 NGSI-LD Entity, Relationship, Property and Value are represented as UML classes. UML associations are used to interrelate these classes while keeping the structure and semantics defined by the NGSI-LD Information Model.
The NGSI-LD API is intended to be primarily an API and does not define a specific architecture. It is envisioned that the NGSI-LD API can be used in different architectural settings and the architectural assumptions of the API are kept to a minimum.
As it is not possible to elaborate all possible architectures in which the NGSI-LD API could be used, three prototypical architectures are presented. The NGSI-LD API shall enable efficient support for all of them, i.e. the design decisions for the NGSI-LD API take these prototypical architectures into consideration. A real system architecture utilizing the NGSI-LD API can map to one, take elements from multiple or combine all of the prototypical architectures.
The NGSI-LD API is structured into a Core API and an optional Temporal API. The Core API manages the current state of Entities. The Temporal API is optional and manages the Temporal Evolution of Entities. Brokers that intend to implement the Temporal API should consider updating the Temporal Evolution of an Entity whenever the "current state" is modified via the Core API.
Figure 4.3.2‑1 shows a centralized architecture. In the centre is a Central Broker that stores all the context information. There are Context Producers that use update operations to update the context information in the Central Broker and there are Context Consumers that request context information from the Central Broker, either using synchronous one-time query or asynchronous subscribe/notify operations. The Central Broker answers all requests from its storage. Figure 4.3.2‑1 shows one component that acts as both Context Producer and Context Consumer. The general assumption is that components can have multiple roles, so such components are not explicitly shown in clause 4.3.3 and clause 4.3.4.
Figure 4.3.3‑1 shows a distributed architecture. The underlying idea here is that all information is stored by the Context Sources. Context Sources implement the query and subscription part of the NGSI-LD API as a Context Broker does. They register themselves with the Context Registry, providing information about what context information they can provide, but not the context information itself, e.g. a certain Context Source registers that it can provide the indoor temperature for Building A and Building B or that it can provide the speed of cars in a geographic region covering the centre of a city.
Context Consumers can query or subscribe to the Distribution Broker. On each request, the Distribution Broker discovers or does a discovery subscription to the Context Registry for relevant Context Sources, i.e. those that may provide context information relevant to the respective request from the Context Consumer. The Distribution Broker then queries or subscribes to each relevant Context Source, if possible it aggregates the context information retrieved from the Context Sources and provides them to the Context Consumer. In this mode of operation, it is not visible to the Context Consumer, whether the Context Broker is a Central Broker or a Distribution Broker. Alternatively, the architecture allows that Context Consumers can discover Context Sources through the Context Registry themselves and then directly request from Context Sources. This is shown in Figure 4.3.3‑1 with the fine dashed arrows.
The federated architecture shown in Figure 4.3.4‑1 is used in cases where existing domains are to be federated. For example, different departments in a city operate their own Context Broker-based NGSI-LD infrastructure, but applications should be able to easily access all available information using just one point of access. The architecture works in the same way as the distributed architecture described in clause 4.3.3, except that instead of simple Context Sources, whole domains are registered with the respective Context Broker as point of access. Typically, the domains will be registered to the federation Context Registry on a more coarse-grained level, providing scopes, in particular geographic scopes, that can then be matched to the scopes provided in the requests. For example, instead of registering individual entities like buildings, the domain would be registered with having information about entities of type building within a geographic area. Applications then query or subscribe for entities within a geographic scope, e.g. buildings in a certain area of the city. The Federation Broker discovers the domain Context Brokers that can provide relevant information, forwards the request to these Context Brokers and aggregates the results, so the application gets the result in the same way as in the centralized and distributed cases.
A domain itself can use a centralized or distributed architecture or could even utilize a federated architecture that federates sub-domains.
As in the distributed case, it is also possible that applications discover relevant domains through the federation-level Context Registry and directly contact the Context Brokers in the individual domains.
As stated in clause 4.3.1, the NGSI-LD API is structured into a Core API and an optional Temporal API. In addition, the Registry API consists of the operations to be implemented by the Context Registry. Furthermore, the JSONLDContext API provides functionality for storing, managing, and serving JSON-LD @contexts. The APIs are structured according to their functionalities, which is also reflected in how the operations are structured in clause 5. Table 4.3.5‑1 introduces the API structure, the respective functionalities and lists the operations for each functionality, pointing to the clauses in which they are defined.
API
|
Functionality
|
Operations
|
---|---|---|
Core API
|
Context Information Provision - operations for providing or managing
Entities and Attributes
|
5.6.1 Create Entity
5.6.2 Update Attributes
5.6.3 Append Attributes
5.6.4 Partial Attribute Update
5.6.5 Delete Attribute
5.6.6 Delete Entity
5.6.7 Batch Entity Creation
5.6.8 Batch Entity Upsert
5.6.9 Batch Entity Update
5.6.10 Batch Entity Delete
5.6.17 Merge Entity
5.6.18 Replace Entity
5.6.19 Replace Attribute
5.6.20 Batch Entity Merge
|
Context Information Consumption - operations for consuming Entities and
checking for which Entity Types and Attributes Entities are available in
the system
|
5.7.1 Retrieve Entity
5.7.2 Query Entities
5.7.5 Retrieve Available Entity Types
5.7.6 Retrieve Details of Available Entity Types
5.7.7 Retrieve Available Entity Type Information
5.7.8 Retrieve Available Attributes
5.7.9 Retrieve Details of Available Attributes
5.7.10 Retrieve Available Attribute Information
|
|
Context Information Subscription - operations for subscribing to
Entities, receiving notifications and managing subscriptions
|
5.8.1 Create Subscription
5.8.2 Update Subscription
5.8.3 Retrieve Subscription
5.8.4 Query Subscription
5.8.5 Delete Subscription
5.8.6 Notification
|
|
Temporal API
|
Temporal Context Information Provision - operations for providing or
managing the Temporal Evolution of Entities and Attributes
|
5.6.11 Upsert Temporal Evolution of an Entity
5.6.12 Add Attributes to Temporal Evolution of an Entity
5.6.13 Delete Attributes from Temporal Evolution of an Entity
5.6.14 Partial Update Attribute instance
5.6.15 Delete Attribute Instance
5.6.16 Delete Temporal Evolution of an Entity
|
Temporal Context Information Consumption - operations for consuming the
Temporal Evolution of Entities
|
5.7.3 Retrieve Temporal Evolution of an Entity
5.7.4 Query Temporal Evolution of Entities
|
|
Registry API
|
Context Source Registration - operations for registering Context Sources
and managing Context Source Registrations (CSRs)
|
5.9.2 Register Context Source
5.9.3 Update CSR
5.9.4 Delete CSR
|
Context Source Discovery - operations for retrieving and discovering
CSRs
|
5.7.1 Retrieve CSR
5.7.2 Query CSRs
|
|
Context Source Registration Subscription - operations for subscribing to
CSRs, receiving notifications and managing CSRs
|
5.11.2 Create CSR Subscription
5.11.3 Update CSR Subscription
5.11.4 Retrieve CSR Subscription
5.11.5 Query CSR Subscription
5.11.6 Delete CSR Subscription
5.11.7 CSR Notification
|
|
JSONLDContext API
|
Storing, managing and serving @contexts
|
5.13.2 Add @context
5.13.3 List @contexts
5.13.4 Serve @context
5.13.5 Delete and Reload @context
|
All Context Brokers shall implement the Core API. Temporal API and Registry API can be implemented by a Broker or by a separate temporal component and Context Registry respectively. Table 4.3.5‑2 shows the possible implementation configurations. A temporal component implementing the Temporal API can also be used completely independently of a Context Broker. The JSONLDContext API is optional. The managing and serving of @contexts can also be handled by an independent, stand-alone component.
Description
|
Temporal API
|
Registry API
|
---|---|---|
Central Broker without temporal support
|
none
|
none
|
Central Broker with integrated temporal component
|
local
|
none
|
Central Broker with separate temporal component
|
separate
|
none
|
Context Broker supporting distributed and federated deployments without
temporal support and with integrated Context Registry
|
none
|
local
|
Context Broker supporting distributed and federated deployments with
integrated temporal component and integrated Context Registry
|
local
|
local
|
Context Broker supporting distributed and federated deployments with
separate temporal component and integrated Context Registry
|
separate
|
local
|
Context Broker supporting distributed and federated deployments without
temporal support and separate Context Registry
|
none
|
separate
|
Context Broker supporting distributed and federated deployments with
integrated temporal component and separate Context Registry
|
local
|
separate
|
Context Broker supporting distributed and federated deployments with
separate temporal component and separate Context Registry
|
separate
|
separate
|
Table 4.3.5‑3 shows which operations are implemented and used by the other architectural roles as introduced in clause 4.3.2, clause 4.3.3 and clause 4.3.4. In addition, there are separate roles for the Temporal API, i.e. Temporal Context Producer, Temporal Context Source and Temporal Context Consumer. For completeness, the roles of Context Repository and Temporal Context Repository have been introduced, implementing the Context Information Provision and Temporal Context Information Provision functionalities, respectively. In practice, components implementing the latter roles will also implement functionalities for consuming or processing the stored information. Actual components can have multiple roles at the same time, e.g., a Context Broker can implement all roles at the same time. Context Consumers typically only interact with Context Brokers, but in alternative setups, as shown in Figure 4.3.3‑1, they can also directly interact with the Context Registry and then directly contact Context Sources.
NGSI-LD Role
|
Implements
|
Uses
|
---|---|---|
Context Consumer
|
5.8.6 Notification -
if supporting asynchronous interactions
In case of direct interactions with Context Registry:
5.11.7 CSR Notification -
if supporting asynchronous interactions
|
5.7.1 Retrieve Entity
5.7.2 Query Entities
5.7.5 Retrieve Available Entity Types
5.7.6 Retrieve Details of Available Entity Types
5.7.7 Retrieve Available Entity Type Information
5.7.8 Retrieve Available Attributes
5.7.9 Retrieve Details of Available Attributes
5.7.10 Retrieve Available Attribute Information
5.8.1 Create Subscription
5.8.2 Update Subscription
5.8.3 Retrieve Subscription
5.8.4 Query Subscription
5.8.5 Delete Subscription
In case of direct interactions with Context Registry:
5.7.1 Retrieve CSR
5.7.2 Query CSRs
if supporting asynchronous interactions:
5.11.2 Create CSR Subscription
5.11.3 Update CSR Subscription
5.11.4 Retrieve CSR Subscription
5.11.5 Query CSR Subscription
5.11.6 Delete CSR Subscription
|
Context Producer
|
none
|
5.6.1 Create Entity
5.6.2 Update Attributes
5.6.3 Append Attributes
5.6.4 Partial Attribute Update
5.6.5 Delete Attribute
5.6.6 Delete Entity
5.6.7 Batch Entity Creation
5.6.8 Batch Entity Upsert
5.6.9 Batch Entity Update
5.6.10 Batch Entity Delete
5.6.17 Merge Entity
5.6.18 Replace Entity
5.6.19 Replace Attribute
5.6.20 Batch Entity Merge
|
Context Source
|
5.7.1 Retrieve Entity
5.7.2 Query Entities
5.7.5 Retrieve Available Entity Types
5.7.6 Retrieve Details of Available Entity Types
5.7.7 Retrieve Available Entity Type Information
5.7.8 Retrieve Available Attributes
5.7.9 Retrieve Details of Available Attributes
5.7.10 Retrieve Available Attribute Information
5.8.1 Create Subscription
5.8.2 Update Subscription
5.8.3 Retrieve Subscription
5.8.4 Query Subscription
5.8.5 Delete Subscription
|
5.8.6 Notification
5.9.2 Register Context Source
5.9.3 Update CSR
5.9.4 Delete CSR
|
Context Repository
|
5.6.1 Create Entity
5.6.2 Update Attributes
5.6.3 Append Attributes
5.6.4 Partial Attribute Update
5.6.5 Delete Attribute
5.6.6 Delete Entity
5.6.7 Batch Entity Creation
5.6.8 Batch Entity Upsert
5.6.9 Batch Entity Update
5.6.10 Batch Entity Delete
5.6.17 Merge Entity
5.6.18 Replace Entity
5.6.19 Replace Attribute
5.6.20 Batch Entity Merge
|
none
|
Temporal Context Consumer
|
In case of direct interactions with Context Registry:
5.11.7 CSR Notification - if supporting asynchronous
interactions
|
5.7.3 Retrieve Temporal Evolution of an Entity
5.7.4 Query Temporal Evolution of Entities
In case of direct interactions with Context Registry:
5.7.1 Retrieve CSR
5.7.2 Query CSRs
if supporting asynchronous interactions:
5.11.2 Create CSR Subscription
5.11.3 Update CSR Subscription
5.11.4 Retrieve CSR Subscription
5.11.5 Query CSR Subscription
5.11.6 Delete CSR Subscription
|
Temporal Context Producer
|
None
|
5.6.11 Upsert Temporal Evolution of an Entity
5.6.12 Add Attributes to Temporal Evolution of an Entity
5.6.13 Delete Attributes from Temporal Evolution of an Entity
5.6.14 Partial Update Attribute instance
5.6.15 Delete Attribute Instance
5.6.16 Delete Temporal Evolution of an Entity
|
Temporal Context Source
|
5.7.3 Retrieve Temporal Evolution of an Entity
5.7.4 Query Temporal Evolution of Entities
|
5.9.2 Register Context Source
5.9.3 Update CSR
5.9.4 Delete CSR
|
Temporal Context Repository
|
5.6.11 Upsert Temporal Evolution of an Entity
5.6.12 Add Attributes to Temporal Evolution of an Entity
5.6.13 Delete Attributes from Temporal Evolution of an Entity
5.6.14 Partial Update Attribute instance
5.6.15 Delete Attribute Instance
5.6.16 Delete Temporal Evolution of an Entity
|
none
|
Context Registry
|
5.9.2 Register Context Source
5.9.3 Update CSR
5.9.4 Delete CSR
5.7.1 Retrieve CSR
5.7.2 Query CSRs
5.11.2 Create CSR Subscription
5.11.3 Update CSR Subscription
5.11.4 Retrieve CSR Subscription
5.11.5 Query CSR Subscription
5.11.6 Delete CSR Subscription
|
5.11.7 CSR Notification
|
One fundamental concept underpinning all of the prototypical architectures described above (clauses 4.3.2, 4.3.3 and 4.3.4) is the idea that Entity data does not need to be centralized within a single Context Broker. When reading context information, a Context Broker can be used as a single point of access to retrieve Entity data found distributed across multiple associated Context Brokers each receiving a context consumption request. Similarly, when modifying an Entity, a single request to a Context Broker may result in the operation being distributed and different parts of that Entity being updated across multiple Context Brokers each receiving a context provision request.
As long as there is only a centralized Context Broker, i.e. there are no Context Sources registered, all NGSI-LD requests, with few exceptions such as Update Attributes (see clause 5.6.2) and the batch operations (see clauses 5.6.7, 5.6.8, 5.6.9, 5.6.10, 5.6.20), can either be successfully executed completely, or result in an error. In the distributed case, all requests can be partially successful. For the centralized case described above, only specific operations, such as Update Attributes and the batch operations, can be partially successful.
When a Context Source is registered, an operation mode is selected. This defines the basis for distributed operations and also defines whether or not the Context Broker is permitted to hold context data about the Entities and Attributes locally itself.
If two registered Context Sources are providing context data for the same Attribute, the Attribute instances can be distinguished by datasetId. The mechanism for determining which data shall be returned is defined in clause 4.5.5.
It is possible to restrict a registered Context Source to operate on a specific Entity type or list of Entity types. In order for Context Broker hierarchies to support and restrict the distribution of such limited operations, the Entity type selector (see clause 4.17) can be added as a filter on forwarded requests even where its presence initially seems redundant.
Furthermore, registered Context Sources may indicate that they are only willing to respond to a limited subset of API operations. Context Brokers shall respect this, to avoid unnecessarily sending distributed operation requests which are always guaranteed to fail. For example, a Context Source may consistently refuse certain API operations since it does not support them. Alternatively, some Context Source endpoints (such as updates) may be protected for use by authorized users only, and not accessible to a Context Broker without those rights. Limited access is likely to be the case in extended data sharing scenarios, where a registered Context Source, and the data held within it, may belong to an external third party.
For the endpoints served, all registered Context Sources shall support the normalized representation of Entities as default. Support of additional representation formats is optional and will depend on the implementation. System generated attributes such as modifiedAt and createdAt (see clause 4.8) should be supported by registered Context Sources, at a minimum no error shall be returned if they are not available when requested.
For additive registrations, the Context Broker is permitted to hold context data about the Entities and Attributes locally itself, and also obtain data from external sources. Context provisioning operations are serviced both locally by the Context Broker itself, and also distributed on to the registered sources.
An inclusive Context Source Registration specifies that the Context Broker considers all registered Context Sources as equals and will distribute operations to those Context Sources even if relevant context data is available directly within the Context Broker itself (in which case, all results will be integrated in the final response). Data from every Context Source registered by an inclusive Context Source Registration is requested with an equal priority. This is the default mode of operation.
An auxiliary Context Source Registration never overrides data held directly within a Context Broker. Auxiliary distributed operations are limited to context information consumption operations (see clause 5.7). Context data from auxiliary context sources is only included if it is supplementary to the context data otherwise available to the Context Broker. Auxiliary Context Source Registrations are always accepted as there can never be a conflict.
For proxied registrations, the Context Broker itself is not permitted to hold context data about the registered Entities and Attributes locally (thus all registered context data is obtained from the external registered sources). Unregistered Attributes of an Entity are permitted to be held locally; when context provisioning operations are received, registered Attributes are distributed on to the registered sources and never serviced directly by the Context Broker itself.
An exclusive Context Source Registration specifies that all of the registered context data is held in a single location external to the Context Broker. The Context Broker itself holds no data locally about the registered Attributes and no overlapping proxied Context Source Registrations shall be supported for the same combination of registered Attributes on the Entity. An exclusive registration shall always relate to specific Attributes found on a single Entity. Thus, the registration shall define both:
Once an exclusive Context Source Registration has been created, no further exclusive or redirect Context Source Registrations can be created for that same combination of Entity ID and Attributes.
Potentially multiple distinct redirect registrations can apply at the same time. The Context Broker itself holds no data locally in conflict to the registration. In the case that multiple overlapping redirect registrations are defined, operations are distributed to all registered Context Sources.
When creating a registration, it is unknown whether the requested data is held at the distributed endpoint, or it is in turn distributed via further registrations. It is necessary to include a binding-specific mechanism to request operations only on the registered endpoint itself to avoid cascades of an excessive lengths, duplicates or loops.
Furthermore, it is not known if any distributed endpoints of a registered Context Source are in turn reliant on previously encountered Context Sources thus causing an infinite loop. Therefore, when processing a distributed operation, a specific field listing all previously encountered Context Sources (e.g. a Via header in the response in case of HTTP binding (IETF RFC 7230 [26])) shall be passed as part of the request and this field can be used to exclude duplicated sources from matching as context source registrations.
In the case of multi-tenancy (see clause 4.14) each Tenant found within each registered Context Source shall be considered separately.
As Tenant information, if applicable, is directly specified in the CSourceRegistration, it shall not be part of contextSourceInfo. Binding-specific information that is used for setting up the connection or is specific for an interaction, e.g. Content-length in HTTP, cannot be overridden by contextSourceInfo. If present, such information shall be ignored.
Context Broker architectures assume that Entity data does not need to be centralized within a single Context Broker, however, when querying context information, Entity data retrieval can be considered as a unitary operation, masking the fact that each registered Context Broker is receiving a separate distributed Context Consumption request.
To support consistent pagination, and to process each Context Consumption request efficiently, it is necessary for the Context Broker to initially make a broad request to each registered Context Provider to return a list of available Entity ids matching the registration, before narrowing the result set using the query syntax. This Entity mapping is an internal operation, not usually exposed to the end user, however it is necessary to explicitly define a consistent mechanism for entity map creation, caching and retrieval.
A specific field pointing to the location of a cached EntityMap (e.g. a custom header in the response in case of HTTP binding, see ) shall be returned within the response of a query, whenever this is requested by the client. Similarly, the reuse of a previously created EntityMap can be requested by passing the same specific field into a request.
Since an exclusive Context Source Registration already specifies that all context data is held in a single location, its relevance to a distributed query can be inferred within the Registered context Source without the use of an EntityMap.
NGSI-LD serialization is based on JSON-LD [2], a JSON-based format to serialize Linked Data. The @context in JSON-LD is used to expand terms, provided as short-hand strings, to concepts, specified as URIs, and vice versa, to compact URIs into terms. The Core NGSI-LD (JSON-LD) @context is defined as a JSON-LD @context which contains:
NGSI-LD compliant implementations shall support such Core @context, which shall be implicitly present when processing or generating context information. Furthermore, the Core @context is protected and shall remain immutable and invariant during expansion or compaction of terms. Therefore, and as per the JSON-LD processing rules [2], when processing NGSI-LD content, implementations shall consider the Core @context as if it were in the last position of the @context array. Nonetheless, for the sake of compatibility and cleanness, data providers should generate JSON-LD content that conveys the Core @context in the last position.
For the avoidance of doubt, when rendering NGSI-LD Elements, the Core @context shall always be treated as if it had been originally placed in the last position, so that, if needed, upstream JSON-LD processors can properly expand as NGSI-LD or override the resulting JSON-LD documents provided by API implementations.
The NGSI-LD Core @context is publicly available at https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld and shall contain all the terms as mandated by Annex B.
In addition to the terms defined by the Core NGSI-LD @context (mandatory as per annex B), a user @context should be provided and it should contain the following terms:
The user @context shall not contain JSON-LD Scoped Contexts (see [2], section 4.1.8), as described in clause 5.5.7.
Depending on the binding, the @context may not just be provided embedded with the rest of the JSON content, but there could be other options. For example, in the HTTP binding, the @context can be made available through a Link header (see clause 6.3.5).
All NGSI-LD elements are represented in JSON-LD [2]. For the use with the API, the compacted JSON-LD representation is used, i.e. short terms are used, which are expanded by the component implementing the NGSI-LD API using a JSON-LD @context, typically provided as part of the request. As described in clause 4.4, the NGSI-LD Core @context is always considered to be part of the @context to be used.
The use of JSON-LD for NGSI-LD elements has some implications for the use of null values, as JSON-LD interprets setting elements to null as elements to be removed when performing JSON-LD expansion. Thus, null cannot be used as a value in NGSI-LD.
To nevertheless allow deletions as part of NGSI-LD operations that update NGSI-LD data, which is typically handled by setting the respective JSON key to null (e.g. as in IETF RFC 7396 [16]), the URI "urn:ngsi-ld:null" is used as a replacement for null in all places, where URI strings are valid JSON values. For languageMap, the JSON object {"@none": "urn:ngsi-ld:null"} is to be used as explained in clause 4.5.18. These encodings of null are referred to as NGSI-LD Null.
For representing deleted elements in notifications and in the temporal representation, the URI "urn:ngsi-ld:null" is used as a Property value or Relationship object and the JSON object {"@none": "urn:ngsi-ld:null"} for the "languageMap" of a Language Property, respectively.
As null cannot be used as a value in JSON-LD, there is still the possibility of using a JSON null literal represented as {"@type": "@json", "@value": null} in JSON-LD instead. JSON literals are not to be expanded in JSON-LD and thus the respective element is not removed during JSON-LD expansion.
An NGSI-LD Entity shall be represented by an object encoded using JSON-LD [2]. The rules described below state the encoding that shall be supported by implementations. Annex D provides a computational description of this process in terms of an algorithm.
The JSON-LD object contains the following members:
Mandatory
Optional
Terms defined in the Core Context as non-reified Properties (such as "datasetId", "instanceId", etc.) shall not be used as Attribute names.
Attributes shall not contain any embedded @context, as described in clause 5.5.7.
An NGSI-LD Property, its value and sub-attributes can be represented in two equally valid lossless formats. The normalized representation is a JSON-LD document that is complete with respect to mandatory members. The concise representation is a terser alternative, which makes various implicit assumptions against the payloads and removes redundancy from them.
Both normalized and concise representation of Properties shall be supported by implementations and can be selected by Context Consumers through specific request parameters. An example of this representation can be found in Annex C, clause C.2.2.
An NGSI-LD Property in normalized representation shall be represented by a member whose key is the Property name (a term) and whose value is a JSON-LD object (or JSON-LD array with such JSON-LD objects, if there are multiple instances with the same Property name, as described in clause 4.5.5), which includes the following members:
Mandatory
Optional
System Generated
Output Only
Furthermore, an NGSI-LD Property in the normalized representation shall never include the following members:
Prohibited
An NGSI-LD Property without sub-attributes shall be represented in a concise but lossless representation by a member whose key is the Property name (a term) and whose value is the Property Value (see definition of NGSI-LD Value in clause 3.1). In this case the concise representation is equivalent to simplified representation (see clause 4.5.4).
Prohibited
During partial update patch and merge patch (see clauses 5.5.8 and 5.5.12), when deleting a Property without a datasetId, as well as when notifying about a deleted Property without sub-attributes, the NGSI-LD Property should be represented in a concise representation by a member whose key is the Property name (a term) and whose value is "urn:ngsi-ld:null".
An NGSI-LD Property which includes additional sub-attributes shall be represented in a concise but lossless representation by a member whose key is the Property name (a term) and whose value is a JSON-LD object (or JSON-LD array with such JSON-LD objects if there are multiple instances with the same Property name as described in clause 4.5.5) including the following members:
Mandatory
Optional
System Generated
Output Only
Furthermore, an NGSI-LD Property in the concise representation shall never include the following members:
Prohibited
An NGSI-LD Relationship, its value and sub-attributes can be represented in two equally valid lossless formats. The normalized representation is a JSON-LD document that is complete with respect to mandatory members. The concise representation is a terser alternative, which makes various implicit assumptions against the payloads and removes redundancy from them.
Both normalized and concise representation of Relationships shall be supported by implementations and can be selected by Context Consumers through specific request parameters. An example of this representation can be found in annex C, clause C.2.2.
An NGSI-LD Relationship in normalized representation shall be represented by a member whose key is the Relationship name (a term) and whose value is a JSON-LD object (or JSON-LD array with such JSON-LD objects, if there are multiple instances with the same Relationship name, as described in clause 4.5.5) with the following terms:
Mandatory
Optional
System Generated
Output Only
Furthermore, an NGSI-LD Relationship in the normalized representation shall never include the following members:
Prohibited
An NGSI-LD Relationship in shall be represented in a concise but lossless representation by a member whose key is the Relationship name (a term) and whose value is a JSON-LD object (or JSON-LD array with such JSON-LD objects if there are multiple instances with the same Relationship name as described in clause 4.5.5) with the following terms:
Mandatory
Optional
System Generated
Output Only
Furthermore, an NGSI-LD Relationship in the concise representation shall never include the following members:
Prohibited
Notwithstanding the definition above, during partial update patch and merge patch (see clauses 5.5.8 and 5.5.12), an NGSI-LD Relationship with a value of NGSI-LD Null and without a datasetId should be represented in a concise representation by a member whose key is the Relationship name (a term) and whose value is "urn:ngsi-ld:null".
The NGSI-LD specification defines an abbreviated, lossy representation of Entities, which allows consuming only entity data (the target object of each Relationship or the value of each Property) corresponding to the Properties or Relationships whose subject is the Entity itself i.e. the own Attributes of the Entity. The simplified representation of Entities shall be supported by implementations and can be selected by Context Consumers through specific request parameters. An example of this representation can be found in annex C, clause C.2.2.
The simplified representation of an Entity shall be a JSON-LD object containing the following members:
Mandatory
Optional
"name": {"dataset": {"@none": "David Robert Jones","urn:ngsi-ld:datasetId:001": "David Bowie","urn:ngsi-ld:datasetId:002": "Ziggy Stardust"}}
EXAMPLE 5:"parkingTickets": {"json": {"id": "85a6cc52-0589-45f9","value": "Overstay 60 minutes"}}
EXAMPLE 6: "gender": {"vocab": "Male"}
EXAMPLE 7: "providedBy": "urn:ngsi-ld:Device:31415"EXAMPLE 8:
EXAMPLE 9:
EXAMPLE 10:
"windSpeed": 60
EXAMPLE 11:
{
}
EXAMPLE 12:
EXAMPLE 13:
"providedBy": {"dataset": {"@none": "urn:ngsi-ld:Device:31415","urn:ngsi-ld:datasetId:001": "urn:ngsi-ld:Device:27182","urn:ngsi-ld:datasetId:002": "urn:ngsi-ld:Device:14142"}}
EXAMPLE 15:"periods": {"dataset": {"@none": ["First", "Second", "Third", "Fourth"],"urn:ngsi-ld:datasetId:001": ["1st", "2nd", "3rd", "4th"],"urn:ngsi-ld:datasetId:002": ["Primary", "Secondary", "Tertiary", "Quaternary"]}}
"urn:ngsi-ld:BusStop:0101","urn:ngsi-ld:BusStop:0102","urn:ngsi-ld:BusStop:9912"
"route": [
"urn:ngsi-ld:BusStop:0101",
"urn:ngsi-ld:BusStop:0102",
"urn:ngsi-ld:BusStop:9912"
"stopName": "High Street",
"location: {"type": "Point", "coordinates": [54.112,0.334]}}
"stopName": "Station Road",
"location": {"type": "Point", "coordinates": [54.101,0.302]}}
"id": "urn:ngsi-ld:BusStop:9912"
"stopName": "Mornington Cresent",
"location: {"type": "Point", "coordinates": [54.142,0.332]}
EXAMPLE 19:"route": {"dataset": {"@none": ["urn:ngsi-ld:BusStop:0101","urn:ngsi-ld:BusStop:0102","urn:ngsi-ld:BusStop:9912"],"urn:ngsi-ld:datasetId:001": ["urn:ngsi-ld:BusStop:0101","urn:ngsi-ld:BusStop:0102","urn:ngsi-ld:BusStop:0022"],"urn:ngsi-ld:datasetId:002": ["urn:ngsi-ld:BusStop:0101","urn:ngsi-ld:BusStop:0102","urn:ngsi-ld:BusStop:0022","urn:ngsi-ld:BusStop:9912"]}}
For each Entity, there can be Attributes that simultaneously have more than one instance. In the case of Properties, there may be more than one source at a time that provides a Property instance, e.g. based on independent sensor measurements with different quality characteristics. For instance, take a speedometer and a GPS both providing the current speed of a car. In the case of Relationships, there may be non-functional Relationships requiring separate metadata attached to each object, e.g. for a room, there may be multiple "contains" Relationships to all sorts of objects currently in the room that have been put there by different people (a separate "placedBy” Relationship-of-the-Relationship) and which are dynamically changing over time.
To be able to explicitly manage such multi-attributes, the optional datasetId property is used, which is of datatype URI, or equal to the JSON-LD keyword "@none". It is introduced for Properties and Relationships in clauses 4.5.2 and 4.5.3 respectively. If a datasetId is provided when creating, updating, appending or deleting Attributes, only instances with the same datasetId are affected, leaving instances with another datasetId or an instance without a datasetId untouched. If no datasetId is provided, or "datasetId":"@none" is supplied, it is considered as the default Attribute instance. Thus, the creation, updating, appending or deleting of Attributes without providing a datasetId only affects the default Attribute instance. There can only be one default Attribute instance for an Attribute with a given Attribute name in any request or response. An example can be found in annex C, clause C.2.2.
When requesting Entity information, if there are multiple instances of matching Attributes these are returned as arrays of Attributes, instead of a single Attribute element. The datasetId of the default Attribute instance is never explicitly included in responses, i.e., a default Attribute instance does not have a datasetId.
The datasetId can be used to create different “views” of Entities. All Attribute instances sharing the same datasetId can be seen as one “view”. If one or more datasetIds are specified in the request, only the Attribute instances that match one of the datasetIds will be returned. The datasetId of the default Attribute instance can be specified as "@none". In case that no Attribute instances match the provided datasetIds, then the Attribute shall not be returned with the Entity. If no datasetId is provided, then all available Attribute instances will be returned.
There is no multi-attribute support for non-reified Attributes, in particular this applies to the Temporal Properties createdAt, modifiedAt, deletedAt and observedAt, and also the unitCode Property.
In case of conflicting information for an Attribute, where a datasetId is duplicated, but there are differences in the other attribute data, the one with the most recent observedAt DateTime, if present, and otherwise the one with the most recent modifiedAt DateTime shall be provided. If no other mechanism for determining the most current Attribute instance is found, the NGSI-LD system shall choose the Attribute instance at random and the result is indeterminate.
The temporal representation of an Entity is the way to represent the Temporal Evolution of an Entity: the Entity shall be as mandated by clause 4.5.1, but for each Property and Relationship their temporal representation shall be provided as mandated by clauses 4.5.7 and 4.5.8 and the Scope (if present) shall be represented as a temporal representation of a Property (clause 4.5.7) that can only have the non-reified Temporal Properties createdAt, modifiedAt, deletedAt and observedAt as sub-Properties. This is required to represent the Scope of a Temporal Evolution of an Entity. In case the Temporal Evolution of the Scope is updated as the result of a change from the Core API, the observedAt sub-Property should be set as a copy of the modifiedAt sub-Property.
The temporal evolution of a Property (for instance, its historical evolution or future predictions) is composed of the sequence of instances of the referred Property during a period of time within its lifetime.
The temporal representation of a Property shall be provided as an Array of JSON-LD objects, each one representing an instance of the Property (as mandated by clause 4.5.2) at a particular point in time, which is recorded as a Temporal Property of the instance (typically observedAt). See example in annex C, clause C.5.6. In case the Property is deleted, an instance of the Property is recorded with its value set to the URI "urn:ngsi-ld:null" and the deletedAt Temporal Property set.
Systems should maintain an instanceId for each such Property instance. Without such an instanceId, it is not possible to selectively modify or delete temporal information via the NGSI-LD API. The consequences of this may be severe in the case of modification or deletion requests for legal reasons, e.g. GDPR [18]. When implementing the NGSI-LD API on storage systems that do NOT allow modification or deletion, similar problems may be encountered.
The temporal evolution of an Relationship (for instance, its historical evolution or future predictions) is composed of the sequence of instances of the referred Relationship during a period of time within its lifetime.
The temporal representation of an NGSI-LD Relationship shall be provided as an Array of JSON-LD objects, each one representing an instance of the Relationship (as mandated by clause 4.5.3) at a particular point in time, which is recorded as a Temporal Property of the instance (typically observedAt). See example in annex C, clause C.5.5. In case the Relationship is deleted, an instance of the Relationship is recorded with its object set to the URI "urn:ngsi-ld:null" and the deletedAt Temporal Property set.
Systems should maintain an instanceId for each such Relationship instance. Without such an instanceId, it is not possible to selectively modify or delete temporal information via the NGSI-LD API. The consequences of this may be severe in the case of modification or deletion requests for legal reasons, e.g. GDPR [18]. When implementing the NGSI-LD API on storage systems that do NOT allow modification or deletion, similar problems may be encountered.
The NGSI-LD specification defines an alternative, abbreviated temporal representation of Temporal Evolution of Entities, which allows consuming temporal Entity data in a more straightforward manner. The simplified temporal representation of Entities shall be supported by implementations and can be selected by Context Consumers through specific request parameters. An example can be found in annex C, clause C.5.6.
The simplified temporal representation of an Entity shall be a JSON-LD object containing the following members:
Mandatory
Optional
"says": {"type": "LanguageProperty","languageMaps": [[{"languageMap": {"en": "yes", "fr": "oui"}},"2022-08-09T18:25:02Z"],[{"languageMap": {"en": "no", "fr": "non"}},"2022-08-10T18:25:02Z"]]}
"period": {"type": "ListProperty","valueLists": [[["First", "Second", "Third", "Fourth"],"2022-08-09T18:25:02Z"],[["1st", "2nd", "3rd", "4th"],"2022-08-10T18:25:02Z"]]}
"parkingTickets": {"type": "JsonProperty","jsons": [[{"json": [{"id": "85a6cc52-0589-45f9","value": "Overstay 60 minutes"}],},"2022-08-09T18:25:02Z"],[{"json": [{"id": "85a6cc52-0589-45f9","value": "Overstay 60 minutes"},{"id": "x5c56s-0589-45f9","value": "Overstay 45 minutes"}]},"2022-08-10T18:25:02Z"]]}
"gender": {"type": "VocabProperty","vocabs": [[{"vocab": "Male"},"2022-08-09T18:25:02Z"],[{"vocab": "Female"},"2022-08-10T18:25:02Z"]]
"spouse": {"type": "Relationship","objects": [["urn:ngsi-ld:Person:123455","2022-08-09T18:25:02Z"],["urn:ngsi-ld:Person:999999","2022-08-10T18:25:02Z"]]}
"activeDevices": {"type": "Relationship","objects": [[["urn:ngsi-ld:Device:14142", "urn:ngsi-ld:Device:13562"],"2022-08-09T18:25:02Z"],[["urn:ngsi-ld:Device:14142", "urn:ngsi-ld:Device:13562", "urn:ngsi-ld:Device:37309"],"2022-08-10T18:25:02Z"]]}
"membersPresent": {"type": "ListRelationship","objectLists": [[["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"],"2022-08-09T18:25:02Z"],[["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Eve", "urn:ngsi-ld:Person:Mallory"],"2022-08-10T18:25:02Z"]]}
The entity type list representation is used to consume information about entity types. The entity type list representation shall be a JSON-LD object containing the following members:
Mandatory
The detailed entity type list representation is used to consume detailed information about entity types including the names of attributes that instances of each entity type can have. The detailed entity type list representation shall be an array of JSON-LD objects containing the following members:
Mandatory
The entity type information representation is used to consume detailed information about an entity type. The entity type information representation shall be a JSON-LD object containing the following members:
Mandatory
The attribute list representation is used to consume information about attributes. The attribute list representation shall be a JSON-LD object containing the following members:
Mandatory
The detailed attribute list representation is used to consume detailed information about attributes including the names of entity types that have instances with attributes, which have the respective attribute name. The detailed attribute list representation shall be an array of JSON-LD objects containing the following members:
Mandatory
The attribute information representation is used to consume detailed information about an attribute. The attribute information representation shall be a JSON-LD object containing the following members:
Mandatory
The NGSI-LD specification defines an alternative representation of Entities, to make NGSI-LD responses compatible with GIS (Geographic Information System) applications which support the GeoJSON format [8] and/or GeoJSON-LD [i.20].
Every NGSI-LD Entity can be represented as a GeoJSON Feature object, where a Feature object represents any spatially bounded thing as defined by its geometry.
A parameter of the request (named geometryProperty) may be used to indicate the name of the GeoProperty to be selected. If this parameter is not present, then the default name of "location" shall be used.
If the selected GeoProperty has multiple instances as described in clause 4.5.5, either a datasetId shall be specified, in order to define which instance of the value is to be selected, or a default attribute instance exists, which is then selected, if no datasetId was specified.
If an entity lacks the GeoProperty as specified or the value does not hold a valid GeoJSON geometry object then the geometry shall be undefined and returned with a value of null – which is syntactically valid GeoJSON.
The GeoJSON representation of a spatially bounded Entity is defined as a single GeoJSON Feature object including the following members:
Mandatory
This representation shall be fully compliant with Feature as defined within IETF RFC 7946 [8].
An example can be found in annex C, clause C.2.3.
The GeoJSON representation of a list of spatially bounded Entities is defined as a single GeoJSON FeatureCollection object containing an array of GeoJSON Feature objects as follows:
Mandatory
This representation shall be fully compliant with FeatureCollection as defined within IETF RFC 7946 [8].
An example can be found in annex C, clause C.2.3.
When both simplified (see clause 4.5.4) and GeoJSON representation is requested, the following simplified GeoJSON representation compatible with GIS systems shall be returned.
The simplified GeoJSON representation of a spatially bounded Entity is defined as a single GeoJSON Feature object as follows:
Mandatory
The selection of the geometry field is defined in clause 4.5.16.1.
This representation shall be fully compliant with Feature as defined within IETF RFC 7946 [8].
An example can be found in annex C, clause C.2.3.
The simplified GeoJSON representation of a list of spatially bounded Entities is defined as a single GeoJSON FeatureCollection object containing an array of GeoJSON Feature objects as follows:
Mandatory
This representation shall be fully compliant with FeatureCollection as defined within IETF RFC 7946 [8].
NGSI-LD defines a specialized type of Property named LanguageProperty, defined by the NGSI-LD @context described by the present document in clause 4.4.
When dealing with NGSI-LD Entities, implementations shall interpret the JSON-LD nodes of type LanguageProperty as per clause 4.5.18.2 (when in normalized representation) or clause 4.5.18.3 (when in concise representation).
Both normalized and concise representation of LanguageProperties shall be supported by implementations and can be selected by Context Consumers through specific request parameters. An example of this representation can be found in annex C, clause C.2.2.
An NGSI-LD LanguageProperty shall be represented in normalized representation by a member whose key is the Property name (a term), whose value is the same as the JSON-LD object in NGSI-LD Property Representation defined in clause 4.5.2.2, with the following differences:
Mandatory
Furthermore, an NGSI-LD LanguageProperty in the normalized representation shall never include the following members:
An NGSI-LD LanguageProperty shall be represented in concise but lossless representation by a member whose key is the Property name (a term), whose value is the same as the JSON-LD object in NGSI-LD Property Representation defined in clause 4.5.2.3, with the following differences:
Mandatory
Furthermore, an NGSI-LD LanguageProperty in the concise representation shall never include the following members:
Notwithstanding the definition above, during partial update patch and merge patch (see clauses 5.5.8 and 5.5.12), an NGSI-LD LanguageProperty with a value of NGSI-LD Null without a datasetId should be represented in a concise representation by a member whose key is the LanguageProperty name (a term) and whose value is "urn:ngsi-ld:null".
The NGSI-LD specification defines an alternative temporal representation of Entities, called aggregated temporal representation, which allows consuming temporal Entity data after applying an aggregation function on the values of the Attribute instances. The aggregated temporal representation of Entities shall be supported by implementations supporting the temporal representation of Entities and can be selected by Context Consumers through specific request parameters. An example can be found in annex C, clause C.5.14.
The aggregation function is applied according to the following principles:
The aggregated temporal representation of an Entity shall include the following:
An example of this aggregated temporal representation can be found in annex C, clause C.5.14.
In order to support such aggregation functions, two parameters are defined:
The duration is expressed using the ISO 8601 [17] Duration Representation and in particular using the following format and conventions:
The values supported by the aggrMethods parameter are the following:
The semantics of the different aggregation methods defined above is as follows, and shall be supported by compliant implementations:
Aggregation Method
|
JSON String
|
JSON Number
|
JSON Object
|
JSON Array
|
JSON Boolean
(for the purpose of the aggregation, true is considered as a value of 1,
false is considered as a
value of 0)
|
---|---|---|---|---|---|
totalCount
|
Calculate the number of times the value has been updated inside the
period
|
||||
distinctCount
|
Calculate the count of distinct values inside the period
|
||||
sum
|
N/A
|
Calculate the sum of the values inside the period
|
N/A
|
Calculate the sum of the sizes of the arrays inside the period
|
Calculate the sum of the values inside the period
|
avg
|
N/A
|
Calculate the average of the values inside the period
|
N/A
|
Calculate the average number of the sizes of the arrays inside the
period
|
Calculate the average of the values inside the period
|
min
|
Calculate the first value in lexicographical order inside the period
|
Calculate the minimum value inside the period
|
N/A
|
Calculate the minimum size of the arrays inside the period
|
Calculate the minimum value inside the period
|
max
|
Calculate the last value in lexicographical order inside the period
|
Calculate the maximum value inside the period
|
N/A
|
Calculate the maximum size of the arrays inside the period
|
Calculate the maximum value inside the period
|
stddev
|
N/A
|
Calculate the standard deviation of the values inside the period
|
N/A
|
N/A
|
Calculate the standard deviation of the values inside the period
|
sumsq
|
N/A
|
Calculate the sum of the square of the values inside the period
|
N/A
|
N/A
|
Calculate the sum of the square of the values inside the period
|
Aggregation Method
|
DateTime
|
Date
|
Time
|
URI
|
---|---|---|---|---|
totalCount
|
Calculate the number of times the value has been updated inside the
period
|
|||
distinctCount
|
Calculate the count of distinct values inside the period
|
|||
sum
|
N/A
|
N/A
|
N/A
|
N/A
|
avg
|
N/A
|
N/A
|
Calculate the average time inside the period (e.g. to apply on an event
that occurs at non fixed times, like the time a car enters a given
parking)
|
N/A
|
min
|
Calculate the minimum value inside the period
|
Calculate the minimum value inside the period
|
Calculate the minimum value inside the period
|
N/A
|
max
|
Calculate the maximum value inside the period
|
Calculate the maximum value inside the period
|
Calculate the maximum value inside the period
|
N/A
|
stddev
|
N/A
|
N/A
|
N/A
|
N/A
|
sumsq
|
N/A
|
N/A
|
N/A
|
N/A
|
Aggregation Method
|
Relationship
|
---|---|
totalCount
|
Calculate the number of times the relationship has been updated inside
the period
|
distinctCount
|
Calculate the count of distinct relationships targets inside the period
|
sum
|
N/A
|
avg
|
N/A
|
min
|
N/A
|
max
|
N/A
|
stddev
|
N/A
|
sumsq
|
N/A
|
NGSI-LD defines a specialized type of Property named VocabProperty, defined by the NGSI-LD @context described by the present document in clause 4.4.
When dealing with NGSI-LD Entities, implementations shall interpret the JSON-LD nodes of type VocabProperty as per clause 4.5.20.2 (when in normalized representation) or clause 4.5.20.3 (when in concise representation).
Both normalized and concise representation of VocabProperties shall be supported by implementations and can be selected by Context Consumers through specific request parameters. An example of this representation can be found in annex C, clause C.2.2.
An NGSI-LD VocabProperty shall be represented in normalized representation by a member whose key is the Property name (a term), whose value is the same as the JSON-LD object in NGSI-LD Property Representation defined in clause 4.5.2.2, with the following differences:
Mandatory
Furthermore, an NGSI-LD VocabProperty in the normalized representation shall never include the following members:
An NGSI-LD VocabProperty shall be represented in concise but lossless representation by a member whose key is the Property name (a term), whose value is the same as the JSON-LD object in NGSI-LD Property Representation defined in clause 4.5.2.3, with the following differences:
Mandatory
Furthermore, an NGSI-LD VocabProperty in the concise representation shall never include the following members:
NGSI-LD defines a specialized type of Property named ListProperty, defined by the NGSI-LD @context described by the present document in clause 4.4.
When dealing with NGSI-LD Entities, implementations shall interpret the JSON-LD nodes of type ListProperty as per clause 4.5.21.2 (when in normalized representation) or clause 4.5.21.3 (when in concise representation).
Both normalized and concise representation of ListProperties shall be supported by implementations and can be selected by Context Consumers through specific request parameters. An example of this representation can be found in annex C, clause C.2.2.
An NGSI-LD ListProperty shall be represented in normalized representation by a member whose key is the Property name (a term), whose value is the same as the JSON-LD object in NGSI-LD Property Representation defined in clause 4.5.2.2, with the following differences:
Mandatory
Furthermore, an NGSI-LD ListProperty in the normalized representation shall never include the following members:
An NGSI-LD ListProperty shall be represented in concise but lossless representation by a member whose key is the ListProperty name (a term), whose value is the same as the JSON-LD object in NGSI-LD Property Representation defined in clause 4.5.2.3, with the following differences:
Mandatory
Furthermore, an NGSI-LD ListProperty in the concise representation shall never include the following members:
NGSI-LD defines a specialized type of Relationship named ListRelationship, defined by the NGSI-LD @context described by the present document in clause 4.4.
When dealing with NGSI-LD Entities, implementations shall interpret the JSON-LD nodes of type ListRelationship as per clause 4.5.22.2 (when in normalized representation) or clause 4.5.22.3 (when in concise representation).
Both normalized and concise representation of ListRelationships shall be supported by implementations and can be selected by Context Consumers through specific request parameters. An example of this representation can be found in annex C, clause C.2.2.
An NGSI-LD ListRelationship shall be represented in normalized representation by a member whose key is the Relationship name (a term), whose value is the same as the JSON-LD object in NGSI-LD Relationship Representation defined in clause 4.5.3.2, with the following differences:
Mandatory
Furthermore, an NGSI-LD ListRelationship in the normalized representation shall never include the following members:
An NGSI-LD ListRelationship shall be represented in concise but lossless representation by a member whose key is the Relationship name (a term), whose value is the same as the JSON-LD object in NGSI-LD Relationship Representation defined in clause 4.5.3.3, with the following differences:
Mandatory
Furthermore, an NGSI-LD ListRelationship in the concise representation shall never include the following members:
Since Entities are uniquely identifiable by a URI, it is possible to traverse across the Entity graph directly from a Linking Entity to a Linked Entity. It is therefore sometimes convenient to be able to query or retrieve data via a single Context Broker request and to receive a response including both Linking Entities and dependent Linked Entities directly.
The concept of Entity graph retrieval is a common concept amongst graph databases and it allows for more structured queries (see clause 4.9) and the complete serialization of an Entity and its dependents.
When retrieving Linked Entities, it is necessary to limit retrieval to avoid cascades of an excessive length, duplicates or loops. Only Relationships targeting a locally stored Entity or Relationships annotated with an objectType whose object is an Internal Linked Entity are considered to be retrievable in this manner.
With the inline representation, the Context Broker response shall only consist of Linking Entities - either a single Linking Entity, or an array consisting of Linking Entities. The additional Entity data from Linked Entities is returned via a Sub-Attribute added to annotated Relationships. This inline representation is generated for output only.
An example of this representation can be found in annex C, clause C.2.2.
With the flattened representation, the Context Broker response shall always consist of an array of Entities. This array will consist of both Linking Entities and Linked Entities (where the retrieved Linked Entities defined by an annotated Relationship), are appended to the array. This flattened representation allows for batch operations (see clauses 5.6.7, 5.6.8, 5.6.9 and 5.6.10) be applied directly using the response from the Context Broker.
NGSI-LD defines a specialized type of Property named JsonProperty, defined by the NGSI-LD @context described by the present document in clause 4.4.
When dealing with NGSI-LD Entities, implementations shall interpret the JSON-LD nodes of type JsonProperty as per clause 4.5.24.2 (when in normalized representation) or clause 4.5.24.3 (when in concise representation).
Both normalized and concise representation of JsonProperties shall be supported by implementations and can be selected by Context Consumers through specific request parameters. An example of this representation can be found in annex C, clause C.2.2.
An NGSI-LD JsonProperty shall be represented in normalized representation by a member whose key is the Property name (a term), whose value is the same as the JSON-LD object in NGSI-LD Property Representation defined in clause 4.5.2.2, with the following differences:
Mandatory
Furthermore, an NGSI-LD JsonProperty in the normalized representation shall never include the following members:
An NGSI-LD JsonProperty shall be represented in concise but lossless representation by a member whose key is the Property name (a term), whose value is the same as the JSON-LD object in NGSI-LD Property Representation defined in clause 4.5.2.3, with the following differences:
Mandatory
Furthermore, an NGSI-LD JsonProperty in the concise representation shall never include the following members:
The EntityMap representation is used by Context Brokers to ensure unity when querying across distributed operations. It is an active mapping of Context Source Registrations to Entities which are relevant to an ongoing Context Information Consumption request (see clause 4.3.6.7). The EntityMap representation shall be a JSON-LD object containing the following members:
Mandatory
NGSI-LD implementations shall support the UTF-8 text encoding format. To avoid interoperability problems, applications shall provide JSON content encoded using UTF-8 and NGSI-LD systems shall also expose such JSON content using UTF-8.
Even though the JSON serialization format allows inclusion of any character in the Unicode space, NGSI-LD restricts Entity Type names, Property names and Relationship names to the following ABNF grammar:
In order to avoid name clashing, names can be prefixed as specified by the following BNF grammar:
When receiving a JSON-LD object with a name (Type, Property, Relationship) including characters different than those expressed above, implementations should raise an error of type BadRequestData.
Compliant NGSI-LD implementations shall support the following data types for representing Values:
Implementations may support additional data types different to those enumerated above, for instance:
In principle, context information providers can publish any kind of data serialized in JSON and encoded in UTF-8. Nonetheless, to avoid security problems caused by script injection attacks or other attack vectors, implementations should consider that the incoming data from a client may contain the following characters:
When receiving entities (context information) encoded in JSON format and containing values that include the above characters, implementations should decide how to resolve the possible security problems that may be generated by the data. In all cases, implementations shall preserve the representation of the content of the values provided by the context information providers and return the original content when replying to context consumption requests.
If implementations decide to raise an error, the error shall be BadRequestData.
Compliant NGSI-LD implementations shall support the following data types for representing LanguageMaps:
Some services (batch operations, clauses 5.6.7, 5.6.8, 5.6.9 and 5.6.10) operate on an array of entities, as input, and if this array contains more than one instance of the same entity, then these entity instances shall come in chronological order, i.e. the first entity instance in the array shall be older than the second, the second shall be older than the third, etc.
Without this assumption, there is no way for the request to be treated correctly, as the entity instances are often used for replacing or modifying the prior entity instance.
Geospatial Properties in NGSI-LD shall be represented using GeoJSON Geometries [8]. With the aim of highlighting and encoding those Properties which convey geospatial characteristics, NGSI-LD defines a special type of Property named GeoProperty, defined by the Core NGSI-LD @context described by the present document in clause 4.4.
When dealing with NGSI-LD Entities, implementations shall interpret JSON-LD nodes of type GeoProperty just as conventional Properties but with the additional requirement that the Value corresponding to such Property shall be a GeoJSON Geometry. All the Geometries defined by [8] are allowed except GeometryCollection. In addition, implementations should take the necessary steps to create the corresponding geo-indexes so that information can be properly returned when geo-queries are executed.
NGSI-LD defines the following Properties of type GeoProperty. Preferably these Properties should be used if they semantically fit, but if necessary, additional Properties of type GeoProperty can be defined by Context Producers:
The defined Properties can also be used as part of Context Source Registrations (see clause 5.2.9). In this case they represent locations in which Entities with the respective geospatial Properties are contained. For example, a Context Source that monitors the location of cars in a city may be represented by a Context Source Registration whose Property location corresponds to the space of the city in which the location of cars is monitored.
There are certain types of GeoJSON geometries, for instance GeoJSON Polygon, whose coordinates are represented using nested array structures (through the coordinates member). Such representation may introduce serialization problems when transforming JSON-LD content into RDF graphs.
Also, when using whole GeoJSON geometries (consisting of type and coordinates) in an NGSI-LD document, its JSON syntax is only preserved in the regular JSON-LD representation (with separate @context), but not in an expanded representation. To handle resulting problems, optionally, whole GeoJSON geometries can be represented as a JSON string.
Implementations shall accept the referred encoded string value, if and only if, it can be parsed into a JSON Object, as mandated by IETF RFC 8259 [6], meeting the syntax and restrictions mandated by IETF RFC 7946 [8] when representing a valid Geometry of the type specified.
For the avoidance of doubt, regular encodings of GeoJSON geometries (as JSON Object) shall also be accepted by implementations, but Context Producers should consider the implications in terms of RDF compatibility.
Notwithstanding the restrictions defined in clause 4.5.2.3, an NGSI-LD GeoProperty without additional sub-attributes shall be represented in a concise but lossless representation by a member whose key is the Property name (a term) and whose value is the Property Value (see definition of terms in clause 3.1) which itself is also a supported GeoJSON geometry.
Mandatory
When parsing a geospatial value submitted in the concise representation, it shall be possible for the NGSI-LD system to infer the GeoProperty type. Error handing of the payload is left ambiguous if the NGSI-LD system is unable to distinguish a payload as either a Property or a GeoProperty.
Furthermore, an NGSI-LD GeoProperty which includes additional Properties or Relationships shall be treated in the same manner as an ordinary NGSI-LD Property (see clause 4.5.2.3) with the exception that if the Property value resolves to a supported GeoJSON geometry, the type "GeoProperty" shall be inferred.
NGSI-LD defines the following Properties of type TemporalProperty that shall be supported by implementations:
Temporal Properties in NGSI-LD shall be represented based on the DateTime data type as mandated by clause 4.6.3.
The NGSI-LD Query Language shall be supported by implementations. It is intended to:
In this clause, three string parameters are defined in order to fully specify an NGSI-LD Query:
In case of HTTP binding, whenever the string acting as a filter is part of the HTTP binding's URI, then it shall be URI-encoded (percent-encoded, as described in IETF RFC 3986 [5]).
The grammar that encodes the syntax of the q parameter, expressed in ABNF format [12], is the NGSI-LD Query Language. It is described below (it has been validated using https://tools.ietf.org/tools/bap/abnf.cgi), and it shall be supported by implementations:
A Query Term (production rule QueryTerm) defines a predicate which serves as a matching condition for Entities. The constituent parts of a Query Term are:
The attribute path (production rule Attribute) is a simple name AttrName, optionally followed by a dot-separated list of more AttrName (see later Example 8), optionally followed by one trailing list of more dot-separated AttrNames enclosed in one pair of square brackets (see later Example 9). The attribute path is always a composition of short hand names and not a fully qualified ones, because, when the query language is used, an @context properly defining all the terms (as per clause 5.5.7) shall be issued.
Query Terms may be combined through logical operators that shall be supported by implementations as follows:
Association of Query Terms shall be supported by implementations as per the grammar included by the present clause (production rule named QueryTermAssoc). An association of Query Terms is composed of the combination of different Query Terms linked by logical operators (AND, OR) and delimited by parenthesis. The evaluation of an association of Query Terms shall always take precedence over individual, non-associated Query Terms.
The following Example 8 shows the syntax of an attribute path that is defined by the production rule Attribute, as a dot-separated list of names. Such a list is intended to address a Property or Relationship included by the matching entities subjacent graph, in accordance with the following rules:
If the target element is a Property, the target value is defined as the Value associated to such Property. If a Property has multiple instances (identified by its respective datasetId), and no datasetId is explicitly addressed, the target value shall be any Value of such instances.
If the target element is a LanguageProperty, and no target language is specified, the target value is defined as a value from any of the key-value pairs held within the languageMap associated to such LanguageProperty.
If the target element is a ListProperty, the target value is defined as the valueList array associated to such a ListProperty.
If the target element is a LanguageProperty and a target language is specified, the target value is defined as the Value associated to the matching key-value pair held within the languageMap associated to such LanguageProperty where the key matches the target language.
If the target element is a VocabProperty, the target value shall be expanded according to the @context.
If the target element is a Relationship, the target object is defined as the object associated (represented as a URI or array of URIs) to such Relationship. If a Relationship has multiple instances (identified by its respective datasetId), and no datasetId is explicitly addressed, the target object shall be any object of such instances.
If the target element is a ListRelationship, the target object is defined as the array of objects associated (represented as URIs) to such ListRelationship.
When a Query Term only defines an attribute path (production rule named Attribute), the matching Entities shall be those which define the target element (Property or a Relationship), regardless of any target value or object.
Lastly, implementations shall support queries involving specific data subitems belonging to a Property Value (seed target value) represented by a JSON object structure (compound value). For that purpose, an attribute path may additionally contain a trailing path (enclosed in a single pair of square brackets that signal that the overall path is now entering the compound value) composed of a dot-concatenated list of JSON member names, and intended to address a specific data subitem (member) within the seed target value. When such a trailing path is present, implementations shall interpret and evaluate it (against the seed target value) as a MemberExpression of ECMA 262 [21], in dot notation, as clarified therein at section Property Accessors). If the evaluation of such MemberExpression does not result in a defined value, the target element shall be considered as non-existent for the purpose of query resolution.
The filter can also apply to a Property or Relationship of an NGSI-LD Entity targeted by a (recursively) followed Relationship, for example as part of a linked entity retrieval (clause 4.5.23).
As not knowing the Entity Type targeted by a Relationship could make the query significantly more expensive, a hint for the required Entity Type can be provided, so only such NGSI-LD Entities need to be considered.
If the target element corresponds to a Relationship or ListRelationship, the combination of such target element with any operator different than equal or unequal shall result in not matching.
A Query Term value shall be any of the following (depending on the operator used):
When comparing dates or times, the order relation considered shall be a temporal one.
When it comes to comparing text strings, implementations:
URI comparison should be performed so that the number of false negatives is minimized, as recommended by IETF RFC 3986 [5], section 6.
The semantics of the different logical operators used by Query Terms are described as follows and shall be supported by compliant implementations:
The NGSI-LD Geoquery language shall be supported by implementations. It is intended to define predicates which allow testing whether a specific topological spatial relationship exists between a pair of geometries: a target geometry and a reference geometry. The target geometry represents a geospatial Property of an Entity, typically, the location of the Entity.
A total of four parameters are defined in order to fully specify an NGSI-LD Geoquery:
The following grammar defines the syntax for the geospatial relationships (parameter name georel):
PositiveNumber shall be a non-zero positive number as mandated by the JSON Specification. Thus, it shall follow the ABNF Grammar, production rule named Number, section 6 of IETF RFC 8259 [6], excluding the 'minus' symbol and excluding the number 0.
Reference geometries shall be specified by:
Target geometry, i.e. the target Entity's GeoProperty to which the geoquery is to be applied, can be specified by an extra parameter named geoproperty. The GeoProperty's name shall be specified as short hand name and not a fully qualified one, because, when the query language is used, an @context properly defining all the terms (as per clause 5.5.7) shall be issued. If no geoproperty is specified, the geoquery is applied to the default Property location (see clause 4.7.1).
Note that proper URL encoding shall be used by HTTP binding API clients when using these examples.
&geometry=Polygon
&geometry=Point&coordinates=[8,40]
The semantics of the different geospatial relationships defined above is as follows, and shall be supported by compliant implementations:
When resolving geo-queries, Entities which do not convey the target GeoProperty of the query shall be considered as non-matching.
The NGSI-LD Temporal Query language shall be supported by implementations. It is intended to define predicates which allow testing whether Temporal Properties of NGSI-LD Entities, Properties and Relationships, are within certain temporal constraints. In particular it can be used to request historic Property values and Relationships that were valid within the specified timeframe.
The following grammar defines the syntax that shall be supported:
The points in time for comparison are defined as follows:
The Temporal Property (see clause 4.8) to which the temporal query is to be applied can be specified by timeproperty. If no timeproperty is specified, the temporal query is applied to the default Temporal Property observedAt.
&timeproperty=observedAt&timeAt=2017-12-13T14:20:00Z
The semantics of the different temporal relations defined above is as follows, and shall be supported by compliant implementations:
When resolving temporal queries, Entities which do not convey the target Temporal Property of the query shall be considered as non-matching.
NGSI-LD operations can potentially return a result set including a large number of NGSI-LD Elements, so that pagination of query results shall be supported by compliant implementations.
The list of operations that incur this behaviour is as follows:
Nonetheless, the NGSI-LD API is agnostic about specific pagination mechanisms and only defines the behaviour that shall be observed by NGSI-LD Systems.
For each operation above, NGSI-LD Systems shall:
NGSI-LD implementations should:
NGSI-LD implementations may:
The concrete realization of the features described above might depend on each API binding. Nonetheless, NGSI-LD Systems shall implement pagination features as mandated by the present clause, for any API binding.
Given that NGSI-LD Query operations can potentially return a result set including a large number of NGSI-LD Elements and that pagination of query results shall be supported (see clause 4.12), compliant implementations shall also support a mechanism for relaying to the client the number of expected resulting elements, when a query is executed.
A specific field (e.g. a custom header in the response in case of HTTP binding, see clause 6.3.13) shall be returned within the response of a query, whenever this is requested by the client.
Mechanisms for limiting the number of returned NGSI-LD Elements are independent of the counting mechanism, so that, potentially, a client can issue a query that limits to zero the number of desired results but asks for the count to be present.
This is useful for client-side planning and fine-tuning of subsequent queries and their parameters.
The concept of a Tenant is that a user or group of users utilizes a single instance of an NGSI-LD system (Context Source or Context Broker) in isolation from other users or groups of users of the same instance, which are considered to be different Tenants. Thus a multi-tenant NGSI-LD system is a system where a single software instance is used by different users or groups of users, the Tenants, where any information related to one Tenant (e.g. Entities, Subscriptions, Context Source Registrations) are only visible to users of the same Tenant, but not to users of a different Tenant. Typically, multi-tenancy is used together with an access control mechanism, enforcing the isolation of Tenants, however access control and other security-related aspects are out-of-scope of the present document.
The NGSI-LD API optionally enables multi-tenant systems. To support this, Tenant information can be optionally specified in NGSI-LD API operations. The operation then only applies to the targeted Tenant. As all information of one Tenant is isolated from other Tenants, the NGSI-LD API operations for managing, retrieving and subscribing to entity information, but also any context source related operations only apply to the information of the specified Tenant in isolation and never have any effect on the information of other Tenants.
As the support and use of Tenants is optional, any operation not explicitly specifying a Tenant targets a default Tenant, which always exists. NGSI-LD systems not supporting multiple Tenants should raise an error of type NoMultiTenantSupport if a Tenant is specified. To enable Context Sources to be part of tenant-based distributed or federated systems, Tenant information can optionally be specified in Context Source Registrations. When contacting the respective Context Sources, the Tenant information from the Context Source Registration has to be used. If no Tenant information is present in the Context Source Registration, no Tenant information is to be used and thus the default Tenant is targeted on the registered Context Source. This enables integrating Context Sources not supporting multi-tenancy in a distributed system with a Tenant-based Context Broker or integrating local Tenants in a federated system using a different Tenant.
The NGSI-LD Language Filter shall be supported by implementations. It is intended to form a mechanism which allows just one matching string value of LanguageProperties of NGSI-LD Entities to be converted to an NGSI-LD Property, where the value will be a string for the specified natural language.
The following grammar defines the syntax that shall be supported by the filter:
Where the langtag is defined according to the rules as mandated by IETF RFC 5646 [28], and IETF RFC 3282 [29]. If the Context Broker cannot serve any matching language, it shall default to any supported language. This behavior can be triggered by specifying lang="*" in the filter (see example 3).
In any case, the attribute in question shall be augmented with an additional non-reified subproperty lang indicating the actual language returned.
From NGSI-LD API version 1.5.1 onwards, multiple Entity Types for any Entity are supported. An Entity is uniquely identified by its id, so whenever information is provided for an Entity with a given id, it is considered part of the same Entity, regardless of the Entity Type(s) specified. To avoid unexpected behaviour, Entity Types can be implicitly added by all operations that update or append attributes. There is no operation to remove Entity Types from an Entity. The philosophy here is to assume that an Entity always had all Entity Types, but possibly not all Entity Types have previously been known in the system. The only option to remove an Entity Type is to delete the Entity and re-create it with the same id. Alternatively, a batch upsert with 'replace' update mode can be used, as described in clause 5.6.8.
The NGSI-LD Entity Type Selection Language shall be supported by implementations. It is intended to select only those Entities that have the specified Entity Type(s), possibly among others. Entity Types are specified as a disjunction of elements, where each element can either directly be an Entity Type or a conjunction of multiple Entity Types. The logical operators are the same as in the NGSI-LD Query Language specified in clause 4.9. As a disjunction of Entity Types can also be seen as a list, and to be compatible with previous versions of the NGSI-LD API, a comma can be used as an alternative representation of the or operator. For logical and grouping parenthesis are needed.
EntityType is either a valid name as specified in clause 4.6.2 or a URI.
An NGSI-LD Scope enables putting Entities into a hierarchical structure and restrict results of queries and notifications accordingly. The hierarchical structure is user-defined, e.g. according to (logical) location or organization. The use of Scopes is optional and an Entity can be assigned to one or more Scopes at the same time. The Scope is represented as a special scope Property that is non-reified in the normalized Entity representation and reified in the temporal representation of an Entity. In the latter case, it is restricted to having the non-reified Temporal Properties createdAt, modifiedAt and deletedAt as sub-Properties. There shall at most be one instance of the scope property per Entity. In case multiple representations of the same Entity have to be merged, e.g. when combining the results of distributed queries, the values of scope are merged. The value of scope is represented as a JSON array in case there is more than one Scope. For the Temporal Evolution a given Scope is considered valid from the time it has been set until the time it has been explicitly removed by an update or delete operation (for an example see annex C, clause C.5.16).
The grammar that encodes the syntax of the Scope is expressed in ABNF format [12]. It is described below (it has been validated using https://tools.ietf.org/tools/bap/abnf.cgi), and it shall be supported by implementations:
The NGSI-LD Scope Query Language shall be supported by implementations. It is intended to select only those Entities that are within the specified Scope(s). Scopes are specified as a disjunction of elements, where each element can either directly be a Scope or a conjunction of multiple Scopes. The "+" can be used as a wildcard to match a single scope level within a Scope. The "#" that can be added at the end of a Scope specification serves as a wildcard, which matches the given scope and the whole hierarchy of scopes below. The "/#" matches any non-empty scope, i.e. only explicitly specified scopes. The logical operators are the same as in the NGSI-LD Query Language specified in clause 4.9. As a disjunction of Scopes can also be seen as a list, a comma can be used as an alternative representation of the or operator. For logical and grouping parenthesis are needed.
/Madrid/+/ParqueNorte
When registering Context Sources (see clause 5.2.9), the registrant NGSI-LD interface endpoint may optionally offer a subset of NGSI-LD operations which it accepts. Table 4.20‑1 defines a list of names for each of these operations.
Operation name
|
Implements
|
|
---|---|---|
Context Information Provision
|
createEntity
|
5.6.1 Create Entity
|
updateEntity
|
5.6.2 Update Attributes
|
|
appendAttrs
|
5.6.3 Append Attributes
|
|
updateAttrs
|
5.6.4 Partial Attribute update
|
|
deleteAttrs
|
5.6.5 Delete Attribute
|
|
deleteEntity
|
5.6.6 Delete Entity
|
|
createBatch
|
5.6.7 Batch Entity Creation
|
|
upsertBatch
|
5.6.8 Batch Entity Creation or Update (Upsert)
|
|
updateBatch
|
5.6.9 Batch Entity Update
|
|
deleteBatch
|
5.6.10 Batch Entity Delete
|
|
upsertTemporal
|
5.6.11 Create or Update Temporal Evolution of an Entity
|
|
appendAttrsTemporal
|
5.6.12 Add Attributes to Temporal Evolution of an Entity
|
|
deleteAttrsTemporal
|
5.6.13 Delete Attributes from Temporal Evolution of an Entity
|
|
updateAttrInstanceTemporal
|
5.6.14 Partial Update Attribute Instance in Temporal Evolution of an
Entity
|
|
deleteAttrInstanceTemporal
|
5.6.15 Delete Attribute Instance from Temporal Evolution of an Entity
|
|
deleteTemporal
|
5.6.16 Delete Temporal Evolution of an Entity
|
|
mergeEntity
|
5.6.17 Merge Entity
|
|
replaceEntity
|
5.6.18 Replace Entity
|
|
replaceAttrs
|
5.6.19 Replace Attribute
|
|
mergeBatch
|
5.6.20 Batch Entity Merge
|
|
Context Information Consumption
|
retrieveEntity
|
5.7.1 Retrieve Entity
|
queryEntity
|
5.7.2 Query Entities (excluding batch entity queries)
|
|
queryBatch
|
5.7.2 Query Entities (batch entity queries only)
|
|
retrieveTemporal
|
5.7.3 Retrieve Temporal Evolution of an Entity
|
|
queryTemporal
|
5.7.4 Query Temporal Evolution of Entities
|
|
retrieveEntityTypes
|
5.7.5 Retrieve Available Entity Types
|
|
retrieveEntityTypeDetails
|
5.7.6 Retrieve Details of Available Entity Types
|
|
retrieveEntityTypeInfo
|
5.7.7 Retrieve Available Entity Type Information
|
|
retrieveAttrTypes
|
5.7.8 Retrieve Available Attributes
|
|
retrieveAttrTypeDetails
|
5.7.9 Retrieve Details of Available Attributes
|
|
retrieveAttrTypeInfo
|
5.7.10 Retrieve Available Attribute Information
|
|
Context Information Subscription
|
createSubscription
|
5.8.1 Create Subscription
|
updateSubscription
|
5.8.2 Update Subscription
|
|
retrieveSubscription
|
5.8.3 Retrieve Subscription
|
|
querySubscription
|
5.8.4 Query Subscription
|
|
deleteSubscription
|
5.8.5 Delete Subscription
|
In addition to these individual operations, a series of names for common groups of operations have also been defined. Table 4.20‑2 defines a list of names for each of these operation groups.
Operation Group name
|
Implements
|
---|---|
federationOps
|
|
updateOps
|
|
retrieveOps
|
|
redirectionOps
|
|
If no specific subset of operations is defined for a Context Source Registration, the default set of operations matches the group defined as "federationOps".
The NGSI-LD Attribute Projection Language shall be supported by implementations for projection parameters (e.g. pick and omit). Its aim is to specify the Attributes to be retrieved within an Entity (or associated Linked Entities when Linked Entity Retrieval is used). Projected Attributes are specified as a disjunction of elements, where each element can either directly be an Attribute name, or in the case of Linked Entity Retrieval, a Relationship name followed by an Attribute name within the Linked Entity. Since a disjunction of Attributes is a list, either a comma or a pipe character can be used as alternative representations of the or operator. In the following, ABNF grammar for NGSI-LD Attribute Projection Language is given.
See clause 4.9 for the definition of AttrName.
This clause defines data structures and operations of the NGSI-LD API. No specific binding is assumed. Clause 6 maps these operations and data types to the HTTP REST binding.
Implementations shall support the data types defined by the clauses below. For each member defined by each data type (including nested ones) a term shall be added to the Core @context, as mandated by clause 4.5.
None of the members described admit a null value directly, as when a JSON-LD processor encounters null, the associated entry or value is always removed when expanding the JSON-LD document.
However, in the context of a partial update or merge operation (see clauses 5.5.8 and 5.5.12), an NGSI-LD Null shall be used to indicate the removal of a target member. Thus, for representing deleted elements in notifications and in the temporal evolution, the URI "urn:ngsi-ld:null" is used as a Property value or Relationship object and the JSON object {"@none": "urn:ngsi-ld:null"} for the languageMap of a LanguageProperty, respectively. In all other cases, implementations shall raise an error of type BadRequestData if an NGSI-LD Null value is encountered.
As null cannot be used as a value in JSON-LD, there is still the possibility of using a JSON null literal {"@type": "@json", "@value": null} instead. JSON literals are not to be expanded in JSON-LD and thus the respective element is not removed during JSON-LD expansion.
Non-normative JSON Schema [i.11] definitions of the referred data types are also available at [i.13].
The use of URI in the context of the present document also includes the use of International Resource Identifiers (IRIs) as defined in IETF RFC 3987 [23], which extends the use of characters to Unicode characters [22] beyond the ASCII character set, enabling the support of languages other than English.
The JSON-LD representation of NGSI-LD Entity, Property, Relationship, Context Source Registration and Subscription can include the common members described by Table 5.2.2‑1.
Those members are read-only, and shall be automatically generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
In query or retrieve operations implementations shall only generate common members (Table 5.2.2‑1) when the Context Consumer explicitly asks for their inclusion. Clause 6.3.11 defines the mechanism offered by the HTTP binding for such purpose.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
string
|
0..1
|
Entity creation timestamp. See clause
4.8
|
|
modifiedAt
|
string
|
0..1
|
Entity last modification timestamp. See clause 4.8
|
|
deletedAt
|
string
|
0..1
|
Entity deletion timestamp. See clause
4.8 It is only used in notifications reporting deletions and in the temporal representation of Entities (clause 4.5.6), Properties (clause 4.5.7), Relationships (clause 4.5.8) and LanguageProperties (clause 5.2.32) and VocabProperties (clause 5.2.35) and JsonProperties (clause 5.2.38) |
When encoding NGSI-LD Entities, Context Source Registrations, Subscriptions and Notifications, as pure JSON-LD (MIME type "application/ld+json"), a user @context (as described in clause 4.4) shall be included as a special member of the corresponding JSON-LD Object. Table 5.2.3‑1 gives a precise definition of this special member.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
@context
|
URI, JSON Object, or JSON Array
|
See [2], section 5.1.
|
0..1
|
JSON-LD @context.
|
This type represents the data needed to define an NGSI-LD Entity as mandated by clause 4.5.1.
The supported JSON members shall follow the requirements provided in Table 5.2.4‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Entity ID
|
type
|
String or String[]
|
1
|
Entity Type(s). Both short hand string(s) (type name) or URI(s) are
allowed
|
|
scope
|
String or String[]
|
See clause 4.18
|
0..1
|
Scope
|
location
|
GeoProperty
|
See datatype definition in clause 5.2.7
|
0..1
|
Default geospatial Property of an entity. See clause 4.7
|
observationSpace
|
GeoProperty
|
See datatype definition in clause 5.2.7
|
0..1
|
See clause 4.7
|
operationSpace
|
GeoProperty
|
See datatype definition in clause 5.2.7
|
0..1
|
See clause 4.7
|
<Property name>
|
Property
or Property[]1
|
See datatype definitions in clauses 5.2.5
|
0..N
|
Property as mandated by clause 4.5.2.
|
GeoProperty or GeoProperty[]1
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperty as mandated by clause 4.5.2.
|
|
LanguageProperty or LanguageProperty[]1
|
See datatype definition in clause
5.2.32
|
0..N
|
LanguageProperty as mandated by clause 4.5.18.
|
|
JsonProperty or JsonProperty[]1
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperty as mandated by clause 4.5.24.
|
|
VocabProperty or VocabProperty[]1
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperty as mandated by clause 4.5.20.
|
|
ListProperty or ListProperty[]1
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperty as mandated by clause 4.5.21.
|
|
<Relationship name>
|
Relationship
or Relationship[]2
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationship as mandated by clause 4.5.3.
|
ListRelationship or ListRelationship[]2
|
See datatype definition in clause
5.2.37
|
0..N
|
ListRelationship as mandated by clause 4.5.22.
|
|
NOTE 1: For each Property
(or subclass of Property)
identified by the same Property name, there can be one or more instances
separated by datasetId.
NOTE 2: For each Relationship (or subclass of
Relationship) identified
by the same Relationship name, there can be one or more instances
separated by datasetId.
|
This type represents the data needed to define a Property as mandated by clause 4.5.2.
The supported JSON members shall follow the requirements provided in Table 5.2.5‑1 below. The datatype definition defines all the required attributes for the normalized representation. In the concise representation, the Attribute type member can be omitted as type="Property" can be inferred from the presence of the value member. Furthermore, in the concise representation of a Property, the value member cannot be a GeoJSON Object (as defined in clause 4.7) as it would be interpreted as a GeoProperty (see clause 5.2.7).
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "Property"
|
1
|
Node type
|
value
|
Any JSON value as defined by IETF RFC 8259 [6]
|
See NGSI-LD Value definition in clause 3.1
|
1
|
Property Value
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property values
|
observedAt
|
String
|
0..1
|
Timestamp. See clause 4.8
|
|
unitCode
|
String
|
As mandated by [15]
|
0..1
|
Property Value's unit code
|
<Property name>
|
Property or Property[]1 |
See datatype definition in clause 5.2.5
|
0..N
|
Properties of the Property
|
GeoProperty or GeoProperty[]1
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the Property.
|
|
LanguageProperty or LanguageProperty[]1
|
See datatype definition in clause
5.2.32
|
0..N
|
LanguageProperties of the Property.
|
|
JsonProperty or JsonProperty[]1
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the Property
|
|
VocabProperty or VocabProperty[]1
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the Property.
|
|
ListProperty or ListProperty[]1
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the Property.
|
|
<Relationship name>
|
Relationship or Relationship[]2
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the Property.
|
ListRelationship or ListRelationship[]2
|
See datatype definition in clause
5.2.37
|
0..N
|
ListRelationships of the Property
|
|
NOTE 1: For each Property
(or subclass of Property)
identified by the same Property name, there can be one or more instances
separated by datasetId.
NOTE 2: For each Relationship (or subclass of
Relationship) identified
by the same Relationship name, there can be one or more instances
separated by datasetId.
|
The following output only members (defined by Table 5.2.5-2) of the Property data structure are also defined. They are read-only and shall be generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
0..1
|
System generated creation timestamp. See clause 4.8
|
|
deletedAt
|
String
|
It is only used in notifications reporting deletions
|
0..1
|
System generated deletion timestamp. See clause 4.8
|
instanceId
|
String
|
Valid URI. Only used in temporal representation of Properties
|
0..1
|
URI uniquely identifying a Property instance as mandated by clause 4.5.7
|
modifiedAt
|
String
|
0..1
|
System generated last modification timestamp. See clause 4.8
|
|
previousValue
|
Any JSON value as defined by IETF RFC 8259 [6]
|
Only used in Notifications, if the
showChanges option is
explicitly requested
|
0..1
|
Previous Property Value
|
This type represents the data needed to define a Relationship as mandated by clause 4.5.3.
The supported JSON members shall follow the requirements provided in Table 5.2.6‑1 below. The datatype definition defines all the required attributes for the normalized representation. In the concise representation, the Attribute type member can be omitted as type="Relationship" can be inferred from the presence of the object member.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "Relationship"
|
1
|
Node type
|
object
|
String or String[]
|
Valid URI or an Array of Valid URIs
|
1
|
Relationship's target object
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of target relationship objects
|
objectType
|
String or String[]
|
0..1
|
Node Type of the Relationship's target object. Both short hand string(s)
(type name) or URI(s) are allowed
|
|
observedAt
|
String
|
0..1
|
Timestamp. See clause 4.8
|
|
<Property name>
|
Property or Property[]1 |
See datatype definition in clause 5.2.5
|
0..N
|
Properties of the Relationship
|
GeoProperty or GeoProperty[]1
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the Relationship.
|
|
LanguageProperty or LanguageProperty[]1
|
See datatype definition in clause
5.2.32
|
0..N
|
LanguageProperties of the
Relationship
|
|
JsonProperty or JsonProperty[]1
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the Relationship
|
|
VocabProperty or VocabProperty[]1
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the Relationship.
|
|
ListProperty or ListProperty[]1
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the Relationship.
|
|
<Relationship name>
|
Relationship or Relationship[]2
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the Relationship.
|
ListRelationship or ListRelationship[]2
|
See datatype definition in clause
5.2.37
|
0..N
|
ListRelationships of the
Relationship.
|
|
NOTE 1: For each Property
(or subclass of Property)
identified by the same Property name, there can be one or more instances
separated by datasetId.
NOTE 2: For each Relationship (or subclass of
Relationship) identified
by the same Relationship name, there can be one or more instances
separated by datasetId.
|
The following output only members (defined by Table 5.2.6-2) of the Relationship data structure are also defined. They are read-only and shall be generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
|
---|---|---|---|---|---|
createdAt
|
String
|
0..1
|
System generated creation timestamp. See clause 4.8
|
||
deletedAt
|
String
|
It is only used in notifications reporting deletions
|
0..1
|
System generated deletion timestamp. See clause 4.8
|
|
entity
|
Entity or Entity[]1
|
See datatype definition in clause 5.2.4.
Only used in Linked Entity Retrieval, if the join=inline option is explicitly
requested
|
0..1
|
An inline Entity obtained by Linked Entity Retrieval, corresponding to
the Relationship's target object See clause 4.5.23.2
|
|
instanceId
|
String
|
Valid URI. Only used in temporal representation of Relationships
|
0..1
|
URI uniquely identifying a Relationship instance as mandated by clause 4.5.8
|
|
modifiedAt
|
String
|
0..1
|
System generated last modification timestamp. See clause 4.8
|
||
previousObject
|
String
|
Valid URI. Only used in Notifications, if the showChanges option is explicitly
requested
|
0..1
|
Previous Relationship's target object
|
|
NOTE 1: one-to-N Relationships expand to an array of
Entity elements, since there can be more than one target object URI
specified.
|
This type represents the data needed to define a GeoProperty.
The supported JSON members shall follow the requirements provided in Table 5.2.7‑1 below. The datatype definition defines all the required attributes for the normalized representation. In the concise representation, the Attribute type member can be omitted as "GeoProperty" can be inferred from the presence of the value member holding a GeoJSON Geometry as mandated by clause 4.7.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "GeoProperty"
|
1
|
Node type
|
value
|
JSON Object
|
As mandated by clause 4.7
|
1
|
Geolocation encoded as GeoJSON [8]
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property values
|
observedAt
|
String
|
0..1
|
Timestamp. See clause 4.8
|
|
<Property name>
|
Property or Property[]1 |
See datatype definition in clause 5.2.5 | 0..N | Properties of the GeoProperty |
GeoProperty or GeoProperty[]1
|
See datatype definition in clause 5.2.7 | 0..N | GeoProperties of the GeoProperty. | |
LanguageProperty or LanguageProperty[]1 | See datatype definition in clause 5.2.32 | 0..N | LanguageProperties of the GeoProperty. | |
JsonProperty or JsonProperty[]1 | See datatype definition in clause 5.2.38 | 0..N | JsonPropertiesof the GeoProperty | |
VocabPropertyor VocabProperty[]1 | See datatype definition in clause 5.2.35 | 0..N | VocabProperties of the GeoProperty. | |
ListProperty
or ListProperty[]1 |
See datatype definition in clause 5.2.36 | 0..N | ListPropertiesof the GeoProperty. | |
<Relationship name>
|
Relationship or Relationship[]2
|
See datatype definition in clause 5.2.6 | 0..N | Relationships of the GeoProperty |
ListRelationshipor ListRelationship[]2 | See datatype definition in clause 5.2.37 | 0..N | ListRelationshipsof the GeoProperty. | |
NOTE 1: For each Property
(or subclass of Property)
identified by the same Property name, there can be one or more instances
separated by datasetId.
NOTE 2: For each Relationship (or subclass of
Relationship) identified
by the same Relationship name, there can be one or more instances
separated by datasetId.
|
The following output only members (defined by Table 5.2.8-2) of the GeoProperty data structure are also defined. They are read-only and shall be generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
0..1
|
System generated creation timestamp. See clause 4.8
|
|
deletedAt
|
String
|
It is only used in notifications reporting deletions
|
0..1
|
System generated deletion timestamp. See clause 4.8
|
instanceId
|
String
|
Valid URI. Only used in temporal representation of GeoProperties
|
0..1
|
URI uniquely identifying a GeoProperty instance as mandated by clause 4.5.7
|
modifiedAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated last modification timestamp. See clause 4.8
|
previousValue
|
Any JSON value as defined by IETF RFC 8259 [6]
|
Only used in Notifications, if the
showChanges option is
explicitly requested
|
0..1
|
Previous GeoProperty Value
|
This type represents what Entities, Entity Types or group of Entity IDs (as a regular expression pattern mandated by IEEE 1003.2™ [11]) can be provided (by Context Sources).
The JSON members shall follow the indications provided in Table 5.2.8‑1. id takes precedence over idPattern.
Notice that Cardinality of type being 1 implies that it is not possible to register what Entities can be provided by a Context Source just by their id or idPattern (i.e. without specifying their type).
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
0..1
|
Entity identifier
|
idPattern
|
String
|
Regular expression as per IEEE 1003.2™ [11]
|
0..1
|
A regular expression which denotes a pattern that shall be matched by
the provided or subscribed Entities
|
type
|
String or String[]
|
Fully Qualified Name of an Entity Type or the Entity Type name as a
short-hand string. See clause 4.6.2
|
1
|
Entity Type (or JSON array, in case of Entities with multiple Entity
Types)
|
This type represents the data needed to register a new Context Source.
The supported JSON members shall follow the indications provided in Table 5.2.9‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI.
Unique registration identifier. (JSON-LD @id).
|
0..1
|
At creation time, if it is not provided, it will be assigned during
registration process and returned to client.
It cannot be later modified in update operations.
|
type
|
String
|
It shall be equal to "ContextSourceRegistration"
|
1
|
JSON-LD @type
Use reserved type for identifying Context Source Registration
|
registrationName
|
String
|
Non-empty string
|
0..1
|
A name given to this Context Source
Registration
|
contextSourceAlias
|
String
|
Non-empty string. Pseudonym field as defined in IETF RFC 7230 [26]
|
0..1
|
A previously retrieved unique id for a registered Context Source which is used to identify
loops.
In the multi-tenancy use case (see clause 4.14), this id shall
be used to identify a specific Tenant within a registered Context Source.
|
description
|
String
|
Non-empty string
|
0..1
|
A description of this Context Source
Registration
|
information
|
RegistrationInfo[]
|
See data type definition in clause
5.2.10. Empty array (0 length) is not allowed
|
1
|
Describes the Entities, Properties and Relationships for which the Context Source may be able to provide
information
|
datasetId
|
String[]
|
Valid URIs,"@none" for
including the default Attribute instances.
|
0..1
|
Specifies the datasetIds of Attributes that the Context Source can provide, defined as per
clause 4.5.5.
|
tenant
|
String
|
0..1
|
Identifies the Tenant that has to be
specified in all requests to the Context
Source that are related to the information registered in this
Context Source Registration. If not
present, the default Tenant is
assumed. Should only be present in systems supporting multi-tenancy
|
|
observationInterval
|
TimeInterval
|
See data type definition in clause 5.2.11
|
0..1
|
If present, the Context Source can be
queried for Temporal Entity Representations. (If latest Entity
information is also provided, a separate Context Registration is needed
for this purpose). The observationInterval specifies the time
interval for which the Context Source
can provide Entity information as specified by the observedAt Temporal Property. A
temporal query based on the observedAt Temporal Property, which is
the default, is matched against the observationInterval for overlap
|
managementInterval
|
TimeInterval
|
See data type definition in clause 5.2.11
|
0..1
|
If present, the Context Source can be
queried for Temporal Entity Representations. (If latest Entity
information is also provided, a separate Context Registration is needed
for this purpose). The managementInterval specifies the time
interval for which the Context Source
can provide Entity information as specified by the createdAt, modifiedAt and deletedAt Temporal Properties. A
temporal query based on the createdAt, modifiedAt or deletedAt Temporal Property is matched
against the managementInterval for overlap
|
location
|
GeoJSON Geometry as mandated by clause 4.7
|
0..1
|
Location for which the Context
Source may be able
to provide information
|
|
observationSpace
|
GeoJSON Geometry as mandated by clause 4.7
|
0..1
|
Geographic location that includes the observation spaces of all entities
as specified by their respective observationSpace GeoProperty for which the Context Source may be able to provide
information
|
|
operationSpace
|
GeoJSON Geometry as mandated by clause 4.7
|
0..1
|
Geographic location that includes the operation spaces of all entities
as specified by their respective operationSpace GeoProperty for which the Context Source may be able to provide
information
|
|
expiresAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
Provides an expiration date. When passed the Context Source Registration will become
invalid and the Context Source might
no longer be available
|
endpoint
|
String
|
It shall be a dereferenceable URI
|
1
|
Endpoint expressed as dereferenceable URI through which the Context Source exposes its NGSI-LD
interface
|
contextSourceInfo
|
KeyValuePair[]
|
0..1
|
Generic {key, value} array to convey optional information to provide
when contacting the registered Context
Source
|
|
scope
|
String or
String[]
|
Scope(s)
|
0..1
|
Scopes (see clause 4.18) for which the
Context Source has Entities
|
mode
|
String
|
It shall be one of:
"inclusive", "exclusive", "redirect" or "auxiliary"
The mode is assumed to be "inclusive" if
not explicitly defined
|
0..1
|
The definition of the mode of distributed operation (see clause 4.3.6) supported by the
registered Context Source
|
operations
|
String[]
|
Entries are limited to the named API operations and named operation
groups (see clause
4.20)
|
0..1
|
The definition limited subset of API operations supported by the
registered Context Source
If undefined, the default set of operations is "federationOps" (see clause 4.20)
|
refreshRate
|
String
|
String representing a duration in ISO 8601 format [17]
|
0..1
|
An indication of the likely period of time to elapse between updates at
this registered endpoint.
Brokers may optionally use this information to help implement caching.
|
management
|
Registration
Management
Info
|
See data type definition in clause 5.2.34
|
0..1
|
Holds additional optional registration management information that can
be used to limit unnecessary distributed operation requests.
|
<CSource Property name>
|
Any JSON value as defined by IETF RFC 8259 [6]
|
0..N
|
Each Context Source Property pertains
to a characteristic of the Context
Source the Context Source
Registration describes
|
The members (defined by Table 5.2.9-2) of the CSourceRegistration data structure are also defined. They are read-only and shall be automatically generated by NGSI-LD implementations. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
status
|
String
|
Allowed values:
"ok" "failed" |
0..1
|
Read-only., Status of the Registration. It shall be "ok" if the last attempt to perform a
distributed operation succeeded. It shall be "failed" if the last attempt to perform a
distributed operation failed
|
timesSent
|
Number
|
0 or greater value
|
0..1
|
Number of times that the registration triggered a distributed operation,
including failed attempts.
|
timesFailed
|
Number
|
0 or greater value
|
0..1
|
Number of times that the registration triggered a distributed operation
request that failed.
|
lastSuccess
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp corresponding to the instant when the last successfully
distributed operation was sent. Created on first successful operation.
|
lastFailure |
String
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp corresponding to the instant when the last distributed operation resulting in a failure (for instance, in the HTTP binding, an HTTP response code other than 2xx) was returned. |
The supported JSON members shall follow the requirements provided in Table 5.2.10‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
entities
|
EntityInfo[]
|
See data type definition in clause 5.2.8.
Empty array (0 length) is not allowed. Restrictions in clause 4.3.6 apply as well
|
0..1
|
Describes the entities for which the CSource may be able to provide
information
|
propertyNames
|
String[]
|
Property names as short hand strings or URIs. Empty array is not
allowed. Restrictions in clause
4.3.6 apply as well
|
0..1
|
Describes the Properties that the CSource may be able to provide
|
relationshipNames
|
String[]
|
Relationship names as short hand strings or URIs. Empty array is not
allowed. Restrictions in clause
4.3.6 apply as well
|
0..1
|
Describes the Relationships that the CSource may be able to provide
|
At least one element of RegistrationInfo shall be present.
The supported JSON members shall follow the requirements provided in Table 5.2.11‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
startAt
|
String
|
DateTime (clause 4.6.3)
|
1
|
Describes the start of the time interval
|
endAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
Describes the end of the time interval. If not present the interval is
open
|
This datatype represents a Context Subscription.
The supported JSON members shall follow the requirements provided in Table 5.2.12‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
0..1
|
Subscription identifier (JSON-LD @id). At creation time, if it is not
provided, it will be assigned during subscription process and returned
to client.
It cannot be later modified in update operations
|
type
|
String
|
It shall be equal to "Subscription"
|
1
|
JSON-LD @type
|
subscriptionName
|
String
|
0..1
|
A (short) name given to this Subscription
|
|
description
|
String
|
0..1
|
Subscription description
|
|
entities
|
EntitySelector[]
|
See data type definition in clause
5.2.33. Empty array (0 length) is not allowed.
Mandatory if timeInterval is
present, unless the execution of the request is limited to local scope
(see clause 5.5.13)
|
0..1
|
Entities subscribed
|
watchedAttributes
|
String[]
|
Attribute name as short hand strings or URIs. Empty array (0 length) is
not allowed.
if timeInterval is present
it shall not appear (0 cardinality).
|
0..1
|
Watched Attributes (Properties or Relationships). If not defined it
means any Attribute
|
localOnly
|
Boolean
|
0..1
|
If localOnly=true then the subscription only pertains to the
Entities stored locally.
|
|
notificationTrigger
|
String[]
|
Valid notification triggers are "entityCreated",
"entityUpdated",
"entityDeleted",
"attributeCreated",
"attributeUpdated",
"attributeDeleted"
|
0..1
|
The notification triggers listed indicate what kind of changes shall
trigger a notification. If not present, the default is the combination
"attributeCreated" and "attributeUpdated". "entityUpdated"
is equivalent to the combination "attributeCreated", "attributeUpdated" and "attributeDeleted"
|
timeInterval
|
Number
|
Greater than 0
if watchedAttributes is
present it shall not appear (0 cardinality)
|
0..1
|
Indicates that a notification shall be delivered periodically regardless
of attribute changes. Actually, when the time interval (in seconds)
specified in this value field is reached
|
q
|
String
|
A valid query string as per clause
4.9
|
0..1
|
Query that shall be met by subscribed entities in order to trigger the
notification
|
geoQ
|
GeoQuery
|
See data type definition in clause 5.2.13
|
0..1
|
Geoquery that shall be met by subscribed entities in order to trigger
the notification
|
csf
|
String
|
A valid query string as per clause
4.9
|
0..1
|
Context source filter that shall be met by Context Source Registrations describing
Context Sources to be used for Entity
Subscriptions
|
isActive
|
Boolean
|
true by default
|
0..1
|
Allows clients to temporarily pause the subscription by making it
inactive. true indicates
that the Subscription is under operation. false indicates that the subscription
is paused, and notifications shall not be delivered
|
notification
|
NotificationParams
|
See data type definition in clause
5.2.14
|
1
|
Notification details
|
expiresAt
|
String
|
0..1
|
Expiration date for the subscription
|
|
throttling
|
Number
|
Greater than 0. Fractional values are allowed. If timeInterval is present it shall not
appear (0 cardinality)
|
0..1
|
Minimal period of time in seconds which shall elapse between two
consecutive notifications
|
temporalQ
|
TemporalQuery
|
See data type definition in clause
5.2.21
|
0..1
|
Temporal Query to be used only in Context Registration Subscriptions for
matching Context Source Registrations
of Context Sources providing temporal
information
|
scopeQ
|
String
|
See clause 4.19
|
0..1
|
Scope query
|
lang
|
String
|
A natural language filter in the form of a IETF RFC 5646 [28] language code
|
0..1
|
Language filter to be applied to the query (clause 4.15)
|
datasetId
|
String[]
|
Valid URIs,"@none" for
including the default Attribute instances.
|
0..1
|
Specifies the datasetIds of the Attribute instances to be selected for
each matched Attribute as per clause 4.5.5.
|
jsonldContext
|
String
|
Dereferenceable URI
|
The dereferenceable URI of the JSON-LD @context to be used when sending a
notification resulting from the subscription. If not provided, the
@context used for the
subscription shall be used as a default.
|
At least one of (a) entities or (b) watchedAttributes shall be present, unless the member localOnly is set to true, in which case the execution of the request is limited to local scope (see clause 5.5.13).
The members (defined by Table 5.2.12-2) of the Subscription data structure are also defined. They are read-only and shall be automatically generated by NGSI-LD implementations. They shall not be provided by Context Subscribers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
status
|
String
|
Allowed values:
"active" "paused" "expired" |
0..1
|
Read-only. Provided by the system when querying the details of a
subscription
|
This datatype represents a geoquery used for Subscriptions.
The supported JSON members shall follow the requirements provided in Table 5.2.13‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
geometry
|
String
|
A valid GeoJSON [8] geometry type
excepting GeometryCollection
|
1
|
Type of the reference geometry
|
coordinates
|
JSON Array or String
|
A JSON Array coherent with the geometry type as per IETF RFC 7946
[8]
|
1
|
Coordinates of the reference geometry. For the sake of JSON-LD
compatibility It can be encoded as a string as described in clause 4.7.1
|
georel
|
String
|
A valid geo-relationship as defined by clause 4.10
|
1
|
Geo-relationship ("near", "within", etc.)
|
geoproperty
|
String
|
Attribute name as short hand string or URI
|
0..1
|
Specifies the GeoProperty to which the GeoQuery is to be applied. If not
present, the default GeoProperty is location
|
This datatype represents the parameters that allow to convey the details of a notification.
The supported JSON members shall follow the requirements provided in Table 5.2.14.1‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
attributes
|
String[]
|
Attribute name as short hand strings or URIs. Empty array (0 length) is
not allowed
|
0..1
|
A synonym for a combination of the pick
andq parameter.
Deprecated
Attribute names to be included in the notification payload body. If
undefined it will mean all Attributes
|
sysAttrs
|
Boolean
|
false by default
|
0..1
|
If true, the system
generated attributes createdAt and modifiedAt are included in the
response payload body, in the case of a deletion also deletedAt
|
format
|
String
|
It shall be one of: "normalized", "concise", "simplified" (or its synonym
"keyValues")
|
0..1
|
Conveys the representation format of the entities delivered at
notification time. By default, it will be in the normalized format
|
pick
|
String[]
|
Entity member ("id", "type", "scope” or a projected Attribute name as a valid
attribute projection language string as per clause 4.21). Empty
array (0 length) is not allowed
|
0..1
|
When defined, every Entity within the payload body is reduced down to
only contain the specified Entity members.
|
omit
|
String[]
|
Entity member ("id", "type", "scope" or a projected Attribute name) as a valid
attribute projection language string as per clause 4.21. Empty
array (0 length) is not allowed
|
0..1
|
When defined, the specified Entity members are removed from each Entity
within the payload
|
showChanges
|
Boolean
|
false by default
|
0..1
|
If true the previous
value (previousValue) of Properties or
languageMap (previousLanguageMap) of Language
Properties or object
(previousObject) of
Relationships is provided in addition to the current one. This requires
that it exists, i.e. in case of modifications and deletions, but not in
the case of creations.
showChanges cannot be
true in case format is "keyValues"
|
join
|
String
|
It shall be one of: "flat", "inline", "@none"
|
0..1
|
String representing the type of Linked
Entity retrieval to apply.
By default, it will be "@none"
|
joinLevel
|
Number
|
Positive Integer
|
0..1
|
Depth of Linked Entity retrieval to
apply. Default is 1. Only applicable if join parameter is "flat", or "inline",
|
endpoint
|
Endpoint
|
See data type definition in clause 5.2.15
|
1
|
Notification endpoint details
|
The following output only members (defined by Table 5.2.14.2-1) of the NotificationParams data structure are also defined. They are read-only and shall be automatically generated by NGSI-LD implementations. They shall not be provided by Context Subscribers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
In query or retrieve operations involving Subscriptions, implementations shall generate them as part of their representation.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
timesSent
|
Number
|
Greater than 0
|
0..1
|
Number of times that the notification has been sent. Provided by the
system when querying the details of a subscription
|
timesFailed
|
Number
|
Greater than 0
|
0..1
|
Number of times an unsuccessful response (or timeout) has been received
when delivering the notification. Provided by the system when querying
the details of a subscription
|
lastNotification
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp corresponding to the instant when the last notification has
been sent. Provided by the system when querying the details of a
subscription
|
lastFailure
|
String
|
0..1
|
Timestamp corresponding to the instant when the last notification
resulting in failure (for instance, in the HTTP binding, an HTTP
response code different than 200) has been sent. Provided by the system
when querying the details of a subscription
|
|
lastSuccess
|
String
|
0..1
|
Timestamp corresponding to the instant when the last successful (200 OK
response) notification has been sent. Provided by the system when
querying the details of a subscription
|
|
status
|
String
|
Allowed values:
"ok", "failed"
|
0..1
|
Status of the Notification. It shall be "ok" if the last attempt to notify the
subscriber succeeded. It shall be "failed" if the last attempt to notify the
subscriber failed
|
This datatype represents the parameters that are required in order to define an endpoint for notifications. This can include, in addition the endpoint's URI, a generic{key, value} array, named receiverInfo, which contains, in a generalized form, whatever extra information the Context Broker shall convey to the receiver in order for the Context Broker to successfully communicate with receiver (e.g. Authorization material), or for the receiver to correctly interpret the received content (e.g. the Link URL to fetch an @context). Additionally, it can include another generic{key, value} array, named notifierInfo, which contains the configuration that the Context Broker needs to know in order to correctly set up the communication channel towards the receiver (e.g. MQTT-Version, MQTT-QoS, in case of MQTT binding, as defined in clause 7.2).
The supported JSON members shall follow the indications provided in Table 5.2.15‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
uri
|
String
|
Dereferenceable URI
|
1
|
URI which conveys the endpoint which will receive the notification.
|
accept
|
String
|
MIME type. It shall be one of:
"application/json" "application/ld+json" "application/geo+json" |
0..1
|
Intended to convey the MIME type of the notification payload body (JSON,
or JSON-LD, or GeoJSON). If not present, default is "application/json".
|
timeout
|
Number
|
Greater than 0
|
0..1
|
Maximum period of time in milliseconds which may elapse before a
notification is assumed to have failed. The NGSI-LD system can override
this value. This only applies if the binding protocol always returns a
response.
|
cooldown
|
Number
|
Greater than 0
|
0..1
|
Once a failure has occurred, minimum period of time in milliseconds
which shall elapse before attempting to make a subsequent notification
to the same endpoint after failure. If requests are received before the cooldown period has expired, no notification is sent. |
receiverInfo
|
KeyValuePair[]
|
0..1
|
Generic {key, value} array to convey optional information to the
receiver.
|
|
notifierInfo
|
KeyValuePair[]
|
0..1
|
Generic {key, value} array to set up the communication channel.
|
This datatype represents the result of a batch operation.
The supported JSON members shall follow the indications provided in Table 5.2.16‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
success
|
String[]
|
Array of valid URIs
|
1
|
Array of Entity IDs corresponding to the Entities that were successfully
treated by the concerned operation. Empty Array if no Entity was
successfully treated
|
errors
|
BatchEntityError[]
|
1
|
One array item per Entity in error. Empty Array if no errors happened
|
This datatype represents an error raised (associated to a particular Entity) during the execution of a batch or distributed operation.
The supported JSON members shall follow the indications provided in Table 5.2.17‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
entityId
|
String
|
Valid URI
|
1
|
Entity ID corresponding to the Entity in error
|
registrationId
|
String
|
Valid URI
|
0..1
|
Registration Id corresponding to a failed distributed operation
(optional)
|
error
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
One instance per Entity in error
|
This datatype represents the result of Attribute update (append or update) operations in the NGSI-LD API regardless of whether local or distributed.
The supported JSON members shall follow the indications provided in Table 5.2.18‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
updated
|
String[]
|
1
|
List of Attributes (represented by their name) that were appended or
updated.
|
|
notUpdated
|
NotUpdatedDetails[]
|
See clause 5.2.19
|
1
|
List which contains the Attributes (represented by their name) that were
not updated, together with the reason for not being updated.
|
This datatype represents additional information provided by an implementation when an Attribute update did not happen. See also clause 5.2.18.
The supported JSON members shall follow the indications provided in Table 5.2.19‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
attributeName
|
String
|
1
|
Attribute name
|
|
reason
|
String
|
1
|
Reason for not having changed such Attribute
|
|
registrationId
|
String
|
Valid URI
|
0..1
|
Registration Id corresponding to a failed distributed operation
(optional)
|
This datatype represents the Temporal Evolution of an Entity.
This is the same datatype as mandated by clause 5.2.4 with the only deviation that the representation of Properties and Relationships shall be the temporal one (arrays of (Property or Relationship) instances represented by JSON-LD objects) as defined in clauses 4.5.7 and 4.5.8. Alternatively it is possible to specify the EntityTemporal by using the "Simplified temporal representation of an Entity", as defined in clause 4.5.9.
This datatype represents a temporal query.
The supported JSON members shall follow the requirements provided in Table 5.2.21‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
timerel
|
String
|
Allowed values: "before", "after" and "between"
|
1
|
Represents the temporal relationship as defined by clause 4.11
|
timeAt
|
String representing the timeAt parameter as defined by clause 4.11
|
It shall be a DateTime
|
1
|
|
endTimeAt
|
String representing the endTimeAt parameter as defined by clause 4.11
|
It shall be a DateTime. Cardinality shall be 1 if timerel is equal to "between"
|
0..1
|
|
timeproperty
|
String representing a Temporal Property name
|
Allowed values: "observedAt", "createdAt", "modifiedAt" and "deletedAt". If not specified, the default is
"observedAt". (See clause 4.8)
|
0..1
|
This datatype represents the optional information that is required when contacting an endpoint for notifications.
The supported members shall follow the indications provided in Table 5.2.22‑1. They are intended to represent a key/value pair.
Example optional information includes additional HTTP Headers such as:
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
key
|
String
|
Binding-dependent
|
1
|
The key of the key/value pair
|
value
|
String
|
Binding-dependent
|
1
|
The value of the key/value pair
|
This datatype represents the information that is required in order to convey a query when a "Query Entities" operation or a "Query Temporal Evolution of Entities" operation is to be performed (as per clauses 5.7.2 and 5.7.4, respectively).
The supported JSON members shall follow the requirements provided in Table 5.2.23‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "Query"
|
1
|
JSON-LD @type
|
entities
|
EntitySelector[]
|
See data type definition in clause
5.2.33. Empty array (0 length) is not allowed
|
0..1
|
Entity IDs, id pattern and Entity types that shall be matched by
Entities in order to be retrieved
|
attrs
|
String[]
|
Attribute name as short hand strings or URIs.
Empty array (0 length) is not allowed
|
0..1
|
A synonym for a combination of the pick
andq parameters.
Deprecated
List of Attributes that shall be matched by Entities in order to be
retrieved. If not present all Attributes will be retrieved
|
pick
|
String[]
|
Entity member ("id", "type", "scope” or a projected Attribute name) as a
valid attribute projection language string as per clause 4.21. Empty
array (0 length) is not allowed
|
0..1
|
When defined, every Entity within the payload body is reduced down to
only contain the specified Entity members.
|
omit
|
String[]
|
Entity member (“id”, “type”, "scope" or a
projected Attribute name) as a valid attribute projection language
string as per clause
4.21. Empty array (0 length) is not allowed
|
0..1
|
When defined, the specified Entity members are removed from each Entity
within the payload
|
q
|
String
|
A valid query string as per clause
4.9
|
0..1
|
Query that shall be matched by Entities in order to be retrieved
|
geoQ
|
GeoQuery
|
See data type definition in clause 5.2.13
|
0..1
|
Geoquery that shall be matched by Entities in order be retrieved
|
csf
|
String
|
A valid query string as per clause
4.9
|
0..1
|
Context source filter that shall be matched by Context Source Registrations describing
Context Sources to be used for
retrieving Entities
|
temporalQ
|
TemporalQuery
|
See data type definition in clause
5.2.21
|
0..1
|
Temporal Query to be present only for "Query Temporal Evolution of Entities" operation
(clause 5.7.4)
|
scopeQ
|
String
|
See clause 4.19
|
0..1
|
Scope query
|
lang
|
String
|
A natural language filter in the form of a IETF RFC 5646 [28] language code
|
0..1
|
Language filter to be applied to the query (clause 4.15)
|
containedBy
|
String[]
|
Comma separated list of URIs. Empty array (0 length) is not allowed
|
0..1
|
List of entity ids which have previously been encountered whilst
retrieving the Entity Graph.
Only applicable if joinLevel
is present.
Only applicable for the "Query Entities" operation (clause 5.7.2).
|
datasetId
|
String[]
|
Valid URIs,"@none" for
including the default Attribute instances.
|
0..1
|
Specifies the datasetIds of the Attribute instances to be selected for
each matched Attribute as per clause 4.5.5.
|
entityMap
|
Boolean
|
0..1
|
If true, the location of the
EntityMap used in the operation is returned in the response.
Only applicable for the "Query Entities" operation (clause 5.7.2).
|
This type represents the data needed to define the entity type list representation as mandated by clause 4.5.10.
The supported JSON members shall follow the requirements provided in Table 5.2.24‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
URI that is unique within the system scope. Identifier for the entity
type list
|
type
|
String
|
It shall be equal to "EntityTypeList"
|
1
|
JSON-LD @type
|
typeList
|
String[]
|
1
|
List containing the entity type names
|
This type represents the data needed to define the elements of the detailed entity type list representation as mandated by clause 4.5.11.
The supported JSON members shall follow the requirements provided in Table 5.2.25‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Fully Qualified Name (FQN) of the entity type being described
|
type
|
String
|
It shall be equal to "EntityType"
|
1
|
JSON-LD @type
|
typeName
|
String
|
1
|
Name of the entity type, short name if contained in @context
|
|
attributeNamenames
|
String[]
|
1
|
List containing the names of attributes that instances of the entity
type can have
|
This type represents the data needed to define the detailed entity type information representation as mandated by clause 4.5.12.
The supported JSON members shall follow the requirements provided in Table 5.2.26‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Fully Qualified Name (FQN) of the entity type being described
|
type
|
String
|
It shall be equal to "EntityTypeInfo"
|
1
|
JSON-LD @type
|
typeName
|
String
|
1
|
Name of the entity type, short name if contained in @context
|
|
entityCount
|
Number
|
Unsigned integer
|
1
|
Number of entity instances of this entity type
|
attributeDetails
|
Attribute[]
|
See data type definition in clause 5.2.28.
Attribute with only the elements "id",
"type", "attributeName" and "attributeTypes"
|
1
|
List of attributes that entity instances with the specified entity type
can have
|
This type represents the data needed to define the attribute list representation as mandated by clause 4.5.13.
The supported JSON members shall follow the requirements provided in Table 5.2.27‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
URI that is unique within the system scope. Identifier for the attribute
list
|
type
|
String
|
It shall be equal to "AttributeList"
|
1
|
JSON-LD @type
|
attributeList
|
String[]
|
1
|
List containing the attribute names
|
This type represents the data needed to define the attribute information needed as:
The supported JSON members shall follow the requirements provided in Table 5.2.28‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Full URI of attribute name
|
type
|
String
|
It shall be equal to "Attribute"
|
1
|
JSON-LD @type
|
attributeName
|
String
|
1
|
Name of the attribute, short name if contained in @context
|
|
attributeCount
|
Number
|
Unsigned integer
|
0..1
|
Number of attribute instances with this attribute name
|
attributeTypes
|
String[]
|
0..1
|
List of attribute types (e.g. Property, Relationship, GeoProperty) for which entity
instances exist, which contain an attribute with this name
|
|
typeNames
|
String[]
|
0..1
|
List of entity type names for which entity instances exist containing
attributes that have the respective name
|
This data type represents a spatially bounded Entity in GeoJSON format, as mandated by IETF RFC 7946 [8]. The supported JSON members shall follow the requirements provided in Table 5.2.29‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Entity ID
|
type
|
String
|
It shall be equal to "Feature"
|
1
|
GeoJSON Type
|
geometry
|
GeoJSON Object
|
1
|
null if no matching GeoProperty
|
|
properties
|
FeatureProperties
|
See data type definition
|
1
|
List of attributes as mandated by clause
5.2.31
|
@context
|
URI, JSON Object, or JSON Array
|
See [2], section 5.1.
|
0..1
|
JSON-LD @context. This field
is only present if requested in the payload by the HTTP Prefer Header
(IETF RFC 7240 [26])
|
This data type represents a list of spatially bounded Entities in GeoJSON format, as mandated by IETF RFC 7946 [8]. The supported JSON members shall follow the requirements provided in Table 5.2.30‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "FeatureCollection"
|
1
|
GeoJSON Type
|
features
|
Feature[]
|
See data type definition
|
1..N
|
In the case that no matches are found, features will be an empty array
|
@context
|
URI, JSON Object, or JSON Array
|
See [2], section 5.1.
|
0..1
|
JSON-LD @context. This field
is only present if requested in the payload by the HTTP Prefer Header
(IETF RFC 7240 [26])
|
This data type represents the type and the associated attributes (Properties and Relationships) of an Entity in GeoJSON format.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String or String[]
|
Entity Type
|
1
|
Entity Type (or JSON array, in case of Entities with multiple Entity
Types). Both short hand string (type name) or URI are allowed.
|
<Property name>
|
Property or Property[]1
|
See data type definition in clause 5.2.5
|
0..N
|
Property as mandated by clause 4.5.2.
|
GeoProperty or GeoProperty[]1
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperty as mandated by clause 4.5.2.
|
|
LanguageProperty or LanguageProperty[]1
|
See datatype definition in clause
5.2.32
|
0..N
|
LanguageProperty as mandated by clause 4.5.18.
|
|
JsonProperty or JsonProperty[]1
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties as mandated by clause 4.5.24
|
|
VocabProperty or VocabProperty[]1
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperty as mandated by clause 4.5.20.
|
|
ListProperty or ListProperty[]1
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperty as mandated by clause 4.5.21
|
|
<Relationship name>
|
Relationship or Relationship[]2
|
See data type definition in clause 5.2.6
|
0..N
|
Relationship as mandated by clause 4.5.3.
|
ListRelationship or ListRelationship[]2
|
See datatype definition in clause
5.2.37
|
0..N
|
ListRelationship as mandated by clause 4.5.22.
|
|
NOTE 1: For each Property
(or subclass of Property)
identified by the same Property name, there can be one or more instances
separated by datasetId.
NOTE 2: For each Relationship (or subclass of
Relationship) identified
by the same Relationship name, there can be one or more instances
separated by datasetId.
|
This type represents the data needed to define a LanguageProperty as mandated by clause 4.5.18. Note that in case of concise representation, the type can be omitted (see clause 4.5.18.3).
The supported JSON members shall follow the requirements provided in Table 5.2.32‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
string
|
It shall be equal to "LanguageProperty"
|
1
|
Node type
|
languageMap
|
JSON object
|
A set of key-value pairs whose keys shall be strings representing IETF
RFC 5646 [28] language codes and whose
values shall be JSON strings or arrays of JSON strings
|
1
|
String Property Values defined in multiple natural languages
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property values
|
observedAt
|
String
|
0..1
|
Timestamp. See clause 4.8
|
|
<Property name>
|
Property or Property[]1
|
See datatype definition in clauses 5.2.5
|
0..N
|
Properties of the LanguageProperty.
|
GeoProperty
or GeoProperty[]1
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the LanguageProperty
|
|
LanguageProperty or LanguageProperty[]1
|
See datatype definition in clause
5.2.32
|
0..N
|
LanguageProperties of the LanguageProperty
|
|
JsonProperty or JsonProperty[]1
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the LanguageProperty
|
|
VocabProperty or VocabProperty[]1
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the LanguageProperty
|
|
ListProperty
or ListProperty[]1
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the LanguageProperty.
|
|
<Relationship name>
|
Relationship
or Relationship[]2
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the LanguageProperty.
|
ListRelationship or ListRelationship[]2
|
See datatype definition in clause
5.2.37
|
0..N
|
ListRelationships of the LanguageProperty
|
|
NOTE 1: For each Property
(or subclass of Property)
identified by the same Property name, there can be one or more instances
separated by datasetId.
NOTE 2: For each Relationship (or subclass of
Relationship) identified
by the same Relationship name, there can be one or more instances
separated by datasetId.
|
The following output only members (defined by Table 5.2.32-2) of the LanguageProperty data structure are also defined. They are read-only and shall be generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
0..1
|
System generated creation timestamp. See clause 4.8
|
|
deletedAt
|
String
|
It is only used in notifications reporting deletions
|
0..1
|
System generated deletion timestamp. See clause 4.8
|
instanceId
|
String
|
Valid URI. Only used in temporal representation of LanguageProperties
|
0..1
|
URI uniquely identifying a LanguageProperty instance as mandated by clause 4.5.7
|
modifiedAt
|
String
|
0..1
|
System generated last modification timestamp. See clause 4.8
|
|
previousLanguageMap
|
JSON object
|
A set of key-value pairs whose keys shall be strings representing IETF
RFC 5646 [28] language codes and whose
values shall be JSON strings.
Only used in Notifications, if the showChanges option is explicitly
requested
|
0..1
|
Previous Language Property's languageMap
|
This type selects which entity or group of entities are queried or subscribed to by Context Consumers. Entities can be specified by their id, Entity Types or group of Entity IDs (as a regular expression pattern mandated by IEEE POSIX 1003.2™ [11]).
The JSON members shall follow the indications provided in Table 5.2.33‑1. id takes precedence over idPattern.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
0..1
|
Entity identifier
|
idPattern
|
String
|
Regular expression as per IEEE POSIX 1003.2™ [11]
|
0..1
|
A regular expression which denotes a pattern that shall be matched by
the provided or subscribed Entities
|
type
|
String
|
A valid type selection string as per clause 4.17. To
indicate a request for all Entities (with implied local scope), “*” is also allowed as a value.
|
1
|
Selector of Entity Type(s); If type is specified as “*”, implying local scope, local scope shall not be explicitly set to be false (clause 5.5.13) for the execution of the corresponding operation. |
This type represents the data to alter the default behaviour of a Context Broker when making a distributed operation request to a registered Context Source. The supported JSON members shall follow the indications provided in Table 5.2.34‑1. Brokers may override these recommendations.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
localOnly
|
Boolean
|
0..1
|
If localOnly=true then
distributed operations associated to this Context Source Registration will act only
on data held directly by the registered Context
Source itself (see clause
4.3.6.4).
|
|
cacheDuration
|
String
|
String representing a duration in ISO 8601 format [17]
|
0..1
|
Minimal period of time which shall elapse between two consecutive context information consumption operations (as defined in clause 5.7) related to the same context data will occur. If the cacheDuration latency period has not been reached, a cached value for the entity or its attributes shall be returned where available. |
timeout
|
Number
|
Greater than 0
|
0..1
|
Maximum period of time in milliseconds which may elapse before a
forwarded request is assumed to have failed.
|
cooldown
|
Number
|
Greater than 0
|
0..1
|
Minimum period of time in milliseconds which shall elapse before attempting to make a subsequent forwarded request to the same endpoint after failure. If requests are received before the cooldown period has expired, a timeout error response for the registration is automatically returned. |
This type represents the data needed to define a VocabProperty as mandated by clause 4.5.20. In case of concise representation, the type can be omitted (see clause 4.5.20.3).
The supported JSON members shall follow the requirements provided in Table 5.2.35‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "VocabProperty"
|
1
|
Node type
|
vocab
|
String or string[]
|
1
|
String Values which shall be type coerced to URIs based on the supplied
@context
|
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property values
|
observedAt
|
String
|
0..1
|
Timestamp. See clause 4.8
|
|
<Property name>
|
Property
or Property[]1
|
See datatype definitions in clauses 5.2.5
|
0..N
|
Properties of the VocabProperty
|
GeoProperty
or GeoProperty[]1
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the VocabProperty.
|
|
LanguageProperty or LanguageProperty[]1
|
See datatype definition in clause
5.2.32
|
0..N
|
LanguageProperties of the VocabProperty.
|
|
JsonProperty or JsonProperty[]1
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the VocabProperty
|
|
VocabProperty or VocabProperty[]1
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the VocabProperty.
|
|
ListProperty
or ListProperty[]1
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the VocabProperty.
|
|
<Relationship name>
|
Relationship
or Relationship[]2
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the VocabProperty.
|
ListRelationship or ListRelationship[]2
|
See datatype definition in clause
5.2.37
|
0..N
|
ListRelationships of the VocabProperty.
|
|
NOTE 1: For each Property
(or subclass of Property)
identified by the same Property name, there can be one or more instances
separated by datasetId.
NOTE 2: For each Relationship (or subclass of
Relationship) identified
by the same Relationship name, there can be one or more instances
separated by datasetId.
|
The following output only members (defined by Table 5.2.35-2) of the VocabProperty data structure are also defined. They are read-only and shall be generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
0..1
|
System generated creation timestamp. See clause 4.8
|
|
deletedAt
|
String
|
It is only used in notifications reporting deletions
|
0..1
|
System generated deletion timestamp. See clause 4.8
|
instanceId
|
String
|
Valid URI. Only used in temporal representation of VocabProperties
|
0..1
|
URI uniquely identifying a VocabProperty instance as mandated by clause 4.5.7
|
modifiedAt
|
String
|
0..1
|
System generated last modification timestamp. See clause 4.8
|
|
previousVocab
|
String or String[]
|
Only used in Notifications
|
0..1
|
Previous VocabProperty's vocab
|
This type represents the data needed to define a ListProperty as mandated by clause 4.5.21. Please note that in case of concise representation, the type can be omitted (see clause 4.5.21.3).
The supported JSON members shall follow the requirements provided in Table 5.2.36‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to"ListProperty"
|
1
|
Node type
|
valueList
|
An array of JSON values as defined by IETF RFC 8259 [6]
|
See NGSI-LD Value definition in clause 3.1
|
1
|
Ordered array of Property Values
|
observedAt
|
String
|
0..1
|
Timestamp. See clause 4.8
|
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property list values
|
<Property name>
|
Property
or Property[]1
|
See datatype definition in clauses 5.2.5
|
0..N
|
Properties of the ListProperty.
|
GeoProperty
or GeoProperty[]1
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the ListProperty.
|
|
LanguageProperty
or LanguageProperty[]1
|
See datatype definition in clause
5.2.32
|
0..N
|
LanguageProperties of the ListProperty.
|
|
JsonProperty or JsonProperty[]1
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the ListProperty
|
|
VocabProperty or VocabProperty[]1
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the ListProperty
|
|
ListProperty
or ListProperty[]1
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the ListProperty.
|
|
<Relationship name>
|
Relationship
or Relationship[]2
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the ListProperty.
|
ListRelationship or ListRelationship[]2
|
See datatype definition in clause
5.2.37
|
0..N
|
ListRelationships of the ListProperty.
|
|
NOTE 1: For each Property
(or subclass of Property)
identified by the same Property name, there can be one or more instances
separated by datasetId.
NOTE 2: For each Relationship (or subclass of
Relationship) identified
by the same Relationship name, there can be one or more instances
separated by datasetId.
|
The following output only members (defined by Table 5.2.36-2) of the ListProperty data structure are also defined. They are read-only and shall be generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
0..1
|
System generated creation timestamp. See clause 4.8
|
|
deletedAt
|
String
|
It is only used in notifications reporting deletions
|
0..1
|
System generated deletion timestamp. See clause 4.8
|
instanceId
|
String
|
Valid URI. Only used in temporal representation of ListProperties
|
0..1
|
URI uniquely identifying a ListProperty instance as mandated by clause 4.5.7
|
modifiedAt
|
String
|
0..1
|
System generated last modification timestamp. See clause 4.8
|
|
previousValueList
|
An array of JSON values as defined by IETF RFC 8259 [6]
|
See NGSI-LD Value definition in clause 3.1
|
1
|
Ordered array of previous Property Values
|
This type represents the data needed to define a ListRelationship as mandated by clause 4.5.22. Please note that in case of concise representation, the type can be omitted (see clause 4.5.22.3) and the objectList may also be represented as an ordered array of Strings.
The supported JSON members shall follow the requirements provided in Table 5.2.36‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "ListRelationship"
|
1
|
Node type
|
objectList
|
JSON Object[] or
String[]
|
In the normalized form, each array element holds a JSON object containing a single Attribute with a key called "object" and where the value is a valid URI.
In the concise form, each string in the array holds a valid URI
|
1
|
Ordered array of Relationship target objects.
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of relationship list objects
|
objectType
|
String or String []
|
0..1
|
Node Type of the Relationship's target object.
Both short hand string(s) (type name) or URI(s) are allowed
|
|
observedAt
|
String
|
0..1
|
Timestamp. See clause 4.8
|
|
<Property name>
|
Property or Property[]1
|
See datatype definition in clause 5.2.5
|
0..N
|
Properties of the ListRelationship.
|
GeoProperty
or GeoProperty[]1
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the ListRelationship.
|
|
LanguageProperty or LanguageProperty[]1
|
See datatype definition in clause
5.2.32
|
0..N
|
LanguageProperties of the ListRelationship.
|
|
JsonProperty or JsonProperty[]1
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the ListProperty
|
|
VocabProperty or VocabProperty[]1
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the ListRelationship.
|
|
ListProperty
or ListProperty[]1
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the ListRelationship.
|
|
<Relationship name>
|
Relationship or Relationship[]2
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the ListRelationship.
|
ListRelationship or ListRelationship[]2
|
See datatype definition in clause
5.2.37
|
0..N
|
ListRelationships of the ListRelationship
|
|
NOTE 1: For each Property
(or subclass of Property)
identified by the same Property name, there can be one or more instances
separated by datasetId.
NOTE 2: For each Relationship (or subclass of
Relationship) identified
by the same Relationship name, there can be one or more instances
separated by datasetId.
|
The following output only members (defined by Table 5.2.37-2) of the ListRelationship data structure are also defined. They are read-only and shall be generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
0..1
|
System generated creation timestamp. See clause 4.8
|
|
deletedAt
|
String
|
It is only used in notifications reporting deletions
|
0..1
|
System generated deletion timestamp. See clause 4.8
|
entityList
|
Entity[]
|
See datatype definition in clause 5.2.4
Only used in Linked Entity Retrieval,
if the join=inline option is
explicitly requested
|
0..1
|
An array of inline Entities obtained by Linked Entity retrieval, corresponding to
the ListRelationship's
target objects See clause 4.5.23.2
|
instanceId
|
String
|
Valid URI. Only used in temporal representation of ListRelationships
|
0..1
|
URI uniquely identifying a ListRelationship instance as
mandated by clause 4.5.8
|
modifiedAt
|
String
|
DateTime (clause 4.6.3) |
0..1
|
System generated last modification timestamp. See clause 4.8
|
previousObjectList
|
JSON Object[] or
String[]
|
In the normalized form, each array element holds a JSON object containing a containing a single Attribute with a key called "object" and where the value is a valid URI.
In the concise form, each string in the array holds a valid URI
|
0..1
|
Ordered array of previous Relationship target objects
|
This type represents the data needed to define a JsonProperty as mandated by clause 4.5.24. In case of concise representation, the type can be omitted (see clause 4.5.24.3).
The supported JSON members shall follow the requirements provided in Table 5.2.38‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "JsonProperty"
|
1
|
Node type
|
json
|
JSON
|
1
|
Raw unexpandable JSON which shall not be interpreted as JSON-LD using
the supplied @context
|
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property values
|
observedAt
|
String
|
0..1
|
Timestamp. See clause 4.8
|
|
<Property name>
|
Property
or Property[]1
|
See datatype definitions in clauses 5.2.5
|
0..N
|
Properties of the JsonProperty
|
GeoProperty
or GeoProperty[]1
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the JsonProperty.
|
|
LanguageProperty or LanguageProperty[]1
|
See datatype definition in clause
5.2.32
|
0..N
|
LanguageProperties of the JsonProperty.
|
|
JsonProperty or JsonProperty[]1
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the JsonProperty.
|
|
VocabProperty or VocabProperty[]1
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the JSONPropertry.
|
|
ListProperty
or ListProperty[]1
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the JsonProperty.
|
|
<Relationship name>
|
Relationship
or Relationship[]2
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the JsonProperty.
|
ListRelationship or ListRelationship[]2
|
See datatype definition in clause
5.2.37
|
0..N
|
ListRelationships of the JsonProperty.
|
|
NOTE 1: For each Property
(or subclass of Property)
identified by the same Property name, there can be one or more instances
separated by datasetId.
NOTE 2: For each Relationship (or subclass of
Relationship) identified
by the same Relationship name, there can be one or more instances
separated by datasetId.
|
The following output only members (defined by Table 5.2.38-2) of the JsonProperty data structure are also defined. They are read-only and shall be generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
0..1
|
System generated creation timestamp. See clause 4.8
|
|
deletedAt
|
String
|
It is only used in notifications reporting deletions
|
0..1
|
System generated deletion timestamp. See clause 4.8
|
instanceId
|
String
|
Valid URI. Only used in temporal representation of JsonProperties
|
0..1
|
|
modifiedAt
|
String
|
0..1
|
System generated last modification timestamp. See clause 4.8
|
|
previousJson
|
JSON
|
Only used in Notifications
|
0..1
|
Previous JsonProperty's json
|
This type represents the data needed to define an EntityMap as mandated by clause 4.5.25.
The supported JSON members shall follow the requirements provided in Table 5.2.39‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "EntityMap"
|
1
|
Node type
|
expiresAt
|
String
|
1
|
Expiration date for the EntityMap
|
The following output only members (defined by Table 5.2.39-2) of the EntityMap data structure are also defined. They are read-only and shall be generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided in update operations NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
entityMap
|
JSON
|
A set of key-value pairs whose keys shall be strings representing Entity
ids and whose values shall be an array holding every CSourceRegistration
id which is relevant to the ongoing Context Information Consumption
request (see clause
4.21).
The key "@none" shall be
used to refer to an Entity that is held locally
|
1
|
System generated mapping of Entities to CSourceRegistrations.
|
linkedMaps
|
JSON
|
A set of key-value pairs whose keys shall be strings representing
CSourceRegistration ids which are relevant to the ongoing Context
Information request and whose values shall represent the associated
EntityMap id used by the ContextSource
|
1
|
System generated mapping of Context CSourceRegistrations to a URI
indicating which EntityMaps was used by the Context Source
|
This type represents the data uniquely identifying a Context Source, and if the Context Source supports multi-tenancy (see clause 4.14) uniquely identifying a Tenant within that Context Source.
The supported JSON members shall follow the requirements provided in table 5.2.40‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Context Source ID
|
type
|
String
|
It shall be equal to "ContextSourceIdentity”
|
1
|
Node type
|
contextSourceExtras
|
JSON
|
0..1
|
Instance specific information relevant to the configuration of
the Context Source itself in
raw unexpandable JSON which shall not be interpreted as JSON-LD using
the supplied @context
|
|
contextSourceUptime
|
String
|
String representing a duration in ISO 8601 format [17]
|
1
|
Total Duration that the Context
Source has been available
|
contextSourceTimeAt
|
String
|
1
|
Current time observed at the Context
Source. Timestamp See clause
4.8
|
|
contextSourceAlias
|
String
|
Non-empty string. Pseudonym field as defined in IETF RFC 7230
[26]
|
1
|
A unique id for a Context
Source which can be used to identify loops.
In the multi-tenancy use case (see clause 4.14), this id shall
be identify a specific Tenant
within a registered Context
Source.
|
This datatype represents the parameters that allow building a notification to be sent to a subscriber. How to build this notification is detailed in clause 5.8.6.
The supported JSON members shall follow the indications provided in Table 5.3.1‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Notification identifier (JSON-LD @id). It shall be automatically
generated by the implementation
|
type
|
String
|
It shall be equal to "Notification"
|
1
|
JSON-LD @type
|
subscriptionId
|
String
|
Valid URI
|
1
|
Identifier of the subscription that originated the notification
|
notifiedAt
|
String
|
1
|
Timestamp corresponding to the instant when the notification was
generated by the system
|
|
data
|
NGSI-LD Entity[] or FeatureCollection
|
1
|
The content of the notification as NGSI-LD Entities.
See clause 5.2.4.
If the notification has been triggered from a Subscription that has the
notification.
endpoint.accept field set to
application/geo+json then data is returned as a FeatureCollection. In this case, if
the notification.endpoint.receiverInfo contains the key "Prefer" and it is set to the value "body=json", then the FeatureCollection will not contain
an @context field.
If endpoint.accept is not
set or holds another value then Entity[] is returned.
|
This datatype represents the parameters that allow building a Context Source Notification to be sent to a subscriber. How to build this notification is detailed in clause 5.11.7.
The supported JSON members shall follow the indications provided in Table 5.3.2‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
CSource notification identifier (JSON-LD @id)
|
type
|
String
|
It shall be equal to "ContextSourceNotification"
|
1
|
JSON-LD @type
|
subscriptionId
|
String
|
Valid URI
|
1
|
Identifier of the subscription that originated the notification
|
notifiedAt
|
String
|
1
|
Timestamp corresponding to the instant when the notification was
generated by the system
|
|
data
|
CSource
Registration[]
|
1
|
The content of the notification as NGSI-LD CSourceRegistrations. See clause 5.2.9
|
|
triggerReason
|
String
|
TriggerReasonEnumeration
(see clause 5.3.3)
|
1
|
Indicates whether the CSources in the CSourceRegistration(s) in data are
newly matching (initial notification or creation), have been updated
(but still match) or do not match any longer
|
The enumeration can take one of the following values:
When updating NGSI-LD elements (Entities, Attributes, Context Source Registrations or Subscriptions) it is necessary to have a means of describing a set of modifications to their content.
An NGSI-LD Fragment is a JSON Merge Patch document [16] and [i.10] which describes changes to be made to a target JSON-LD document using a syntax that closely mimics the document being modified.
An NGSI-LD Fragment is a JSON-LD Object which shall include the following members:
{"id": "urn:ngsi-ld:Subscription:MySubscription","type": "Subscription","endpoint": {"uri": "http://example.org/newNotificationEndPoint"}}
{"id": "urn:ngsi-ld:TemperatureSensor:001","type": "TemperatureSensor","batteryLevel": {"type": "Property","value": 7,"observedAt": "2022-03-14T12:51:02.000Z","providedBy": "urn:ngsi-ld:null"},"uncharged" : {"type": "Property","value": "urn:ngsi-ld:null"}}
This clause defines common behaviours for the API operations.
When comparing URIs, implementations shall follow the recommendations of IETF RFC 3986 [5], section 6.
Table 5.5.2‑1 details a list of error types defined by NGSI-LD. The particular conditions under which error type shall be raised are defined when describing each operation supported by the API.
Error Type
|
Description
|
---|---|
https://uri.etsi.org/ngsi-ld/errors/InvalidRequest
|
The request associated to the operation is syntactically invalid or
includes wrong content
|
https://uri.etsi.org/ngsi-ld/errors/BadRequestData
|
The request includes input data which does not meet the requirements of
the operation
|
https://uri.etsi.org/ngsi-ld/errors/AlreadyExists
|
The referred element already exists
|
https://uri.etsi.org/ngsi-ld/errors/OperationNotSupported
|
The operation is not supported
|
https://uri.etsi.org/ngsi-ld/errors/ResourceNotFound
|
The referred resource has not been found
|
https://uri.etsi.org/ngsi-ld/errors/InternalError
|
There has been an error during the operation execution
|
https://uri.etsi.org/ngsi-ld/errors/TooComplexQuery
|
The query associated to the operation is too complex and cannot be
resolved
|
https://uri.etsi.org/ngsi-ld/errors/TooManyResults
|
The query associated to the operation is producing so many results that
can exhaust client or server resources. It should be made more
restrictive
|
https://uri.etsi.org/ngsi-ld/errors/LdContextNotAvailable
|
A remote JSON-LD @context referenced in a request cannot be retrieved by
the NGSI-LD Broker and expansion or compaction cannot be performed
|
https://uri.etsi.org/ngsi-ld/errors/NoMultiTenantSupport
|
The NGSI-LD API implementation does not support multiple tenants
|
https://uri.etsi.org/ngsi-ld/errors/NonexistentTenant
|
The addressed tenant does not exist
|
When reporting errors back to clients, NGSI-LD implementations shall generate a JSON object in accordance with IETF RFC 7807 [10], section 3.1, including, at least the following terms:
Even though IETF RFC 7807 [10] defines a specific MIME type for error payloads, NGSI-LD implementations shall use the standard JSON MIME type ("application/json") when reporting errors, so that old clients or existing tools are not broken.
{"type": "https://uri.etsi.org/ngsi-ld/errors/ResourceNotFound","title": "Resource not found.","detail": "urn:ngsi-ld:Device:widget001 was not found","status": 404,"instance": "urn:ngsi-ld:Device:widget001"}
All the operations that take a JSON-LD document as input shall process such JSON-LD document as follows:
If the input provided by an API client does not include any @context, then the implementation shall at minimum assign the Core @context to such an input. In addition, the Context Broker implementation may allow configuring a default user @context (with default terms), to be used when no user @context is provided. The Core @context shall always take precedence.
When executing an operation if an unexpected error happens and the operation cannot be completed, implementations shall raise an error of type InternalError. This includes, as well, situations such as database timeouts, etc.
If the NGSI-LD endpoint is not capable of executing the requested operation, an error of type OperationNotSupported shall be raised. This may happen in a distributed architecture where a Context Broker might not be able to store Entities (only to forward queries to Context Sources), and as a result, certain operations such as "Create Entity" might not be supported.
When a query operation is so complex that cannot be resolved by an NGSI-LD system, implementations shall raise an error of type TooComplexQuery.
When a query operation is producing so many results that can potentially exhaust client or server resources, or it can be just impractical to be managed, implementations shall raise an error of type TooManyResults. The threshold conditions used as criteria to raise such error is up to each implementation.
When a remote JSON-LD @context referenced by an incoming request is not available, implementations shall raise an error of type LdContextNotAvailable. If the remote JSON-LD @context is invalid, implementations shall raise an error of type BadRequestData.
NGSI-LD API operations allow clients to use short-hand strings as non-qualified names, particularly for Property, Relationship or Type names and VocabProperty values. For instance, an API client can refer to the term "Vehicle" as a non-qualified type name. When executing API update-related operations, NGSI-LD systems shall expand terms to URIs, in order to obtain and store Fully Qualified Names. Likewise, when executing query-related operations, NGSI-LD systems shall compact URIs (Fully Qualified Names) to short terms in order to provide short-hand strings to context consumers.
The term to URI expansion or compaction shall be performed using a @context as described by the JSON-LD specification [2] (section 5.1), and in clause 4.4. In the absence of a user @context, the term expansion or compaction shall be performed according to clause 5.5.5.
For the avoidance of doubt, the @context used to perform compaction or expansion of terms shall be the one provided by each API call (or the default @context in its absence), and not any other @context which might have been supplied previously. For instance, when performing "Query Entity" operations (clause 5.7.2), the @context used to perform URI expansion and compaction shall be the one provided by the request.
In case of HTTP binding via GET (clause 6.4.3.2) of the "Query Entity" operation, this means using the JSON-LD Link Header as described by the JSON-LD specification [2], section 6.2. In case of HTTP binding via POST (clause 6.23.3.1), of the "Query Entity" operation, this means giving the @context either via Link Header or within the payload body, depending on the Content-Type Header being "application/json" or "application/ld+json", respectively.
It is important to warn users that updating a @context could lead to behaviour that might be perceived as inconsistent. If, for instance, a fully qualified name that qualified a given short-hand name is changed, from that moment onwards, the short-hand name is referencing a different Attribute. This will effectively change the results of queries that use the given short name, possibly not giving back anymore the expected set of results.
Moreover, this user @context shall not:
Contain JSON-LD Scoped Contexts (see [2], section 4.1.8).
Be embedded into NGSI-LD Attributes, i.e. there cannot be parts of the user @context other than at the top level of the NGSI-LD document.
Parts of user @context that are not following the two points above should result in an error of type BadRequestData, because JSON-LD Scoped Contexts and nested embedded @context could be used to modify terms defined in the Core @context or to reshape NGSI-LD Elements during the expansion of terms.
As the Core @context is protected and cannot be overridden, when performing term to URI expansion or compaction, implementations shall always consider the Core @context as having absolute precedence, regardless of the position of the Core @context in the @context array of elements. Nonetheless, NGSI-LD data providers may use appropriate term prefixing to ensure that a proper term to URI expansion or compaction is performed.
At compaction time, in the event that no matching term is found in the current @context, implementations shall render Fully Qualified Names.
The Partial Update Patch procedure modifies an existing NGSI-LD element by overwriting the data at the Attribute level, replacing it with the data provided in the NGSI-LD Fragment.
When updating NGSI-LD elements (Entities, Context Source Registrations or Context Subscriptions) using NGSI-LD Fragments, implementations shall determine the exact set of changes being requested by comparing the content of the provided Fragment (patch) against the current content (a JSON-LD object) of the target element.
With respect to update operations, implementations shall perform an algorithm equivalent to the one described below (adapted from IETF RFC 7396 [16]), in order to observe the name to URI expansion rules and the JSON-LD null processing):
{"temperature": {"type": "Property","value": 25,"unitCode": "CEL""observedAt": "2022-03-14T01:59:26.535Z"}}
{"type": "Property","value": 100,"observedAt": "2022-03-14T13:00:00.000Z"}
When resolving NGSI-LD Query operations, NGSI-LD Systems shall exhibit the behaviour described by the present clause:
While iterating over a set of pages, there might be changes in the target result set, due to additions or removals of NGSI-LD Elements occurring in between. Implementations may detect those situations and may warn NGSI-LD Clients appropriately.
If a Tenant is specified for an NGSI-LD operation, the operation shall only be applied to information related to the specified Tenant. If no Tenant is specified, the operation shall apply to the implicitly existing default Tenant. If a Tenant is explicitly specified, but the system implementing the NGSI-LD API does not support multi-tenancy, an error of type NoMultiTenantSupport should be raised.
In case an operation applies to a Tenant, this information shall also be provided in the response to the operation. This also applies to notifications sent as a result of subscriptions (clauses 5.8 and 5.11).
A Tenant is represented in form of a String. How the Tenant is specified for an API operation is protocol binding specific. How Tenants are created, is implementation-specific.
One implementation option is to support the implicit creation of Tenants. This means that a Tenant is implicitly created when an NGSI-LD operation for creating information targets a new Tenant; this is the case for:
All other NGSI-LD operations, e.g. for retrieving, updating, appending or deleting information that target a non-existing Tenant should raise an error of type NonexistentTenant.
If the system implementing the NGSI-LD API does not support multiple Tenants, the attempt to register a Context Source with Tenant information in the Context Source Registration should also result in an error of type NoMultiTenantSupport.
The following operations operate on an array of entities (as input payload):
It is allowed for such an input Entity array to contain more than one instance of the same entity (those instances have identical ids).
In order for such a request to be correctly handled, those instances that have the same id are processed by the Broker in the order they have in the array: the higher the index in the array, the later it will be processed. If the order is altered, the outcome may be altered.
All Entities and Attributes in the batch will get the same modifiedAt timestamp, so it makes sense to distinguish them via the observedAt temporal property.
Implementations shall treat the entity instances as if they had all arrived in separate requests.
The following clauses specify the behaviour in each case.
The first occurrence of an entity in the input array (the oldest one) is used for the creation of the entity. Any subsequent instance of the same entity is reported as an error (entity already exists) in the response.
This operation has two modes of operation, with an optional flag to select between the two. The default behaviour is to replace any already existing entities, while the optional behaviour is to update already existing entities. Non existing entities are created in both modes.
If the entity does not yet exist, the first occurrence of an entity is used to create the entity, and subsequent instances of that same entity are used to either replace (default behaviour) or to update (optional behaviour) the entity. These replace or update operations shall be done in chronological order.
Only the entity resulting from merging all of the entity instances, in the correct order, is maintained in the current state (as defined in clause 4.3.1). For Temporal Evolution of Entities (as defined in clause 4.3.1), all entity instances shall be taken into account, in the correct order.
This operation has two modes of operation, with an optional flag to select between the two. The default behaviour is to replace any already existing attributes of the entities, while the optional behaviour is to preserve already existing attributes of the entities.
Brokers shall send separate notifications for each individual update, taking throttling into account.
The Batch Entity Delete operation has as input an array of Entity IDs, for the entities to be deleted. If an Entity ID is replicated in the array, the first occurrence will delete the entity, while subsequent occurrences of the same Entity ID will provoke an error in the response (entity does not exist).
The Batch Entity Merge operation has as input an array of Entity IDs, for the entities to be merged. If an Entity ID is replicated in the array, these merge operations shall be done in chronological order. Only the entity resulting from merging all of the entity instances, in the correct order, is maintained in the current state (as defined in clause 4.3.1). For Temporal Evolution of Entities (as defined in clause 4.3.1), all entity instances shall be taken into account, in the correct order.
The merge patch procedure modifies an existing NGSI-LD element by applying the set of changes found in an NGSI-LD Fragment data to the target resource. Unlike the partial update patch behaviour (described in clause 5.5.8), which replaces the complete element on the first level, e.g. a whole Attribute, the procedure described in this clause merges the provided information with the existing information up to an arbitrary depth, e.g. including going into JSON objects representing a Property value.
When merging NGSI-LD Entities using NGSI-LD Fragments, implementations shall determine the exact set of changes being requested by comparing the content of the provided Fragment (patch) against the current content (a JSON-LD object) of the target element.
With respect to merge operations, implementations shall perform an algorithm equivalent to the one described below (adapted from IETF RFC 7396 [16], in order to observe the name to URI expansion rules and JSON-LD null processing):
The API provides a binding-specific mechanism to limit the execution of operations to a local scope, i.e., to only execute it based on information available in the Context Source or Context Broker directly targeted by the request. This enables limiting cascading distributed operations (clause 4.3.6.4) and, in some cases, also enables broader local operations, e.g., pertaining to all entities, which would be too expensive in the distributed case.
The localOnly member in the Subscription (clause 5.5.12) requests that the subscription only matches Entities stored locally.
The localOnly member in the RegistrationManagementInfo (clause 5.2.34) of a Context Source Registration request that, when contacting the registered ContextSource, a local scope shall be specified. Thus, the registered Context Source only provides its local information, not information from further Context Sources in its own Context Registry.
If the request limits the execution of the operation to the local scope, Context Source Registrations from the Context Registry are not required and thus do not need to be requested.
The following operations may occur as part of a distributed transactional request:
In the case that a client wishes to indicate to a Context Broker that a request is part of a unitary sequence of requests, the Context Broker shall create and cache an EntityMap for future use and return the location of said EntityMap in a specific field. The caching strategy and expiry time shall depend on implementation specific configurations. Context Sources may indicate that they do not support EntityMaps, through declining to return the location of an EntityMap when requested to do so.
If a subsequent request references an existent EntityMap, it shall be used for the purposes of Entity registration matching, and queries shall be filtered to only consider the Entities listed. If an EntityMap has expired, or cannot be accessed, no inference can be made as to which entities are held within the Context Sources and a new one shall be created. All data within an Entity Map is fixed, and cannot be altered, except for the expiry timestamp of the EntityMap, which can optionally be extended if the Context Sources implementation allows for it.
This operation allows creating a new NGSI-LD Entity.
A Context Producer can create an Entity within an NGSI-LD system as shown in Figure 5.6.1.2‑1.
A JSON-LD document representing an NGSI-LD Entity as mandated by clause 5.2.4.
Implementations shall exhibit the following behaviour:
None.
This operation allows modifying an existing NGSI-LD Entity by updating already existing Attributes (Properties or Relationships) and by appending non-existing ones.
A Context Producer can update Attributes within an NGSI-LD system as shown in Figure 5.6.2.2‑1.
This operation allows modifying an NGSI-LD Entity by adding new attributes (Properties or Relationships).
A Context Producer can append new Attributes to an existing Entity within an NGSI-LD system as shown in Figure 5.6.3.2‑1.
The following behaviour shall be exhibited by compliant implementations:
This operation allows performing a partial update on an NGSI-LD Entity's Attribute (Property or Relationship). A partial update only changes the elements provided in an Entity Fragment, leaving the rest as they are. This operation supports the deletion of sub-Attributes but not the deletion of the whole Attribute itself.
A Context Producer can carry out a partial Attribute update of an Entity within an NGSI-LD System as shown in Figure 5.6.4.2‑1.
None.
This operation allows deleting an NGSI-LD Attribute (Property or Relationship). The Attribute itself and all its children shall be deleted.
A Context Producer can delete a specific Attribute within an NGSI-LD system as shown in Figure 5.6.5.2‑1.
None.
This operation allows deleting an NGSI-LD Entity.
A Context Producer can completely delete an Entity within an NGSI-LD system as shown in Figure 5.6.6.2‑1.
None.
This operation allows creating a batch of NGSI-LD Entities.
A Context Producer can create a batch of NGSI-LD Entities within an NGSI-LD system as shown in Figure 5.6.7.2‑1.
Implementations shall exhibit the following behaviour:
This operation allows creating a batch of NGSI-LD Entities, updating each of them if they already existed. In some database jargon this kind of operation is known as "upsert".
A Context Producer can create or update a batch of Entities within an NGSI-LD system as shown in Figure 5.6.8.2‑1.
Implementations shall exhibit the following behaviour:
This operation allows updating a batch of NGSI-LD Entities.
A Context Producer can update a batch of Entities within an NGSI-LD system as shown in Figure 5.6.9.2‑1.
Implementations shall exhibit the following behaviour:
This operation allows deleting a batch of NGSI-LD Entities.
A Context Producer can delete a batch of Entities within an NGSI-LD system as shown in Figure 5.6.10.2‑1.
Implementations shall exhibit the following behaviour:
This operation allows creating or updating (by adding new Attribute instances) the Temporal Evolution of an Entity.
A Context Producer can create the Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.11.2‑1.
Similarly, if the Entity already exists then an Update scenario will be in place.
A JSON-LD document representing the Temporal Evolution of an Entity as mandated by clause 5.2.20.
Implementations shall exhibit the following behaviour:
None.
This operation allows modifying the Temporal Evolution of an Entity by adding new Attribute instances.
A Context Producer can add new Attributes or Attribute instances to an existing Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.12.2‑1.
The following behaviour shall be exhibited by compliant implementations:
None.
This operation allows deleting an Attribute (Property or Relationship) of the Temporal Evolution of an Entity. The Attribute itself and all its child NGSI-LD elements shall be deleted.
A Context Producer can delete a specific Attribute of the Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.13.2‑1.
None.
This operation allows modifying a specific Attribute (Property or Relationship) instance, identified by its instanceId, of the Temporal Evolution of an Entity.
This operation enables the correction of wrong information that could have been previously added to the Temporal Evolution of an Entity.
A Context Producer can modify a specific Attribute instance, identified by a given instanceId, of the Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.14.2‑1.
None.
This operation allows deleting one Attribute instance (Property or Relationship), identified by its instanceId, of the Temporal Evolution of an Entity. The Attribute itself and all its child elements shall be deleted. This operation enables the removal of individual Attribute instances that could have been previously added to the Temporal Evolution of an Entity.
A Context Producer can delete an Attribute instance, identified by a given instanceId, of the Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.15.2‑1.
None.
This operation allows deleting the Temporal Evolution of an Entity.
A Context Producer can completely delete the Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.16.2‑1.
None.
This operation allows modification of an existing NGSI-LD Entity aligning to the JSON Merge Patch processing rules defined in IETF RFC 7396 [16] by adding new Attributes (Properties or Relationships) or modifying or deleting existing Attributes associated with an existing Entity.
A Context Producer can perform a merge on an Entity within an NGSI-LD system as shown in Figure 5.6.17.2‑1.
The following behaviour shall be exhibited by compliant implementations:
This operation allows the modification of an existing NGSI-LD Entity by replacing all of the Attributes (Properties or Relationships).
A Context Producer can replace an entire Entity within an NGSI-LD system as shown in Figure 5.6.18.2‑1.
None.
This operation allows the replacement of a single Attribute (Property or Relationship) within an NGSI-LD Entity.
A Context Producer can carry out a replacement of an Attribute within an Entity within an NGSI-LD System as shown in Figure 5.6.19.2‑1.
None.
This operation allows modification of a batch of NGSI-LD Entities according to the JSON Merge Patch processing rules defined in IETF RFC 7396 [16] by adding new attributes (Properties or Relationships) or modifying or deleting existing attributes associated with an existing Entity.
A Context Producer can merge a batch of Entities within an NGSI-LD system as shown in Figure 5.6.20.2‑1.
Implementations shall exhibit the following behaviour:
This operation allows retrieving an NGSI-LD Entity.
A Context Consumer can retrieve a specific Entity from an NGSI-LD system as shown in Figure 5.7.1.2‑1.
A JSON-LD object representing the target Entity as mandated by clause 5.2.4 or a GeoJSON Feature as mandated by clause 5.2.29.
If a restrictive list of Entity member names is present, every Entity within the payload body is reduced down to only contain the defined Entity members.
If an exclusionary list of Entity member names is present, the defined Entity members listed are removed from each Entity within the payload.
If any of the returned Attributes corresponds to a VocabProperty, the returned value shall be compacted according to the supplied @context.
If a language filter is specified and any of the returned Attributes corresponds to a LanguageProperty, the LanguageProperty in question shall be converted into a Property. The value of this Property shall correspond to the value of the string or strings from the matching key-value pair of the languageMap where the key matches the language filter. A non-reified subproperty lang shall be included in the response indicating the chosen language.
If no match can be made for a LanguageProperty then a single language shall be chosen, up to the implementation.
This operation allows querying an NGSI-LD system.
A Context Consumer can retrieve a set of entities which matches a specific query from an NGSI-LD system as shown in Figure 5.7.2.2‑1.
In the general case, it is not possible to retrieve a set of entities by only specifying desired Entity identifiers, without further specifying restrictions on the entities' types or attributes, either explicitly, via selector of Entity types or of Attribute names, or implicitly, within an NGSI-LD Query or GeoQuery. If the execution of the operation is limited to the local scope (see clause 5.5.13), no further restrictions have to be provided.
a) selector of Entity Types;b) list of Attribute names, including at least one non-system Attribute;c) NGSI-LD Query, including at least one non-system Attribute;d) NGSI-LD GeoQuery;e) local scope (see clause 5.5.13).
If in the process of obtaining the query result it is necessary to issue a Context Source discovery operation, the same Context Source filter input parameter (if present) shall be propagated.
A JSON-LD array representing the matching entities as defined by clause 5.2.4 or in the case of GeoJSON requests a FeatureCollection as mandated by clause 5.2.30. For each matching Entity, only the Attributes specified by the Attribute list parameter shall be included. If such parameter is not present, then all Attributes shall be included.
If a restrictive list of Entity member names is present, every Entity within the payload body is reduced down to only contain the defined Entity members.
If an exclusionary list of Entity member names is present, the defined Entity members listed are removed from each Entity within the payload.
If any of the returned Attributes corresponds to a VocabProperty, the returned value shall be compacted according to the supplied @context.
If a language filter is specified and any of the returned Attributes corresponds to a LanguageProperty, the LanguageProperty in question shall be converted into a Property. The value of this Property shall correspond to the value of the string or strings from matching key-value pair of the languageMap where the key matches the language filter. A non-reified subproperty lang shall be included in the response indicating the chosen language.
If no match can be made for a LanguageProperty, then the default identified by the JSON-LD "@none" shall be chosen if present, otherwise the choice of a single language is up to the implementation.
This operation allows retrieving the Temporal Evolution of an Entity.
A Context Consumer can retrieve the Temporal Evolution of an Entity (in the form of a temporal representation) from an NGSI-LD system as shown in Figure 5.7.3.2‑1.
A JSON-LD object representing the Temporal Evolution of the target Entity as mandated by clause 5.2.20.
If a restrictive list of Entity member names is present, every Entity within the payload body is reduced down to only contain the defined Entity members.
If an exclusionary list of Entity member names is present, the defined Entity members listed are removed from each Entity within the payload.
This operation allows querying the Temporal Evolution of Entities present in an NGSI-LD system. It is similar to the operation defined by clause 5.7.2 (Query Entities) with the addition of a temporal query.
A Context Consumer can retrieve the Temporal Evolution of a set of Entities which matches a specific query from an NGSI-LD system as shown in Figure 5.7.4.2‑1.
a) selector of Entity Types;b) list of Attribute names, including at least one non-system Attribute;c) NGSI-LD Query, including at least one non-system Attribute;d) NGSI-LD GeoQuery;e) local scope (see clause 5.5.13).
A JSON-LD array representing the matching entities as defined by clause 5.2.21 and selected according to the behaviour described by clause 5.7.4.4.
This operation allows retrieving a list of NGSI-LD entity types for which entity instances exist within the NGSI-LD system.
A Context Consumer can retrieve a list of NGSI-LD entity types from the system as shown in Figure 5.7.5.2‑1.
A JSON-LD object representing the list of available entity types, as mandated by clause 5.2.24.
This operation allows retrieving a list with a detailed representation of NGSI-LD entity types for which entity instances exist within the NGSI-LD system. The detailed representation includes the type name (as short name if available in the provided @context) and the attribute names that existing instances of this entity type have.
A Context Consumer can retrieve a list with a detailed representation of NGSI-LD entity types from the system as shown in Figure 5.7.6.2‑1.
A list of JSON-LD objects representing the details of available entity types as mandated by clause 5.2.25.
This operation allows retrieving detailed entity type information about a specified NGSI-LD entity type for which entity instances exist within the NGSI-LD system. The detailed representation includes the type name (as short name if available in the provided @context), the count of available entity instances and details about attributes that existing instances of this entity type have, including their name (as short name if available in the provided @context) and a list of types the attribute can have (e.g. Property, Relationship or GeoProperty).
A Context Consumer can retrieve a detailed representation of a specified NGSI-LD entity type from the system as shown in Figure 5.7.7.2‑1.
A JSON-LD object representing the details of the specified entity type as mandated by clause 5.2.26.
This operation allows retrieving a list of NGSI-LD attributes that belong to entity instances existing within the NGSI-LD system.
A Context Consumer can retrieve a list of NGSI-LD attributes from the system as shown in Figure 5.7.8.2‑1.
A JSON-LD object representing the list of available attributes as mandated by clause 5.2.27.
This operation allows retrieving a list with a detailed representation of NGSI-LD attributes that belong to entity instances existing within the NGSI-LD system. The detailed representation includes the attribute name (as short name if available in the provided @context) and the type names for which entity instances exist that have the respective attribute.
A context consumer can retrieve a list with a detailed representation of NGSI-LD attributes from the system as shown in Figure 5.7.9.2‑1.
A list of JSON-LD objects representing the details of available attributes as mandated by clause 5.2.28 (restricted to the elements id, type, attributeName and typeNames).
This operation allows retrieving detailed attribute information about a specified NGSI-LD attribute that belongs to entity instances existing within the NGSI-LD system. The detailed representation includes the attribute name (as short name if available in the provided @context) and the type names for which entity instances exist that have the respective attribute, a count of available attribute instances and a list of types the attribute can have (e.g. Property, Relationship or GeoProperty).
A context consumer can retrieve a list with a detailed representation of NGSI-LD attributes from the system as shown in Figure 5.7.10.2‑1.
A JSON-LD object representing the details of available attributes as mandated by clause 5.2.28.
Retrieving information about available types or attributes can be an expensive operation depending on the scale and architectural design decisions of the NGSI-LD system. This is in particular the case for retrieving the information about all available entity types and attributes related to all entity information available in an NGSI-LD system. Especially in the case of distributed architecture (clause 4.3.3) and federated architecture (clause 4.3.4) checking all entities can be so expensive that it can become practically infeasible.
Therefore, implementations may only take into account only information that is available or can be derived from a local datastore and the Context Registry, when implementing the retrieval of available entity types and attributes, as described in clauses 5.7.5, 5.7.6, 5.7.7, 5.7.8, 5.7.9 and 5.7.10. Context registrations do not always reflect which entity instances are actually available from a Context Source at a particular point in time, but only which entity instances are possibly available from a Context Source, thus in this case the information about available entity types and attributes is to be interpreted as "possibly available". Also, context registrations can have different granularities, i.e. they possibly only contain entity type or attribute information, and thus the provided information about available entity types and attributes is possibly incomplete as a result. In particular the attributeNames in the EntityType data structure (clause 5.2.25), the attributeDetails in the EntityTypeInfo data structure (clause 5.2.26), and the attributeTypes and typeNames in the Attribute data structure (clause 5.2.27) may be provided as empty arrays if the information is not included in the respective context registration. Implementations may also provide estimates for the entity count or attribute count instead of the accurate count.
As an alternative to relying on local information only, the request can be forwarded to all Context Sources which support the respective operation according to the Context Source Registration describing them. In this case the returned lists are merged with the local list of entity types before returning them. This approach is more expensive but leads to a more accurate result.
This operation allows creating a new subscription.
A Context Subscriber can create a subscription to receive context updates within an NGSI-LD system as shown in Figure 5.8.1.2‑1.
This operation allows updating an existing subscription.
A Context Subscriber can update an existing subscription within an NGSI-LD system as shown in Figure 5.8.2.2‑1.
None.
This operation allows retrieving an existing subscription.
A Context Subscriber can retrieve a specific subscription from an NGSI-LD system as shown in Figure 5.8.3.2‑1.
A JSON-LD object representing the subscription details as mandated by clause 5.2.12.
This operation allows querying existing Subscriptions.
A Context Consumer can query the existent Subscriptions from an NGSI-LD system as shown in Figure 5.8.4.2‑1.
A list (represented as a JSON array) of JSON-LD objects each one representing subscription details as mandated by clause 5.2.12.
This operation allows deleting an existing subscription.
A Context Subscriber can delete a subscription within an NGSI-LD system as shown in Figure 5.8.5.2‑1.
None.
A notification is a message that allows a subscriber to be aware of the changes in subscribed Entities. Implementations shall exhibit the following behaviour:
As described in clause 5.2.9, Context Source Registrations have a similar structure as Entities and are generally handled in the same way. However, there are some aspects that are specific to Registrations, in particular with respect to the handling of required properties. Thus, the operation descriptions for Registrations reference the respective operations for Entities and in addition specify any deviations and additions that are necessary for handling Context Source Registrations.
Context Source Registrations either contain information about Context Sources providing the latest information or about Context Sources providing temporal information, but not both. Context Sources that can provide both thus have to use two separate Context Source Registrations. If no temporal query is present, only Context Source Registrations for Context Sources providing latest information are returned, i.e. those which do not specify time intervals used for temporal queries. If a temporal query is present in a request for Context Source Registrations, only those Context Source Registrations that have a matching time interval are returned.
This operation allows registering a context source within an NGSI-LD system.
A Context Provider can register one or more context sources within an NGSI-LD system as shown in Figure 5.9.2.2‑1.
A data structure conforming to the CSourceRegistration data type as mandated by clause 5.2.9.
Implementations shall generally exhibit the behaviour described in clause 5.6.1.4, but instead of any type of entities only Context Source Registrations can be provided. Deviating from clause 5.6.1.4, implementations shall exhibit the following behaviour:
One registration identifier (id) of type string, representing a URI. Implementations shall ensure that registration identifiers are unique within an NGSI-LD system.
This operation allows updating a Context Source Registration in an NGSI-LD system.
A Context Provider can update a Context Source Registration in an NGSI-LD system as shown in Figure 5.9.3.2‑1.
None.
This operation allows deleting a Context Source Registration from an NGSI-LD system.
A context provider can delete a context source registration from an NGSI-LD system as shown in Figure 5.9.4.2‑1.
Registration identifier (URI) of the context source registration to be deleted (target registration).
None.
This operation allows retrieving a specific context source registration from an NGSI-LD system.
A context consumer or a context provider can retrieve a specific context source registration from an NGSI-LD system as shown in Figure 5.10.1.2‑1.
A JSON-LD object representing the target context source registration as mandated by clause 5.2.9.
This operation allows discovering context source registrations from an NGSI-LD system. The behaviour of the discovery of context source registrations differs significantly from the querying of entities as described in clause 5.7.2. The approach is that the client submits a query for entities as described in clause 5.7.2, but instead of receiving the Entity information, it receives a list of Context Source Registrations describing Context Sources that possibly have some of the requested Entity information. This means that the requested Entities and Attributes are matched against the 'information' property as described in clause 5.12.
If no temporal query is present, only Context Source Registrations for Context Sources providing latest information, i.e. without specified time intervals, are considered. If a temporal query is present only Context Source Registrations with matching time intervals, i.e. observationInterval or managementInterval, are considered.
A Context Consumer can discover context source registrations that may be able to provide (part of) the context information specified in the query from an NGSI-LD system as shown in Figure 5.10.2.2‑1.
It is not possible to retrieve a set of context source registrations related to entities by only specifying desired Entity identifiers, without further specifying restrictions on the entities' types or attributes, either explicitly, via lists of Entity types or of Attribute names, or implicitly, within an NGSI-LD query or geoquery.
A JSON-LD array of matching Context Source Registrations as defined by clause 5.2.9. Instead of the original Context Source Registration which may contain a lot of irrelevant information, implementations should return filtered Context Source Registrations, which only contain context source registration information relevant for the query, in particular only matching RegistrationInfo elements.
Context Source Registration Subscriptions in general work like context information subscriptions; however, instead of resulting in notifications with context information, the notifications contain Context Source Registrations describing Context Sources that can potentially provide the requested context information. If no temporal query is present, only Context Source Registrations for Context Sources providing latest information, i.e. without such time intervals, are considered. If a temporal query is present only Context Source Registrations with matching time intervals, i.e. observationInterval or managementInterval, are considered.
This operation allows creating a new Context Source Registration Subscription.
A Context Source Subscriber can subscribe to a new Context Source Registration as shown in Figure 5.11.2.2‑1.
One subscription identifier (id) of type string, representing a URI. Implementations shall ensure that subscription identifiers are unique within an NGSI-LD system.
This operation allows updating an existing Context Source Registration Subscription.
A context source subscriber can update a Context Source Registration Subscription as shown in Figure 5.11.3.2‑1.
None.
This operation allows retrieving an existing Context Source Registration Subscription.
A Context Source subscriber can retrieve a specific Context Source Registration Subscription as shown in Figure 5.11.4.2‑1.
A JSON-LD object representing the subscription details as mandated by clause 5.2.12.
This operation allows querying existing Context Source Registration Subscriptions.
A context source subscriber can query all existing Context Source Registration Subscriptions as shown in Figure 5.11.5.2‑1.
A list (represented as a JSON array) of JSON-LD objects each one representing subscription details as mandated by clause 5.2.12.
This operation allows deleting an existing Context Source Registration Subscription.
A context source subscriber can delete a Context Source Registration Subscription as shown in Figure 5.11.6.2‑1.
None.
A Context Source Notification is a message that allows a subscriber to be aware of the changes in the set of Context Source Registrations describing Context Sources that can potentially provide the requested context information. Implementations shall exhibit the behaviour described in clause 5.8.6 with the following exceptions:
When querying Context Source Registrations as described in clause 5.10.2 and subscribing to Context Source Registrations as described in clause 5.11.2, the Entities and/or Attributes specified in the request have to be matched against the set of Context Source Registrations, extracting the matching ones. This clause describes this matching.
The relevant specification information in the query for Context Source Registrations are the selector of Entity Types (if present), the list of Entity identifiers (if present), the id pattern (if present) and the list of Attribute names (if present). In the case of subscriptions to Context Source Registrations, it is the Entities as specified in the array of type EntitySelector in the Subscription, the watchedAttributes element of the Subscription and the attributes specified as part of the NotificationParams element of the Subscription. If the attributes in the NotificationParams element are empty or not present, the matching is done as if no attribute identifiers have been specified, otherwise the combination of the watchedAttributes and the attributes in the NotificationParams element are used as the specified attribute identifiers for the matching.
Even though the way relevant Entities are specified differs in queries and subscriptions, they consist of the same information, so for the purpose of this clause, the specification of Entity Types or Attributes refers to the relevant elements for matching, i.e. Entity Types, Entity identifiers, id pattern and Attribute names. A specification of Entity Types or Attributes shall contain at least one of:
A specification of Entity Types or Attributes matches a Context Source Registration if at least one of the RegistrationInfo elements in the information element matches. An Entity specification matches a RegistrationInfo if the following conditions hold:
An Entity specification consisting of selector of Entity Types, Entity identifiers and id pattern matches an EntityInfo element of the RegistrationInfo if the type selector matches the entity types in the EntityInfo element and one of the following conditions holds:
Attribute names match the combination of Properties and Relationships if one of the following conditions hold:
If the request that triggered the matching includes a datasetId parameter and the CSourceRegistration to be matched contains a datasetId element, the CSourceRegistration should only be considered matching, if both have at least one value in common. If only one of them specifies a datasetId, it is considered a match.
In the case of distributed operations (see clause 4.3.6.4), where a listing of all previously encountered Context Sources is supplied with the request, no registration shall match if the CSourceRegistration contextSourceAlias can be found within the listing of previously encountered Context Sources.
Note that distributed queries (see clause 4.3.6.7), can be supplied with an EntityMap (see clause 4.5.25) which lists all Entity ids successfully matched during a previous request. If the location of an EntityMap is passed into a subsequent request, the retrieved EntityMap shall be used in preference to the matching algorithm described above, provided that the EntityMap is valid and has not expired.
Context Brokers optionally (see clause 4.3.5) offer the capability to store and serve @contexts to clients. The stored @contexts may be managed by clients directly, via the APIs specified in clause 5.13. Clients can store custom user @contexts at the Context Broker, effectively using the Context Broker as a @context server.
Moreover, in order to optimize performance, brokers may automatically store and use the stored copies of common @contexts as a local cache, downloading them just once, thus avoiding fetching them over and over again at each NGSI-LD request. In order for the broker to understand if a needed @context is already in the local storage or not, the broker uses the URL, where the @context is originally hosted, as an identifier for it in the local storage. Consequently, the broker has no ability to cache @contexts that arrive to it as embedded parts within the NGSI-LD documents, since they are not uniquely (and implicitly) identified by any URL; Context Brokers only cache @contexts that are referred to by means of explicit URLs (either in the HTTP Link header or as URLs in the payload body). Thus, the recommended best-practice, in order to exploit caching, is that clients do not embed their user @contexts into their NGSI-LD documents; instead clients should explicitly host their user @contexts at their premises, or use the broker's capability to host user @contexts on their behalf.
When an external @context is stored, either explicitly upon a client's request or implicitly downloaded for caching purposes, the Context Broker generates a unique local @context identifier. The original @context's URL, if any, is stored alongside the generated local id. The local id is then used for subsequent managing operations on the specific @context, that are specified in clauses 5.13.2 to 5.13.5. Moreover, the broker tags the entry with the current timestamp, (createdAt) so that, subsequently, clients can check the timestamp before deciding whether to force a refresh of the stored copy of the @context. This is primarily intended as a means for clients to well-behave, thus avoiding triggering continuous refresh of a stored @context on the broker, for fear that it is not at the latest version.
Stored @contexts are flagged as one of three kinds: "Cached", "Hosted", "ImplicitlyCreated".
With this operation, a client can ask the broker to store the full content of a specific @context, by giving it to the broker.
A client can add an @context to be stored within an NGSI-LD system as shown in Figure 5.13.2.2‑1.
A JSON object that has a top-level field named @context, i.e. a JSON object representing a JSON-LD "local context". As specified in the JSON-LD specification [2], all extra information located outside of the @context subtree in the referenced object shall be discarded.
A new entry is created in the local storage and a locally unique identifier is generated for it. The JSON object representing the client-supplied @context and the current UTC time are stored alongside the locally unique identifier. That identifier shall be given back as a result in the output data. The entry is flagged as being of kind "Hosted".
The behaviour described in clause 5.5.4 about JSON and JSON-LD validation shall be applied in case of invalid @context.
The locally unique identifier that identifies the @context in the broker's internal storage.
With this operation a client can obtain a list of URLs that represent all of the @contexts stored in the local context store of the broker. Each URL can be used to download the corresponding @context, and, in case the @context's kind is "Cached", it shall be the original URL the broker downloaded the @context from.
In case a details flag is set to true, the client obtains a list of JSON objects, each representing information (metadata) about an @context currently stored by the broker. Each JSON object contains information about the @context's original URL (if any), its local identifier in the broker's storage, its kind ("Cached", "Hosted" and "ImplicitlyCreated"), its creation timestamp, its expiry date, and additional optional information.
A client can list all @contexts stored within an NGSI-LD system as shown in Figure 5.13.3.2‑1.
The broker shall provide a URL or JSON object for each @context currently stored in the internal broker's storage, that match the filter. If no filter is specified, all kinds are included.
A list of URLs, or a list of resulting JSON objects containing the following fields:
With this operation a client can obtain the full content of a specific @context (only for @contexts of kind "Hosted" or "ImplicitlyCreated"), which is currently stored in the broker's internal storage, or its metadata (for all kinds of stored @contexts).
A client can request the broker to serve a specific @context stored within the NGSI-LD system as shown in Figure 5.13.4.2‑1.
The full content of the indicated @context (or its metadata as specified in clause 5.13.3.5), or ResourceNotFound/OperationNotSupported errors.
With this operation, a client supplies a local identifier to the broker, indicating a stored @context, that the broker shall remove from its storage. For @contexts of kind "Cached" this can also be the original URL the broker downloaded the @context from. If the entry in the local storage that corresponds to the identifier is itself an array of @contexts, this operation will not delete the children, i.e. the @contexts in the array, but just the entry.
A client can request the broker to delete (and optionally reload) a specific @context stored within the NGSI-LD system as shown in Figure 5.13.5.2‑1.
None.
With this operation a client can obtain a cached EntityMap which is currently stored in the broker's internal storage, or memory.
A client can request the broker to retrieve a specific EntityMap within the NGSI-LD system as shown in Figure 5.14.1.2‑1.
A JSON-LD object representing the target EntityMap as mandated by clause 5.2.39.
This operation allows performing a partial update on an NGSI-LD EntityMap. A partial update only changes the elements provided in the EntityMap, leaving the rest as they are.
A client can request the broker to update an EntityMap which is currently stored in the broker's internal storage as shown in Figure 5.14.2.2‑1.
None
This operation allows deleting an NGSI-LD EntityMap.
A client can request the broker to completely delete an EntityMap held within the NGSI-LD system as shown in Figure 5.14.3.2‑1.
None.
With this operation, a client can obtain Context Source identity information which uniquely defines the Context Source itself. In the multi-tenancy use case (see clause 4.14), a client can obtain identify information about a specific Tenant within a Context Source.
A client can request the broker to retrieve identity information about a specific Context Source within the NGSI-LD system as shown in figure 5.15.1.2‑1.
None.
This clause defines the resources and operations of the NGSI-LD API. The NGSI-LD API is structured in terms of HTTP [3], [4] verbs, request and response payload bodies.
A non-normative OAS specification [i.12] of the referred HTTP binding can be found at [i.14].
All resource URIs of this API shall have the following root:
The apiRoot includes the scheme ("http" or "https"), host and optional port, and an optional prefix string. The API shall support HTTP over TLS (also known as HTTPS – see IETF RFC 2818 [18]). TLS version 1.2 as defined by IETF RFC 5246 [19] shall be supported. HTTP without TLS is not recommended.
The apiName shall be set to "ngsi-ld" and the apiVersion shall be set to "v1" for the present document.
All resource URIs are defined relative to the above root URI. The structure of the resources under the root URI is shown in Figure 6.2‑1 and methods defined on them are shown in Table 6.2‑1.
Resource Name
|
Resource URI
|
HTTP Method
|
Meaning
|
Clauses
|
---|---|---|---|---|
Entity List
|
/entities/
|
POST
|
Entity creation
|
5.6.1; 6.4.3.1
|
GET
|
Query entities
|
5.7.2; 6.4.3.2
|
||
Entity by id
|
/entities/{entityId}
|
GET
|
Entity retrieval by id
|
5.7.1; 6.5.3.1
|
DELETE
|
Entity deletion by id
|
5.6.6; 6.5.3.2
|
||
PATCH
|
Entity merge by id
|
5.6.17; 6.5.3.4
|
||
PUT
|
Entity replacement by id
|
5.6.18; 6.5.3.3
|
||
Attribute List
|
/entities/{entityId}/attrs/
|
POST
|
Append Attributes to Entity
|
5.6.3; 6.6.3.1
|
PATCH
|
Update Attributes of an Entity
|
5.6.2; 6.6.3.2
|
||
Attribute by id
|
/entities/{entityId}/attrs/{attrId}
|
PATCH
|
Partial Attribute update
|
5.6.4; 6.7.3.1
|
DELETE
|
Attribute deletion
|
5.6.5; 6.7.3.2
|
||
PUT
|
Attribute replacement
|
5.6.19; 6.7.3.3
|
||
Subscriptions List
|
/subscriptions/
|
POST
|
Create Subscription
|
5.8.1; 6.10.3.1
|
GET
|
Retrieve list of Subscriptions
|
5.8.4; 6.10.3.2
|
||
Subscription by Id
|
/subscriptions/{subscriptionId}
|
GET
|
Subscription retrieval by id
|
5.8.3; 6.11.3.1
|
PATCH
|
Subscription update by id
|
5.8.2; 6.11.3.2
|
||
DELETE
|
Subscription deletion by id
|
5.8.5; 6.11.3.3
|
||
Entity Types
|
/types/
|
GET
|
Retrieve available entity types
|
5.7.5 and 5.7.6; 6.25.3.1
|
Entity Type
|
/types/{type}
|
GET
|
Details about available entity type
|
5.7.7; 6.26.3.1
|
Attributes
|
/attributes/
|
GET
|
Available attributes
|
5.7.8 and 5.7.9; 6.27.3.1
|
Attribute
|
/attributes/{attrId}
|
GET
|
Details about available attribute
|
5.7.10; 6.28.3.1
|
Context source registration list
|
/csourceRegistrations/
|
POST
|
Csource registration creation
|
5.9.2; 6.8.3.1
|
GET
|
Discover Csource registrations
|
5.10.2; 6.8.3.2
|
||
Context source registration by Id
|
/csourceRegistrations/{registrationId}
|
GET
|
Csource registration retrieval by id
|
5.10.1; 6.9.3.1
|
PATCH
|
Csource registration update by id
|
5.9.3; 6.9.3.2
|
||
DELETE
|
Csource registration deletion by id
|
5.9.4; 6.9.3.3
|
||
Context source registration subscription list
|
/csourceSubscriptions/
|
POST
|
Create subscription to Csource registration
|
5.11.2; 6.12.3.1
|
GET
|
Retrieval of list of subscription to Csource registration
|
5.11.5; 6.12.3.2
|
||
Context source registration subscription by Id
|
/csourceSubscriptions/{subscriptionId}
|
GET
|
Csource registration subscription retrieval by id
|
5.11.4; 6.13.3.1
|
PATCH
|
Csource registration subscription update by id
|
5.11.3; 6.13.3.2
|
||
DELETE
|
Csource registration subscription deletion by id
|
5.11.6; 6.13.3.3
|
||
Entity Operations. Create
|
/entityOperations/create
|
POST
|
Batch Entity creation
|
5.6.7; 6.14.3.1
|
Entity Operations. Upsert
|
/entityOperations/upsert
|
POST
|
Batch Entity creation or update (upsert)
|
5.6.8; 6.15.3.1
|
Entity Operations. Update
|
/entityOperations/update
|
POST
|
Batch Entity update
|
5.6.9; 6.16.3.1
|
Entity Operations. Delete
|
/entityOperations/delete
|
POST
|
Batch Entity deletion
|
5.6.10; 6.17.3.1
|
Entity Operations. Query
|
/entityOperations/query
|
POST
|
Query entities based on POST
|
5.7.2; 6.23.3.1
|
Entity Operations.
Merge
|
/entityOperations/merge
|
POST
|
Batch Entity merge
|
5.6.20; 6.31.3.1
|
Temporal Evolution of Entities
|
/temporal/entities/
|
POST
|
Temporal Evolution of an Entity creation
|
5.6.11; 6.18.3.1
|
GET
|
Query Temporal Evolution of Entities
|
5.7.4; 6.18.3.2
|
||
Temporal Evolution of an Entity by id
|
/temporal/entities/{entityId}
|
GET
|
Temporal Evolution of an Entity retrieval by id
|
5.7.3; 6.19.3.1
|
DELETE
|
Temporal Evolution of an Entity deletion by id
|
5.6.16; 6.18.3.2
|
||
Temporal Representation of Attribute List
|
/temporal/entities/{entityId}/attrs/
|
POST
|
Temporal Evolution of Attribute of an Entity instance addition
|
5.6.12; 6.20.3.1
|
Temporal Representation of Attribute by id
|
/temporal/entities/{entityId}/attrs/{attrId}
|
DELETE
|
Attribute from Temporal Evolution of an Entity deletion
|
5.6.13; 6.21.3.1
|
Temporal Representation of Attribute Instance by id
|
/temporal/entities/{entityId}/attrs/{attrId} /{instanceId}
|
PATCH
|
Attribute Instance from Temporal Evolution of an Entity update by
instance id
|
5.6.14; 6.22.3.1
|
DELETE
|
Attribute Instance from Temporal Evolution of an Entity deletion by
instance id
|
5.6.15; 6.22.3.2
|
||
Temporal Query Operation
|
/temporal/entityOperations/query
|
POST
|
Query Temporal Evolution of Entities based on POST
|
5.7.4; 6.24.3.1
|
Add and List @context
|
/jsonldContexts
|
POST
|
Add a user @context to the internal cache
|
5.13.2; 6.29.3.1
|
GET
|
List all cached @contexts
|
5.13.3; 6.29.3.2
|
||
Serve, Delete and Reload @context
|
/jsonldContexts/{contextId}
|
GET
|
Serve one specific user @context
|
5.13.4; 6.30.3.1
|
DELETE
|
Delete one specific @context from internal cache, possibly re-inserting
a freshly downloaded copy of it
|
5.13.5; 6.30.3.2
|
||
Retrieve, Update and Delete Entity Maps
|
/entityMaps/{entityMapId}
|
GET
|
EntityMap Retrieval by id
|
5.14.1; 6.32.3.1
|
PATCH
|
EntityMap Update by id
|
5.14.2; 6.32.3.2
|
||
DELETE
|
EntityMap Deletion by id
|
5.14.3; 6.32.3.3
|
||
Retrieve Context Source Identity Information
|
/info/sourceIdentity
|
GET
|
Context Source Identity Retrieval
|
5.15.1; 6.33.3.1
|
This clause extends the API common behaviours to the particularities of the HTTP REST binding. For each operation implementations shall exhibit the common behaviours as specified by clause 5.5 and the behaviours defined by the present clause.
This clause associates API error types (which shall be contained in the response payload body) defined by clause 5.5.2 with HTTP status codes as shown in Table 6.3.2‑1.
Error Type
|
HTTP status
|
---|---|
https://uri.etsi.org/ngsi-ld/errors/InvalidRequest
|
400
|
https://uri.etsi.org/ngsi-ld/errors/BadRequestData
|
400
|
https://uri.etsi.org/ngsi-ld/errors/AlreadyExists
|
409
|
https://uri.etsi.org/ngsi-ld/errors/OperationNotSupported
|
422
|
https://uri.etsi.org/ngsi-ld/errors/ResourceNotFound
|
404
|
https://uri.etsi.org/ngsi-ld/errors/InternalError
|
500
|
https://uri.etsi.org/ngsi-ld/errors/TooComplexQuery
|
403
|
https://uri.etsi.org/ngsi-ld/errors/TooManyResults
|
403
|
https://uri.etsi.org/ngsi-ld/errors/LdContextNotAvailable
|
504
|
https://uri.etsi.org/ngsi-ld/errors/NoMultiTenantSupport
|
501
|
https://uri.etsi.org/ngsi-ld/errors/NonexistentTenant
|
404
|
In addition, implementations shall support the standard specific errors of HTTP bindings, such as the following:
When an API operation results in an error, implementations shall return an HTTP response as follows:
For POST, PATCH and PUT HTTP requests implementations shall check the following preconditions:
For PATCH HTTP requests "application/merge-patch+json" is allowed as Content-Type, as mandated by IETF RFC 7396 [16]. Implementations shall interpret such MIME type as equivalent to "application/json".
For GET HTTP requests implementations shall check the following preconditions:
The order of the list above is significant. If the Accept header can be expanded to more than one of the options of the list, the first one of the list shall be selected, unless amended by the HTTP Accept header processing rules, e.g. the presence of a "q" parameter indicating a relative weight, (as mandated by IETF RFC 7231 [3], section 5.3.2) require otherwise.
If the Accept header is not present, "application/json" shall be assumed.
If an incoming HTTP request does not meet the preconditions stated above, an HTTP error response of type InvalidRequest shall be returned, with the following exceptions:
Notwithstanding the above, if the Accept Header is set to "application/geo+json":
In the HTTP REST binding, implementations shall resolve the JSON-LD @context associated to an incoming HTTP request as follows:
In summary, from a developer's perspective, for POST, PATCH and PUT operations, if MIME type is "application/ld+json", then the associated @context shall be provided only as part of the request payload body. Likewise, if MIME type is "application/json", then the associated @context shall be provided only by using the JSON-LD Link header. No mixes are allowed, i.e. mixing options shall result in HTTP response errors. Implementations should provide descriptive error messages when these situations arise.
In contrast, GET and DELETE operations always take their input @context from the JSON-LD Link Header.
Implementations shall honour the Accept header provided by HTTP requests as mandated by clause 6.3.4:
Operations that result in an error that return a payload shall always respond with MIME type "application/json", regardless of the Accept header. It is assumed that if a client application understands any of the supported MIME types, the application shall understand "application/json" errors.
Operations where the response payload body is not present such as successful POST, or PATCH or PUT operations and all error responses, do not include the Link header in the response. Only Fully Qualified Names shall be used in the payload body of error responses, as there is no context present.
No Content-Length HTTP header shall be present if the response code is 204.
For HTTP GET operations performed over the resource /entities and all of its sub-resources, Context Broker implementations shall support the parameter specified in Table 6.3.7‑1, which specifies all possible supported representations formats.
In contrast, at a minimum, registered Context Source implementations shall support the normalized representation of Entities as default. When a registered Context Source is unable to support additional representations, a 501 Not Implemented Error shall be raised.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
format
|
String
|
0..1
|
When its value is "normalized", a
normalized representation of Entities shall be provided as defined by clause 4.5.1, with
Attributes returned in the normalized representation as defined in
clauses 4.5.2.2, 4.5.3.2, 4.5.18.2 and 4.5.20.2.
When its value is "concise", a concise
lossless representation of Entities shall be provided as defined by clause 4.5.1. with
Attributes returned in the concise representation as defined in clauses
4.5.2.3, 4.5.3.3, 4.5.18.3 and 4.5.20.3. In this case the
Context Broker will return data in
the most concise lossless representation possible, for example removing
all Attribute type members.
When its value is "simplified" (or its synonym "keyValues"). a simplified representation of
Entities shall be provided as defined by clause 4.5.4
If the Accept Header is set to "application/geo+json" the response will be in
simplified GeoJSON format as defined by clause
4.5.17.
|
options
|
Comma separated list of strings
|
0..1
|
An alternative mechanism to include the format parameter.
Deprecated
When its value includes the keyword "normalized", a normalized representation of
Entities shall be provided as defined by clause 4.5.1, with
Attributes returned in the normalized representation as defined in
clauses 4.5.2.2, 4.5.3.2, 4.5.18.2 and 4.5.20.2.
When its value includes the keyword "concise", a concise lossless representation of
Entities shall be provided as defined by clause 4.5.1. with
Attributes returned in the concise representation as defined in clauses
4.5.2.3, 4.5.3.3, 4.5.18.3 and 4.5.20.3. In this case the
Context Broker will return data in
the most concise lossless representation possible, for example removing
all Attribute type members.
When its value includes the keyword "simplified" (or its synonym "keyValues"). a simplified representation of
Entities shall be provided as defined by clause 4.5.4.
If the Accept Header is set to "application/geo+json" the response will be in
simplified GeoJSON format as defined by clause
4.5.17.
|
In the HTTP binding a notification that is triggered by a subscription shall be sent by issuing an HTTP POST request targeted to the value of notification.endpoint.uri member of the subscription structure (defined by clauses 5.2.12, 5.2.14 and 5.2.15). For the HTTP binding, the protocol part of the endpoint URI is http or https. In case the optional MQTT notification binding (clause 7) is supported, the protocol part of the endpoint URI can also be mqtt or mqtts. The MIME type associated to the POST request shall be "application/json" by default. However, this can be changed to "application/ld+json", or "application/geo+json" by means of the endpoint.accept member.
If the target MIME type is "application/json" then the HTTP notification request shall include a Link header with a reference to the corresponding JSON-LD @context as mandated by the JSON-LD specification [2], section 6.2 (to the default JSON-LD @context if none available).
If the optional array (of KeyValuePair type, as defined by clause 5.2.22) notification.endpoint.receiverInfo of the subscription is present, then a new custom HTTP header for each member named "key" of the key, value pairs that make up the array shall be generated and included in the HTTP POST's list of headers. The content of each custom header shall be set equal to the content of the corresponding "value" member of the KeyValuePair. "Key" and "value" members shall adhere to IETF RFC 7230 [27] Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing definitions concerning HTTP headers.
If the target MIME type is "application/geo+json" and the notification.endpoint.receiverInfo member contains a key "Prefer" whose value is set to "body=json" then the HTTP notification request shall include a Link header with a reference to the corresponding JSON-LD @context as mandated by the JSON-LD specification [2], section 6.2 (to the default JSON-LD @context if none available).
If the target MIME type is "application/geo+json" and the notification.endpoint.receiverInfo contains a key "Prefer" whose value is set to "body=ld+json" or the "Prefer" key is omitted or notification.endpoint.receiverInfo does not exist, then the HTTP notification request includes an @context element in the payload body.
In the HTTP binding a csource notification that is triggered by a csource subscription shall be sent by issuing an HTTP POST request targeted to the value of notification.endpoint.uri member of the csource subscription structure (defined by clauses 5.2.12 and 5.2.14). The MIME type associated to the POST request shall be "application/json" by default. However, this can be changed to "application/ld+json" by means of the endpoint.accept member.
If the target MIME type is "application/json" then the HTTP notification request shall include a Link header with a reference to the corresponding JSON-LD @context as mandated by the JSON-LD specification [2], section 6.2 (to the default JSON-LD @context if none available).
If the optional array (of KeyValuePair type, as defined by clause 5.2.22) notification.endpoint.receiverInfo of the subscription is present, then a new custom HTTP Header for each member named "key" of the key, value pairs that make up the array shall be generated and included in the HTTP POST's list of headers. The content of each custom header shall be set equal the content of the corresponding "value" member of the KeyValuePair. "Key" and "value" members shall adhere to IETF RFC 7230 [27] Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing definitions concerning HTTP headers.
For HTTP operations corresponding to the operations listed in clause 4.12 (see Table 6.2‑1 for a list of HTTP operations with their corresponding clauses), implementations shall support the HTTP query parameter specified in Table 6.3.10‑1.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
limit
|
Integer
|
0..1
|
Only values greater or equal to 0.
It defines the limit to the number of NGSI-LD Elements that shall be
retrieved at a maximum as mandated by clause 5.5.9. The value 0 is only
allowed in combination with the count URI parameter.
|
This clause defines the specific HTTP binding mechanisms that shall be used in conjunction with the behaviours defined by clause 5.5.9. Particularly, to flag the existence of related pages that could be retrieved when dealing with query operations involving pagination, NGSI-LD Systems implementing the HTTP binding shall use the HTTP Link header field as mandated by IETF RFC 8288 [7], clause 3, as follows:
Temporal representation of resources adds an additional dimension to the pagination. Depending on the requested time range, the response will contain multiple instances of the requested Attribute, and therefore an additional pagination mechanism for those temporal representations is required, in order to limit the time range of the response. If no limits are specified, a default limit is enforced, depending on implementation specific configurations. For HTTP operations on Temporal Evolutionof Entities, implementations shall use the Partial Content Response (206) as specified by IETF RFC 7233 [31], clause 4.1, if the implementation is not able to respond with the full representation at once. In this case, for requests where the parameter lastN is present, pagination shall happen "backwards" (from the most recent to the least recent timestamp in the requested time range). For requests without the parameter lastN, pagination shall happen "forwards" (from the least recent to the most recent timestamp in the requested time range).
This is achieved by including the "Content-Range" header field with the following contents:
For HTTP GET operations performed over the resources /entities/, /subscriptions/, /csourceRegistrations/, /csourceSubscriptions/ and all of its sub-resources, implementations shall support the parameter specified in Table 6.3.11‑1. Implementations shall not raise an error if they do not hold system generated temporal attributes.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
options
|
Comma separated list of strings
|
0..1
|
When its value includes the keyword "sysAttrs", a representation of NGSI-LD
Elements shall be provided so that the system generated temporal
attributes createdAt,
modifiedAt are included in
the response payload body where known. In the case of temporal
representations, also the system generated temporal attribute deletedAt is included, if the NGSI-LD
Element has been deleted.
|
For HTTP GET operations performed over the resource /temporal/entities/ and all of its sub-resources, implementations shall support the parameter specified in Table 6.3.12‑1.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
format
|
String
|
0..1
|
It shall be one of: "temporalValues",
"aggregatedValues".
When its value is "temporalValues", a
simplified temporal representation of entities shall be provided as
defined by clause 4.5.8.
When its value is "aggregatedValues", an
aggregated temporal representation of entities shall be provided as
defined by clause
4.5.19.
|
options
|
Comma separated list of strings
|
0..1
|
An alternative mechanism to include the format parameter.
Deprecated
When its value includes the keyword "temporalValues", a simplified temporal
representation of entities shall be provided as defined by clause 4.5.8.
When its value includes the keyword "aggregatedValues", an aggregated temporal
representation of entities shall be provided as defined by clause
4.5.19.
Only one of the two keywords can be present in the values of the
parameter.
If both format and options are present, the value of the
format parameter shall take
precedence.
|
This clause implements the behaviour described in clause 4.13, in case of HTTP binding.
For HTTP operations corresponding to the operations listed in clause 4.12 (see Table 6.2‑1 for a list of HTTP operations with their corresponding clauses), implementations shall support the HTTP query parameter specified in Table 6.3.13‑1.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
count
|
Boolean
|
0..1
|
If true, then a special HTTP
header (NGSILD-Results-Count) is set in the response. Regardless of how
many entities are actually returned (maybe due to the limit URI parameter), the total number
of matching results (e.g. number of Entities) is returned.
|
This clause defines the specific HTTP binding mechanisms that can be useful to plan the limit and offset URI parameters for pagination, thus allowing to convey an overview of the number of entities in a system.
To get only the count itself, and no entities, the URI parameter limit may have the value "0", and an empty array shall be returned as payload body.
Setting the URI parameter limit to zero without including the count URI parameter will result in a 400 BadRequest error.
If the system implementing the NGSI-LD API supports multi-tenancy as described in clause 4.14 and clause 5.5.10, the Tenant, to which the NGSI-LD HTTP operation is targeted, is specified as the HTTP header "NGSILD-Tenant", whose value is the String identifying the Tenant. In case the target Tenant is the default Tenant, the HTTP header is omitted. If the HTTP header "NGSILD-Tenant" is present in the HTTP request, it shall also be present in HTTP response. This also applies to HTTP notifications sent as a result of subscriptions with an "NGSILD-Tenant" HTTP header (clause 6.3.8).
For HTTP GET operations performed over the resource /entities and /entities/{entity-id}, if the GeoJSON Accept header ("application/geo+json") is present, implementations shall render the entities of the response in the GeoJSON format, as described in clause 5.2.29.
For GeoJSON representations, a GeoProperty may be selected as the geolocation to be used as the geometry within the GeoJSON payload. If no geometryProperty parameter is specified then the location GeoProperty of the Entity is used.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
geometryProperty
|
String
|
0..1
|
If not present, "location" is used.
|
datasetId
|
String
|
0..1
|
Shall be valid URI. If the referenced GeoProperty consists of an attribute
with multiple instances the datasetId specifies which instance of
the value is to be selected. If not present, the default instance is
used.
|
Implementations shall comply with the Expires header field (section 5.3 of IETF RFC 7234 [30]) or a max-age or s-maxage response directive of Cache-Control header field (section 5.2.2 of IETF RFC 7234 [30]) that may be present in the downloaded @context. This means that implementations shall periodically invalidate the "Cached" @contexts according to the headers mentioned above. Since origin servers do not always provide explicit expiration times, implementations should assign a heuristic (for instance according to IETF RFC 7234 [30] section 4.2.2) expiration time when an explicit time is not specified.
The caching of response data received from forwarded HTTP GET requests is optionally supported by Context Brokers. For HTTP GET operations performed over the resources /entities and /entities/{entity-id}, where a Context Source Registration matches the request and a previous forwarded response has been cached and a subsequent request occurs before the Context Source Registration cacheDuration (as defined in Table 5.2.34‑1) has been reached, the result may incorporate data cached from a previous response. To indicate that data from a cache has been included in the response, the HTTP header "NGSILD-Warning" shall be included. The value shall match the IANA Warning Code [32] 110 – Response is Stale.
"NGSILD-Warning" HTTP headers shall also be used to indicate instances of abnormal behaviour for distributed HTTP GET operations performed over the resources /entities and /entities/{entity-id}.
IANA Warning Code
|
Remarks
|
---|---|
110 – Response is Stale
|
No request was made to a specified registration endpoint – data from a
cached value has been reused and it has been incorporated into the
response.
|
111 – Revalidation Failed
|
Although data was received from the registration endpoint within the
specified timeout period, the payload of the response was invalid. This
could occur if the payload was corrupted or a non-NGSI payload was
received.
|
199 – Miscellaneous Warning
|
No response was received from the registration endpoint within the
specified timeout period.
|
299 – Miscellaneous Persistent Warning
|
An error response (such as 403 – Forbidden) was
received from the registration endpoint within the specified timeout
period. This could occur if the Context
Broker has insufficient access rights to retrieve the data.
|
For distributed HTTP GET operations, registered context sources should always respond with a valid NGSI-LD payload. The Context Broker shall successfully parse this data and invalid non-NGSI-LD payloads shall be rejected and not incorporated into the overall response. It should be noted that a registration endpoint responding with no data and the HTTP status code 404 – Not Found should not be considered as abnormal behaviour for distributed operations.
For all other operations, which correspond to HTTP Unsafe methods, the error response should be as informative as possible.
In the case of an exclusive or redirect registration, where all of the data is held outside of the Context Broker and held in a single registered source:
In the case of an inclusive or redirect registration, where an entity is distributed over multiple equally valid endpoints, but when updating the state of the distributed entity, an error response is returned from one or more registered sources:
In the case of an auxiliary registration HTTP unsafe methods are not supported.
Whenever failures or timeouts occur, Context Brokers may optionally decline to make subsequent requests to the same registration endpoint until the cooldown period (as defined in Table 5.2.9‑1) has been reached.
The parameter described in this clause limits the execution of an operation to a local Context Source or Context Broker (clause 5.5.13). It amends the matching Context Source Registrations behaviour as described in clause 5.12, in the case of the HTTP binding in order to avoid cascading distributed operations (see clause 4.3.6.4). For all operations the resources /entities/, /types/, /attributes/, /entityOperations/, /temporal/entities/ and temporal/entityOperations/ (and their respective child resources) implementations shall support the HTTP query parameter specified in Table 6.3.18‑1. The Registry API operations are always local and thus are not included here.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
local
|
Boolean
|
0..1
|
If local=true then no Context Source Registrations shall be
considered as matching to avoid cascading distributed operations (see clause 4.3.6.4)
|
Furthermore, to avoid infinite loops, for all operations, the resources /entities/, /types/, /attributes/, /subscriptions/, /csourceSubscriptions/, /entityOperations/, /temporal/entities/ and temporal/entityOperations/ implementations shall fully support the HTTP Via Header (IETF RFC 7230 [26]) as specified in table 6.3.18‑2. AnyContext Broker implementation passing a distributed operation request onward to another Context Source shall send an additional field value on the Via header field using its own unique Context Source hostAlias (see clause 5.2.40) as the pseudonym.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
Via
|
String as defined in IETF RFC 7230 [26]
|
0..1
|
If present, the listing of previously encountered Context Sources supplied is used when
determining matching registrations
|
As specified in clauses 4.3.6.5 and 4.3.6.6, extra information to be provided when contacting a Context Source can be specified in the optional array (of KeyValuePair type, as defined by clause 5.2.22) contextSourceInfo of the CSourceRegistration.
In the HTTP binding, if the "jsonldContext" key is present, the URL value is placed in an HTTP Link Header as described by the JSON-LD specification [2], section 6.2 and, whenever a payload body is present in the request, the HTTP Content-Type Header is set to "application/json". For all other keys, a new custom HTTP header is added for each member named "key" of the key-value pairs that make up the array shall be generated and included in the HTTP list of headers. The content of each custom header shall be set equal to the content of the corresponding "value" member of the KeyValuePair, unless the special value "urn:ngsi-ld:request" has been set, in which case the value is to be taken from the triggering request, if present there. "Key" and "value" members shall adhere to IETF RFC 7230 [27] Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing definitions concerning HTTP headers.
Headers derived from other elements of the CSourceRegistration, e.g. "NGSILD-Tenant", take precedence and cannot be overridden using contextSourceInfo. The same applies for headers generally set by HTTP itself, e.g. Content-length.
If an HTTP request for an operation contains parameters that are incompatible with the operation, or it contains values of the options parameter that are not supported by the operation, an HTTP error response of type InvalidRequest should be returned.
This resource represents the entities known to an NGSI-LD system.
Resource URI:
This method is bound to the operation "Create Entity" and shall exhibit the behaviour defined by clause 5.6.1, taking the entity to be created from the HTTP request payload body. Figure 6.4.3.1‑1 shows the Create Entity interaction and Table 6.4.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Entity
|
1
|
Payload body in the request contains a JSON-LD object which represents
the entity that is to be created.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
201 Created
|
The HTTP response shall include a "Location" HTTP header that contains the
resource URI of the created entity resource.
|
|
BatchOperationResult
|
1
|
207 Multi-Status
|
The HTTP response shall include a "Location" HTTP header that contains the
resource URI of the created entity resource.
If the entity input data matches to a registration, the relevant parts
of the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a BatchOperationResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10]) |
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail member should convey
more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10]) |
1
|
409 Conflict
|
It is used to indicate that the entity or an exclusive or redirect
registration defining the entity already exists, see clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10]) |
1
|
422 Unprocessable Entity
|
It is used to indicate that the operation is not available, see clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This method is associated to the operation "Query Entities" and shall exhibit the behaviour defined by clause 5.7.2, providing entities as part of the HTTP response payload body. In addition to this method, an alternative way to perform "Query Entities" operations via POST is defined in clause 6.23. Figure 6.4.3.2‑1 shows the query entities interaction.
The query parameters that shall be supported by implementations are those defined in Table 6.4.3.2‑1, the request headers that shall be supported by implementations are those defined in Table 6.4.3.2‑2 and Table 6.4.3.2‑3 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
id
|
Comma separated list of strings
|
0..1
|
Each String shall be a valid URI. List of entity ids to be retrieved. |
type
|
String
|
0..1
At least one among: type, attrs, q, or georel shall be present,
unless the execution of the request is limited to local scope (see clause 5.5.13).
|
Selection of Entity Types as per clause 4.17. “*” is also allowed as a value
and local is
implicitly set to true and
shall not be explicitly set tofalse.
|
idPattern
|
Regular expression as defined by [11]
|
0..1
|
Regular expression that shall be matched by entity ids.
|
attrs
|
Comma separated list of strings
|
0..1
At least one among: type, attrs, q, or georel shall be present,
unless the execution of the request is limited to local scope (see clause 5.5.13).
|
A synonym for a combination of the pick
andq parameters.
Deprecated
Each String is an Attribute (Property or Relationship) name. List of Attributes to be matched by the Entities and also included in the response, i.e. only Entities that contain at least one of the Attributes in attrs are to be included in the response, and only the Attributes listed in attrs are to be included in each of the Entities of the response. |
pick
|
Comma separated list of strings
|
0..1
|
Each String is an Entity member ("id", "type", "scope” or a projected Attribute name)
When defined, every Entity within the payload body is reduced down to
only contain the listed Entity members.
|
omit
|
Comma separated list of strings
|
0..1
|
Each String is an Entity member ("id", "type", "scope” or a projected Attribute name)
When defined, the listed Entity members are removed from each Entity
within the payload
|
q
|
String
|
0..1
At least one among: type, attrs, q, or georel shall be present,
unless the execution of the request is limited to local scope (see clause 5.5.13).
|
Query as per clause 4.9.
|
expandValues
|
Comma separated list of strings
|
0..1
|
Each String is an Attribute (Property or Relationship) name. List of Attributes whose values shall be expanded into URIs according to the supplied @context prior to executing a query. It is part of query |
csf
|
String
|
0..1
|
Context Source filter as per clause 4.9.
|
geometry
|
String
|
0..1
It shall be 1 if georel or coordinates are present.
At least one among: type, attrs, q, or geometry shall be present,
unless the execution of the request is limited to local scope (see clause 5.5.13).
|
Geometry as per clause 4.10.
It is part of geoquery.
|
georel
|
String
|
0..1
It shall be 1 if geometry or
coordinates are present.
|
Geo relationship as per clause
4.10. It is part of geoquery.
|
coordinates
|
String
|
0..1
It shall be one if geometry
or georel are present.
|
Coordinates serialized as a string as per clause 4.10. It is part of
geoquery.
|
geoproperty
|
String
|
0..1
It shall be ignored unless a geoquery is present.
|
It represents the name of the Property that contains the
geospatial data that will be used to resolve the geoquery. By default,
will be location (see clause 4.7).
|
geometryProperty
|
String
|
0..1
|
It represents a Property name.
In the case of GeoJSON Entity representation, this parameter indicates
which GeoProperty to use for the toplevel geometry field.
|
lang
|
String
|
0..1
|
It represents the preferred natural language of the response.
It is used to reduce languageMaps to a string or string
array property in a single preferred language.
|
scopeQ
|
String
|
0..1
|
Scope query (see clause
4.19).
|
containedBy
|
Comma separated list of URIs
|
0..1
|
List of entity ids which have previously been encountered whilst
retrieving the Entity Graph. Only applicable if joinLevel is present
|
join
|
String
|
0..1
|
The type of Linked Entity retrieval
to apply (see clause
4.5.23). Allowed values: "flat",
"inline", "@none"
|
joinLevel
|
Positive Integer
|
0..1
|
Depth of Linked Entity retrieval to
apply.
Only applicable if join
parameter is present
|
datasetId
|
Comma separated list of strings
|
0..1
|
Shall be valid URIs, "@none" for including the default Attribute
instances. Specifies the datasetIds of the Attribute instances to be
selected for each matched Attribute as per clause 4.5.5.
|
entityMap
|
Boolean
|
0..1
|
If true, the location of the
EntityMap used in the operation is returned in the response
|
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
NGSILD-EntityMap
|
URI
|
0..1
|
If present, the EntityMap supplied is used for determining the set of
Entities requested during the query operation. The location of the
EntityMap used in the query operation is returned in the response
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
Entity[]
|
1
|
200 OK
|
A response body containing the query result as a list of entities,
unless the Accept Header indicates that the Entities are to be rendered
as GeoJSON.
If an EntityMap has been requested, the HTTP response shall include an
"NGSILD-EntityMap" HTTP header that contains the resource URI of
the EntityMap resource used in the operation.
|
|
GeoJSON FeatureCollection
|
1
|
200 OK
|
If the Accept Header indicates that the Entities are to be rendered as
GeoJSON, a response body containing the query result as GeoJSON
FeatureCollection is returned.
If an EntityMap has been requested, the HTTP response shall include an
"NGSILD-EntityMap" HTTP header that contains the resource URI of
the EntityMap resource used in the operation.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
501 Not Implemented
|
It is used by Registered Context
Sources to indicate that the data format of the request is
unsupported see clause
6.3.7.
|
This resource represents an entity known to an NGSI-LD system.
Resource URI:
Resource URI variables for this resource are defined in Table 6.5.2‑1.
Name
|
Definition
|
---|---|
entityId
|
Id (URI) of the entity to be retrieved
|
This method is associated to the operation "Retrieve Entity" and shall exhibit the behaviour defined by clause 5.7.1. The Entity identifier is the value of the resource URI variable "entityId". Figure 6.5.3.1‑1 shows the retrieve entity interaction.
The query parameters that shall be supported are those defined in table 6.5.3.1‑1, the request headers that shall be supported by implementations are those defined in table 6.5.3.1‑2 and table 6.5.3.1‑3 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
attrs
|
Comma separated list of strings
|
0..1
|
A synonym for a combination of the pick
andq parameters.
Deprecated
Each String is an Attribute (Property or Relationship) name. List of Attributes to be matched by the Entity and included in the response. If the Entity does not have any of the Attributes in attrs, then a 404 Not Found shall be retrieved. If attrs is not specified, no matching is performed and all Attributes related to the Entity shall be retrieved. |
pick
|
Comma separated list of strings
|
0..1
|
Each String is an Entity member ("id", "type", "scope” or a projected Attribute name). When
defined, every Entity within the payload body is reduced down to only
contain the listed Entity members.
|
omit
|
Comma separated list of strings
|
0..1
|
Each String is an Entity member ("id", "type", "scope” or a projected Attribute name). When
defined, the listed Entity members are removed from each Entity within
the payload
|
type
|
String
|
0..1
|
Selection of Entity Types as per clause 4.17
|
geometryProperty
|
String
|
0..1
|
It represents a GeoProperty name.
In the case of GeoJSON Entity representation, this parameter indicates
which GeoProperty to use for the "geometry" element. By default, it
shall be location.
|
lang
|
String
|
0..1
|
It represents the preferred natural language of the response.
It is used to reduce languageMaps to a string or string
array property in a single preferred language.
|
containedBy
|
Comma separated list of URIs
|
0..1
|
List of entity ids which have previously been encountered whilst
retrieving the Entity Graph. Only applicable if joinLevel is present
|
join
|
String
|
0..1
|
The type of Linked Entity retrieval
to apply (see clause
4.5.23). Allowed values: "flat",
"inline", "@none"
|
joinLevel
|
Positive Integer
|
0..1
|
Depth of Linked Entity retrieval to
apply. Default is 1
Only applicable if join
parameter is: "flat" or "inline".
|
datasetId
|
Comma separated list of strings
|
0..1
|
Shall be valid URIs, "@none" for including the
default Attribute instances. Specifies the datasetIds of the Attribute
instances to be selected for each matched Attribute as per clause 4.5.5.
|
entityMap
|
Boolean
|
0..1
|
If true, the location of the
EntityMap used in the operation is returned in the response
|
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
NGSILD-EntityMap
|
URI
|
0..1
|
If present, the EntityMap supplied is used for determining the extent of
the Entity data requested during the retrieval operation. The location
of the EntityMap used in the retreieval operation is returned in the
response
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
Entity
|
1
|
200 OK
|
A response body containing the JSON-LD representation of the target
entity containing the selected Attributes, unless the Accept Header
indicates that the Entity is to be rendered as GeoJSON.
If an EntityMap has been requested, the HTTP response shall include an
"NGSILD-EntityMap" HTTP header that contains the resource URI of
the EntityMap resource used in the operation.
|
|
GeoJSON Feature
|
1
|
200 OK
|
If the Accept Header indicates that the Entity is to be rendered as
GeoJSON, a GeoJSON Feature
is returned.
If an EntityMap has been requested, the HTTP response shall include an
"NGSILD-EntityMap" HTTP header that contains the resource URI of
the EntityMap resource used in the operation.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier (URI) not known
to the system, see clause 6.3.2.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
501 Not Implemented
|
It is used by Registered Context
Sources to indicate that the data format of the request is
unsupported see clause
6.3.7.
|
This method is associated to the operation "Delete Entity" and shall exhibit the behaviour defined by . The Entity identifier is the value of the resource URI variable "entityId". Figure 6.5.3.2‑1 shows the delete entity interaction.
The query parameters that shall be supported are those defined in Table 6.5.3.2‑1 and Table 6.5.3.2‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
type
|
String
|
0..1
|
Selection of Entity Types as per clause 4.17
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
BatchOperationResult
|
1
|
207 Multi-Status
|
If the entity input data matches to a registration, the relevant parts
of the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a BatchOperationResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier (URI) not known
to the system, see clause 6.3.2.
|
This method is bound to the "Replace Entity" operation and shall exhibit the behaviour defined by clause 5.6.18. The Entity identifier is the value of the resource URI variable "entityId". The data to be updated shall be contained in the HTTP request payload body. Figure 6.5.3.3‑1 shows the Replace Entity interaction.
The query parameters that shall be supported are those defined in Table 6.5.3.3‑1 and Table 6.5.3.3‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
type
|
String
|
0..1
|
Selection of Entity Types as per clause 4.17
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Entity Fragment
|
1
|
Entity Fragment containing a complete representation of the Entity to be
replaced.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No content
|
The entity was replaced successfully.
|
|
BatchOperationResult
|
1
|
207 Multi-Status
|
If the entity input data matches to a registration, the relevant parts
of the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a BatchOperationResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier not known to the
system, see clause 6.3.2.
|
This method is bound to the "Merge Entity" operation and shall exhibit the behaviour defined by clause 5.6.17. The Entity identifier is the value of the resource URI variable "entityId". The data to be updated shall be contained in the HTTP request payload body. Figure 6.5.3.4‑1 shows the Merge Entity interaction.
The query parameters that shall be supported are those defined in Table 6.5.3.4‑1 and Table 6.5.3.4‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
format
|
String
|
0..1
|
It shall be one of: "simplified" (or its
synonym "keyValues"). Where present it
indicates that a simplified representation of Entities has been provided
as defined by clause 4.5.4
In this case, when a merge operation applies to an existing Attribute
the type field of the
Attribute shall remain unchanged (any attempt to modify the type of an
Attribute shall result in a BadRequest error).
|
options
|
Comma separated list of strings
|
0..1
|
An alternative mechanism to include the format parameter.
Deprecated
When its value includes the keyword"simplified" (or
its synonym "keyValues"), this indicates
that a simplified representation of Entities has been provided as
defined by clause 4.5.4.
If both format and options are present, the value of the
format parameter shall take
precedence.
|
type
|
String
|
0..1
|
Selection of Entity Types as per clause 4.17
|
observedAt
|
String
|
0..1
|
It shall be a DateTime
(see clause 4.6.3).
When a merge operation applies to a pre-existing Attribute which
previously contained an observedAt sub-attribute, the value
held in this query parameter shall be used if no specific observedAt sub-Attribute is found in
the payload body.
|
lang
|
String
|
0..1
|
It represents the natural language of data held in the request.
When a merge operation applies to a pre-existing LanguageProperty and the value is
supplied as a string or string array in the payload body, this query
parameter shall be used to determine the key within the languageMap JSON Object to update.
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Entity Fragment
|
1
|
Entity Fragment containing a complete representation of the Attributes
to be merged.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No content
|
All the Attributes were merged successfully.
|
|
BatchOperationResult
|
1
|
207 Multi-Status
|
If the entity input data matches to a registration, the relevant parts
of the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a BatchOperationResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier not known to the
system, see clause 6.3.2.
|
This resource represents all the Attributes (Properties or Relationships) of an NGSI-LD Entity.
Resource URI:
Resource URI variables for this resource are defined in Table 6.6.2‑1.
Name
|
Definition
|
---|---|
entityId
|
Id (URI) of the concerned entity
|
This method is bound to the "Append Attributes" operation and shall exhibit the behaviour defined by clause 5.6.3. The Entity identifier is the value of the resource URI variable "entityId". The data to be appended shall be contained in the HTTP request payload body. Figure 6.6.3.1‑1 shows the Append Attributes interaction.
The query parameters that shall be supported are those defined in Table 6.6.3.1‑1 and Table 6.6.3.1‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
type
|
String
|
0..1
|
Selection of Entity Types as per clause 4.17
|
options
|
Comma separated list of strings
|
0..1
|
“noOverwrite" indicates that no attribute
overwrite shall be performed.
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Entity Fragment
|
1
|
Entity Fragment containing a complete representation of the Attributes
to be added.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No content
|
All the Attributes were appended successfully.
|
|
UpdateResult
|
1
|
207 Multi-Status
|
Only the Attributes included in the response payload body were
successfully appended.
If the entity input data matches to a registration, the relevant parts
of the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a UpdateResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier (URI) not known
to the system, see clause 6.3.2.
|
This method is bound to the "Update Attributes" operation and shall exhibit the behaviour defined by clause 5.6.2. The Entity identifier is the value of the resource URI variable "entityId". The data to be updated shall be contained in the HTTP request payload body. Figure 6.6.3.2‑1 shows the Update Attributes interaction.
The query parameters that shall be supported are those defined in Table 6.6.3.2‑1 and Table 6.6.3.2‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
type
|
String
|
0..1
|
Selection of Entity Types as per clause 4.17
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Entity Fragment
|
1
|
Entity Fragment containing a complete representation of the Attributes
to be updated.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No content
|
All the Attributes were updated successfully.
|
|
UpdateResult
|
1
|
207 Multi-Status
|
Only the Attributes included in the response payload body were
successfully updated. If no Attributes were successfully updated the
updated array of UpdateResult (see clause 5.2.18) will be empty.
If the entity input data matches to a registration, the relevant parts
of the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a BatchOperationResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier not known to the
system, see clause 6.3.2.
|
This resource represents an attribute (Property or Relationship) of an NGSI-LD Entity.
Resource URI:
Resource URI variables for this resource are defined in Table 6.7.2‑1.
Name
|
Definition
|
---|---|
entityId
|
Id (URI) of the concerned entity
|
attrId
|
Attribute name (Property or Relationship)
|
This method is bound to the "Partial Attribute Update" operation and shall exhibit the behaviour defined by clause 5.6.4. The Entity identifier is the value of the resource URI variable "entityId". The attribute name is the value of the resource URI variable "attrId". The Entity Fragment shall be contained in the HTTP request payload body. Figure 6.7.3.1‑1 shows the Partial Attribute Update interaction.
The query parameters that shall be supported are those defined in Table 6.7.3.1‑1 and Table 6.7.3.2‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
type
|
String
|
0..1
|
Selection of Entity Types as per clause 4.17
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Entity Fragment
|
1
|
Entity Fragment containing the elements of the attribute to be updated.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
The attribute was updated successfully.
|
|
UpdateResult
|
1
|
207 Multi-Status
|
If the entity input data matches to a registration, the relevant parts
of the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a UpdateResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier or attribute name
not known to the system, see clause
6.3.2.
|
This method is associated to the operation "Delete Attribute" and shall exhibit the behaviour defined by clause 5.6.5. The Entity identifier is the value of the resource URI variable "entityId". The attribute name is the value of the resource URI variable "attrId". Figure 6.7.3.2‑1 shows the Delete Attribute interaction, Table 6.7.3.2‑1 shows the delete parameters to be supported and Table 6.7.3.2‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
deleteAll
|
Boolean
|
0..1
|
If true, all attribute
instances are deleted. Otherwise (default) only the Attribute instance
specified by the datasetId
is deleted. In case neither the deleteAll flag nor a datasetId is present, the default
Attribute instance is deleted.
|
type
|
String
|
0..1
|
Selection of Entity Types as per clause 4.17
|
datasetId
|
String
|
0..1
|
Shall be a valid URI. Specifies the datasetId of the dataset to be
deleted.
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
UpdateResult
|
1
|
207 Multi-Status
|
If the entity input data matches to a registration, the relevant parts
of the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a UpdateResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier (URI) or
attribute name not known to the system. see clause 6.3.2.
|
This method is bound to the "Replace Attribute" operation and shall exhibit the behaviour defined by clause 5.6.19. The Entity identifier is the value of the resource URI variable "entityId". The attribute name is the value of the resource URI variable "attrId". The Attribute Fragment shall be contained in the HTTP request payload body. Figure 6.7.3.3‑1 shows the Replace Attribute interaction.
The query parameters that shall be supported are those defined in Table 6.7.3.3‑1 and Table 6.7.3.3‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
type
|
String
|
0..1
|
Selection of Entity Types as per clause 4.17
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Attribute Fragment
|
1
|
Attribute Fragment replacing the previous data.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
The attribute was replaced successfully.
|
|
UpdateResult
|
1
|
207 Multi-Status
|
If the entity input data matches to a registration, the relevant parts
of the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a UpdateResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier or attribute name
not known to the system, see clause
6.3.2.
|
This resource represents the context source registrations known to an NGSI-LD system.
Resource URI:
This method is bound to the operation "Register Context Source" and shall exhibit the behaviour defined by clause 5.9.2, taking the context source registration to be created from the HTTP request payload body. Figure 6.8.3.1‑1 shows the Register Context Source interaction and Table 6.8.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
CSourceRegistration
|
1
|
Payload body in the request contains a JSON-LD object which represents
the context source registration that is to be created.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
201 Created
|
The HTTP response shall include a "Location" HTTP header that contains the
resource URI of the created context source registration resource.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
409 Conflict
|
It is used to indicate that the context source registration already
exists, see clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
422 Unprocessable
Context Source Registration
|
It is used to indicate that the operation is not available see clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This method is associated to the operation "Query Context Source Registrations" and shall exhibit the behaviour defined by clause 5.10.2, i.e. the parameters in the request describe entity related information, but instead of directly providing this entity information, the context source registration data, which describes context sources that can possibly provide the information, are returned as part of the HTTP response payload body. Figure 6.8.3.2‑1 shows the Query Context Source Registrations interaction.
The query parameters that shall be supported by implementations are those defined in Table 6.8.3.2‑1 and Table 6.8.3.2‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
id
|
Comma separated list of strings
|
0..1
|
Each String shall be a valid URI. List of entity ids to be retrieved |
type
|
String
|
0..1
At least one among: type,
attrs, q, or georel shall be present.
|
Selection of Entity Types as per clause 4.17
|
idPattern
|
Regular expression as defined by [11]
|
0..1
|
Regular expression that shall be matched by entity ids satisfying the
query
|
attrs
|
Comma separated list strings
|
0..1
At least one among: type,
attrs, q, or georel shall be present.
|
Each String is an Attribute (Property or Relationship) name. List of Attributes (Properties or Relationships) to be retrieved |
q
|
String
|
0..1
At least one among: type,
attrs, q, or georel shall be present.
|
Query as per clause 4.9
|
csf
|
String
|
0..1
|
Context Source filter as per clause 4.9
|
geometry
|
String
|
0..1
It shall be 1 if georel or
coordinates are present.
At least one among: type,
attrs, q, or georel shall be present.
|
Geometry as per clause 4.10.
It is part of geoquery
|
georel
|
String
|
0..1
It shall be 1 if geometry or
coordinates are present.
|
Geo relationship as per clause
4.10. It is part of geoquery
|
coordinates
|
String
|
0..1
It shall be one if geometry
or georel are present.
|
Coordinates serialized as a string as per clause 4.10. It is part of
geoquery
|
geoproperty
|
String
|
0..1
It shall be ignored if no geoquery is present.
|
It represents the name of the Property that contains the geospatial data
that will be used to resolve the geoquery
|
timeproperty
|
String
|
0..1
It shall be ignored if no temporal query is present.
|
It represents a Temporal Property name.
Allowed values: "observedAt", "createdAt", "modifiedAt" and "deletedAt". If not specified, the default is
"observedAt". (See clause 4.8)
|
timerel
|
String
|
0..1
|
It represents the temporal relationship as defined by clause 4.1.
Allowed values: "before", "after", "between"
|
timeAt
|
String
|
0..1
|
It represents the timeAt
parameter as defined by clause 4.1.
It shall be a DateTime.
Cardinality shall be 1 if timerel is present
|
endTimeAt
|
String
|
0..1
|
It represents the endTimeAt
parameter as defined by clause 4.1.
It shall be a DateTime. Cardinality shall be 1 if timerel is equal to "between"
|
geometryProperty
|
String
|
0..1
|
It represents a Property name.
In the case of GeoJSON Entity representation, this parameter indicates
which GeoProperty to use
for the toplevel geometry
field
|
lang
|
String
|
0..1
|
It represents the preferred natural language of the response.
It is used to reduce languageMaps to a string or string
array property in a single preferred language
|
scopeQ
|
String
|
0..1
|
Scope query (see clause
4.19)
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
CSourceRegistration[]
|
1
|
200 OK
|
A response body containing the query result as an array of context
source registrations.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This resource represents the context source registration, identified by registrationId, known to an NGSI-LD system.
Resource URI:
Resource URI variables for this resource are defined in Table 6.9.2‑1.
Name
|
Definition
|
---|---|
registrationId
|
Id (URI) of the context source registration
|
This method is associated with the operation "Retrieve Context Source Registration" and shall exhibit the behaviour defined by clause 5.10.1. The registration identifier is the value of the resource URI variable "registrationId". Figure 6.9.3.1‑1 shows the Retrieve Context Source Registration interaction and Table 6.9.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
CSourceRegistration
|
1
|
200 OK
|
A response body containing the JSON-LD representation of the target
context source registration.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided a context source registration
identifier (URI) not known to the system, see clause 6.3.2.
|
This method is bound to the "Update Context Source Registration" operation and shall exhibit the behaviour defined by clause 5.9.3. The context source registration identifier is the value of the resource URI variable "registrationId". The context source registration to be updated shall be contained in the HTTP request payload body. Figure 6.9.3.2‑1 shows the Update Context Source Registration interaction and Table 6.9.3.2‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
CSourceRegistration Fragment
|
1
|
Payload body in the request contains a JSON-LD object which represents
the context source registration that is to be updated.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
The context source registration was successfully updated.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided a context source registration
identifier not known to the system, see clause 6.3.2.
|
This method is associated to the operation "Delete Context Source Registration" and shall exhibit the behaviour defined by clause 5.9.4. The context source registration identifier is the value of the resource URI variable "registrationId". Figure 6.9.3.3‑1 shows the Delete Context Source Registration interaction and Table 6.9.3.3‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided a context source registration
identifier (URI) not known to the system, see clause 6.3.2.
|
This resource represents the subscriptions known to an NGSI-LD system.
Resource URI:
This method is bound to the operation "Create Subscription" and shall exhibit the behaviour defined by clause 5.8.1, taking the subscription to be created from the HTTP request payload body. Figure 6.10.3.1‑1 shows the Create Subscription interaction and Table 6.10.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Subscription
|
1
|
Payload body in the request contains a JSON-LD object which represents
the subscription that is to be created.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
201 Created
|
The HTTP response shall include a "Location" HTTP header that contains the
resource URI of the created subscription resource.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
409 Conflict
|
It is used to indicate that the subscription already exists see clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This method is associated to the operation "Query Subscriptions" and shall exhibit the behaviour defined by clause 5.8.4, providing the subscription data as part of the HTTP response payload body. Figure 6.10.3.2‑1 shows the Query Subscriptions interaction.
The query parameters that shall be supported by implementations are those defined in Table 6.10.3.2‑1 and Table 6.10.3.2‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
limit
|
Number
|
0..1
|
Maximum number of subscriptions to be retrieved
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
Subscription[]
|
1
|
200 OK
|
A response body containing a list of subscriptions.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This resource represents a subscription known to an NGSI-LD system.
Resource URI:
Resource URI variables for this resource are defined in Table 6.11.2‑1.
Name
|
Definition
|
---|---|
subscriptionId
|
Id (URI) of the concerned subscription
|
This method is associated to the operation "Retrieve Subscription" and shall exhibit the behaviour defined by clause 5.8.3. The subscription identifier is the value of the resource URI variable "subscriptionId". Figure 6.11.3.1‑1 shows the Retrieve Subscription interaction and Table 6.11.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
Subscription
|
1
|
200 OK
|
A response body containing the JSON-LD representation of the target
subscription.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided a subscription identifier (URI) not
known to the system, see clause 6.3.2.
|
This method is associated to the operation "Update Subscription" and shall exhibit the behaviour defined by clause 5.8.2. The subscription identifier is the value of the resource URI variable "subscriptionId". Figure 6.11.3.2‑1 shows the Update Subscription interaction and Table 6.11.3.2‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Subscription Fragment
|
1
|
Subscription Fragment including id, type and any other subscription
field to be changed
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided a subscription identifier (URI) not
known to the system, see clause 6.3.2.
|
This method is associated to the operation "Delete Subscription" and shall exhibit the behaviour defined by clause 5.8.5. The subscription identifier is the value of the resource URI variable "subscriptionId". Figure 6.11.3.3‑1 shows the Delete Subscription interaction and Table 6.11.3.3‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided a subscription identifier (URI) not
known to the system, see clause 6.3.2.
|
This resource represents the context source registration subscriptions known to an NGSI-LD system.
Resource URI:
This method is bound to the operation "Create Context Source Registration Subscription" and shall exhibit the behaviour defined by clause 5.11.2, taking the context source registration subscription to be created from the HTTP request payload body. Figure 6.12.3.1‑1 shows the Create Context Source Registration Subscription interaction and Table 6.12.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Subscription
|
1
|
Payload body in the request contains a JSON-LD object which represents
the context source registration subscription that is to be created.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
201 Created
|
The HTTP response shall include a "Location" HTTP header that contains the
resource URI of the created context source registration subscription
resource.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
409 Conflict
|
It is used to indicate that the context source registration subscription
already exists, see clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This method is associated to the operation "Query Context Source Registration Subscriptions" and shall exhibit the behaviour defined by clause 5.11.5, providing the context source registration subscription data as part of the HTTP response payload body. Figure 6.12.3.2‑1 shows the Query Context Source Registration Subscriptions interaction.
The query parameters that shall be supported by implementations are those defined in Table 6.12.3.2‑1 and Table 6.12.3.2‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
limit
|
Number
|
0..1
|
Maximum number of subscriptions to be retrieved
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
Subscription[]
|
1
|
200 OK
|
A response body containing a list of context source registration
subscriptions.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This resource represents the context source registration subscription, identified by subscriptionId, known to an NGSI-LD system.
Resource URI:
Resource URI variables for this resource are defined in Table 6.13.2‑1.
Name
|
Definition
|
---|---|
subscriptionId
|
Id (URI) of the concerned context source registration subscription
|
This method is associated to the operation "Retrieve Context Source Registration Subscription" and shall exhibit the behaviour defined by clause 5.11.4. The subscription identifier is the value of the resource URI variable "subscriptionId". Figure 6.13.3.1‑1 shows the Retrieve Context Source Registration interaction and Table 6.13.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
Subscription
|
1
|
200 OK
|
A response body containing the JSON-LD representation of the target
context source registration subscription.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided a subscription identifier (URI) not
known to the system, see clause 6.3.2.
|
This method is associated to the operation "Update Context Source Registration Subscription" and shall exhibit the behaviour defined by clause 5.11.3. The subscription identifier is the value of the resource URI variable "subscriptionId". Figure 6.13.3.2‑1 shows the Update Context Source Registration Subscription interaction and Table 6.13.3.2‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Subscription Fragment
|
1
|
Subscription Fragment including id, type and any other context source
registration subscription field to be changed
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided a subscription identifier (URI) not
known to the system, see clause 6.3.2.
|
This method is associated to the operation "Delete Context Source Registration Subscription" and shall exhibit the behaviour defined by clause 5.11.6. The subscription identifier is the value of the resource URI variable "subscriptionId". Figure 6.13.3.3‑1 shows the Delete Context Source Registration Subscription interaction and Table 6.13.3.3‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided a subscription identifier (URI) not
known to the system, see clause 6.3.2.
|
A sub-resource, pertaining to the entityOperations/ resource, intended to enable batch entity creation for the NGSI-LD API.
Resource URI:
This method is associated to the operation "Batch Entity Creation" and shall exhibit the behaviour defined by clause 5.6.7. Figure 6.14.3.1‑1 shows the operation interaction and Table 6.14.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Entity[]
|
1
|
Array of entities to be created
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Code
|
Remarks
|
String[]
|
1
|
201 Created
|
If all entities have been successfully created, an array of Strings
containing URIs is returned in the response. Each URI represents the
Entity ID of a created entity. There is no restriction as to the order
of the Entity IDs.
|
|
BatchOperationResult
|
1
|
207 Multi-Status
|
If only some or none of the entities have been successfully created, a
response body containing the result of each operation contained in the
batch is returned in a BatchOperationResult structure. It
contains two arrays. The first array (success) contains the URIs of the
successfully created entities, while the second array (errors) contains information about the
error for each of the entities that could not be created. There is no
restriction as to the order of the Entity IDs in the arrays.
If any of the entities matches to a registration, the relevant parts of
the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a BatchOperationResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
A sub-resource, pertaining to the entityOperations/ resource, intended to enable batch entity creation or update for the NGSI-LD API.
Resource URI:
This method is associated to the operation "Batch Entity Creation or Update (Upsert)" and shall exhibit the behaviour defined by clause 5.6.8. Figure 6.15.3.1‑1 shows the operation interaction and Table 6.15.3.1‑1 describes the request body and possible responses.
The options query parameter for this request can take the following values:
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Entity[]
|
1
|
Array of entities to be created/updated
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Code
|
Remarks
|
String[]
|
1
|
201 Created
|
If all entities not existing prior to this request have been
successfully created and the others have been successfully updated, an
array of String (with the URIs representing the Entity IDs of the
created entities only) is returned in the response. There is no
restriction as to the order of the Entity IDs. The merely updated
entities do not take part in the response (corresponding to 204 No
Content returned in the case of updates).
|
|
N/A
|
N/A
|
204 No Content
|
If all entities already existed and are successfully updated, there is
no payload body in the response.
|
|
BatchOperationResult
|
1
|
207 Multi-Status
|
If only some or none of the entities have been successfully created or
updated, a response body containing the result of each operation
contained in the batch is returned in a BatchOperationResult structure. It
contains two arrays. The first array (success) contains the URIs of the
successfully created or updated entities, while the second array
(errors) contains
information about the error for each of the entities that could not be
created or updated. There is no restriction as to the order of the
Entity IDs in the arrays.
If any of the entities matches to a registration, the relevant parts of
the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a BatchOperationResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
A sub-resource, pertaining to the entityOperations/ resource, intended to enable batch entity update for the NGSI-LD API.
Resource URI:
This method is associated to the operation "Batch Entity Update" and shall exhibit the behaviour defined by clause 5.6.9. Figure 6.16.3.1‑1 shows the operation interaction and Table 6.16.3.1‑1 describes the request body and possible responses.
The options query parameter for this request can take the following values:
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Entity[]
|
1
|
Array of Entities to be updated
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Code
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
If all entities have been successfully updated, there is no payload body
in the response.
|
|
BatchOperationResult
|
1
|
207 Multi-Status
|
If only some or none of the entities have been successfully updated, a
response body containing the result of each operation contained in the
batch is returned in a BatchOperationResult structure. It
contains two arrays. The first array (success) contains the URIs of the
successfully updated entities, while the second array (errors) contains information about the
error for each of the entities that could not be updated. There is no
restriction as to the order of the Entity IDs in the arrays.
If any of the entities matches to a registration, the relevant parts of
the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a BatchOperationResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
A sub-resource, pertaining to the entityOperations/ resource, intended to enable batch entity deletion for the NGSI-LD API.
Resource URI:
This method is associated to the operation "Batch Entity Delete" and shall exhibit the behaviour defined by clause 5.6.10. Figure 6.17.3.1‑1 shows the operation interaction and Table 6.17.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
String[]
|
1
|
Array of String (URIs representing Entity IDs) to be deleted
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Code
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
If all entities existed and have been successfully deleted, there is no
payload body in the response.
|
|
BatchOperationResult
|
1
|
207 Multi-Status
|
If some or all of the entities have not been successfully deleted, or
did not exist, a response body containing the result of each operation
contained in the batch is returned in a BatchOperationResult structure. It
contains two arrays. The first array (success) contains the URIs of the
successfully deleted entities, while the second array (errors) contains information about the
error for each of the entities that could not be deleted. There is no
restriction as to the order of the Entity IDs in the arrays.
If any of the entities matches to a registration, the relevant parts of
the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a BatchOperationResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This resource represents the Temporal Evolution of Entities known to an NGSI-LD system.
Resource URI:
This method is associated to the operation "Create or Update Temporal Evolution of an Entity" and shall exhibit the behaviour defined by clause 5.6.11, taking the temporal representation of Entity to be created from the HTTP request payload body. Figure 6.18.3.1‑1 shows this interaction and Table 6.18.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
EntityTemporal
|
1
|
Payload body in the request contains a JSON-LD object which represents
the temporal representation of the Entity that is to be created (or
updated).
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
201 Created
|
Upon creation success, the HTTP response shall include a "Location" HTTP header that contains the
resource URI of the created entity resource.
|
|
N/A
|
N/A
|
204 No Content
|
Upon update success.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail member should convey
more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
422 Unprocessable Entity
|
It is used to indicate that the operation is not available, see clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This method is associated to the operation "Query Temporal Evolution of Entities" and shall exhibit the behaviour defined by clause 5.7.4, providing the Temporal Evolution of the matching Entities as part of the HTTP response payload body. In addition to this method, an alternative way to perform "Query Temporal Evolution of Entities" operations via POST is defined in clause 6.24. Figure 6.18.3.2‑1 shows this interaction.
The query parameters that shall be supported by implementations are those defined in Table 6.18.3.2‑1 and Table 6.18.3.2‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
id
|
Comma separated list of strings
|
0..1
|
Each String shall be a valid URI. List of entity ids to be retrieved |
type
|
String
|
0..1
It shall be 1 if attrs is
not present, unless the execution of the request is limited to local
scope (see clause
5.5.13).
|
Selection of Entity Types as per clause 4.17. “*” is also allowed as a value
and local is
implicitly set to true and
shall not be explicitly set tofalse.
|
idPattern
|
Regular expression as defined by [11]
|
0..1
|
Regular expression that shall be matched by entity ids
|
attrs
|
Comma separated list of strings
|
0..1
It shall be 1 if type is not
present, unless the execution of the request is limited to local scope
(see clause
5.5.13).
|
A synonym for a combination of the pick
andq parameters.
Deprecated
Each String is an Attribute (Property or Relationship) name. List of Attributes (Properties or Relationships) to be retrieved |
pick
|
Comma separated list of strings
|
0..1
|
Each String is an Entity member ("id", "type", "scope” or an Attribute name).
When defined, every Entity within the payload body is reduced down to
only contain the listed Entity members.
|
omit
|
Comma separated list of strings
|
0..1
|
Each String is an Entity member ("id", "type", "scope” or an Attribute name).
When defined, the listed Entity members are removed from each Entity
within the payload
|
q
|
String
|
0..1
|
Query as per clause 4.9
|
csf
|
String
|
0..1
|
Context Source filter as per clause 4.9
|
geometry
|
String
|
0..1
It shall be 1 if georel or
coordinates are present
|
Geometry as per clause 4.10.
It is part of geoquery
|
georel
|
String
|
0..1
It shall be 1 if geometry or
coordinates are present
|
Geo relationship as per clause
4.10. It is part of geoquery
|
coordinates
|
String
|
0..1
It shall be one if georel or
geometry are present
|
Coordinates serialized as a string as per clause 4.10. It is part of
geoquery
|
geoproperty
|
String
|
0..1
It shall be ignored if no geoquery is present
|
The name of the GeoProperty that contains the
geospatial data that will be used to resolve the geoquery. By default,
will be location. (See clause 4.7)
|
timeproperty
|
String
|
0..1
|
It represents a Temporal Property name. Allowed values: "observedAt", "createdAt", "modifiedAt" and "deletedAt". If not specified, the default is "observedAt". (See clause 4.8) |
timerel
|
String
|
1
|
It represents the temporal relationship as defined by clause 4.11. Allowed values: "before", "after", "between" |
timeAt
|
String
|
1
|
|
endTimeAt
|
String
|
0..1
|
It representing the endTimeAt parameter as defined by clause 4.11. It shall be a DateTime. Cardinality shall be 1 if timerel is equal to "between" |
lastN
|
Positive integer
|
0..1
|
Only the last n instances, per Attribute, per Entity (under the
specified time interval) shall be retrieved
|
lang
|
String
|
0..1
|
It represents the preferred natural language of the response. It is used to reduce languageMaps to a string or string array property in a single preferred language |
aggrMethods
|
Comma separated list of strings
|
0..1
It shall be 1 if aggregatedValues
is present in the options parameter
|
Each String represents an aggregation method, as defined by clause
4.5.19. Only applicable if "aggregatedValues" is present in the options parameter |
aggrPeriodDuration
|
String
|
0..1
|
It represents the duration of each period used for the aggregation as
defined by clause
4.5.19.
If not specified, it defaults to a duration of 0 seconds and is interpreted as a duration spanning the whole time-range specified by the temporal query.
Only applicable if "aggregatedValues"
is present in the options parameter
|
scopeQ
|
String
|
0..1
|
Scope query (see clause
4.19)
|
datasetId
|
Comma separated list of strings
|
0..1
|
Shall be valid URIs, "@none" for including the
default Attribute instances. Specifies the datasetIds of the Attribute
instances to be selected for each matched Attribute as per clause 4.5.5.
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
EntityTemporal[]
|
1
|
200 OK
|
A response body containing the query result as a list of temporal
representation of Entities.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This resource is associated to the Temporal Evolution of an Entity known to an NGSI-LD system.
Resource URI:
Resource URI variables for this resource are defined in Table 6.19.2‑1.
Name
|
Definition
|
---|---|
entityId
|
Id (URI) of the entity to be retrieved
|
This method is associated to the operation "Retrieve Temporal Evolution of an Entity" and shall exhibit the behaviour defined by clause 5.7.3. The Entity identifier is the value of the resource URI variable entityId. Figure 6.19.3.1‑1 shows the retrieve temporal representation of an entity interaction.
The query parameters that shall be supported are those defined in Table 6.19.3.1‑1 and Table 6.19.3.1‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
attrs
|
Comma separated list of strings
|
0..1
|
A synonym for a combination of the pick
andq parameters.
Deprecated
Each String is an Attribute (Property or Relationship) name. List of Attributes to be retrieved. If not specified, all Attributes related to the temporal representation of an Entity shall be retrieved. |
pick
|
Comma separated list of strings
|
0..1
|
Each String is an Entity member ("id", "type", "scope” or an Attribute name).
When defined, every Entity within the payload body is reduced down to
only contain the listed Entity members.
|
omit
|
Comma separated list of strings
|
0..1
|
Each String is an Entity member ("id", "type", "scope” or an Attribute name).
When defined, the listed Entity members are removed from each Entity
within the payload.
|
timeproperty
|
String
|
0..1
|
It represents a Temporal Property name. Allowed values: "observedAt", "createdAt", "modifiedAt" and "deletedAt". If not specified, the default is "observedAt". (See clause 4.8). |
timerel
|
String
|
0..1
It shall be 1 if timeAt is
present
|
It represents the Temporal Relationship as defined by clause 4.11. Allowed values: "before", "after", "between". |
timeAt
|
String
|
0..1
It shall be 1 if timerel is
present
|
|
endTimeAt
|
String
|
0..1
It shall be 1 if timerel is
equal to "between"
|
|
lastN
|
Positive integer
|
0..1
|
Only the last n Attribute instances (under the concerned time interval)
shall be retrieved.
|
lang
|
String
|
0..1
|
It represents the preferred natural language of the response. It is used to reduce languageMaps to a string or string array property in a single preferred language. |
aggrMethods
|
Comma separated list of strings
|
0..1
It shall be 1 if aggregatedValues
is present in the options parameter
|
Each String represents the aggregation methods as defined by clause
4.5.19. Only applicable if "aggregatedValues" is present in the options parameter. |
aggrPeriodDuration
|
String
|
0..1
|
It represents the duration of each period used for the aggregation as
defined by clause
4.5.19.
If not specified, it defaults to a duration of 0 seconds and is interpreted as a duration spanning the whole time-range specified by the temporal query.
Only applicable if "aggregatedValues"
is present in the options parameter.
|
datasetId
|
Comma separated list of strings
|
0..1
|
Shall be valid URIs, "@none" for including the
default Attribute instances. Specifies the datasetIds of the Attribute
instances to be selected for each matched Attribute as per clause 4.5.5.
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
EntityTemporal
|
1
|
200 OK
|
A response body containing the JSON-LD temporal representation of the
target Entity containing the selected Attributes.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier (URI) not known
to the system, see clause 6.3.2.
|
This method is associated to the operation "Delete Temporal Evolution of an Entity" and shall exhibit the behaviour defined by clause 5.6.16. The Entity identifier is the value of the resource URI variable entityId. Figure 6.19.3.2‑1 shows the delete entity interaction and Table 6.19.3.2‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier (URI) not known
to the system, see clause 6.3.2.
|
This resource represents all the Attributes (Properties or Relationships) of a Temporal Evolution of an Entity.
Resource URI:
Resource URI variables for this resource are defined in Table 6.20.2‑1.
Name
|
Definition
|
---|---|
entityId
|
Id (URI) of the concerned entity
|
This method is bound to the "Add Attributes to Temporal Evolution of an Entity" operation and shall exhibit the behaviour defined by clause 5.6.12. The Entity identifier is the value of the resource URI variable entityId. The data to be added shall be contained in the HTTP request payload body. Figure 6.20.3.1‑1 shows the Add Attributes interaction and Table 6.20.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
EntityTemporal Fragment
|
1
|
EntityTemporal Fragment containing a complete representation of the
Attribute instances to be added.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No content
|
All the Attributes were added successfully.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier (URI) not known
to the system, see clause 6.3.2.
|
This resource represents an Attribute (Property or Relationship) of a Temporal Evolution of an Entity.
Resource URI:
Resource URI variables for this resource are defined in Table 6.21.2‑1.
Name
|
Definition
|
---|---|
entityId
|
Id (URI) of the concerned entity
|
attrId
|
Attribute name (Property or Relationship)
|
This method is associated to the operation "Delete Attribute from Temporal Evolution of an Entity" and shall exhibit the behaviour defined by clause 5.6.13. The Entity identifier is the value of the resource URI variable entityId. The Attribute name is the value of the resource URI variable attrId. Figure 6.21.3.1‑1 shows the “Delete Attribute from Temporal Evolution of an Entity” interaction, Table 6.21.3.1‑1 shows the delete parameters to be supported and Table 6.21.3.1‑2 describes the request body and possible responses.
name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
deleteAll
|
Boolean
|
0..1
|
If true, all attribute
instances are deleted. Otherwise (default) only the Attribute instance
specified by the datasetId
is deleted. In case neither the deleteAll flag nor a datasetId is present, the default
Attribute instance is deleted.
|
datasetId
|
String
|
0..1
|
Shall be a valid URI. Specifies the datasetId of the dataset to be
deleted.
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier (URI) or
Attribute name not known to the system. See clause 6.3.2.
|
This resource represents an Attribute (Property or Relationship) instance of a Temporal Evolution of an Entity.
Resource URI:
Resource URI variables for this resource are defined in Table 6.22.2‑1.
Name
|
Definition
|
---|---|
entityId
|
Id (URI) of the concerned entity
|
attrId
|
Attribute name (Property or Relationship)
|
instanceId
|
Id (URI) identifying a particular Attribute instance
|
This method is associated to the operation "Modify attribute instance from Temporal Evolution of an Entity" and shall exhibit the behaviour defined by clause 5.6.14. The Entity identifier is the value of the resource URI variable entityId. The attribute name is the value of the resource URI variable attrId. The instance identifier is the value of the resource URI variable instanceId. Figure 6.22.3.1‑1 shows the Modify Attribute instance interaction and Table 6.22.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
EntityTemporal Fragment
|
1
|
EntityTemporal Fragment containing a complete representation of the
Attribute instance to be replaced.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier (URI), attribute
name or instance identifier not known to the system. See clause 6.3.2.
|
This method is associated to the operation "Delete Attribute instance from Temporal Evolution of an Entity" and shall exhibit the behaviour defined by clause 5.6.15. The Entity identifier is the value of the resource URI variable entityId. The Attribute name is the value of the resource URI variable attrId. The instance identifier is the value of the resource URI variable instanceId. Figure 6.22.3.2‑1 shows the Delete Attribute instance interaction and Table 6.22.3.2‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an Entity identifier (URI), attribute
name or instance identifier not known to the system. See clause 6.3.2.
|
A sub-resource, pertaining to the entityOperations/ resource, intended to enable querying for entities by means of a POST method. The behaviour of this clause mirrors the one in clause 6.4.3.2, which performs the "Query Entity" operation (defined by clause 5.7.2) by means of a GET method. The reason to provide an alternative via POST is that, using GET:
Resource URI:
This method is associated to the operation "Query Entities" and shall exhibit the behaviour defined by clause 5.7.2. Figure 6.23.3.1‑1 shows the operation interaction and Table 6.23.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Query
|
1
|
Payload body in the request contains a JSON-LD object which represents
the query to be performed.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
Entity[]
|
1
|
200 OK
|
A response body containing the query result as a list of Entities.
|
|
GeoJSON FeatureCollection
|
1
|
200 OK
|
If the Accept Header indicates that the Entities are to be rendered as
GeoJSON, a response body containing the query result as GeoJSON
FeatureCollection is returned.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
A sub-resource, pertaining to the temporal/entityOperations/ resource, intended to enable temporal querying for entities by means of a POST method. The behaviour of this clause mirrors the one in clause 6.18.3.2, which performs the "Query Temporal Evolution of Entities" (defined by clause 5.7.4) operation by means of a GET method. The reason to provide an alternative via POST is that, using GET:
Resource URI:
This method is associated to the operation "Query Temporal Evolution of Entities" and shall exhibit the behaviour defined by clause 5.7.4. Figure 6.24.3.1‑1 shows the operation interaction and Table 6.24.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Query
|
1
|
Payload body in the request contains a JSON-LD object which represents
the query to be performed.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
EntityTemporal[]
|
1
|
200 OK
|
A response body containing the query result as a list of Entities.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This resource represents the entity types available in an NGSI-LD system.
Resource URI:
This method is associated to the operations "Retrieve Available Entity Types" and "Retrieve Details of Available Entity Types" (if the details parameter is set to true) and shall exhibit the behaviour defined by clauses 5.7.5 and 5.7.6 respectively.
The request parameters that shall be supported are those defined in Table 6.25.3.1‑1 and Table 6.25.3.1‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
details
|
Boolean
|
0..1
|
If true, then detailed
entity type information represented as an array with elements of the
Entity Type data structure (clause 5.2.25)
is to be returned
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
EntityTypeList
|
1
|
200 OK
|
A response body containing the JSON-LD representation of the
EntityTypeList (clause 5.2.24) is to be
returned, unless details=true is specified
|
|
EntityType[]
|
1
|
200 OK
|
If details=true is
specified, a response body containing a JSON-LD array with elements of
the EntityType data structure (clause
5.2.25) is to be returned
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error
|
This resource represents the specified entity type for which entity instances are available in an NGSI-LD system.
Resource URI:
Resource URI variables for this resource are defined in Table 6.26.2‑1.
Name
|
Definition
|
---|---|
type
|
Name of the entity type for which detailed information is to be
retrieved. The Fully Qualified Name (FQN) as well as the short name can
be used, given that the latter is part of the JSON-LD @context provided.
|
This method is associated to the operation "Retrieve Available Entity Type Information" and shall exhibit the behaviour defined by clause 5.7.7. The entity type is the value of the resource URI variable "type". Figure 6.26.3.1‑1 shows the retrieve available entity type interaction.
Table 6.26.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
EntityTypeInfo
|
1
|
200 OK
|
A response body containing the JSON-LD representation of the detailed
information about the available entity type.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an entity type not known to the
system, see clause 6.3.2.
|
This resource represents the attributes available in an NGSI-LD system.
Resource URI:
This method is associated to the operations "Retrieve Available Attributes" and "Retrieve Details of Available Attributes" (if the details parameter is set to true) and shall exhibit the behaviour defined by clauses 5.7.8 and 5.7.9 respectively.
The request parameters that shall be supported are those defined in Table 6.27.3.1‑1 and Table 6.27.3.1‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
details
|
Boolean
|
0..1
|
If true, then detailed
attribute information represented as an array with elements of the
Attribute data structure (clause 5.2.28) is
to be returned
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
AttributeList
|
1
|
200 OK
|
A response body containing the JSON-LD representation of the
AttributeList (clause 5.2.27) is to be
returned, unless details=true is specified.
|
|
Attribute[]
|
1
|
200 OK
|
If details=true is
specified, a response body containing a JSON-LD array with elements of
the Attribute data structure (clause 5.2.28)
is to be returned.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This resource represents the specified attribute that belongs to entity instances existing within the NGSI-LD system.
Resource URI:
Resource URI variables for this resource are defined in Table 6.28.2‑1.
Name
|
Definition
|
---|---|
attrId
|
Name of the attribute for which detailed information is to be retrieved.
The Fully Qualified Name (FQN) as well as the short name can be used,
given that the latter is part of the JSON-LD @context provided.
|
This method is associated to the operation "Retrieve Available Attribute Information" and shall exhibit the behaviour defined by clause 5.7.10. The attribute is the value of the resource URI variable "attrId". Figure 6.28.3.1‑1 shows the retrieve available attribute information interaction.
Table 6.28.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
Attribute
|
1
|
200 OK
|
A response body containing the JSON-LD representation of the detailed
information about the available attribute.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an attribute name not known to the
system, see clause 6.3.2.
|
This resource represents the @contexts known to an NGSI-LD system.
Resource URI:
This method is bound to the operation "Add @context" and shall exhibit the behaviour defined by clause 5.13.2, taking the @context to be added from the HTTP request payload body. Figure 6.29.3.1‑1 shows the Add @context interaction and Table 6.29.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
JSON Object
|
1
|
Payload body in the request contains a JSON object that has a root node
named @context, which
represents a JSON-LD "local context".
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
201 Created
|
The HTTP response shall include a "Location" HTTP header that contains the local
URI of the added @context.
|
|
ProblemDetails (see IETF RFC 7807 [10]) |
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This method is associated to the operation "List @contexts" and shall exhibit the behaviour defined by clause 5.13.3, and it provides information about stored @contexts as part of the HTTP response payload body. Figure 6.29.3.2‑1 shows the List @contexts interaction.
The request parameters that shall be supported by implementations are those defined in Table 6.29.3.2‑1 and Table 6.29.3.2‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
details
|
Boolean
|
0..1
|
Whether a list of URLs or a more detailed list of JSON Objects is
requested
|
kind
|
String
|
0..1
|
Can be either "Cached", "Hosted", or "ImplicitlyCreated"
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
String[]
or
JSON Object[]
|
1
|
200 OK
|
A response body containing a list of URLs or a list of JSON Objects, as
defined in clause 5.13.3.5,
representing metadata about stored @contexts.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This resource represents a JSON-LD @context stored in the broker's internal @context storage.
Resource URI:
Resource URI variables for this resource are defined in Table 6.30.2‑1.
Name
|
Definition
|
---|---|
contextId
|
Local identifier of the @context to be managed (served or
deleted). For @contexts of
kind "Cached" this can also be the
original URL the broker downloaded the @context from.
|
This method is associated to the operation "Serve @context" and shall exhibit the behaviour defined by clause 5.13.4. The @context identifier is the value of the resource URI variable "contextId". Figure 6.30.3.1‑1 shows the HTTP Serve @context interaction.
The request parameters that shall be supported by implementations are those defined in Table 6.30.3.1‑1 and Table 6.30.3.1‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
details
|
Boolean
|
0..1
|
Whether the content of the @context or its metadata is requested
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
JSON Object
|
1
|
200 OK
|
If the parameter details is false or missing, response body
contains a JSON object that has a root node named @context, which represents a JSON-LD
"local context".
If the parameter details is true, response body contains a JSON
object as defined in clause 5.13.4.5,
which metadata of a JSON-LD "local context".
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an @context identifier not known to the
system, see clause 6.3.2.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
422 Unprocessable
|
This method is associated to the operation "Delete and Reload @context" and shall exhibit the behaviour defined by clause 5.13.5. The Entity identifier is the value of the resource URI variable "contextId". Figure 6.30.3.2‑1 shows the delete entity interaction. The request parameters that shall be supported are those defined in Table 6.30.3.2‑1 and Table 6.30.3.2‑2 describes the request body and possible responses.
Name
|
Data Type
|
Cardinality
|
Remarks
|
---|---|---|---|
reload
|
Boolean
|
0..1
|
indicates to perform a download and replace of the @context, as specified in clause 5.13.5.4.
|
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an @context identifier not known to the
system, see clause 6.3.2.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
504 Gateway Timeout
|
It is used when re-downloading fails.
|
A sub-resource, pertaining to the entityOperations/ resource, intended to enable batch entity merge for the NGSI-LD API.
Resource URI:
This method is associated to the operation "Batch Entity Merge" and shall exhibit the behaviour defined by clause 5.6.20. Figure 6.31.3.1‑1 shows the operation interaction and Table 6.31.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
Entity[]
|
1
|
Array of Entities to be merged.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Code
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
If all entities have been successfully merged, there is no payload body
in the response.
|
|
BatchOperationResult
|
1
|
207 Multi-Status
|
If only some or none of the entities have been successfully merged, a
response body containing the result of each operation contained in the
batch is returned in a BatchOperationResult structure. It
contains two arrays. The first array (success) contains the URIs of the
successfully merged entities, while the second array (errors) contains information about the
error for each of the entities that could not be merged-patched. There
is no restriction as to the order of the Entity IDs in the arrays.
If any of the entities matches to a registration, the relevant parts of
the request are forwarded as a distributed operation.
In the case when an error response is received back from any distributed
operation, a response body containing the result returned from each
registration is returned in a BatchOperationResult structure.
Errors can occur whenever a distributed operation is unsupported, fails
or times out, see clause
6.3.17.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
This resource represents an EntityMap available in the broker's internal storage or memory.
Resource URI:
Resource URI variables for this resource are defined in Table 6.32.2‑1.
Name
|
Definition
|
---|---|
entityMapId
|
Id (URI) of the EntityMap to be retrieved, updated or deleted.
|
This method is associated to the operation "Retrieve EntityMap" and shall exhibit the behaviour defined by clause 5.14.1. The EntityMap identifier is the value of the resource URI variable "entityMapId". Figure 6.32.3.1‑1 shows the Retrieve EntityMap interaction and Table 6.32.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
EntityMap
|
1
|
200 OK
|
A response body containing the JSON-LD representation of the target
entity
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an EntityMap identifier not known to
the system, see clause 6.3.2.
|
This method is associated to the operation "Update EntityMap" and shall exhibit the behaviour defined by clause 5.14.2. The EntityMap identifier is the value of the resource URI variable "entityMapId". Figure 6.32.3.2‑1 shows the Update EntityMap interaction and Table 6.32.3.2‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
EntityMap
|
1
|
Payload body in the request contains a JSON-LD object which represents
the context source registration that is to be updated.
|
||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an EntityMap identifier not known to
the system, see clause 6.3.2.
|
This method is associated to the operation "Delete EntityMap" and shall exhibit the behaviour defined by clause 5.14.3. The Entity identifier is the value of the resource URI variable "contextId". Figure 6.32.3.3‑1 shows the delete entity interaction and Table 6.32.3.3‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
N/A
|
N/A
|
204 No Content
|
||
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
400 Bad Request
|
It is used to indicate that the request or its content is incorrect, see
clause 6.3.2.
In the returned ProblemDetails structure, the
detail attribute should
convey more information about the error.
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
404 Not Found
|
It is used when a client provided an @context identifier not known to the
system, see clause 6.3.2.
|
This resource represents identity information about the Context Source itself.
Resource URI:
This method is associated to the operation "Retrieve Context Source Identity Information" and shall exhibit the behaviour defined by clause 5.15.1. Figure 6.33.3.1‑1 shows the Retrieve Context Source Identity Information interaction and table 6.33.3.1‑1 describes the request body and possible responses.
Request Body
|
Data Type
|
Cardinality
|
Remarks
|
|
---|---|---|---|---|
N/A
|
N/A
|
|||
Response Body
|
Data Type
|
Cardinality
|
Response Codes
|
Remarks
|
ContextSourceIdentity
|
1
|
200 No Content
|
A response body containing the JSON-LD representation of the Context
Source Identity Information
|
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
501 Not Implemented
|
It is used by Context Sources to
indicate that retrieval of the Context Source information is unsupported
see .
|
This clause defines the optional support of the NGSI-LD API for sending notifications via the MQTT protocol [24] and [25]. The subscriptions are handled using the HTTP binding as described in clause 6, but instead of an HTTP endpoint, an MQTT endpoint is provided.
In case a subscription received via HTTP specifies an MQTT endpoint in the "notification.endpoint.uri" member of the subscription structure (defined by clauses 5.2.12, 5.2.14 and 5.2.15), and the MQTT notification binding is supported by the NGSI-LD implementation, notifications related to this subscription shall be sent via the MQTT protocol.
The syntax of an MQTT endpoint URI is mqtt[s]://[<username>][:<password>]@<host>[:<port>]/<topic>[/<subtopic>]* and follows an existing convention for representing an MQTT endpoint as a URI [i.19].
Username and password can be optionally specified as part of the endpoint URI. If the port is not explicitly specified, the default MQTT port is 1883 for MQTT over TCP and 8883 for mqtts, i.e. Secure MQTT over TLS. MQTT supports the structuring of topics as a hierarchy with any number of subtopic levels, which can be specified as part of the endpoint URI.
In MQTT, all non-protocol information has to be included into the MQTT message. This means that the actual notification as specified in clause 5.3.1, as well as additional information like MIME type, possibly the link to the @context and additional user-specified information, which in the HTTP case is provided as headers, has to be included into the MQTT message. The MQTT notification message shall be provided as a JSON Object with the two elements "metadata" and "body". The actual notification, as specified in clause 5.3.1 is the value of "body", whereas any additional information is provided as key-value pairs in "metadata".
For the MQTT protocol, there are currently two versions supported, MQTTv3.1.1 [24] and MQTTv5.0 [25]. Also, there are three levels of quality of service:
These can be specified in the subscription as part of the optional array of KeyValuePair type (defined by clause 5.2.22) "notification.endpoint.notifierInfo". The MQTT protocol parameters can be found in Table 7.2‑1. If not present, the given default value is used.
Key
|
Possible Values
|
Default
|
Source
|
Description
|
---|---|---|---|---|
MQTT-Version
|
mqtt3.1.1, mqtt5.0
|
mqtt5.0
|
Subscription's notification.endpoint
.notifierInfo
|
Version of MQTT protocol
|
MQTT-QoS
|
0, 1, 2
|
0
|
Subscription's notification.endpoint
.notifierInfo
|
MQTT Quality of service, at most once (0), at least once (1) and exactly
once (2)
|
The MIME type associated with the notification shall be "application/json" by default. However, this can be changed to "application/ld+json" by means of the "endpoint.accept" member. The MIME type is specified as Content-Type in the "metadata" element of the MQTT message. If the target MIME type is "application/json" then the reference to the JSON-LD @context is provided as Link in the "metadata" element of the MQTT message, following the specification of the HTTP Link header as mandated by the JSON-LD specification [2], section 6.2 (to the default JSON-LD @context if none available). Table 7.2‑2 lists these "receiver side" metadata parameters.
Key
|
Possible Values
|
Default
|
Source
|
Description
|
---|---|---|---|---|
Content-Type
|
"application/json", "application/ld+json"
|
"application/json"
|
Subscription's
notification
.endpoint.accept
|
MIME type of the notification included in the "body" element of the MQTT message
|
Link
|
Same format as specified in JSON-LD specification [2], section 6.2 for the HTTP Link header
|
Link Header provided in Subscription
|
Contains the reference to the @context in case Content-Type is "application/json". Example: <http://myhost.org/mycontext>; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json" |
Additionally, if the optional array of KeyValuePair type (defined by clause 5.2.22) notification.endpoint.receiverInfo of the subscription is present, then a new entry for each member named "key" of the key, value pairs that make up the array shall be generated and added to the "metadata" element of the MQTT message. The content of each entry shall be set equal to the content of the corresponding "value" member of the KeyValuePair.
Annex A
(normative):
NGSI-LD identifier considerations
The purpose of identifiers is to allow uniquely identifying NGSI-LD elements (Entities, Context Subscriptions or Context Source Registrations) within an NGSI-LD system. This annex is intended to clarify the different issues around the design of identifiers in NGSI-LD.
In order to enable the participation of NGSI-LD in linked data scenarios, all Entities are identified by URIs. If those URIs are expected to participate in external linked data relationships they should be dereferenceable.
It is noteworthy that the identifier from the point of view of NGSI-LD is different from the inherent identifier that a specific Entity may have. For instance, an NGSI-LD Entity of Type "Vehicle" may have a Property named licencePlateNumber, which it is actually a unique identifier from the point of view of the Entity domain, as it uniquely identifies the specific vehicle instance. However, from the point of view of the NGSI-LD system, it may have another identifier which might or might not include such licence plate number identifier.
NGSI-LD defines a specific URN [9] namespace intended to help API users to design readable, clean and simple identifiers. As it is based on URNs, the usage of this identification approach is not recommended when dereferenceable URIs are needed (fully-fledged linked data scenarios).
The referred namespace is defined as follows (to be registered with IANA):
EntityTypeName shall be an Entity Type name which can be expanded to a URI as per the @context.
EntityIdentificationString shall be a string that allows uniquely identifying the subject Entity in combination with the other items being part of the NSS.
It is recommended that applications use this URN namespace when applicable.
In general, the URN specification defines namespace equivalence in a case-insensitive manner, however it is assumed that context-broker implementations shall always use lowercase letters in namespaces where they have a choice in case, unless there is a strong reason otherwise. Restricting the namespace prefix to lower case urn:ngsi-ld: can improve caching and retrieval, since this ensures since alphabetic characters within the namespace specific string are always consistent.
Annex B
(normative):
Core NGSI-LD @context definition
Below is the definition of the Core NGSI-LD @context which shall be supported by implementations.
Such definition has been tested using [i.7].
Annex C
(informative):
Examples of using the API
This annex is informative and is intended to show in action the JSON-LD representation defined by NGSI-LD.
JSON representations of the examples shown in this annex can be found at [i.15].
Figure C.2.1‑1 shows a diagram representing a property graph to be used for the examples discussed in this clause.
As per the algorithms described above and as per the rules for generating the JSON-LD representation of NGSI-LD entities the above graph will result in the following JSON-LD representations. The syntax has been checked using the JSON-LD Playground tool [i.5].
Normalized Representation
The normalized representation is a lossless representation of an Entity, where every Property is defined by a type and a value and every Relationship is defined by a type and an object.
Below there is a representation of an Entity of Type "Vehicle". It can be observed that the @context is composed of different parts, namely the Core @context and several vocabulary-specific @contexts.
It is noteworthy that the @context corresponding to the Parking domain is included as it is referenced through the isParked Relationship.
"tyreTreadDepths": {"type": "ListProperty","valueList": [300, 300, 120, 6],"unitCode": "MMT"},"passengers": {"type": "Relationship","objectType": "Person","object": ["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"]
"route": {"type": "ListRelationship","objectType": "City","objectList": [{"object": "urn:ngsi-ld:City:Antwerp"},{"object": "urn:ngsi-ld:City:Rotterdam"}{"object": "urn:ngsi-ld:City:Amsterdam"}]
Normalized Representation when inline Linked Entity retrieval is used
When inline Linked Entity retrieval (see clause 4.5.23.2) is specified, any Relationships which target Entities stored locally or include an objectType Attribute are returned in an expanded format. Attributes of type "Relationship" are returned with an additional entity sub-Attribute, which holds the normalized Linked Entity data corresponding to the Relationship's target object URI. Attributes of type "ListRelationship" are returned with an additional entityList sub-Attribute which in turn holds an ordered array of the normalized Linked Entities corresponding to the target "objectList" URIs.
"tyreTreadDepths": {"type": "ListProperty","valueList": [300, 300, 120, 6],"unitCode": "MMT"},"passengers": {"type": "Relationship","objectType": "Person",
"entity": [{
},
]},"route": {"type": "ListRelationship","objectType": "City","objectList": [{"object": "urn:ngsi-ld:City:Antwerp"},{"object": "urn:ngsi-ld:City:Rotterdam"}{"object": "urn:ngsi-ld:City:Amsterdam"}],"entityList": [{
},
]},
Normalized Representation when flattened Linked Entity retrieval is used
When flattened Linked Entity retrieval (see clause 4.5.23.3) is specified, an array of normalized Entities is returned. Whenever a Relationship Attribute targets an Entity stored locally or includes an objectType, an additional normalized Linked Entity holding data corresponding to the Relationship's target object URI is appended to the array. For Attributes of type "ListRelationship”, an array of normalized Linked Entities is appended, which hold the data corresponding to each of the target URIs found within its objectList.
[
"tyreTreadDepths": {"type": "ListProperty","valueList": [300, 300, 120, 6],"unitCode": "MMT"},"passengers": {"type": "Relationship","objectType": "Person","object": ["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"]},"route": {"type": "ListRelationship","objectType": "City","objectList": [{"object": "urn:ngsi-ld:City:Antwerp"},{"object": "urn:ngsi-ld:City:Rotterdam"}{"object": "urn:ngsi-ld:City:Amsterdam"}]},"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},{
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]
},
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]
Normalized Representation when Language Filter is used
When the Language Filter (see clause 4.15) is used, Properties of type "LanguageProperty" are returned as type "Property", and their languageMaps are reduced to simple strings. For example if the language filter lang=fr is specified, only the value for French language is present.
"tyreTreadDepths": {"type": "ListProperty","valueList": [300, 300, 120, 6],"unitCode": "MMT"},"passengers": {"type": "Relationship","objectType": "Person","object": ["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"]},"route": {"type": "ListRelationship","objectType": "City","objectList": [{"object": "urn:ngsi-ld:City:Antwerp"},{"object": "urn:ngsi-ld:City:Rotterdam"}{"object": "urn:ngsi-ld:City:Amsterdam"}]},"@context": [
Concise Representation
The concise representation is a terser, lossless form of the normalized representation, where redundant Attribute type members are omitted and the following rules are applied:
"tyreTreadDepths": {"valueList": [300, 300, 120, 6],"unitCode": "MMT"},"passengers": {"objectType": "Person","object": ["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"]},"route": {"objectType": "City","objectList": ["urn:ngsi-ld:City:Antwerp","urn:ngsi-ld:City:Rotterdam","urn:ngsi-ld:City:Amsterdam"]
"@context": [
Concise Representation when inline Linked Entity retrieval is used
When inline Linked Entity retrieval (see clause 4.5.23.2) is specified, any Relationships which target Entities stored locally or include an objectType Attribute are returned in an expanded format. The concise Linked Entity data corresponding to the Relationship's target object URI is returned within an entity sub-Attribute. Attributes of type "ListRelationship” are returned within an entityList sub-Attribute which in turn holds an ordered array of the Linked Entities in the concise format corresponding to each of the targetobjectList URIs.
"tyreTreadDepths": {"valueList": [300, 300, 120, 6],"unitCode": "MMT"},"passengers": {"objectType": "Person","object": ["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"],"entity": [{
]},"route": {"objectType": "City","objectList": ["urn:ngsi-ld:City:Antwerp","urn:ngsi-ld:City:Rotterdam","urn:ngsi-ld:City:Amsterdam"],"entityList": [{
"name": " Antwerp"
},
"name": "Rotterdam
"name": "Amsterdam"
]},
Concise Representation when flattened Linked Entity retrieval is used
When flattened Linked Entity retrieval (see clause 4.5.23.3) is specified, an array of concise Entities is returned. Whenever a Relationship Attribute targets an Entity stored locally or includes an objectType, an additional concise Linked Entity holding data corresponding to the Relationship's target object URI is appended to the response. For Attributes of type "ListRelationship”, an array of concise Linked Entities is appended to the response which hold the data corresponding to each of the target URIs found within its objectList.
[
"tyreTreadDepths": {"valueList": [300, 300, 120, 6],"unitCode": "MMT"},"passengers": {"objectType": "Person","object": ["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"]},"route": {"objectType": "City","objectList": ["urn:ngsi-ld:City:Antwerp","urn:ngsi-ld:City:Rotterdam","urn:ngsi-ld:City:Amsterdam"]
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},{
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]
"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]
Concise representation when Language Filter is used
The rules apply as defined in the previous examples. For example if the language filter lang=fr is specified.
"tyreTreadDepths": {"valueList": [300, 300, 120, 6],"unitCode": "MMT"},"passengers": {"objectType": "Person","objectList": ["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"]},"route": {"objectType": "City","objectList": ["urn:ngsi-ld:City:Antwerp","urn:ngsi-ld:City:Rotterdam","urn:ngsi-ld:City:Amsterdam"]},
Simplified Representation
The simplified representation is a collapsed, lossy representation of an Entity, which focuses on Property Values and Relationship objects present at the first level of the graph only.
"tyreTreadDepths": [300, 300, 120, 6],"passengers": ["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"],"route": ["urn:ngsi-ld:City:Antwerp","urn:ngsi-ld:City:Rotterdam","urn:ngsi-ld:City:Amsterdam"],
Simplified Representation when inline Linked Entity retrieval is used
When inline Linked Entity retrieval (see clause 4.5.23.2) is specified, any Relationships which target Entities stored locally or include an objectType Attribute are returned as a JSON object holding key-value pairs corresponding to the data from the Relationship's target object URI in simplified format. Attributes of type "ListRelationship” are returned as array of JSON objects each holding key-value pairs corresponding to the data obtained from the target objectList URIs.
"id": "urn:ngsi-ld:OffStreetParking:Downtown1","type": " OffStreetParking",
"tyreTreadDepths": [300, 300, 120, 6],"passengers": [{"id": "urn:ngsi-ld:Person:Alice","type": "Person","name": "Alice"},{"id": "urn:ngsi-ld:Person:Bob","type": "Person","name": "Bob"}],
{
Simplified Representation when flattened Linked Entity retrieval is used
When flattened Linked Entity retrieval (see clause 4.5.23.3) is specified, an array of JSON Objects is returned. Whenever a Relationship Attribute targets an Entity stored locally or includes an objectType, an additional JSON Object of key-value pairs holding data corresponding to the Relationship's target object URI is appended to the response. For Attributes of type "ListRelationship”, an array of JSON Objects each holding key-value pairs corresponding to the data obtained from the target objectList URIs is appended to the response.
[
{"id": "urn:ngsi-ld:Vehicle:A4567","type": "Vehicle","brandName": "Mercedes","street": {"languageMap": {"fr": "Grand Place","nl": "Grote Markt"}}"isParked": "urn:ngsi-ld:OffStreetParking:Downtown1","category": {"vocab": "non-commercial"},"tyreTreadDepths": [300, 300, 120, 6],"passengers": ["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"],"route": ["urn:ngsi-ld:City:Antwerp","urn:ngsi-ld:City:Rotterdam","urn:ngsi-ld:City:Amsterdam"],"@context": ["http://example.org/ngsi-ld/latest/commonTerms.jsonld","http://example.org/ngsi-ld/latest/vehicle.jsonld","http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},{"id": "urn:ngsi-ld:OffStreetParking:Downtown1","type": " OffStreetParking",
},{"id": "urn:ngsi-ld:Person:Alice","type": "Person","name": "Alice"}{"id": "urn:ngsi-ld:Person:Bob","type": "Person","name": "Bob"},{
"name": " Antwerp"
},
"name": "Rotterdam
"name": "Amsterdam"
Simplified Representation of Natural Language Attributes
The simplified natural language representation is a collapsed representation of an Entity, which focuses on Property Values and Relationship objects present at the first level of the graph, and where languageMaps are reduced to simple string properties. For example if the language filter lang=fr is specified.
"tyreTreadDepths": [300, 300, 120, 6],"passengers": ["urn:ngsi-ld:Person:Alice", "urn:ngsi-ld:Person:Bob"],"route": ["urn:ngsi-ld:City:Antwerp","urn:ngsi-ld:City:Rotterdam","urn:ngsi-ld:City:Amsterdam"],
Multiple attribute example
Below is an example, where the speed of the car is provided by two different sources. As both may be relevant at the same time, there are two individual attribute instances for speed; each is identified by a datasetId and both instances are represented in an array. The datasetId enables individually creating, updating and deleting a particular instance without affecting the instance from another source.
Simplified Representation of a multi-attribute
The simplified representation is a collapsed, lossy representation of an Entity, which focuses on Property Values and Relationship objects present at the first level of the graph only.
Normalized Representation
The normalized representation is a lossless representation of an Entity, where every Property is defined by a type and a value and every Relationship is defined by a type and an object.
Below there is a representation of an Entity of Type "OffStreetParking". It can be observed that the @context is composed of two different elements, the Core one and the vocabulary-specific one.
Concise Representation
The concise representation is a terser, lossless form of the normalized representation, where redundant Attribute type members are omitted and the following rules are applied:
Simplified representation
The Simplified Representation (also known as "keyValues") is a lossy, collapsed representation of an Entity, which focuses on Property Values and Relationship objects present at the first level of the graph only.
Normalized GeoJSON Representation
The normalized GeoJSON representation of a single Entity is defined as a single GeoJSON Feature object as follows:
The GeoJSON representation of multiple Entities is defined as a GeoJSON FeatureCollection object containing an array of GeoJSON features corresponding to the individual Entity representations.
Concise GeoJSON Representation
The concise GeoJSON representation of a single Entity is defined as a single GeoJSON Feature object as follows:
The concise GeoJSON representation of multiple Entities is defined as a GeoJSON FeatureCollection object containing an array of GeoJSON features corresponding to the individual Entity representations in concise GeoJSON format.
Simplified GeoJSON Representation
The simplified GeoJSON representation of a single Entity is defined as a single GeoJSON Feature object where the properties represent a collapsed representation of the Entity, which focuses on Property Values and Relationship objects present at the first level of the graph.
The simplified GeoJSON representation of multiple Entities is defined as a GeoJSON FeatureCollection object containing an array of GeoJSON features corresponding to the individual Entity representations in simplified GeoJSON format.
The disposition of the @context can be as an inline JSON object, as a dereferenceable URI or as a (multiple) combination of both. In the examples above the @context is provided through several dereferenceable URIs. The resulting @context (obtained by merging the content of the resource referenced by the referred URIs) is shown below.
Below there is an example representation of a Context Source Registration. It makes use of the @context formerly described.
The Registration is referring to a Temporal Context Source capable of providing temporal information from Entities of type "Vehicle" and "OffStreetParking", meeting certain id requirements. More concretely, it can only provide the referenced Properties and Relationships. Temporal information is provided for the given managementInterval, i.e. related to createdAt and modifiedAt Temporal Properties. The managementInterval is specified as an open interval, so only a starting point is given. In addition, the Registration example covers a particular geographical area.
Below there is an example of a Context Subscription. It makes use of the @context formerly described.
The subject of the Context Subscription is Entities of Type Vehicle which speed is greater than 50, and located close to a certain area defined by a reference spatial point. Every time the speed (watched Attribute) of a concerned vehicle, changes, a new notification (including the new speed value) will be received in the specified endpoint.
This clause introduces some simple usage examples of the NGSI-LD API (HTTP REST binding). They are not intended to be exhaustive but just a sample for helping readers to understand better the present document. ETSI ISG CIM published a Developer's Primer with many more examples, see ETSI GR CIM 008 [i.21].
[{"id": "urn:ngsi-ld:Vehicle:B9211","type": "Vehicle","brandName": "Volvo","@context": ["http://example.org/ngsi-ld/latest/vehicle.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}]
[{"id": "urn:ngsi-ld:Vehicle:B9211","type": "Vehicle","brandName": "Volvo","@context": ["http://example.org/ngsi-ld/latest/vehicle.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},{"id": "urn:ngsi-ld:Vehicle:A456","type": "Vehicle","brandName": "Mercedes","@context": ["http://example.org/ngsi-ld/latest/vehicle.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}]
[{"id": "urn:ngsi-ld:Vehicle:B9211","type": "Vehicle","speed": [{"type": "Property","value": 120,"observedAt": "2018-08-01T12:03:00Z"},{"type": "Property","value": 80,"observedAt": "2018-08-01T12:05:00Z"},{"type": "Property","value": 100,"observedAt": "2018-08-01T12:07:00Z"}],"@context": ["http://example.org/ngsi-ld/latest/vehicle.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}]
[{"id": "urn:ngsi-ld:Vehicle:B9211","type": "Vehicle","speed": [{"type": "Property","value": 120,"observedAt": "2018-08-01T12:03:00Z"},{"type": "Property","value": 80,"observedAt": "2018-08-01T12:05:00Z"},{"type": "Property","value": 100,"observedAt": "2018-08-01T12:07:00Z"}],"@context": ["http://example.org/ngsi-ld/latest/vehicle.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}]
[{"id": "urn:ngsi-ld:Vehicle:B9211","type": "Vehicle","speed": {"type": "Property","values": [[120,"2018-08-01T12:03:00Z"],[80,"2018-08-01T12:05:00Z"],[100,"2018-08-01T12:07:00Z"]]},"@context": ["http://example.org/ngsi-ld/latest/vehicle.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}]
{"id": "urn:ngsi-ld:EntityTypeList:34534657","type": "EntityTypeList","typeList": ["Vehicle","OffStreetParking","http://example.org/parking/ParkingSpot"]}
[{"id": "http://example.org/vehicle/Vehicle","type": "EntityType","typeName": "Vehicle","attributeNames": ["brandName","isParked","location","speed"]},{"id": "http://example.org/parking/OffStreetParking","type": "EntityType","typeName": "OffStreetParking","attributeNames": ["availableSpotNumber","isNextToBuilding","location","totalSpotNumber"]},{"id": "http://example.org/parking/ParkingSpot","type": "EntityType","typeName": "http://example.org/parking/ParkingSpot","attributeNames":["location","http://example.org/parking/status"]}]
{"id": "http://example.org/vehicle/Vehicle","type": "EntityTypeInfo","typeName": "Vehicle","entityCount": 2,"attributeDetails": [{"id": "http://example.org/vehicle/brandName","type": "Attribute","attributeName": "brandName","attributeTypes": ["Property"]},{"id": "http://example.org/vehicle/isParked","type": "Attribute","attributeName": "isParked","attributeTypes": ["Relationship"]},{"id": "https://uri.etsi.org/ngsi-ld/location","type": "Attribute","attributeName": "location","attributeTypes": ["GeoProperty"]},{"id": "http://example.org/vehicle/speed","type": "Attribute","attributeName": "speed","attributeTypes": ["Property"]}]}
{"id": "urn:ngsi-ld:AttributeList:56534657","type": "AttributeList","attributeList": ["brandName","isParked","location","speed","http://example.org/parking/status"]}
[{"id": "http://example.org/vehicle/brandName","type": "Attribute","attributeName": "brandName","typeNames": ["Vehicle"]},{"id": "http://example.org/vehicle/isParked","type": "Attribute","attributeName": "isParked","typeNames": ["Vehicle"]},{"id": "https://uri.etsi.org/ngsi-ld/location","type": "Attribute","attributeName": "location","typeNames": ["Vehicle","OffStreetParking","http://example.org/parking/ParkingSpot"]},{"id": "http://example.org/vehicle/speed","type": "Attribute","attributeName": "speed","typeNames": ["Vehicle"]},{"id": "http://example.org/parking/status","type": "Attribute","attributeName": "http://example.org/parking/status","typeNames": ["http://example.org/parking/ParkingSpot"]}]
{"id": "http://example.org/vehicle/brandName","type": "Attribute","attributeName": "brandName","attributeTypes": ["Property"],"typeNames": ["Vehicle"],"attributeCount": 2}
[{"id": "urn:ngsi-ld:Vehicle:A4567","type": "Vehicle","marque": "Opel Karl","@context": ["http://example.org/ngsi-ld/latest/vehicle.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}]
[{"id": "urn:ngsi-ld:Vehicle:B9211","type": "Vehicle","speed": {"type": "Property","max": [[120,"2018-08-01T12:00:00Z","2018-08-01T12:04:00Z"],[100,"2018-08-01T12:04:00Z","2018-08-01T12:08:00Z"]],"avg": [[120,"2018-08-01T12:00:00Z","2018-08-01T12:04:00Z"],[90,"2018-08-01T12:04:00Z","2018-08-01T12:08:00Z"]]},"@context": ["http://example.org/ngsi-ld/latest/vehicle.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}]
[{"id": "urn:ngsi-ld:OffStreetParking:Downtown1","type": "OffStreetParking","scope": "/Madrid/Centro","name": {"type": "Property","value": "Downtown One"},"availableSpotNumber": {"type": "Property","value": 121,"observedAt": "2017-07-29T12:05:02Z","reliability": {"type": "Property","value": 0.7},"providedBy": {"type": "Relationship","object": "urn:ngsi-ld:Camera:C1"}},"totalSpotNumber": {"type": "Property","value": 200},"location": {"type": "GeoProperty","value": {"type": "Point","coordinates": [-8.5,41.2]}},"@context": ["http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},{"id": "urn:ngsi-ld:OffStreetParking:Corte4","type": "OffStreetParking","scope": ["/Madrid/Cortes","/Company894/UnitC"],"name": {"type": "Property","value": "Corte4"},"availableSpotNumber": {"type": "Property","value": 121,"observedAt": "2017-07-29T12:05:02Z","reliability": {"type": "Property","value": 0.7},"providedBy": {"type": "Relationship","object": "urn:ngsi-ld:Camera:C1"}},"totalSpotNumber": {"type": "Property","value": 100},"location": {"type": "GeoProperty","value": {"type": "Point","coordinates": [-8.6,41.3]}},"@context": ["http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}]
[{"id": "urn:ngsi-ld:Vehicle:B9211","type": "Vehicle","scope": {"type": "Property","values": [["/Madrid/Centro","2018-08-01T11:00:00Z"]]},"speed": {"type": "Property","values": [[30,"2018-08-01T12:03:00Z"],[60,"2018-08-01T12:05:00Z"],[50,"2018-08-01T12:07:00Z"]]},"@context": ["http://example.org/ngsi-ld/latest/vehicle.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]},{"id": "urn:ngsi-ld:Vehicle:A8311","type": "Vehicle","scope": {"type": "Property","values": [[["/Madrid/Centro","/Company123/UnitA"],"2018-08-01T12:10:00Z"]]},"speed": {"type": "Property","values": [[40,"2018-08-01T12:12:00Z"],[60,"2018-08-01T12:14:00Z"],[50,"2018-08-01T12:16:00Z"]]},"@context": ["http://example.org/ngsi-ld/latest/vehicle.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}]
Vehicle B9211 has already been within the Scope /Madrid/Centro before the beginning of the request interval, whereas Vehicle A8311 only entered the Scope within the request interval. Thus in the latter case only Property values are included that have been observed after the Scope has become valid.
In NGSI-LD, a TemporalProperty is represented only by its value, i.e. no sub-Properties of TemporalProperty nor sub-Relationships of TemporalProperty can be conveyed. In more formal language, a TemporalProperty does not allow reification. The term TemporalProperty has been reserved for non-reified structural timestamps (observedAt, createdAt, modifiedAt, deletedAt), which capture the temporal evolution of Attributes. Only such structural timestamps can be used as timeproperty in Temporal Queries as mandated by clause 4.11.
The following example shows how time values (Date, Time, or DateTime) can be represented in NGSI-LD as reified Properties. A reified Property whose value is assigned the JSON type Date, DateTime or Time, can use the JSON-LD @value syntax structure, as shown by the example below:
One other way to achieve the same result would be to use JSON-LD “type coercion”. With type coercion, values with a special data type are defined with @type in the @context. This enforces the correct type for any occurrence. An example of such a @context fragment is shown below:
The above does not work, when using the @context to perform compaction, in the normalized and compact representation of NGSI-LD, due to reification of the Property, because in this case testedAt is a complex JSON object, which cannot be compacted to a DateTime type as the @context specifies. Thus, the full URI http://example.org/test/testedAt is kept, instead of the short name testedAt. In summary, user @contexts used for the normalized and compact NGSI-LD representation cannot use the JSON-LD type coercion feature.
However, in the simplified (keyValue) representation case, such an @context with the specification of testedAt could be used, as there is no reification.
As a side note, when using the above @value + @type approach, since type is mapped to @type in the NGSI-LD core @context, JSON-LD compaction will result in the following compacted value, instead of the one shown above, because @type is compacted to type:
When expanding or compacting JSON-LD terms, the JSON-LD @context to be used is always the one provided in the current API request. For the benefit of users and implementers the following examples illustrate this concept.
The scenario starts with the creation of an Entity using a JSON-LD @context as follows:
{"id": "urn:ngsi-ld:OffStreetParking:Downtown1","type": "OffStreetParking","name": {"type": "Property","value": "Downtown One"},"availableSpotNumber": {"type": "Property","value": 121,"observedAt": "2017-07-29T12:05:02Z"},"totalSpotNumber": {"type": "Property","value": 200},"@context": ["http://example.org/ngsi-ld/latest/parking.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}
The content of the @context utilized for the referred Entity creation (at http://example.org/ngsi-ld/latest/parking.jsonld) is as follows:
"OffStreetParking": "http://example.org/parking/OffStreetParking","availableSpotNumber": "http://example.org/parking/availableSpotNumber","totalSpotNumber": "http://example.org/parking/totalSpotNumber","name": "http://example.org/parking/name"
At Entity creation time the implementation will perform the expansion of terms using the JSON-LD @context depicted above.
Now it is needed to retrieve our initial Entity. For retrieving such Entity, this time, a different JSON-LD @context is going to be utilized, as follows:
"OffP": "http://example.org/parking/OffStreetParking","ava": "http://example.org/parking/availableSpotNumber","total": "http://example.org/parking/totalSpotNumber"
This new @context, even though it makes use of the same set of Fully Qualified Names, is defining new short strings as terms. The reasons for that could be multiple: to facilitate data consumption by clients, to save some bandwidth, to enable a more (or less) human-readable response payload body in a language different than English, etc.
In this particular case, the result of the Entity retrieval will be as depicted below. It can be observed that the terms defined by the JSON-LD @context provided at retrieval time are used to render the Entity content (compaction), and not the terms that were provided at creation time (which may be no longer known by the broker).
It is also interesting to note that the @context array of the response payload body contains, indeed, our header-supplied @context:
{"id": "urn:ngsi-ld:OffStreetParking:Downtown1","type": "OffP","name": {"type": "Property","value": "Downtown One"},"ava": {"type": "Property","value": 121,"observedAt": "2017-07-29T12:05:02Z"},"total": {"type": "Property","value": 200},"@context": ["http://example.org/ngsi-ld/latest/parking-abbreviated.jsonld","https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"]}
Another interesting case to note is the one when an @context with no matching terms or no @context at all is supplied. See the following example:
{"id": "urn:ngsi-ld:OffStreetParking:Downtown1","type": "http://example.org/parking/OffStreetParking","http://example.org/parking/name": {"type": "Property","value": "Downtown One"},"http://example.org/parking/availableSpotNumber": {"type": "Property","value": 121,"observedAt": "2017-07-29T12:05:02Z"},"http://example.org/parking/totalSpotNumber": {"type": "Property","value": 200},"@context": "https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld"}
In this particular case it can be observed that the user names (Entity Type, Attributes) in the response payload body have not been compacted, and as a result the Fully Qualified Names are included. However, the core API terms have been compacted, as the Core @context is always considered to be implicitly present if not specified explicitly (and that is why it is included in the JSON-LD response, as mandated by the specification).
The JSON-LD Specification [2] states clearly that only one HTTP Link header with the link relationship <http://www.w3.org/ns/json-ld#context> is required to appear. Such statement has implications in terms of providing the JSON-LD @context when using the NGSI-LD API. The main implication is that if the @context is a compound one, i.e. an @context which references multiple individual @context, served by resources behind different URIs, then a wrapper @context has to be created and hosted. The final aim is that only one @context is referenced from the JSON-LD Link header. This can be illustrated with an example:
Imagine that it is desired to create an Entity providing @context terms which are defined in two different JSON-LD @context resources:
If a developer wants to reference these two @context resources from a Link header, a wrapper @context can be easily created as follows:
As such wrapper @context needs to be referenced from a Link header by using a URI, then it will have to be hosted at some place on the Web. Usually, developers will host @context using popular and simple solutions such as GitHub or GitLab pages. As a result, developers will be able to use @context in queries or when using "application/json" as main content type managed by their applications.
It is a good practice to include the Core @context in the wrapper @context so it can be used, off-the-shelf, by external JSON-LD processing tools. However, it should be noted this is not necessary for NGSI-LD, as the Core @context is always implicitly included.
Then, using such wrapper @context, (in our example hosted at https://hosting.example.com/ngsi-ld/v1/wrapper-context.jsonld), the developer will be able to issue requests like:
Observe that in this case the broker is responding with the same wrapper @context in the Link header of the HTTP Response or within the JSON-LD response payload body (when MIME type accepted is "application/ld+json"). However, that could not be always the case, as there could be situations where the broker could need to provide a wrapper @context hosted by itself, for instance, when there are inline @context terms or when the Core @context has not been previously included by the wrapper @context (not recommended) provided within developer's requests.
JSON-LD Specification [2] says that "If a term is redefined within a context, all previous rules associated with the previous definition are removed". In addition, it is stated that "Multiple contexts may be combined using an array, which is processed in order".
In contrast to the JSON-LD Specification, the NGSI-LD specification states that the Core @context is protected and has to remain immutable. This essentially means that the Core @context has final precedence and, therefore, is always to be processed as the last one in the @context array. For clarity, data providers should place the Core @context in the final position. From the point of view of Data providers, care has to be taken so that there are no unexpected or undesired term expansions. See the following example:
The problem of the example above is that the term "location" is defined in both the Core @context and the schema.org user @context and the Core @context takes precedence for the expansion. In these situations, if one wanted to refer to the schema.org "location", the solution is to prefix the conflicting terms, so that there cannot be any clashing. Therefore, if the intent is to refer to https://schema.org/location throughout, the example above can be modified as shown below:
Note that the Core @context should be placed in the last position of the @context array. NGSI-LD implementations are required to render content following this approach, which has been undertaken in order to maximize compatibility with JSON-LD processing tools. This example works because the "schema:" prefix has already been defined by the schema.org @context.
Annex D
(informative):
Transformation Algorithms
These algorithms are informative but NGSI-LD implementations should aim at either implementing them as they are described here or devising similar algorithms which take exactly the same input and provides exactly the same output (or an equivalent one as per the JSON-LD specification [2]).
This algorithm takes as input an NGSI-LD graph which top level node is a particular Entity and returns as output a JSON-LD document which represents all the data associated to the entity. The JSON-LD document (and its associated @context) corresponds to a representation of the Entity in JSON-LD as per the NGSI-LD Information Model.
Let:
The algorithm should run as follows, provided all the preconditions defined above are satisfied:
Let Ps be the Property that has to be transformed. It is defined by (P, "AliasP", V, D), where P denotes a Property Type Id, "AliasP" is the Property name, V is the Property Value and D is the Property Value's data type.
Ps might be associated to extra Properties or Relationships.
Let O be the output JSON-LD object and C the associated JSON-LD context:
Let Rs be the Relationship that has to be transformed. It is defined by (R, "AliasR", Robj), where R denotes a Relationship Type Id, "AliasR" is the Relationship's name and Robj is the identifier of the target object of the Relationship.
Rs might be associated to extra Properties or Relationships.
Let O be the output JSON-LD object and C the current JSON-LD context:
Annex
E (informative):
RDF-compatible specification of NGSI-LD meta-model
The content of this annex is now in ETSI GS CIM 006 [i.8].
Annex F
(informative):
Conventions and syntax guidelines
When new terms are defined, they are marked in bold, and terms are capitalized thereafter.
API Parameter names are always in lowercase.
Entity Types are defined using lowercase but with a starting capital letter.
JSON-LD nodes and terms are always defined using camel case notation starting with lower case.
When referring to special terms, data types or words defined previously in the present document or by other referenced specifications, italics format is used.
When referring to literal strings double quotes are used.
When referring to the JSON-LD Context the mnemonic text string @context is used as a placeholder.
All the dates and times are given in UTC format.
The measurement units used in the API are those defined by the International System of Units.
When defining application-specific elements or API extensions the same conventions and syntax guidelines should be followed.
Annex
G (informative):
Localization and Internationalization Support
These algorithms described below are informative, but NGSI-LD implementations should aim at either implementing them as they are described here or providing equivalent @context elements for their payloads to provide interoperability with their internationalized context entities.
Since Internationalization is not core to context information management, any direct support within NGSI-LD systems is limited. Annex G proposes a series of best practices for maintaining, querying and displaying interoperable internationalized data.
The content of the @context utilized for the referred Entities within these examples uses pre-existing URNs used for internationalization and is as follows:
"inLanguage": "http://schema.org/inLanguage","sameAs": "http://schema.org/sameAs"
Where a context Entity is associated with a single natural language, include a well-defined Property indicating the natural language of the content. For example an Event taking place in French may be defined as follows:
Where a Property of a context entity can be associated to one more natural language, include additional metadata as a sub-Property of that Property. For example, a Hotel with booking forms available in English, French and German may be defined as follows:
Where equivalent context entities in multiple natural languages exist, they may be associated with each other through the use of a one-to-many relationship, where each relationship holds an additional sub-Property indicating the natural language of the equivalent entities.
For example, three Events (such as a walking tour which is available in English, French and German) may be associated to each other as follows:
All strings within an NGSI-LD system are defined and sorted as a sequence of Unicode characters. As such there is no simple collation mechanism to query entities ignoring case, diacritic marks or matching diphthong single letters such as the German "ö" to also match with "oe".
Many databases support a degree of natural language support, in general collation support will always depend upon the underlying database and as such will vary from implementation to implementation. This therefore and cannot be standardized and exposed as part of the context information management API. Furthermore, collation is slow and processor intensive, and for massive systems is better achieved using a separate index.
For systems that require it, this clause proposes a mechanism as an extension to a NGSI-LD Context Broker which can be modified and used to offer collation support to the natural language attributes found within context entities where necessary through creating, querying and maintaining an additional property of a property for collated attributes.
Other substitutions could be made where local spelling rules vary (for example different for German ö = oe).
Create a simple forwarding proxy around the NGSI-LD system. For any urls with a q param (and a collate flag) run a clean-up of the q param and amend the query string:
The following request on the proxy:
is altered on the fly and is sent to the NGSI-LD system as shown:
Once again, the substitutions to make to the query string will depend on the rules of the natural language to be supported.
Context data entities are designed to be interoperable and therefore all dates are held as UTC dates, all currency amounts are held as JSON numbers (with the unitCode property-of-a-property available to hold the currency), etc. Localization should not occur within the context data entities themselves. Offering fully localized responses is not a concern of the NGSI-LD API.
If localization support is necessary, a simple proxying a conversion mechanism could be used to amend the context data received from the NGSI-LD system before being passed to a third party system for display.
For example, if a system needs to display DateTime data in Islamic Date format
The following request on the proxy:
is forwarded unaltered and is sent to the NGSI-LD system as shown:
The response from the NGSI-LD system is always in UTC format:
And the proxy can be used to update this to the desired format:
Using an internationalization script such as the following:
It should be noted that post-localization, the transformed date is no longer valid NGSI-LD.
Annex H
(informative):
Suggested actuation workflows
Actuators are things that can change their state (light on/off) or execute actions (move forward, detect face, etc.).
There is currently no explicitly and precisely specified support for actuation in the NGSI-LD API. Thus, this clause describes some conventions that represent a proposed best-practice about how NGSI-LD API and data models can be used for the interaction between applications and actuators represented by NGSI-LD Entities.
The conventions and approach described in this clause are not powerful enough to implement complex actuation jobs that depend on each other and, for instance, make actuation decisions conditional on the outcome of other actuations, unless that behaviour is implemented in a custom way within the application logic. The concept of a more evolved service execution logic, being a first-class citizen of the NGSI-LD API and able to offer more structured building blocks for actuation, is outside the scope of this annex.
An NGSI-LD system that comprises an actuator and supports actuation workflows is represented as one or more NGSI-LD Entities, plus a Context Broker, a Context Source or a Context Producer, and a Context Consumer, which collaborate.
The interaction between actuator and Context Consumer needs to be bidirectional. Thus, actuators are triggered by the reception of actuation-specific commands (e.g. "set the on state of the lamp to false", to turn the light off) that are encoded as NGSI-LD data, following a suggested data model. They respond with feedback, similarly encoded as NGSI-LD data.
Command feedbacks may serve to control the maximum operations rate a controlling application needs to achieve, and different levels of feedback can be requested, by associating a specific Quality of Service value to the command:
In this architecture, the application acts as Context Consumer, and the terms are used interchangeably.
Commands are sent to the Context Broker by the Context Consumer, using the standard NGSI-LD API and a suggested convention for representing them. In turn, feedback about command execution is received by the Context Consumer, both as continuous status updates and/or a final command result.
More specifically, the component that handles direct communication with the actuator is the Context Source or the Context Producer: it uses an actuator-specific protocol to control the actuator and get responses and updates from it, i.e. from the real system. Such Context Source/Consumer or Context Producer/Storage acting as a proxy or intermediary to the actuator is referred to, in the following, as Context Adapter.
Thus, the Context Adapter is able to use the NGSI-LD API to receive NGSI-LD command requests from the NGSI-LD Context Broker and send back command status and result to it, as well as using an actuator-specific protocol to communicate with the actuator.
The NGSI-LD Context Broker is responsible for handling direct communication with the Context Consumer.
Thus, to support actuation, there is a need to specify:
The NGSI-LD system has, in addition to the usual NGSI-LD Properties representing the actuator's status, a set of additional, dedicated NGSI-LD Properties associated with:
The structure of the commands needs to be specified, but not the internal format of their payloads. By using commands with a custom payload, one can support all kinds of operations, for example:
The data model for command requests, status and responses has to include metadata such as the QoS of the command, its identifier, and the custom payload itself.
Both the requests/responses and the list of commands the NGSI-LD system is able to support can be represented with additional NGSI-LD Properties, as follows.
The additional Property dedicated to the list of available commands is as follows:
It is a Property whose value is an array of Strings, each string representing the unique name of a supported command.
For each available command, a set of three endpoints is to be additionally created within the NGSI-LD system, by means of three dedicated Properties per command. The first endpoint will manage that command's requests, the second endpoint will manage its status, and the third endpoint will manage command's results.
This convention dictates that:
Each endpoint can receive multiple requests or responses, and it supports queueing of messages. For example, the command moveToLocation may receive a sequence of requests that are to be stored in an array and orderly processed depending on the arrival timestamps. A number of respective responses may be produced, as well. Thus, each endpoint, represented by its dedicated NGSI-LD Property, exploits the multi-Attribute feature (see clause 4.5.5), as follows:
Command Request endpoint
Command Status endpoint
Command Result endpoint
Usually, the Context Adapter (or the actuator behind it), upon receiving a command request with a specific datasetId, will then generate status and result with the same datasetId, so that, when the status/result is received by the application, it can link it back to the corresponding command that is generating the received feedback. The value of the request, status and result is generic, and it is up to the specific application to define useful values. As an example, the PackML language for the control of packaging machines defines a set of possible values for statuses during an actuation workflow.
In summary, the suggested convention prescribes a commands property that contains a list of commands supported by the actuator. For each of these commands, the convention requires a command endpoint consisting of three properties, the name of the command, e.g. "turn-on", the status property, which is the name of the command with "-STATUS" as suffix, and the result, which is the name of the command with "-RESULT" as suffix. Nevertheless, it is noted that such suffixes are just a convention to distinguish the endpoints. So far, two practical implementations exist, see clauses H.5 and H.6, that adopt the general scheme of this convention, with minor deviations. In fact, this convention is derived as a generalization that leverages the full potential of NGSI-LD sub-Attributes and multi-Attributes.
This convention can be leveraged by two different communication models:
For the interaction to work, the Context Adapter, acting as a proxy to the actuator, subscribes to all command properties; in EXAMPLE 1 of clause H.3.2, these are "set-brightness", "set-saturation", "set-hue" and "turn-on". When the application, acting as the actuation client, updates the value of a command property, the Context Adapter will receive the notification with the new value. This will be translated into the proprietary format and forwarded to the actuator using the actuator-specific protocol. The application in turn can subscribe to the command status and the result. The Context Adapter updates the status of the actuation during the execution of the command, which is primarily relevant in the case of longer-lasting actuations, and finally updates the result once the actuation has been completed. If the application has subscribed to the status and result, it will receive the corresponding notifications. Independent of the command-related properties, the status of the actuator, held within its regular properties, will be updated.
The detailed workflow is depicted in Figure H.4.2‑1, and can be interpreted as follows:
The forwarding model uses registrations and forwarding of requests. Actuation of commands is provisioned via registration(s) to the NGSI-LD Registry done by the Context Adapter that states "I am responsible for command property <X>". When the Application changes the value of a command property, first the NGSI-LD Context Broker asks to the NGSI-LD Registry whether the property is delegated to some other component. The NGSI-LD Registry knows that property <X> of the Entity is delegated to the Context Adapter. Hence, the request is forwarded to the Context Adapter. Similar to the other communication model, the request will then be translated into the proprietary format and forwarded to the actuator using the actuator-specific protocol.
In this model, the NGSI-LD Entity is distributed over two different components, because some of its properties live in the Context Brokers and other properties live in the Context Adapter, as indicated in Figure H.4.3‑1 with a dotted rectangle.
The rest of the workflow, i.e. delivery of status and result messages to the application, is done similarly to the subscription/notification model. The detailed workflow is depicted in Figure H.4.3‑1, and can be interpreted as follows:
The Fed4IoT project (https://fed4iot.org) leverages the NGSI-LD architecture and the subscription/notification workflow for actuation, in order to implement the concept of a Cloud of Things. It enables virtualization of existing IoT sensors/actuators through Virtual Things and IoT Brokers. IoT application developers can simply rent the Virtual Things and the Brokers their applications need.
The Fed4IoT's Cloud of Things is named VirIoT (https://github.com/fed4iot/VirIoT), and it is based on the concept of Virtual Silos as-a-service: isolated and secure IoT environments made of Virtual Things whose data can be accessed through standard IoT Brokers (oneM2M, NGSI, NGSI-LD, etc.).
In Figure H.5‑1 a diagram shows how VirIoT implements the concept of a large-scale and distribute NGSI-LD system that leverages the architecture and the workflow convention described in clause H.4.2.
All components encapsulate requests in a neutral-format message that leverages NGSI-LD Entities at its core. But, since VirIoT uses MQTT as its internal data distribution system, all information and actuation commands are encoded as NGSI-LD entities, plus an additional "meta header" that is used by the MQTT to publish and subscribe in a broadcast fashion to multiple vThings, because the same virtual sensor can be used by multiple applications at the same time.
For the actuation workflow, the "data" part of this message contains the command request, as specified in clause H.3, but with an additional value key that is the "command notification uri" (cmd-nuri), representing a location where feedback (status, result) should be sent by the ThingVisor. For example, the cmd-nuri contains the "data_in" MQTT topic of the issuing vSilo, so that command feedback (status and results) are sent to it, only, instead of being broadcasted to all subscribing applications.
VirIoT is agnostic to access control issues to a virtual actuator, since the relevant policies are implemented in the specific ThingVisor, which can grant tokens to execute actuation-commands to a subset of vSilos only, through preliminary exchange of specific actuation-commands (a kind of log-in).
Fed4IoT has developed several different ThingVisors (Context Adapters for different sensors and hardware): for example, lamp systems and robot devices are virtualized through specific ThingVisors, and applications can control the lighting system of a rented conference room or control camera and position of a bot by adding related virtual actuators to their vSilo.
The IoT Agent node library [i.22] introduces the concept of an IoT Agent, which is a component that lets a group of devices send their data to and be managed from a Context Broker using their own native protocols. Thus, it corresponds to the Context Adapter, and wires up the IoT devices so that measurements can be read and commands can be sent using NGSI-LD requests sent to an NGSI-LD compliant context Context Broker.
IoT Agents already exist or are in development for many IoT communication protocols and data models. Examples include the following:
This implementation follows the communication model described in clause H.4.3, as explained in Figure H.6‑1. In this workflow:
Provisioning of the devices will be carried out (via REST API) through IoT Agents, as well. This provisioning implies that, on the one hand, the corresponding entities (with their commands), that represent the devices, are generated in the Context Broker and, on the other hand, that the corresponding IoT Agent is configured for communication with the corresponding device, all in one provisioning step. Below, an example how to provision a device which supports start and stop commands is presented.
Annex I
(informative):
Change history
Date
|
Version
|
Information about changes
|
---|---|---|
February 2020
|
1.2.10
|
Early draft copied from API version 1.2.1
|
February 2020
|
1.2.11
|
Unicode characters. Query Language syntax changes to Attribute path, and
extension to accept specifying just Query or Geoquery when Querying
Entities
Acknowledgements to EU projects. Lightweight Figures
|
March 2020
|
1.2.12
|
Extending to other interactions the above changes to query entities
interaction
Changes to ABNF Query Language syntax to access complex objects value of
properties more easily
Generalized Notification Headers, in order to carry authentication etc.,
info
Novel &option=count and associated Header to indicate number of
Entities in response to a query
Novel/entityOperations/query and/temporal/entityOperations/query
endpoints to perform query via POST
Clarified attrs URL parameter behaviour
Support for Multiple Attributes
Support for Multiple Tenants
|
May 2020
|
Candidate 1.2.13
|
from 101r1: Multi-Attribute-Support-fix-in-4.5.5
from 102r1: Batch_Operation_Error_Codes
from 110r1: JSON-LD Validation clause
from 112r1: IRI Support for International Characters
from 115r2: More Core Context Changes
from 130: Entity Types
MQTT Notifications
GeoJSON Representation
|
9 July 2020
|
1.3.1
|
Technical Officer verifications for submission to editHelp! publication
pre-processing
|
August 2020
|
1.3.2
|
New baseline towards v1.4.1
|
November 2020
|
1.3.3
|
From 272r1: Support for natural languages via LanguageProperty; annex
G
|
December 2020
|
1.3.4
|
From 319: Align Table 6.8.3.2‑1 with clause 5.10.2 for
query via attrs
|
December 2020
|
1.3.4
|
From 310r2: Dot vs. comma in DateTime
|
December 2020
|
1.3.4
|
From 309r1: Remove sentences referring to old multi attributes
representation
|
December 2020
|
1.3.4
|
From 308r: id and type for JSON-LD compliance
|
December 2020
|
1.3.4
|
From 313r1: FIXES to Cross domain data model for LanguageProperties
Bug fixes and errata
|
December 2020
|
1.3.5
|
From 275r3: Temporal Aggregation Functions
|
December 2020
|
1.4.0
|
1.3.5 with small typos corrected, approved as 1.4.0
|
January 2021
|
1.4.1
|
ETSI Technical Officer review for ETSI EditHelp publication
pre-processing
|
March 2021
|
1.4.2
|
Editorial Changes, clarifications added, better references, figures
replacements and corrections, figures merged, typos, code identation
|
April 2021
|
1.4.2
|
Temporal Pagination
|
April 2021
|
1.4.2
|
Clarified behavior when multiple instances of the same Entity are in an
input array
|
July 2021
|
1.4.3
|
From 130r6: NGSI-LD Scope
|
July 2021
|
1.4.3
|
From 143r6: Storing, managing and serving @contexts
|
July 2021
|
1.4.3
|
From 120r4: API structuring
|
October 2021
|
1.4.4
|
From 156: Remove static elements from temporal representations
|
October 2021
|
1.4.4
|
From 155: Existence query
|
October 2021
|
1.4.4
|
From 152: Remove null value deletion
|
October 2021
|
1.4.4
|
From 151: attrs missing in core context
|
October 2021
|
1.5.1
|
ETSI Technical Officer review for ETSI EditHelp publication
pre-processing
|
November 2021
|
1.5.2
|
First early draft after EditHelp publication of V1.5.1 to prepare next
V1.6.1 publication
|
January 2022
|
1.5.3
|
Concise representation
|
May 2022
|
1.5.4
|
PUT/PATCH Entity
|
May 2022
|
1.5.4
|
Distributed operations
|
July 2022
|
1.5.5
|
From 99r6: Deletions and advanced notifications
|
July 2022
|
1.5.5
|
From 106r1: Workflow for actuation
|
July 2022
|
1.5.5
|
From 105r1: Context Source Info in Context Source Registration
|
July 2022
|
1.5.5
|
From 93r1: default context clarification
|
July 2022
|
1.5.5
|
From 91r1: CR_on_Scope_ABNF_format
|
Juy 2022
|
1.6.1
|
Final Technical Official check for EditHelp publication
|
October 2022
|
1.6.2
|
New early draft:
corrected Annex
C6 date representation
from 149r3: generalized description of @context in bullet lists
Fixed usage of NGSI-LD Null in Attributes’ definitions
|
December 2022
|
1.6.4
|
From 188r2_Registration_Clarifications
|
December 2022
|
1.6.4
|
From 182r2_Add_NGSI-LD_Roles_for_Context_Registration
|
December 2022
|
1.6.4
|
From 156r2 VocabProperty/URI type coercion
|
December 2022
|
1.6.4
|
177r2 Clarify usage of Accept, Content-Type and Linked @context when
forwarding to partial Context Brokers
|
December 2022
|
1.6.4
|
178 Add Batch Query to Federation Ops
|
December 2022
|
1.6.4
|
183r1 Clarify Temporal query behaviour
|
December 2022
|
1.6.4
|
149r4 Forbid scoped and nested @contexts
|
December 2022
|
1.6.4
|
023006 Fixing CSource registration example in C.3
|
December 2022
|
1.6.4
|
Fix: Tenants URI becomes String
|
December 2022
|
1.6.4
|
Fix: POST-QUERY-COUNT-PAGINATION
|
December 2022
|
1.6.4
|
Fix: CHECK-URI-PARAM
|
December 2022
|
1.6.4
|
Updated examples and text to context v1.7.jsonld
|
March 2023
|
1.6.6
|
CIM(23)000006_Adding_previousValue_to_GeoProperty_type_definition
|
March 2023
|
1.6.6
|
cSource -> CSource; “implementations shall do the following”
|
March 2023
|
1.6.7
|
000013r4_Updated_Distributed_Execution_Behaviour
|
March 2023
|
1.6.8
|
CIM(22)000195r3_type_passing_for_M2M_callReviewed
|
April 2023
|
1.6.9
|
Fixing URI🡪String datatypes
|
June 2023
|
1.7.2
|
CIM(23)000053r1_Entity_Graph_Retrieval (for FIWARE SUMMIT)
|
June 2023
|
1.7.3
|
000056r2_APIv172_towards_v18.docx (for FIWARE SUMMIT)
|
October 2023
|
1.7.4
|
From 25023r2: Use Temporal Evolution instead of Temporal Representation
+ Updated figures in clause 5
and 6
|
November 2023
|
1.7.5
|
From 68r5: Additional id only format and attribute projection via pick
and omit
From 121r1: Relationship as Array
From 123r1: URN Namespace Definitions
From 149r3: Allow Broader Local Requests
From 153r1: JsonProperty
From 159: Bug fixed in CIM 009: GeoJSON responses in figures
From 160: Replace Attribute fix
|
December 2023
|
1.7.6
|
From 164: Host alias /info Endpoint
From 154r2: EntityMap
Updated figure in clause 6.2
|
January 2024
|
1.7.7
|
From 168r1: 504 error instead of 503 in JSON-LD context endpoints
From 169r1: Allow forbidden characters
From 170: Remove Scope from PATCH /attrs operations
From 1005r2: URI for value of several attributes
From 173r2: Clarify match in distributed operations
From 174: Protect core context
From 25002r2: API Issue #10 Filter on value with specific datasetId
|
January 2024
|
1.7.8
|
From 164r5: fix Tenant in Host Alias (164) and /info/sourceIdentity
Endpoint + figure
Updated figure in clause 6.2
Updated figures in clause
4.2
|
January 2024
|
1.7.9
|
CIM(24)000007r2_Query_Language_Extension_for_Linked_Entity_Retrieval
|
January 2024
|
1.7.10
|
Internal revision, cleanup
|
January 2024
|
1.7.10
|
FIX: CIM(24)000015_Projection_attributes_error_messaging
|
January 2024
|
1.7.10
|
FIX: CIM(24)000014r1_POST_Query_Parameters
|
January 2024
|
1.7.11
|
TO revision
|
January 2024
|
1.7.12
|
ISG CIM revision and cleanup after TO revision. New keywords
|
February 2024
|
1.7.13
|
Footnotes in Tables
|
February 2024
|
1.7.15
|
Change of NGSILDTerm style to HTML Keyboard
|
February 2024
|
1.7.16
|
Added expiresAt to @context serving
|
Document history
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|