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.
NOTE:
In UML diagrams dotted arrows denote a response to a request.
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, as explained in clause 4.5.0. 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 Consumerexplicitly asks for their inclusion. Clause 6.3.11 defines the mechanism offered by the HTTP binding for such purpose.
Table 5.2.2‑1: Common members of NGSI-LD elements
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
string
|
DateTime (clause 4.6.3)
|
0..1
|
Entity creation timestamp. See clause 4.8.
|
deletedAt
|
string
|
DateTime (clause 4.6.3)
|
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).
|
modifiedAt
|
string
|
DateTime (clause 4.6.3)
|
0..1
|
Entity last modification timestamp. See clause 4.8.
|
When encoding NGSI-LD Entities, Context Source Registrations, Subscriptions and Notifications, as pure JSON-LD (MIME type “application/ld+json”),
an array (flattened to a single string if necessary), containing a user
@context
where present, and the core
@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.
Table 5.2.3‑1: JSON-LD @context tagged member
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
@context
|
URI, JSON Object, or JSON Array
|
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.
Table 5.2.4‑1: NGSI-LD Entity data type definition
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.
|
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
0..1
|
System temporal Property representing the expiration date for the storage of the Entity. See clause 4.22.
|
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.
|
scope
|
String or String[]
|
See clause 4.18
|
0..1
|
Scope.
|
Property or Property[] (see note 1)
|
See datatype definitions in clause 5.2.5
|
0..N
|
Property as mandated by clause 4.5.2.
|
|
GeoProperty or GeoProperty[] (see note 1)
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperty as mandated by clause 4.5.2.
|
|
LanguageProperty or LanguageProperty[] (see note 1)
|
See datatype definition in clause 5.2.32
|
0..N
|
LanguageProperty as mandated by clause 4.5.18.
|
|
JsonProperty or JsonProperty[] (see note 1)
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperty as mandated by clause 4.5.24.
|
|
VocabProperty or VocabProperty[] (see note 1)
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperty as mandated by clause 4.5.20.
|
|
ListProperty or ListProperty[] (see note 1)
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperty as mandated by clause 4.5.21.
|
|
Relationship or Relationship[] (see note 2)
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationship as mandated by clause 4.5.3.
|
|
ListRelationship or ListRelationship[] (see note 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).
Table 5.2.5‑1: NGSI-LD Property data type definition
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to “Property”
|
1
|
Node type.
|
value
|
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.
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
0..1
|
System temporal Property representing the expiration date for the storage of the Property. See clause 4.22.
|
ngsildproof
|
Property
|
0..1
|
Cryptographic signature of the Property guaranteeing its integrity. See clause C.11 for an example.
|
|
observedAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp. See clause 4.8.
|
unitCode
|
String
|
0..1
|
Property Value’s unit code.
|
|
valueType
|
String
|
0..1
|
The native JSON-LD @type for the Property Value. A String Value which shall be type coerced to a URI based on the supplied @context.
|
|
Property or Property[] (see note 1)
|
See datatype definition in clause 5.2.5
|
0..N
|
Properties of the Property.
|
|
GeoProperty or GeoProperty[] (see note 1)
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the Property.
|
|
LanguageProperty or LanguageProperty[] (see note 1)
|
See datatype definition in clause 5.2.32
|
0..N
|
LanguageProperties of the Property.
|
|
JsonProperty or JsonProperty[] (see note 1)
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the Property.
|
|
VocabProperty or VocabProperty[] (see note 1)
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the Property.
|
|
ListProperty or ListProperty[] (see note 1)
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the Property.
|
|
Relationship or Relationship[] (see note 2)
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the Property.
|
|
ListRelationship or ListRelationship[] (see note 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.
Table 5.2.5‑2: Output only members of the NGSI-LD Property data type
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated creation timestamp. See clause 4.8.
|
deletedAt
|
String
|
DateTime (clause 4.6.3) 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
|
DateTime (clause 4.6.3)
|
0..1
|
System generated last modification timestamp. See clause 4.8.
|
previousValue
|
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 typemember can be omitted as type=“Relationship” can be inferred from the presence of the object member.
Table 5.2.6‑1: NGSI-LD Relationship data type definition
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.
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
0..1
|
System temporal Property representing the expiration date for the storage of the Relationship. See clause 4.22.
|
ngsildproof
|
Property
|
0..1
|
Cryptographic signature of the Relationship guaranteeing its integrity.
|
|
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
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp. See clause 4.8.
|
Property or Property[] (see note 1)
|
See datatype definition in clause 5.2.5
|
0..N
|
Properties of the Relationship.
|
|
GeoProperty or GeoProperty[] (see note 1)
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the Relationship.
|
|
LanguageProperty or LanguageProperty[] (see note 1)
|
See datatype definition in clause 5.2.32
|
0..N
|
LanguageProperties of the Relationship.
|
|
JsonProperty or JsonProperty[] (see note 1)
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the Relationship.
|
|
VocabProperty or VocabProperty[] (see note 1)
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the Relationship.
|
|
ListProperty or ListProperty[] (see note 1)
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the Relationship.
|
|
Relationship or Relationship[] (see note 2)
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the Relationship.
|
|
ListRelationship or ListRelationship[] (see note 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.
Table 5.2.6‑2: Output only members of the NGSI-LD Relationship data type
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated creation timestamp. See clause 4.8.
|
deletedAt
|
String
|
DateTime (clause 4.6.3) It is only used in notifications reporting deletions |
0..1
|
System generated deletion timestamp. See clause 4.8.
|
entity
|
Entity or Entity[] (see note)
|
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
|
DateTime (clause 4.6.3)
|
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: 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.
Table 5.2.7‑1: NGSI-LD GeoProperty data type definition
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
|
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property values.
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
0..1
|
System temporal Property representing the expiration date for the storage of the GeoProperty. See clause 4.22.
|
ngsildproof
|
Property
|
0..1
|
Cryptographic signature of the GeoProperty guaranteeing its integrity.
|
|
observedAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp. See clause 4.8.
|
valueType
|
String
|
0..1
|
The native JSON-LD @type for the GeoProperty Value. A String Value which shall be type coerced to a URI based on the supplied @context.
|
|
Property or Property[] (see note 1)
|
See datatype definition in clause 5.2.5
|
0..N
|
Properties of the GeoProperty.
|
|
GeoProperty or GeoProperty[] (see note 1)
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoPropertiesof the GeoProperty.
|
|
LanguageProperty or LanguageProperty[] (see note 1)
|
See datatype definition in clause 5.2.32
|
0..N
|
LanguagePropertiesof the GeoProperty.
|
|
JsonProperty or JsonProperty[] (see note 1)
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the GeoProperty.
|
|
VocabProperty or VocabProperty[] (see note 1)
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabPropertiesof the GeoProperty.
|
|
ListProperty or ListProperty[] (see note 1)
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the GeoProperty.
|
|
Relationship or Relationship[] (see note 2)
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the GeoProperty.
|
|
ListRelationship or ListRelationship[] (see note 2)
|
See datatype definition in clause 5.2.37
|
0..N
|
ListRelationships of 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.7-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.
Table 5.2.7‑2: Output only members of the NGSI-LD GeoProperty data type
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated creation timestamp. See clause 4.8.
|
deletedAt
|
String
|
DateTime (clause 4.6.3) 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
|
0..1
|
System generated last modification timestamp. See clause 4.8.
|
|
previousValue
|
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).
Table 5.2.8‑1: EntityInfo data type definition
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
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).
|
id
|
String
|
Valid URI
|
0..1
|
Entity identifier.
|
idPattern
|
String
|
0..1
|
A regular expression which denotes a pattern that shall be matched by the provided or subscribed Entities.
|
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.
Table 5.2.9‑1: CSourceRegistration data type definition
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI. Unique registration identifier. (JSON-LD @id). |
0..1
|
Generated 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. |
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.
|
|
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.
|
contextSourceAlias
|
String
|
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.
|
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.
|
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.
|
location
|
GeoJSON Geometry as mandated by clause 4.7
|
0..1
|
Location for which the Context Sourcemay be able to provide information.
|
|
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.
|
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.
|
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.
|
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.
|
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.
|
|
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). |
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.
|
|
refreshRate
|
String
|
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. |
|
registrationName
|
String
|
Non-empty string
|
0..1
|
A name given to this Context Source Registration.
|
scope
|
String or String[] |
Scope(s)
|
0..1
|
Scopes (see clause 4.18) for which the Context Source has Entities.
|
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.
|
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.
Table 5.2.9‑2: Additional members of the CSourceRegistration data type
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
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.
|
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.
|
timesFailed
|
Number
|
0 or greater value
|
0..1
|
Number of times that the registration triggered a distributed operation request that failed.
|
timesSent
|
Number
|
0 or greater value
|
0..1
|
Number of times that the registration triggered a distributed operation, including failed attempts.
|
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.
|
The supported JSON members shall follow the requirements provided in Table 5.2.10‑1.
Table 5.2.10‑1: RegistrationInfo data type definition
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.
Table 5.2.11‑1: TimeInterval data type definition
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.
Table 5.2.12‑1: Subscription data type definition
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
|
---|---|---|---|---|---|
id
|
String
|
Valid URI
|
0..1
|
Subscription identifier (JSON-LD @id). Generated 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.
|
|
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.
|
|
notification
|
NotificationParams
|
See data type definition in clause 5.2.14
|
1
|
Notification details.
|
|
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”.
|
|
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.
|
|
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.
|
|
scopeQ
|
String
|
See clause 4.19
|
0..1
|
Scope query.
|
|
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.
|
|
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.
|
|
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.
|
|
description
|
String
|
0..1
|
Subscription description.
|
||
expandValues
|
String
|
Comma separated list of attribute names
|
0..1
|
Values of the identified attributes should be expanded against the supplied @context using JSON-LD type coercion prior to executing the query.
|
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
0..1
|
Expiration date for the subscription.
|
|
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.
|
|
jsonKeys
|
String
|
Comma separate list of attribute names
|
0..1
|
Values of the identified attributes are to be considered uninterpretable as JSON-LD and should not be expanded against the supplied @context using JSON-LD type coercion prior to executing the query.
|
|
jsonldContext
|
String
|
Dereferenceable URI
|
0..1
|
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.
|
|
lang
|
String
|
0..1
|
Language filter to be applied to the query (clause 4.15).
|
||
localOnly
|
Boolean
|
0..1
|
If localOnly=true then the subscription only pertains to the Entities stored locally. In case the Subscription pertains to a Snapshot it is always local, regardless of whether localOnly is set to true or not.
|
||
ngsildConformance
|
String
|
A semantically versioned string in the form major.minor, which conforms to a version of the NGSI-LD specification
|
0..1
|
If provided the notification shall undergo a backwards compatibility operation as defined by clause 4.3.6.8 and be amended to conform to the supplied version of the NGSI-LD specification.
|
|
splitEntities
|
Boolean
|
default decided by implementation; it should be configurable. The parameter does not apply in case localOnly is true.
|
0..1
|
If true it is assumed that single Entities are distributed between different Context Brokers and/or Context Sources and this has to be taken into account when applying any kind of filters (q, geoQ, scopeQ, Attributes etc.). If false it is expected that Context Broker and/or Context Source always have complete Entities, which allows applying filters locally.
|
|
subscriptionName
|
String
|
0..1
|
A (short) name given to this 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.
|
|
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.
|
At least one of (a) entities or (b) watchedAttributes shall be present, unless the member localOnlyis 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.
Table 5.2.12‑2: Additional members of the Subscription data type
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.
Table 5.2.13‑1: GeoQuery data type definition
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
coordinates
|
JSON Array or String
|
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.
|
|
geometry
|
String
|
1
|
Type of the reference geometry.
|
|
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.
Table 5.2.14.1‑1: NotificationParams data type definition
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
endpoint
|
Endpoint
|
See data type definition in clause 5.2.15
|
1
|
Notification endpoint details.
|
attributes
|
String[]
|
Attribute name as short hand strings or URIs. Empty array (0 length) is not allowed
|
0..1
|
A synonym for pick, except that id, type, scope are not allowed. Deprecated Attribute names to be included in the notification payload body. If undefined it will mean all Attributes. |
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.
|
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”.
|
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.
|
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.
|
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”. |
sysAttrs
|
Boolean
|
false by default
|
0..1
|
If true, the system generated attributes createdAt and modifiedAt and the system attribute expiresAt are included in the response payload body, in the case of a deletion also deletedAt.
|
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.
Table 5.2.14.2‑1: Output only members of the NotificationParams data structure
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
lastFailure
|
String
|
DateTime (clause 4.6.3)
|
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.
|
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.
|
lastSuccess
|
String
|
DateTime (clause 4.6.3)
|
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.
|
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.
|
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.
|
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.
Table 5.2.15‑1: Endpoint data type definition
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”.
|
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.
|
notifierInfo
|
KeyValuePair[]
|
0..1
|
Generic {key, value} array to set up the communication channel.
|
|
receiverInfo
|
KeyValuePair[]
|
0..1
|
Generic {key, value} array to convey optional information to the receiver.
|
|
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.
|
This datatype represents the result of a batch operation.
The supported JSON members shall follow the indications provided in Table 5.2.16‑1.
Table 5.2.16‑1: BatchOperationResult data type definition
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
errors
|
BatchEntityError[]
|
1
|
One array item per Element in error. Empty Array if no errors happened.
|
|
success
|
String[]
|
Array of valid URIs
|
1
|
Array of Entity IDs corresponding to the Elements that were successfully treated by the concerned operation. Empty Array if no Element was successfully treated.
|
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.
Table 5.2.17‑1: BatchEntityError data type definition
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
entityId
|
String
|
Valid URI
|
1
|
Entity ID corresponding to the Entity in error.
|
error
|
1
|
One instance per Entity in error.
|
||
registrationId
|
String
|
Valid URI
|
0..1
|
Registration Id corresponding to a failed distributed operation (optional).
|
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.
Table 5.2.18‑1: UpdateResult data type definition
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
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.
|
updated
|
String[]
|
1
|
List of Attributes (represented by their name) that were appended or 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.
Table 5.2.19‑1: NotUpdatedDetails data type definition
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, 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.
Table 5.2.21‑1: TemporalQuery data type definition
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
timeAt
|
String representing the timeAt parameter as defined by clause 4.11
|
It shall be a DateTime
|
1
|
|
timerel
|
String
|
Allowed values: “before”, “after” and “between”
|
1
|
Represents the temporal relationship as defined by clause 4.11.
|
aggrMethods
|
Comma separated list of string
|
It shall be 1 if aggregatedValues is present in the options parameter
|
0..1
|
Each String represents an aggregation method, as defined by clause 4.5.19. Only applicable if “aggregatedValues” is present in the format or 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 format or options parameter. |
|
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
|
|
lastN
|
Positive integer
|
0..1
|
Only the last n instances, per Attribute, per Entity (under the specified time interval) shall be retrieved.
|
|
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:
Table 5.2.22‑1: KeyValuePair data type definition
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.
Table 5.2.23‑1: Query data type definition
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.
|
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.
|
scopeQ
|
String
|
See clause 4.19
|
0..1
|
Scope query.
|
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).
|
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 members. Deprecated List of Attributes that shall be matched by Entities in order to be retrieved. If not present all Attributes will be retrieved. |
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.
|
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.
|
aggrParams
|
AggregationParams
|
See data type definition in clause 5.2.44.
|
0..1
|
Aggregation parameters required for supporting aggregation methods in to be present only for “QueryTemporal Evolution of Entities” operation (clause 5.7.4). Only applicable if “aggregatedValues” is present in theformat or options parameter. |
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.
|
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 “Retrieve Entity” (clause 5.7.1) and “Query Entities” operations (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.
|
expandValues
|
String
|
Comma separated list of attribute names
|
0..1
|
Values of the identified attributes should be expanded against the supplied @context using JSON-LD type coercion prior to executing the query.
|
entityMap
|
Boolean
|
0..1
|
If true, the location of the EntityMap used in the operation is returned in the response.
|
|
entityMapLifetime
|
String
|
0..1
|
Suggested duration for which the requester wants the EntityMap to exist. The actual expiresAt time of the EntityMap shall be set by the Context Broker or Context Source, possibly overriding the requested duration. Only applicable if entityMap is set to true.
|
|
jsonKeys
|
String
|
Comma separate list of attribute names
|
0..1
|
Values of the identified attributes are to be considered uninterpretable as JSON-LD and should not be expanded against the supplied @context using JSON-LD type coercion prior to executing the query.
|
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”.
|
lang
|
String
|
0..1
|
Language filter to be applied to the query (clause 4.15).
|
|
ordering
|
OrderingParams
|
See data type definition in clause 5.2.43
|
0..1
|
When defined, the Entities returned in the payload shall be ordered according to the members defined. This only applies if the operation is limited to the local scope. |
splitEntities
|
Boolean
|
default decided by implementation; it should be configurable. The parameter does not apply in case the parameter local is true or the query applies to a Snapshot
|
0..1
|
If true it is assumed that single Entities are distributed between different Context Brokers and/or Context Sources and this has to be taken into account when applying any kind of filters (q, geoQ, scopeQ, Attributes etc.). If false it is expected that Context Broker and/or Context Source always have complete Entities, which allows applying filters locally.
|
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.
Table 5.2.24‑1: NGSI-LD EntityTypeList data type definition
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.
Table 5.2.25‑1: NGSI-LD EntityType data type definition
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.
|
attributeNames
|
String[]
|
1
|
List containing the names of attributes that instances of the entity type can have.
|
|
typeName
|
String
|
1
|
Name of the entity type, short name if contained in @context.
|
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.
Table 5.2.26‑1: NGSI-LD EntityTypeInfo data type definition
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.
|
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.
|
entityCount
|
Number
|
Unsigned integer
|
1
|
Number of entity instances of this entity type.
|
typeName
|
String
|
1
|
Name of the entity type, short name if contained in @context.
|
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.
Table 5.2.27‑1: NGSI-LD AttributeList data type definition
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.
Table 5.2.28‑1: NGSI-LD Attribute data type definition
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.
Table 5.2.29‑1: Feature data type definition
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
|
The value field from the matching GeoProperty (as specified in clause 4.5.16) or null
|
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
|
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.
Table 5.2.30‑1: FeatureCollection data type definition
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
|
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.
Table 5.2.31‑1: FeatureProperties data type definition
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 or Property[], see note 1
|
See data type definition in clause 5.2.5
|
0..N
|
Property as mandated by clause 4.5.2.
|
|
GeoProperty or GeoProperty[], see note 1
|
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperty as mandated by clause 4.5.2.
|
|
LanguageProperty or LanguageProperty[], see note 1
|
See datatype definition in clause 5.2.32
|
0..N
|
LanguageProperty as mandated by clause 4.5.18.
|
|
JsonProperty or JsonProperty[] see note 1
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties as mandated by clause 4.5.24.
|
|
VocabProperty or VocabProperty[], see note 1
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperty as mandated by clause 4.5.20.
|
|
ListProperty or ListProperty[], see note 1
|
See datatype definition in clause 5.2.36
|
0..N
|
ListProperty as mandated by clause 4.5.21.
|
|
Relationship or Relationship[], see note 2
|
See data type definition in clause 5.2.6
|
0..N
|
Relationship as mandated by clause 4.5.3.
|
|
ListRelationship or ListRelationship[], see note 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.
Table 5.2.32‑1: NGSI-LD LanguageProperty data type definition
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.
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
0..1
|
System temporal Property representing the expiration date for the storage of the LanguageProperty. See clause 4.22.
|
ngsildproof
|
Property
|
0..1
|
Cryptographic signature of the LanguageProperty guaranteeing its integrity.
|
|
observedAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp. See clause 4.8.
|
valueType
|
String
|
It shall be equal to “langString” (see note 1)
|
0..1
|
|
Property or Property[] (see note 2)
|
See datatype definition in clauses 5.2.5
|
0..N
|
Properties of the LanguageProperty.
|
|
GeoProperty or GeoProperty[] (see note 2) |
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the LanguageProperty.
|
|
LanguageProperty or LanguageProperty[] (see note 2)
|
See datatype definition in clause 5.2.32
|
0..N
|
LanguageProperties of the LanguageProperty.
|
|
JsonProperty or JsonProperty[] (see note 2)
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the LanguageProperty.
|
|
VocabProperty or VocabProperty[] (see note 2)
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the LanguageProperty.
|
|
ListProperty or ListProperty[] (see note 2) |
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the LanguageProperty.
|
|
Relationship or Relationship[] (see note 3) |
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the LanguageProperty.
|
|
ListRelationship or ListRelationship[] (see note 3)
|
See datatype definition in clause 5.2.37
|
0..N
|
ListRelationships of the LanguageProperty.
|
|
NOTE 1: The assigned @type for language tagged strings is datatype URI: http://www.w3.org/1999/02/22-rdf-syntax-ns#langString [34]. NOTE 2: For each Property (or subclass of Property ) identified by the same Property name, there can be one or more instances separated by datasetId. NOTE 3: 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.
Table 5.2.32‑2: Output only members of the NGSI-LD LanguageProperty data type
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated creation timestamp. See clause 4.8.
|
deletedAt
|
String
|
DateTime (clause 4.6.3) 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
|
DateTime (clause 4.6.3)
|
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 1003.2™ [11]).
The JSON members shall follow the indications provided in Table 5.2.33‑1. id takes precedence over idPattern.
Table 5.2.33‑1: EntitySelector data type definition
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
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.
|
id
|
String or String[]
|
Valid URI(s)
|
0..1
|
Entity identifier(s).
|
idPattern
|
String
|
0..1
|
A regular expression which denotes a pattern that shall be matched by the provided or subscribed Entities.
|
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.
Table 5.2.34‑1: RegistrationManagementInfo data type definition
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
cacheDuration
|
String
|
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. |
|
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. |
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). |
|
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.
|
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.
Table 5.2.35‑1: NGSI-LD VocabProperty data type definition
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.
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
0..1
|
System temporal Property representing the expiration date for the storage of the VocabProperty. See clause 4.22.
|
ngsildproof
|
Property
|
0..1
|
Cryptographic signature of the VocabProperty guaranteeing its integrity.
|
|
observedAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp. See clause 4.8.
|
valueType
|
String
|
0..1
|
The native JSON-LD @type for the vocab attribute. A String Value which shall be type coerced to a URI based on the supplied @context.
|
|
Property or Property[] (see note 1) |
See datatype definitions in clauses 5.2.5
|
0..N
|
Properties of the VocabProperty.
|
|
GeoProperty or GeoProperty[] (see note 1) |
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the VocabProperty.
|
|
LanguageProperty or LanguageProperty[] (see note 1)
|
See datatype definition in clause 5.2.32
|
0..N
|
LanguageProperties of the VocabProperty.
|
|
JsonProperty or JsonProperty[] (see note 1)
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the VocabProperty.
|
|
VocabProperty or VocabProperty[] (see note 1)
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the VocabProperty.
|
|
ListProperty or ListProperty[] (see note 1) |
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the VocabProperty.
|
|
Relationship or Relationship[] (see note 2) |
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the VocabProperty.
|
|
ListRelationship or ListRelationship[] (see note 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.
Table 5.2.35‑2: Output only members of the NGSI-LD VocabProperty data type
name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated creation timestamp. See clause 4.8.
|
deletedAt
|
String
|
DateTime (clause 4.6.3) 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
|
DateTime (clause 4.6.3)
|
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. 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.
Table 5.2.36‑1: NGSI-LD ListProperty data type definition
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to “ListProperty”
|
1
|
Node type.
|
valueList
|
See NGSI-LD Value definition in clause 3.1
|
1
|
Ordered array of Property Values.
|
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property list values.
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
0..1
|
System temporal Property representing the expiration date for the storage of the ListProperty. See clause 4.22.
|
ngsildproof
|
Property
|
0..1
|
Cryptographic signature of the ListProperty guaranteeing its integrity.
|
|
observedAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp. See clause 4.8.
|
valueType
|
String
|
0..1
|
The native JSON-LD @type for the valueList attribute. A String Value which shall be type coerced to a URI based on the supplied @context.
|
|
Property or Property[] (see note 1) |
See datatype definition in clauses 5.2.5
|
0..N
|
Properties of the ListProperty.
|
|
GeoProperty or GeoProperty[] (see note 1) |
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the ListProperty.
|
|
LanguageProperty or LanguageProperty[] (see note 1) |
See datatype definition in clause 5.2.32
|
0..N
|
LanguageProperties of the ListProperty.
|
|
JsonProperty or JsonProperty[] (see note 1)
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the ListProperty.
|
|
VocabProperty or VocabProperty[] (see note 1)
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the ListProperty.
|
|
ListProperty or ListProperty[] (see note 1) |
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the ListProperty.
|
|
Relationship or Relationship[] (see note 2) |
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the ListProperty.
|
|
ListRelationship or ListRelationship[] (see note 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.
Table 5.2.36‑2: Additional members of the NGSI-LD ListProperty data type
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated creation timestamp. See clause 4.8.
|
deletedAt
|
String
|
DateTime (clause 4.6.3) 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
|
DateTime (clause 4.6.3)
|
0..1
|
System generated last modification timestamp. See clause 4.8.
|
previousValueList
|
See NGSI-LD Value definition in clause 3.1
|
0..1
|
Ordered array of previous Property Values.
|
This type represents the data needed to define a ListRelationship as mandated by clause 4.5.22. 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.37‑1.
Table 5.2.37‑1: NGSI-LD ListRelationship data type definition
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.
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
0..1
|
System temporal Property representing the expiration date for the storage of the ListRelationship. See clause 4.22.
|
ngsildproof
|
Property
|
0..1
|
Cryptographic signature of the ListRelationship guaranteeing its integrity.
|
|
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
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp. See clause 4.8.
|
Property or Property[] (see note 1)
|
See datatype definition in clause 5.2.5
|
0..N
|
Properties of the ListRelationship.
|
|
GeoProperty or GeoProperty[] (see note 1) |
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the ListRelationship.
|
|
LanguageProperty or LanguageProperty[] (see note 1)
|
See datatype definition in clause 5.2.32
|
0..N
|
LanguageProperties of the ListRelationship.
|
|
JsonProperty or JsonProperty[] (see note 1)
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the ListProperty.
|
|
VocabProperty or VocabProperty[] (see note 1)
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the ListRelationship.
|
|
ListProperty or ListProperty[] (see note 1) |
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the ListRelationship.
|
|
Relationship or Relationship[] (see note 2)
|
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the ListRelationship.
|
|
ListRelationship or ListRelationship[] (see note 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.
Table 5.2.37‑2: Additional members of the NGSI-LD ListRelationship data type
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated creation timestamp. See clause 4.8.
|
deletedAt
|
String
|
DateTime (clause 4.6.3) 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.
Table 5.2.38‑1: NGSI-LD JsonProperty data type definition
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.
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
0..1
|
System temporal Property representing the expiration date for the storage of the JsonProperty. See clause 4.22
|
ngsildproof
|
Property
|
0..1
|
Cryptographic signature of the JsonProperty guaranteeing its integrity.
|
|
observedAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
Timestamp. See clause 4.8.
|
valueType
|
String
|
0..1
|
The native JSON-LD @type for the json attribute. A String Value which shall be type coerced to a URI based on the supplied @context.
|
|
Property or Property[] (see note 1) |
See datatype definitions in clauses 5.2.5
|
0..N
|
Properties of the JsonProperty.
|
|
GeoProperty or GeoProperty[] (see note 1) |
See datatype definition in clause 5.2.7
|
0..N
|
GeoProperties of the JsonProperty.
|
|
LanguageProperty or LanguageProperty[] (see note 1)
|
See datatype definition in clause 5.2.32
|
0..N
|
LanguageProperties of the JsonProperty.
|
|
JsonProperty or JsonProperty[] (see note 1)
|
See datatype definition in clause 5.2.38
|
0..N
|
JsonProperties of the JsonProperty.
|
|
VocabProperty or VocabProperty[] (see note 1)
|
See datatype definition in clause 5.2.35
|
0..N
|
VocabProperties of the JSONProperty.
|
|
ListProperty or ListProperty[] (see note 1) |
See datatype definition in clause 5.2.36
|
0..N
|
ListProperties of the JsonProperty.
|
|
Relationship or Relationship[] (see note 2) |
See datatype definition in clause 5.2.6
|
0..N
|
Relationships of the JsonProperty.
|
|
ListRelationship or ListRelationship[] (see note 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.
Table 5.2.38‑2: Output only members of the NGSI-LD JsonProperty data type
name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated creation timestamp. See clause 4.8.
|
deletedAt
|
String
|
DateTime (clause 4.6.3) 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
|
URI uniquely identifying a JsonProperty 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.
|
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.
Table 5.2.39‑1: NGSI-LD EntityMap data type definition
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
EntityMap ID.
|
type
|
String
|
It shall be equal to “EntityMap”
|
1
|
Node type.
|
expiresAt
|
String
|
DateTime (see clause 4.6.3)
|
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 Consumers. In the event that they are provided in update operations NGSI-LD implementations shall ignore them.
Table 5.2.39‑2: Additional members of the NGSI-LD EntityMap data type
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.
Table 5.2.40‑1: Context Source Identity data type definition
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Context Source ID.
|
type
|
String
|
It shall be equal to “ContextSourceIdentity”
|
1
|
JSON-LD @type.
|
contextSourceAlias
|
String
|
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 identifying a specific Tenant within a registered Context Source. |
|
contextSourceUptime
|
String
|
1
|
Total Duration that the Context Source has been available.
|
|
contextSourceTimeAt
|
String
|
DateTime (clause 4.6.3)
|
1
|
Current time observed at the Context Source. Timestamp See clause 4.8.
|
contextSourceExtras
|
JSON
|
0..1
|
Instance specific information relevant to the configuration of the Context Source itself in raw un-expandable JSON which shall not be interpreted as JSON-LD using the supplied @context.
|
This type represents the data needed to create and manage a Snapshot.
The supported JSON members shall follow the requirements provided in Table 5.2.41‑1.
Table 5.2.41‑1: Snapshot data type definition
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
0..1
|
System-generated at creation time, if it is not provided. It cannot be later modified in update operations.
|
type
|
String
|
It shall be equal to “Snapshot”
|
1
|
JSON-LD @type.
|
snapshotQueries
|
Query[]
|
List of Query (clause 5.2.23), where no Query no “temporalQ” element.
|
0..1
|
Allows clients to specify a list of queries whose results are to be part of the Snapshot. This member can only be set when creating a snapshot, after that it becomes read-only. At least one of “snapshotQueries” or “snapshotTemporalQueries” shall be present when creating the snapshot and both shall be omitted when updating the Snapshot status or cloning the Snapshot.
|
snapshotTemporalQueries
|
Query[]
|
List of Query (clause 5.2.23), where each Query has “temporalQ” element.
|
0..1
|
Allows clients to specify a list of temporal queries whose results are to be part of the Snapshot. This member can only be set when creating a snapshot, after that it becomes read-only. At least one of “snapshotQueries” or “snapshotTemporalQueries” shall be present when creating the snapshot and both shall be omitted when updating the Snapshot status.
|
snapshotLifetime
|
String
|
0..1
|
Suggested duration for which the requester wants the Snapshot to exist with respect to the current point in time. The actual expiresAt time of the Snapshot shall be set by the NGSI-LD system, possibly overriding the requested duration.
|
|
snapshotPriority
|
Number
|
Positive Integer between 1 and 10
|
0..1
|
The priority of a snapshot ranges from 1 (minimum) to 10 (maximum) with 5 being the default priority. It can be used when deciding which snapshot is to be deleted if an implementation determines that it is low on resources.
|
endpoint
|
String
|
Dereferenceable URI
|
0..1
|
URI to which notifications regarding changes in the status of the Snapshot are to be sent. The information contained in the receiverInfo member shall be considered.
|
receiverInfo
|
KeyValuePair[]
|
0..1
|
Generic {key, value} array to convey optional information to the receiver.
|
The following output only members (defined by Table 5.2.41-2) of the Snapshot data structure are also defined. They are read-only and shall be generated by NGSI-LD implementations. They shall not be provided by Context Consumers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Table 5.2.41‑2: Output only members of the Snapshot data type
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
snapshotStatus
|
String
|
It shall be one of: “preparing”,“success”,“partial”, “failure” or “empty” The initial status shall be “preparing”. |
1
|
Allows clients to check the status of the Snapshot.
|
snapshotQueriesDetails
|
ExecutionResultDetails[]
|
List of ExecutionResultDetails (clause 5.2.42)
|
0..1
|
List with one result per Snapshot query execution, in the same order as Snapshot queries.
|
snapshotTemporalQueriesDetails
|
ExecutionResultDetails[]
|
List of ExecutionResultDetails (clause 5.2.42)
|
0..1
|
List with one result per temporal Snapshot query execution, in the same order as temporal Snapshot queries.
|
createdAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated creation timestamp. See clause 4.8.
|
modifiedAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated last modification timestamp. See clause 4.8.
|
expiresAt
|
String
|
DateTime (clause 4.6.3)
|
1
|
Expiration time for the snapshot - it is possible to indirectly update the member by updating snapshotLifetime. See clause 4.8. |
lastUsedAt
|
String
|
DateTime (clause 4.6.3)
|
0..1
|
System generated timestamp identifying the point in time when the snapshot was most recently used. It is initialized at creation time. See clause 4.8.
|
This type represents the details of the result of execution a request, e.g. a Query.
The supported JSON members shall follow the requirements provided in Table 5.2.42‑1.
Table 5.2.42‑1: ExecutionResultDetails data type definition
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
problemDetails
|
@JSON
|
0..1
|
Provides more details regarding the result status, especially when reporting an error.
|
|
resultStatus
|
String
|
It shall be one of: “success”, “failure” or “empty” |
1
|
Describes the status of the result. “failure”, if an error is reported, “success”in case of a non-empty result and “empty” otherwise.
|
This datatype represents the parameters that convey the definition used whilst ordering Entities.
The supported JSON members shall follow the requirements provided in Table 5.2.43‑1.
Table 5.2.43‑1: OrderingParams data type definition
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
collation
|
String
|
0..1
|
The Entities returned in the payload shall be ordered according to the collation given. By default, it shall be ICU “root” collation order (“und-x-icu”).
|
|
coordinates
|
JSON Array
|
0..1 It shall be one if orderBy uses order by distance |
Coordinates of a Geometry used when sorting by distance.
|
|
geometry
|
String
|
0..1
|
The type of geometry whose coordinates are used when sorting by distance. By default, it shall be a “Point” geometry.
|
|
orderBy
|
String[]
|
Each String is an Entity member (“id”, “type”, “scope” or an Attribute name) appended with an optional sorting style (“asc”, “desc”, “dist-asc”, “dist-desc”)as per clause 4.23.
|
1
|
When defined, the Entities returned in the payload shall be ordered according to members defined.
|
This datatype represents the parameters required for supporting aggregation methods in temporal requests.
The supported JSON members shall follow the requirements provided in Table 5.2.44‑1.
Table 5.2.44‑1: AggregationParams data type definition
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
aggrMethods
|
Comma separated list of strings
|
Each String represents an aggregation method, as defined by clause 4.5.19.
|
1
|
-
|
aggrPeriodDuration
|
String
|
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. |
0..1
|
-
|
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.
Table 5.3.1‑1: Notification data type definition
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.
|
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+jsonthen data is returned as a FeatureCollection. In this case, if the notification.endpoint.receiverInfocontains 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. |
|
notifiedAt
|
String
|
DateTime (clause 4.6.3)
|
1
|
Timestamp corresponding to the instant when the notification was generated by the system.
|
subscriptionId
|
String
|
Valid URI
|
1
|
Identifier of the subscription that originated the notification.
|
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.
Table 5.3.2‑1: CSourceNotification data type definition
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. |
data |
CSource Registration[] |
1 |
The content of the notification as NGSI-LD CSourceRegistrations. See clause 5.2.9. |
|
notifiedAt |
String |
DateTime (see clause 4.6.3) |
1 |
Timestamp corresponding to the instant when the notification was generated by the system. |
subscriptionId |
String |
Valid URI |
1 |
Identifier of the subscription that originated the notification. |
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:
This datatype represents the parameters that allow building a snapshot notification to be sent to a subscriber. How to build this notification is detailed in clause 5.16.6.
The supported JSON members shall follow the indications provided in Table 5.3.4‑1.
Table 5.3.4‑1: SnapshotNotification data type definition
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 “SnapshotNotification”
|
1
|
JSON-LD @type.
|
expiresAt
|
String
|
DateTime (clause 4.6.3)
|
1
|
Expiration time for the snapshot - if expiresAt is before notifiedAt, the notification indicates that the snapshot has been deleted. In this case, snapshotReady shall be set to false.
|
notifiedAt
|
String
|
DateTime (clause 4.6.3)
|
1
|
Timestamp corresponding to the instant when the notification was generated by the system.
|
snapshotId
|
String
|
Valid URI
|
1
|
Identifier of the snapshot whose status change triggered the notification.
|
snapshotPriority
|
Number
|
Positive Integer between 1 and 10
|
1
|
The priority of a snapshot ranges from 1 (minimum) to 10 (maximum) with 5 being the default priority. It is used when deciding which snapshot is to be deleted if an implementation determines that it is low on resources.
|
snapshotQueriesDetails
|
ExecutionResultDetails[]
|
List of ExecutionResultDetails (clause 5.2.42)
|
0..1
|
List with one result per Snapshot query execution, in the same order as Snapshot queries.
|
snapshotStatus
|
String
|
It shall be one of: “success”,“partial”, “failure” or “empty” |
1
|
Indicates the status of the Snapshot, enabling the user to decide whether the snapshot is ready for querying.
|
temporalSnapshotQueriesDetails
|
ExecutionResultDetails[]
|
List of ExecutionResultDetails (clause 5.2.42)
|
0..1
|
List with one result per temporal Snapshot query execution, in the same order as temporal Snapshot queries.
|
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:
EXAMPLE 1:
The following Subscription Fragment allows the modification of a Subscription by changing its endpoint’s URI:
{
"id": "urn:ngsi-ld:Subscription:MySubscription",
"type": "Subscription",
"endpoint": {
"uri": "http://example.org/newNotificationEndPoint"
}
}
EXAMPLE 2:
The following NGSI-LD Fragment allows the modification of an Entity by changing its batteryLevel Attribute, updating the observedAt sub-Attribute, removing the providedBy sub-Attribute and removing the uncharged Attribute from the Entity:
{
"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.
Table 5.5.2‑1: Error types in NGSI-LD
Error Type
|
Description
|
---|---|
https://uri.etsi.org/ngsi-ld/errors/AlreadyExists
|
The referred element already exists.
|
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/Conflict
|
The operation conflicts with the current state of the system.
|
https://uri.etsi.org/ngsi-ld/errors/InternalError
|
There has been an error during the operation execution.
|
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/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.
|
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/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.
|
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.
EXAMPLE:
{
"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:
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.
EXAMPLE:
An entity of type “Vehicle” bound to a certain @context , C, will match a query by “Vehicle” type if and only if the supplied query @context , Q, maps the term “Vehicle” to the same URI as C.
Note that the JsonProperty is designed to hold native JSON values which are by definition not available for expansion and compaction via an @context. Therefore, the given short-hand name is always used for accessing JSON keys within a JsonProperty json element.
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):
EXAMPLE 1:
Given an Entity containing the following Property:
{
"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"
}
{
"temperature": {
"type": "Property",
"value": 100,
"unitCode": "CEL"
"observedAt": "2022-03-14T13:00:00.000Z"
}
}
EXAMPLE 2:
Given an Entity containing the following Property :
{
"temperature": {
"type": "Property",
"value": 25,
"unitCode": "CEL"
"observedAt": "2022-03-14T01:59:26.535Z"
}
}
{
"temperature": {
"type": "Property",
"value": 100,
"observedAt": "2022-03-14T13:00:00.000Z"
}
}
{
"temperature": {
"type": "Property",
"value": 100,
"observedAt": "2022-03-14T13:00:00.000Z"
}
}
EXAMPLE 3:
Given an Entity containing the following Property :
{
"temperature": {
"type": "Property",
"value": 25,
"unitCode": "CEL"
"observedAt": "2022-03-14T01:59:26.535Z"
}
}
{
"temperature": {
"type": "Property",
"value": "urn:ngsi-ld:null"
}
}
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. During pagination, the same @context shall be used. An attempt to use a different @context should result in an BadRequestData error.
The general pagination behaviour described in clause 5.5.9.1 only requires pointers to the following and previous pages, which can be implemented in a completely opaque way. Pagination may also be implemented in a transparent way, giving the Context Consumer more control over the process. In this case, the parameters limit and offset should be used, allowing the Context Consumer to adapt the size of the page using limit and jump to a desired set of elements in the results using offset.
In the case of queries based on Entity maps, the set of Entities considered for the result is fixed with the initial query creating the Entity map. However, the Entity information itself can be dynamic, so filters shall be rechecked before returning results. In the case of split Entities, the Entities in the Entity map can only be considered as candidate Entities, since, at the time of Entity map creation, the Entities have not been aggregated and thus the filters could not be applied. This can only be done when preparing a page for pagination. Thus, Entities not or no longer fitting the query shall be removed from the Entity map during pagination. Pages shall always be filled to the maximum, as long as Entities are available. When using the previous link, the set of Entities on the previous page may not be the same as before, due to dynamic changes resulting in Entities no longer fulfilling the filter criteria of the query. As a result, the first page when going backward, and the last page, when going forward, may have less than the maximum number of Entities.
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):
EXAMPLE 1:
Given an Entity containing the following Property :
{
"temperature": {
"type" : "Property",
"value" : 25,
"unitCode": "CEL"
"observedAt": "2022-03-14T01:59:26.535Z"
}
}
{
"temperature": {
"type" : "Property",
"value" : 100,
"observedAt": "2022-03-14T13:00:00.000Z"
}
}
{
"temperature": {
"type" : "Property",
"value" : 100,
"unitCode": "CEL",
"observedAt": "2022-03-14T13:00:00.000Z"
}
}
EXAMPLE 2:
Given an Entity containing the following Property :
{
"address": {
"type" : "Property",
"value" : {
"street": "Straße des 17. Juni",
"city": "Berlin",
"country": "Germany"
}
}
}
{
"address": {
"type" : "Property",
"value" : {
"street": "Pariser Platz",
"country": "urn:ngsi-ld:null"
}
}
}
{
"address": {
"type" : "Property",
"value": {
"street": "Pariser Platz",
"city": "Berlin"
}
}
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 Brokerdirectly 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 localOnlymember 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 Context Source, 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 will not be used.
Operations on a Snapshot (see clause 5.5.15) are always implicitly local scope, overriding setting a local scope to false, i.e. such a setting is to be ignored by implementations.
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 should return the location of said EntityMap in a specific field. The caching strategy and expiry time shall take into account a suggested expiry time, if present, and depend on implementation specific configurations. Context Sources should 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. Subsequent requests referencing an EntityMap shall use the same parameters as in the original request that created the EntityMap, except for the specification of Entity identifiers or parameters related to pagination, or, in the case of temporal requests, the temporal query. 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. An EntityMap fixes the Entities to be considered for subsequent requests based on it. The creating Context Source shall remove Entities from the EntityMap that do not match the filters of the query at the time of processing. Other components shall only be allowed to update the expiry timestamp of the EntityMap, which can optionally be extended if the Context Sources implementation allows for it.
If a Snapshot (see clause 4.3.7) is specified for an NGSI-LD operation, the operation shall only be applied to information related to the specific Snapshot. Operations permitted on Snapshots are the same as those specified for the Core API and, if supported, the Temporal API (see Table 4.3.5‑1). This means all operations are implicitly limited to a local scope with all relaxations allowing broader operations (see clause 5.5.13) and there is no need to explicitly set the local scope as a request parameter.The implicit limitation to local scope also means that Context Source Registrations from the Context Registry will not be used.
Snapshots are explicitly created, and the Snapshotidentifier is provided on creation. How the Snapshotidentifier is specified for an API operation is protocol binding specific.
The Snapshotconcept is orthogonal to the Tenant concept (see clause 4.14). Snapshots can also be created on Tenants. To execute an operation on a Snapshot created on a Tenant, both Snapshot and Tenant (see clause 5.5.10) have to be specified for an API operation.
If an implementation determines that it is low on resources, it may delete one or more snapshots. For determining the order in which snapshots are to be deleted, the snapshotPriority, ranging from 1 (minimum) to 10 (maximum) with 5 being the default priority, should be considered. An implementation may also consider other aspects like the expiresAt, or lastUsedAt timestamp for such a decision.
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.
Figure 5.6.1.2‑1: Create entity use case
A JSON-LD document representing an NGSI-LD Entity as mandated by clause 5.2.4.
Implementations shall exhibit the following behaviour:
Execute the behaviour defined in clause 5.5.4 on JSON-LD validation.
If an exclusive Context Source Registration already exists for this Entity id (URI), Attributes from matching input data are forwarded for remote processing:
For matching Registrations where the Create Entity operation is supported, the operation is forwarded to the registration endpoint. If the endpoint then raises an error, this shall result in an error in case the complete create failed or in a partial success if some parts of the create succeeded.
For matching Registrations where the Create Entity operation is not supported, this shall result in an error of type Conflict if the complete Create Entity operation failed or in a partial success if some parts of it succeeded.
The matching Attributes are then removed from the Fragment and not processed further.
If any redirect Context Source Registrations exist that match against the input data, that input data is forwarded for remote processing by one or more matching endpoints:
The matching Attributes are then removed from the Fragment and not processed further.
For any inclusive Context Source Registrations that match against the remaining input data, that input data is also forwarded for remote processing by matching endpoints in case the Create Entity operation is supported.
If the Entity already exists locally this shall result in an error of type AlreadyExists, if the complete Create Entity operation has failed or in a partial success if some parts of it has succeeded.
Any remaining input data shall be used to create the Entity locally.
A URI identifying the newly created Entity.
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.
Figure 5.6.2.2‑1: Update Attributes use case
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.
Figure 5.6.3.2‑1: Append Attributes use case
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.
Figure 5.6.4.2‑1: Partial Attribute update use case
If the target Entity ID is not a valid URI or it is not present, then an error of type BadRequestData shall be raised.
If the target Attribute name is not valid or it is not present, then an error of type BadRequestData shall be raised.
If the target Attribute is scope, then an error of type BadRequestData shall be raised.
The behaviour defined in clause 5.5.4 on JSON-LD validation. NGSI-LD Nulls should be supported by this operation. If NGSI-LD Nulls are found in the payload, but are not supported, an error of type OperationNotSupported shall be raised.
If the NGSI-LD endpoint does not know about the target Entity, because there is no existing Entity whose id (URI), and where specified type, is equivalent held locally, and no matching registrations apply (see clause 5.12), then an error of type ResourceNotFoundshall be raised.
If an exclusive or redirect Context Source Registration matches against the input data, the Attributes from matching input data are forwarded for remote processing. For each matching registration:
If the Partial Attribute update operation is supported by the registration (see clause 4.3.6), matching input data is forwarded to the Registration endpoint.
If the Partial Attribute update operation is not supported by the registration, this shall result in an error of type Conflict in case the complete partial Attribute update failed, or in a partial success if some parts of the partial Attribute update succeeded.
No further processing is required.
For any inclusive Context Source Registrations that match against the input data, that input data is also forwarded for remote processing to matching endpoints in case the Partial Attribute update operation is supported.
Apply term expansion as mandated by clause 5.5.7, so that the fully qualified name (URI) associated to the target Attribute is properly obtained.
If the target Entity does not contain the target Attribute:
then an error of typeResourceNotFound
Perform a partial update patch operation on the target Attribute following the algorithm mandated by clause 5.5.8. If present in the provided NGSI-LD Entity Fragment, the type of the Attribute has to be the same as the type of the targeted Attribute fragment, i.e. it is not allowed to change the type of an Attribute.
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.
Figure 5.6.5.2‑1: Delete Attribute use case
If the target Entity ID is not a valid URI or it is not present, then an error of type BadRequestData shall be raised.
If the target Attribute name is not a valid name or it is not present, then an error of type BadRequestData shall be raised.
If an exclusive or redirect Context Source Registration matches against the input data, the input data (see clause 5.12), the input data is forwarded. For each matching registration:
No further processing is required.
If the NGSI-LD endpoint does not know about the target Entity, because there is no existing Entity whose id (URI), and where specified type, is equivalent held locally, and no matching registrations apply, then an error of type ResourceNotFound shall be raised.
For any inclusive Context Source Registrations that match against the input data, that input data is also forwarded for remote processing to matching endpoints in case the Delete Attribute operation is supported by the matched registration.
Apply term expansion as mandated by clause 5.5.7 so that the fully qualified name (URI) associated to the target Attribute is properly obtained.
If the target Entity does not contain the target Attribute then an error of type ResourceNotFound shall be raised.
If the target Attribute is scope, remove the scope Attribute from the target Entity.
If the deleteAll flag is set, remove all target Attribute instances from the target Entity.
Otherwise:
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.
Figure 5.6.6.2‑1: Delete Entity use case
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.
Figure 5.6.7.2‑1: Create a batch of Entities use case
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.
Figure 5.6.8.2‑1: Upsert a batch of Entities use case
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.
Figure 5.6.9.2‑1: Update a batch of Entities use case
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.
Figure 5.6.10.2‑1: Delete a batch of Entities use case
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.
Figure 5.6.11.2‑1: Create or Update (Upsert) Temporal Evolution of an Entity use case
A JSON-LD document representing the Temporal Evolution of an Entity as mandated by clause 5.2.20.
Implementations shall exhibit the following behaviour:
Execute the behaviour defined in clause 5.5.4 on JSON-LD validation.
If an exclusive Context Source Registration already exists for this Entity id (URI), Attributes from matching input data are forwarded for remote processing:
For matching Registrations where the “Create or Update (Upsert) Temporal Evolution of an Entity” operation is supported, the operation is forwarded to the registration endpoint. If the endpoint then raises an error, this shall result in an error in case the complete “Create or Update (Upsert) Temporal Evolution of an Entity” operation failed or in a partial success if some parts of it succeeded.
For matching Registrations where the “Create Entity” operation is not supported, this shall result in an error of type Conflict in case the complete “Create or Update (Upsert) Temporal Evolution of an Entity” operation failed or in a partial success if some parts of it succeeded.
The matching Attributes are then removed from the Fragment and not processed further.
If any redirect Context Source Registrations exist that match against the input data, that input data is forwarded for remote processing by one or more matching endpoints:
The matching Attributes are then removed from the Fragment and not processed further.
For any inclusive Context Source Registrations that match against the remaining input data, that input data is also forwarded for remote processing by matching endpoints.
If the NGSI-LD endpoint already knows about this Temporal Evolution of an Entity, because there is an existing Temporal Evolution of an Entity whose id (URI) is the same, then all the Attribute instances included by the Temporal Evolution shall be added to the existing Entity as mandated by clause 5.6.12. If type is included in the EntityTemporal Fragment and it includes Entity Type names that are not yet in the target Temporal Evolution of an Entity, add them to the list of Entity Type names of the target Temporal Evolution of an Entity.
Otherwise, implementations shall create the provided Temporal Evolution of an Entity.
On creation, a URI identifying the newly created Temporal Evolution of an Entity. None otherwise.
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.
Figure 5.6.12.2‑1: Add Attributes to Temporal Evolution of an Entity use case
The following behaviour shall be exhibited by compliant implementations:
If the Entity ID is not present or it is not a valid URI then an error of type BadRequestData shall be raised.
If the NGSI-LD endpoint does not know about the target Temporal Evolution of an Entity, because there is no existing Temporal Evolution of an Entity whose id (URI) is equivalent to the one passed as a parameter held locally and no matching registrations apply, an error of type ResourceNotFound shall be raised.
The behaviour defined in clause 5.5.4 on JSON-LD validation.
If an exclusive or redirect Context Source Registration matches against the input data, the Attributes from matching input data are forwarded for remote processing. For each matching registration:
The matching Attributes are then removed from the Fragment and not processed further.
For any inclusive Context Source Registrations that match against the remaining input data, that input data is also forwarded for remote processing to matching endpoints.
If the target Temporal Evolution of an Entity exists locally and matches against the remaining input data, implementations shall do the following:
For each Attribute (Property or Relationship) instance included by the EntityTemporal Fragment at root level:
If type is included in the EntityTemporal Fragment and it includes Entity Type names that are not yet in the target Temporal Evolution of an Entity, add them to the list of Entity Type names of the target Temporal Evolution of the Entity.
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.
Figure 5.6.13.2‑1: Delete Attribute from Temporal Evolution of an Entity use case
If the target Entity ID is not a valid URI or it is not present, then an error of type BadRequestData shall be raised.
If the target Attribute name is not a valid name, then an error of type BadRequestData shall be raised.
If the NGSI-LD endpoint does not know about the target Entity, because there is no existing Temporal Evolution of an Entity whose id (URI) is equivalent held locally and no matching registrations apply, then an error of type ResourceNotFound shall be raised.
If an exclusive or redirect Context Source Registration matches against the input data, the input data is forwarded. For each matching registration:
No further processing is required.
For any inclusive Context Source Registrations that match against the input data, that input data is also forwarded for remote processing to matching endpoints.
If the target Temporal Evolution of an Entity exists locally, implementations shall do the following:
Apply term expansion as mandated by clause 5.5.7 so that the fully qualified name (URI) associated to the target Attribute is properly obtained.
If the target Temporal Evolution of an Entity does not contain the target Attribute then an error of type ResourceNotFound shall be raised.
If the deleteAll flag is set, remove all target Attribute instances from the target Entity.
Otherwise:
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 Entitywithin an NGSI-LD system as shown in Figure 5.6.14.2‑1.
Figure 5.6.14.2‑1: Modify Attribute Instance in Temporal Evolution of an Entity use case
If the target Entity ID is not a valid URI or it is not present, then an error of type BadRequestData shall be raised.
If the target Attribute name is not a valid name or it is not present, then an error of type BadRequestData shall be raised.
If the target instanceId is not a valid URI or it is not present, then an error of type BadRequestData shall be raised.
If the NGSI-LD endpoint does not know about the target Entity, because there is no existing Entity whose id (URI) is equivalent held locally and no matching registrations apply, then an error of type ResourceNotFound shall be raised.
If an exclusive or redirect Context Source Registration matches against the input data, the input data is forwarded. For each matching registration:
No further processing is required.
For any inclusive Context Source Registrations that match against the input data, that input data is also forwarded for remote processing to matching endpoints.
If the target Temporal Evolution of an Entity exists locally, implementations shall do the following:
Replace the target Attribute instance identified by the instanceId with the Attribute instance in the EntityTemporal Fragment. The createdAt property of the concerned instance shall remain unchanged, but the modifiedAt property shall be set to the timestamp corresponding to this modification.
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.
Figure 5.6.15.2‑1: Delete Attribute Instance from Temporal Evolution of an Entity use case
If the target Entity ID is not a valid URI or it is not present, then an error of type BadRequestData shall be raised.
If the target Attribute name is not a valid name or it is not present, then an error of type BadRequestData shall be raised.
If the target instanceId is not a valid URI or it is not present, then an error of type BadRequestData shall be raised.
If the NGSI-LD endpoint does not know about the target Entity, because there is no existing Entity whose id (URI) is equivalent held locally and no matching registrations apply, then an error of type ResourceNotFound shall be raised.
If an exclusive or redirect Context Source Registration matches against the input data, the input data is forwarded. For each matching registration:
No further processing is required.
For any inclusive Context Source Registrations that match against the input data, that input data is also forwarded for remote processing to matching endpoints.
If the target Temporal Evolution of an Entity exists locally, implementations shall do the following:
Apply term expansion as mandated by clause 5.5.7 so that the fully qualified name (URI) associated to the target Attribute is properly obtained.
If the target Temporal Evolution of the Entity does not contain the target Attribute then an error of type ResourceNotFound shall be raised.
If for the target Attribute no instance with the specified instanceId exists, an error of type ResourceNotFound shall be raised.
Remove the instance, with the specified instanceId, of the target Attribute from the target Entity.
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.
Figure 5.6.16.2‑1: Delete Temporal Evolution of an Entity use case
If the target Entity ID is not present or it is not a valid URI, then an error of type BadRequestData shall be raised.
If the NGSI-LD endpoint does not know about the target Entity because there is no existing Entity whose id (URI) is equivalent held locally and no matching registrations apply, then an error of type ResourceNotFound shall be raised.
If an exclusive or redirect Context Source Registration matches against the input data, the input data is forwarded. For each matching registration:
No further processing is required.
For any inclusive Context Source Registrations that match against the input data, that input data is also forwarded for remote processing to matching endpoints.
If the target Temporal Evolution of an Entity exists locally, the entire Temporal Evolution of the Entity shall be removed.
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.
Figure 5.6.17.2‑1: Merge Entity use case
The following behaviour shall be exhibited by compliant implementations:
If the Entity ID is not present or it is not a valid URI then an error of type BadRequestData shall be raised.
If the NGSI-LD endpoint does not know about the target Entity, because there is no existing Entity whose id (URI), and where specified type, is equivalent held locally, and no matching registrations apply (see clause 5.12), then an error of type ResourceNotFound shall be raised.
If an exclusive or redirect Context Source Registration matches against the input data, Attributes from matching input data are forwarded. For each matching registration:
The matching Attributes are then removed from the Fragment and not processed further.
For any inclusive Context Source Registrations that match against the remaining input data, that input data is also forwarded in the case the Merge Entity operation is supported for remote processing to matching endpoints.
The behaviour defined in clause 5.5.4 on JSON-LD validation. NGSI-LD Nulls should be supported by this operation. If NGSI-LD Nulls are found in the payload, but are not supported, an error of type OperationNotSupported shall be raised.
Then, implementations shall perform a merge operation over the target Entity as mandated by clause 5.5.12, using the following procedure:
For each Attribute (Property or Relationship) included by the Entity Fragment:
If type is included in the Fragment and it includes Entity Type names that are not yet in the target Entity, add them to the list of Entity Type names of the target Entity.
If scope is included in the Fragment and overwrite is allowed, the scope of the target Entity will become the one included in the Fragment. Otherwise, the Scopes in the Fragment that are not part of the value of scope of the target Entity will be appended to the value of the scope of the target Entity. If there is more than one Scope, the value of scope is represented as a JSON array containing all Scopes.
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.
Figure 5.6.18.2‑1: Replace Entity use case
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.
Figure 5.6.19.2‑1: Replace Attribute use case
If the target Entity ID is not a valid URI, then an error of type BadRequestData shall be raised.
If the target Attribute name is not valid, then an error of type BadRequestData shall be raised.
If the target Attribute is scope, then an error of type BadRequestData shall be raised.
If the NGSI-LD endpoint does not know about the target Entity, because there is no existing Entity whose id (URI), and where specified type, is equivalent held locally, and no matching registrations apply (see clause 5.12), then an error of type ResourceNotFound shall be raised.
The behaviour defined in clause 5.5.4 on JSON-LD validation.
If an exclusive or redirect Context Source Registration matches against the input data, the input data is forwarded. For each matching registration:
No further processing is required.
For any inclusive Context Source Registrations that match against the remaining input data, that input data is also forwarded in the case the Replace Attribute operation is supported for remote processing to matching endpoints.
Apply term expansion as mandated by clause 5.5.7, so that the fully qualified name (URI) associated to the target Attribute is properly obtained.
If the target Entity does not contain the target Attribute:
as a default instance in case no datasetId is present;
as an instance with the specified datasetId if present;
then this shall result in an error of type ResourceNotFound in case the complete Replace Attribute operation failed, or in a partial success if some parts of it succeeded.
Completely replace the existing Attribute instance with the new Attribute content provided. The system generated createdAt Temporal Property as defined in clause 4.8 remains unchanged.
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.
Figure 5.6.20.2‑1: Merge a batch of Entities use case
A JSON-LD Array containing one or more JSON-LD documents each one representing an Entity as mandated by clause 5.2.4. See clause 5.5.11.5 for information on behaviour when there is more than one instance of the same entity in the input Array.
Implementations shall exhibit the following behaviour:
This operation allows the deletion of entities within an NGSI-LD system based upon a query.
A Context Producer can delete a set of entities which matches a specific query from an NGSI-LD system as shown in Figure 5.6.21.2‑1.
Figure 5.6.21.2‑1: Purge Entities use case
In the general case, it is not possible to purge 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.
At least one of the following input data shall be provided:
If none of the above is provided, then an error of typeBadRequestData
If the list of Entity identifiers includes a URI which it is not valid, or the query, geoquery or context source filter are not syntactically valid (as per the referred clauses 4.9 and 4.10) an error of type BadRequestData shall be raised.
If projection attributes are present and indicate the use of Linked Entityretrieval, then an error of type BadRequestData shall be raised.
If the filter conditions specified by the query includes Linked Entity attributes then an error of type BadRequestData shall be raised.
Term to URI expansion of type and Attribute names shall be performed, as mandated by clause 5.5.7.
Otherwise, implementations shall run a Query Entities operation (clause 5.6.2) to retrieve a list of ids of Entities for deletion, that meet all of the following conditions (given the respective parameter is provided):
id is equal to any of the id(s) passed as a parameter;
the Entity Type names match the selector of Entity Types (expanded) that is passed as a parameter;
Attribute matches any of the expanded attribute(s) in the list that is passed as a parameter;
id matches the id pattern passed as a parameter;
the filter conditions specified by the query are met (as mandated by clause 4.9);
the geospatial restrictions imposed by the geoquery are met (as mandated by clause 4.10); if there are multiple instances of the GeoProperty on which the geoquery is based, it is sufficient if any of these instances meets the geospatial restrictions;
if the Scope query is present, it shall match a present Entity Scope (as mandated by clause 4.19, for an example see annex C, clause C.5.15).
And thereafter:
Unless local scope is specified (see clause 5.5.13), for Context Source Registrations that match the query and support the “purgeEntity” operation (see operations and operation groups in clause 4.20), implementations shall do the following:
If an inclusive, exclusive or redirect Context Source Registration matches against the filter conditions specified, the request is forwarded for remote processing. For each matching registration:
None.
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.
Figure 5.7.1.2‑1: Retrieve Entity use case
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, the Entity is reduced down to only contain the defined Entity members (applies to all Entities in the payload in the case of Linked Entity retrieval).
If an exclusionary list of Entity member names is present, the defined Entity members listed are removed from the Entity (applies to all Entities in the payload in the case of Linked Entity retrieval).
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.
If inline Linked Entity retrieval (see clause 4.5.23.2) is specified, and any of the returned Attributes corresponds to an annotated Relationship, then unless a URI has been previously encountered, an entity sub-Property shall be included in the response holding the Linked Entity data for each URI corresponding to that Relationship’s target object URI. If any of the returned Attributes corresponds to an annotated ListRelationship, then an entityList subproperty shall be included in the response holding the ordered array of Linked Entities corresponding to that ListRelationship’s target objectList URIs unless a URI has been previously encountered.
If flattened Linked Entity retrieval (see clause 4.5.23.3) is specified, the response shall be an array of JSON-LD objects representing the target entity itself and the targets of its Relationships. If any of the returned Attributes corresponds to an annotated Relationship, unless a target URI has been previously encountered, thedata corresponding to each URI of the Relationship’s target object URIs is appended to the array. If any of the returned Attributes corresponds to an annotated ListRelationship, then an ordered array of additional Linked Entities is appended to the array which hold the data corresponding to each of the URIs found within ListRelationship’s target objectList unless a URI has been previously encountered.
Flattened Linked Entity retrieval output changes to a GeoJSON FeatureCollection as mandated by clause 5.2.30 if the Accept Header is set to “application/geo+json”.
If the location of a previously generated EntityMap was passed into the request, or a flag to return an EntityMap was present in the request, the location of the EntityMap used in the operation shall be returned in a specific field in the response.
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.
Figure 5.7.2.2‑1: Query Entities use case
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.
At least one of the following input data shall be provided:
If none of the above is provided, then an error of typeBadRequestData
If the list of Entity identifiers includes a URI which it is not valid, or the query, geoquery or context source filter are not syntactically valid (as per the referred clauses 4.9 and 4.10) an error of type BadRequestData shall be raised.
If projection attributes are present and indicate the use of Linked Entityretrieval, and the use of Linked Entityretrieval is not specified, or the projected attribute depth exceeds the Linked Entityretrieval depth, then an error of type BadRequestData shall be raised.
If the filter conditions specified by the query includes Linked Entity attributes, and the use of Linked Entityretrieval is not specified, or the Linked Entityattribute query depth exceeds the Linked Entityretrieval depth, an error of type BadRequestData shall be raised (too deep query).
If geometryProperty parameter is present and the Accept Header is not set to “application/geo+json”, then an error of type BadRequestData shall be raised.
If the ordering parameter is present and the execution of the operation is not limited to the local scope (see clause 5.5.13) then an error of type BadRequestData shall be raised.
If the ordering parameter is present and refers to ordering by distance and no location is present, then an error of type BadRequestData shall be raised.
If a preferred collation setting is present and it does not conform to a valid ICU collation (see IETF RFC 6067 [36]) then an error of type BadRequestData shall be raised.
If a location to be used when applying ordering of Entities setting is present and it is not syntactically valid (as per the referred clauses 4.9 and 4.10) or an error of type BadRequestData shall be raised.
Otherwise,
Term to URI expansion of type and Attribute names shall be performed, as mandated by clause 5.5.7.
If a list of Attribute names whose values shall be expanded to URIs has been supplied, JSON-LD type coercion shall be performed as mandated by clause 5.5.7.
If split entities flag is explicitly set to true or, if not explicitly set, the default setting of the deployment allows split entities, and local scope is not specified, implementations shall run a query that shall return an Entity Array containing all the Entities found locally, that meet all of the following conditions (given the respective parameter is provided):
Otherwise, implementations shall run a query that shall return an Entity Array containing all the Entities found locally, that meet all of the following conditions (given the respective parameter is provided):
If the ContextBroker implementation supports the use of EntityMaps then:
Unless local scope is specified (see clause 5.5.13), for Context Source Registrations that match the query and support the “queryEntity” operation (see operations and operation groups in clause 4.20), implementations shall do the following:
If split Entities flag is explicitly set to true or, if not explicitly set, the default setting of the deployment allows split Entities, and local scope is not specified, the following filters shall be applied on the aggregated Entities:
Pagination logic shall be in place as mandated by clause 5.5.9.
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.
For each Attribute found in the target Entity, when datasetId parameter is provided in the request:
If the Accept Header is set to “application/json” or “application/ld+json”, a JSON-LD array is returned, representing the Entities as mandated by clause 5.2.4 and containing only the Attributes requested (if present).
If the Accept Header is set to “application/geo+json”, the response shall be a GeoJSON FeatureCollection as mandated by clause 5.2.30, with each Feature within the FeatureCollection containing only the Attributes requested (if present):
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. If Entity ordering is specified (see clause 4.23), then the JSON-LD array or FeatureCollection returned shall be ordered according to the list of member names specified. 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 langshall 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.
If inline Linked Entity retrieval (see clause 4.5.23.2) is specified, and any of the returned Attributes corresponds to an annotated Relationship, then unless a URI has been previously encountered, an entity subproperty shall also be included in the response holding the data for each URI corresponding to that Relationship’s target object URIs. If any of the returned Attributes corresponds to an annotated ListRelationship, then an entityList subproperty shall also be included in the response holding the ordered data corresponding to that ListRelationship’s target objectList URIs, unless a URI has been previously encountered.
If flattened Linked Entity retrieval (see clause 4.5.23.3) is specified, the response shall be an array of JSON-LD objects representing the matching entities and the targets of their Relationships. If any of the returned Attributes corresponds to an annotated Relationship, unless a URI has been previously encountered, then data for each URI corresponding to the Relationship’s target object URIs is appended to the array. If any of the returned Attributes corresponds to an annotated ListRelationship, then an array of additional Linked Entities is appended to the array which hold the data corresponding to each of the URIs found within ListRelationship’s target objectList unless a URI has been previously encountered.
If the location of a previously generated EntityMap was passed into the request, or a flag to return an EntityMap was present in the request, the location of the EntityMap used in the operation shall be returned in a specific field in the response.
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.
Figure 5.7.3.2‑1: Retrieve Temporal Evolution of an Entity use case
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 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.
Figure 5.7.4.2‑1: Query Temporal Evolution of Entities use case
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.
If a temporal query is not provided then an error of type BadRequestData shall be raised.
At least one of the following input data shall be provided:
If none of the above is provided, then an error of typeBadRequestData
If projection attributes or filter conditions indicate the use of Linked Entityretrieval, an error of type BadRequestData shall be raised.
If the list of Entity identifiers includes a URI which it is not valid, or the query, geoquery or context source filter are not syntactically valid (as per the referred clauses 4.9 and 4.10) an error of type BadRequestData shall be raised.
If the ordering parameter is present and the execution of the operation is not limited to the local scope (see clause 5.5.13) then an error of type BadRequestData shall be raised.
If the ordering parameter is present and refers an entity name other than “id”, then an error of type BadRequestData shall be raised.
If a preferred collation setting is present and it does not conform to a valid ICU collation (see IETF RFC 6067 [36]) then an error of type BadRequestData shall be raised.
Term to URI expansion of type and Attribute names shall be observed mandated by clause 5.5.7.
If a list of Attribute names whose values shall be expanded to URIs has been supplied, JSON-LD type coercion shall be performed as mandated by clause 5.5.7.
The lastN parameter refers to a number, n, of Attribute instances which shall correspond to the last n timestamps (in descending ordering) of the temporal property (by default observedAt) within the concerned temporal interval.
Otherwise,
Let S be the set of selected Entities i.e. the query result set.
If split entities flag is explicitly set to true or, if not explicitly set, the default setting of the deployment allows split entities, and local scope is not specified, implementations shall run a query that shall return an Entity Array containing all the Entities found locally, that meet all of the following conditions (given the respective parameter is provided):
Implementations shall run a query that shall return the Temporal Evolution of the matching Entities (all Entities stored locally, in case only a local scope is specified); the logical steps to select the final result set of Entities, and the Attribute instances included as part of their temporal representation, are enumerated as follows:
If the ContextBroker implementation supports the use of EntityMaps then:
Unless local scope is specified (see clause 5.5.13), for Context Source Registrations that match the query and support the “queryTemporal” operation (see operations and operation groups in clause 4.20), implementations shall do the following:
If split entities flag is explicitly set to true or, if not explicitly set, the default setting of the deployment allows split entities, and local scope is not specified, the following filters have to be applied on the aggregated Entities:
Otherwise S7 is equal to S4.
If a datasetId parameter is provided, from S7, for all Entities, filter the Attribute instances based on the datasetIds specified in the parameter, i.e. keep only the Attribute instances whosedatasetId is specified. The default Attribute instance is matched, if “@none” is specified. Remove all Attributes without remaining Attribute instances. Let S8 be this new subset.
If no datasetId is provided then S8 equals to S7.
From the set of Entities that are in S8, include in their temporal representation only the Attribute instances (up to lastN) corresponding to the query’s projection Attributes, or aggregated values of Attribute instances (if aggregated temporal representation is requested), and which meet the temporal, query and geoquery restrictions.
If an aggregated temporal representation is requested and any of the requested Attributes is not eligible for at least one of the aggregation methods specified in the request parameters, then an error of type InvalidRequest shall be raised.
Pagination logic shall be in place as mandated by clause 5.5.9.
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.21 and selected according to the behaviour described by clause 5.7.4.4.
If Entity ordering is specified (see clause 4.23), then the JSON-LD array returned shall be ordered according to the member names specified.
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 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.
Figure 5.7.5.2‑1: Retrieve Available Entity Types use case
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.
Figure 5.7.6.2‑1: Retrieve Details of Available Entity Types use case
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.
Figure 5.7.7.2‑1: Retrieve Available Entity Type Information use case
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.
Figure 5.7.8.2‑1: Retrieve Available Attributes use case
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.
Figure 5.7.9.2‑1: Retrieve Details of Available Attributes use case
An optional JSON-LD context.
Return 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) that belong to entity instances existing within the NGSI-LD system. See clause 5.7.11 for architecture-related implementation aspects, in particular the distributed behaviour.
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.
Figure 5.7.10.2‑1: Retrieve Available Attribute Information use case
Return a JSON-LD object representing the details of available attributes as mandated by clause 5.2.28 that belong to entity instances existing within the NGSI-LD system. See clause 5.7.11 for architecture-related implementation aspects, in particular the distributed behaviour.
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.
Figure 5.8.1.2‑1: Create subscription use case
A URI identifying the newly created Subscription.
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.
Figure 5.8.2.2‑1: Update subscription use case
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.
Figure 5.8.3.2‑1: Retrieve subscription use case
Id (URI) of the subscription to be retrieved (target subscription).
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.
Figure 5.8.4.2‑1: Query subscriptions use case
A limit to the number of subscriptions to be retrieved. See clause 5.5.9.
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.
Figure 5.8.5.2‑1: Delete subscription use case
A subscription identifier (URI).
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:
Notifications shall only be sent if and only if the status of the corresponding subscription (subscription.status) is “active”, i.e. not”paused” nor “expired”.
If a Subscription defines a timeInterval member, a Notification shall be sent periodically, when the time interval (in seconds) specified in such value field is reached, regardless of Attribute changes. The notification message shall include all the subscribed Entities that match the query, geoquery and Scope query conditions. If none of query, geoquery and Scope query are defined, then all subscribed Entities shall be included. For each entity in the notification, only the Attribute instances are to be included that match the datasetId member in Subscription. If there are no matching Entities, no Notification is sent.
If a Subscription does not define a timeInterval term, the notification shall be sent whenever there is a change in the watched Attributes. An Attribute is considered to change when any of the members (including children) in its corresponding JSON-LD node is updated with a value different than the existing one. The notification message shall include all the subscribed Entities that changed and that match (as mandated by clauses 4.9, 4.10 and 4.19) the query, geoquery and Scope query conditions. If query, geoquery and scopeQuery are all not defined then all subscribed Entities that changed shall be included. If, for an Entity, there are multiple instances of the GeoProperty on which the geoquery is based, it is sufficient if any of these instances meets the geospatial restrictions. For each entity in the notification, only the Attribute instances are to be included that match the datasetId member in Subscription. Finally, if a Context Source filter is defined, then only the subscribed Entities whose origin Context Source matches the referred filter shall be included.
If a Notification with a subscriptionId is received that has a mapping to a local Subscription identifier, the Notification shall be copied. If the splitEntities member of the local Subscription is explicitly set to true or, if not explicitly set, the default setting of the deployment allows split entities:
If there are Entities in the data member of the Notification copy, the Notification copy shall be forwarded to the Notification endpoint specified in the local Subscription, using this local Subscription identifier instead of the subscriptionId received.
A Notification shall be sent as follows:
If the notification.formatmember value is set, the representation of the entities changes:
If the notification.format is set to “concise”then a concise representation of the entities shall be provided as defined by clause 4.5.1.
If the notification.format is set to “simplified” (or “keyValues” as a synonym), then a simplified representation of the entities (as mandated by clause 4.5.4) shall be provided.
Otherwise the normalized format as defined by clause 4.5.1 shall be used.
If the notification.pickmember value is set, every Entity within the payload body is reduced down to only contain the defined entity members listed.
If the notification.omitmember value is set, the defined entity members listed are removed from each Entity within the payload.
If the notification.joinmember value is set then Linked Entityretrieval(as mandated by clause 4.5.23) shall be provided.
If the ngsildConformance field of the corresponding Subscription is set, the notification shall undergo a backwards compatibility operation as defined by clause 4.3.6.8 and be amended to conform to the supplied version of the NGSI-LD specification.
A Notification shall be sent (as mandated by each concrete binding and including any optional endpoint.receiverInfodefined by clause 5.2.22) to the endpoint specified by the endpoint.urimember of the notification structure defined by clause 5.2.14. The Notification content shall be JSONby default. However, this can be changed to JSON-LD or GeoJSONby means of the endpoint.acceptmember.
The notification.timesSent member shall be incremented by one.
The notification.lastNotification member shall be updated with a timestamp representing the current date and time.
If the response to the notification request is 200 OK then implementations shall:
If the response to the notification request is different than 200 OKthen implementations shall:
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.
Figure 5.9.2.2‑1: Register context source use case
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 and the following exceptions shall apply:
A URI identifying the newly created ContextSourceRegistration.
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.
Figure 5.9.3.2‑1: Update context source registration use case
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.
Figure 5.9.4.2‑1: Delete context source registration use case
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.
Figure 5.10.1.2‑1: Retrieve context source registration use case
Context source registration identifier (id) of the context source registration to be retrieved (target registration).
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.
Figure 5.10.2.2‑1: Discover context source registrations use case
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.
Execute the behaviour defined in clause 5.5.4 on JSON-LD validation.
At least one of the following input data shall be provided:
If none of them is provided, then an error of typeBadRequestDatalist of Attribute names
If the list of Entity identifiers includes a URI which it is not valid, or the query, geoquery or temporal query are not syntactically valid (as per clauses 4.9, 4.10 and 4.11) an error of type BadRequestData shall be raised.
Term to URI expansion of type and Attribute names shall be performed, as mandated by clause 5.5.7.
Otherwise, implementations shall run a query that shall return context source registrations that meet all the applicable conditions:
If present, the entity specification in the query consisting of a combination of entity type selector and entity id/entity id pattern (optional) matches an EntityInfo specified in a RegistrationInfo of the information property in a context source registration. If there is no EntityInfo specified in the RegistrationInfo, the entity specification is considered matching. This matching is further described in clause 5.12.
If present, at least one Attribute name specified in the query matches one Property or Relationship in the RegistrationInfo element of the information property in a context source registration. If no Properties or Relationships are specified in the RegistrationInfo, the Attribute names are considered matching. This matching is further described in clause 5.12.
If present, the geoquery is matched against the GeoProperty identified in the geoquery. If no GeoProperty is specified in the geoquery, the default property is location. The geoquery matches the GeoProperty specified in the Context Source Registration, if the location directly matches or if the location possibly contains locations that would match the geoquery.
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 specified time intervals, i.e. observationInterval or managementInterval are considered. If the timeproperty is observedAt or no timeproperty is specified in the temporal query (default: observedAt), the temporal query is matched against the observationInterval (if present). If the timeproperty is createdAt, modifiedAt or deletedAt, the temporal query is matched against the managementInterval (if present). If the relevant interval is not present, there is no match:
If present, the conditions specified by the context source query filter match the respective Context Source Properties (as mandated by clause 4.9).
If present, the Scope query (as mandated by clause 4.19) is matched against the scope property.
Pagination logic shall be in place as mandated by clause 5.5.9.
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 SourceSubscriber can subscribe to a new Context Source Registration as shown in Figure 5.11.2.2-1.
Figure 5.11.2.2‑1: Subscribe Context Source Registration use case
A URI identifying the newly created Subscription.
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.
Figure 5.11.3.2‑1: Update Context Source Registration Subscription use case
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.
Figure 5.11.4.2‑1: Retrieve Context Source Registration Subscription use case
Id (URI) of the subscription to be retrieved (target subscription).
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.
Figure 5.11.5.2‑1: Query Context Source Registration Subscriptions use case
A limit to the number of Context Source Registration Subscriptions to be retrieved. See clause 5.5.9.
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.
Figure 5.11.6.2‑1: Delete Context Source Registration Subscriptions use case
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 Sourcesis 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.
Figure 5.13.2.2‑1: Add @context use case
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 (URI) 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.
A locally unique URI identifying 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.
Figure 5.13.3.2‑1: List @contexts use case
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.
Figure 5.13.4.2‑1: Serve @context use case
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.
Figure 5.13.5.2‑1: Delete and Reload @context use case
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.
Figure 5.14.1.2‑1: Retrieve EntityMap
EntityMap ID (URI) of the EntityMap to be retrieved (target EntityMap).
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 Fragment, 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.
Figure 5.14.2.2‑1: Update EntityMap
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.
Figure 5.14.3.2‑1: Delete EntityMap
EntityMap ID (URI) of the EntityMap to be retrieved (target EntityMap).
None.
This operation is very similar to the Query Entities operation in clause 5.7.2, except that it does not directly return Entities, but creates and returns an Entity map including the identifiers of the Entities that are candidates to be part of the query results. The Entity map can then be used for paginating through the included Entities.
A Context Consumer can retrieve an Entity map with the Entities that match a specific query from an NGSI-LD system as shown in Figure 5.14.4.2‑1.
Figure 5.14.4.2‑1: Query Entities for creating EntityMap use case
To simplify the operation, the same parameters as for the Query Entities operation (clause 5.7.2) are allowed, but some of these are irrelevant for creating an Entity map and thus shall be ignored.
A reference to a JSON-LD @context (optional).
A selector of Entity types as specified by clause 4.17 (optional). Both type names (short hand string) and fully qualified type names (URI) are allowed in the selector.
A list (one or more) of Entity identifiers (optional).
A list (one or more) of Attribute names of which at least one shall exist in order for an Entity to be selected, and also used as query projection attributes (optional).
A restrictive list of Entity member names (“id”, “type”, “scope” or an Attribute name) to be retrieved (projection attributes as defined by clause 4.21) (optional).
An exclusionary list member names (“id”, “type”, “scope” or an Attribute name) to be removed (projection attributes as defined by clause 4.21) (optional).
An id pattern as a regular expression (optional).
An NGSI-LD query (to filter out Entities by Attribute values) as per clause 4.9 (optional).
An NGSI-LD geoquery (to filter out Entities by spatial relationships) as mandated by clause 4.10 (optional).
In the case of GeoJSON representation:
The name of the GeoProperty attribute to use as the geometry for the GeoJSON representation as mandated by clause 4.5.16 (ignored).
A datasetId specifying which instance of the value is to be selected if the GeoProperty value has multiple instances as defined by clause 4.5.5 (ignored).
A NGSI-LD Scope query (to filter out Entities based on their Scope) as mandated by clause 4.19 (optional).
An NGSI-LD query (called context source filter, to filter out Context Sources by the values of properties that describe them) as per clause 4.9 (optional).
A limit to the number of Entities to be retrieved. See clause 5.5.9 (ignored).
A specified language filter as per clause 4.15 (optional).
A list (one or more) of Attribute names whose values shall be expanded to URIs prior to executing a query (optional).
An optional flag indicating whether to include additional Linked Entities corresponding to the Relationships retrieved and how to format those Linked Entities. See clause 4.5.23 (optional).
A limit to the depth of Linked Entities to search whilst traversing an Entity Graph. See clause 4.5.23 (optional).
A list (one or more) of Linked Entity identifiers previously encountered whilst traversing an Entity Graph. See clause 4.5.23 (optional).
A flag indicating whether to return the location of the EntityMap used within the operation (ignored, EntityMap is always returned).
A suggested expiry time for the EntityMap (optional).
The location of a resource holding an EntityMap of matching Entity registrations (ignored).
A datasetId parameter that specifies which Attribute instances are to be selected as defined by clause 4.5.5 (optional).
A flag indicating whether split Entities are to be expected, i.e. Entities whose information is distributed across different Context Sources (optional).
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.
At least one of the following input data shall be provided:
If none of the above is provided, then an error of typeBadRequestData
If the list of Entity identifiers includes a URI which it is not valid, or the query, geoquery or context source filter are not syntactically valid (as per the referred clauses 4.9 and 4.10) an error of type BadRequestData shall be raised.
If projection attributes are present and indicate the use of Linked Entityretrieval, and the use of Linked Entityretrieval is not specified, or the projected attribute depth exceeds the Linked Entityretrieval depth, then an error of type BadRequestData shall be raised.
If the filter conditions specified by the query includes Linked Entity attributes, and the use of Linked Entityretrieval is not specified, or the Linked Entityattribute query depth exceeds the Linked Entityretrieval depth, an error of type BadRequestData shall be raised (too deep query).
If geometryProperty parameter is present and the Accept Header is not set to “application/geo+json”, then an error of type BadRequestData shall be raised.
Otherwise,
Term to URI expansion of type and Attribute names shall be performed, as mandated by clause 5.5.7.
If a list of Attribute names whose values shall be expanded to URIs has been supplied, JSON-LD type coercion shall be performed as mandated by clause 5.5.7.
If split entities flag is explicitly set to true or, if not explicitly set, the default setting of the deployment allows split entities, and local scope is not specified, implementations shall run a query that shall return an EntityMap containing the identifiers of all the Entities found locally that meet all of the following conditions:
id is equal to any of the id(s) passed as a parameter;
the Entity Type names match the selector of Entity Types (expanded) that is passed as a parameter;
id matches the id pattern passed as a parameter.
Otherwise, implementations shall run a query that shall return an EntityMap containing the identifiers pf all Entities found locally that meet all of the following conditions (given the respective parameter is provided):
id is equal to any of the id(s) passed as a parameter;
the Entity Type names match the selector of Entity Types (expanded) that is passed as a parameter;
Attribute matches any of the expanded attribute(s) in the list that is passed as a parameter;
id matches the id pattern passed as a parameter;
the filter conditions specified by the query are met (as mandated by clause 4.9);
the geospatial restrictions imposed by the geoquery are met (as mandated by clause 4.10); if there are multiple instances of the GeoProperty on which the geoquery is based, it is sufficient if any of these instances meets the geospatial restrictions;
if the Scope query is present, it shall match a present Entity Scope (as mandated by clause 4.19, for an example see annex C, clause C.5.15);
if the Attribute list is present, in order for an Entity to match, it shall contain at least one of the Attributes in the projection Attribute list.
Unless local scope is specified (see clause 5.5.13), for Context Source Registrations that match the query and support the “createEntityMapQueryEntity” operation (see operations and operation groups in clause 4.20), implementations shall do the following:
The local EntityMap is stored and made accessible based on its identifier.
The location of the local EntityMap shall be returned in a specific field in the response, as well as the EntityMap itself.
This operation is very similar to the Query Temporal Evolution of Entities operation in clause 5.7.4, except that it does not directly return the Temporal Evolution of Entities but creates and returns an Entity map including the identifiers of the Entities that are candidates to be part of the query results. The Entity map can then be used for paginating through Temporal Evolution of the included Entities.
A Context Consumer can retrieve an Entity map with the Temporal Evolution of a set of Entities which matches a specific query from an NGSI-LD system as shown in Figure 5.14.5.2‑1.
Figure 5.14.5.2‑1: Query Temporal Evolution for creating EntityMap use case
To simplify the operation, the same parameters as for the Query Temporal Evolution of Entities operation (clause 5.7.4) are allowed, but some of these are irrelevant for creating an Entity map and thus will be ignored.
The location of the local EntityMap shall be returned in a specific field in the response, as well as the EntityMap itself.
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 retrieveidentity information about a specific Context Source within the NGSI-LD system as shown in Figure 5.15.1.2‑1.
Figure 5.15.1.2‑1: Retrieve Context Source Identity Information
None.
A JSON-LD object representing the identity of the Context Source as mandated by clause 5.2.40.
This operation allows creating a new snapshot.
A Context Consumer can create a new snapshot to have a more consistent basis for queries on the persisted Entity information as shown in Figure 5.16.1.2‑1.
Figure 5.16.1.2‑1: Create Snapshot use case
A URI identifying the newly created Snapshot.
This operation allows cloning a snapshot stored in an NGSI-LD system.
A Context Consumer can clone an existing snapshot stored in an NGSI-LD system as shown in Figure 5.16.2.2‑1.
Figure 5.16.2.2‑1: Clone Snapshot use case
A URI identifying the newly created Snapshot.
This operation allows retrieving the status of a Snapshot stored in an NGSI-LD system.
A Context Consumer can retrieve the status of a Snapshot from an NGSI-LD system as shown in Figure 5.16.3.2‑1.
Figure 5.16.3.2‑1: Retrieve Snapshot Status use case
Snapshot Id (URI) of the Snapshot whose status is to be retrieved.
A JSON-LD object representing the Snapshot status as mandated by clause 5.2.41.
This operation allows updating an existing Snapshot.
A Context Consumer can update an existing Snapshot within an NGSI-LD system as shown in Figure 5.16.4.2‑1.
Figure 5.16.4.2‑1: Update Snapshot Status use case
A JSON-LD object representing the Snapshot status as mandated by clause 5.2.41.
This operation allows deleting an existing Snapshot.
A Context Consumer can delete a Snapshot within an NGSI-LD system as shown in Figure 5.16.5.2‑1.
Figure 5.16.5.2‑1: Delete Snapshot use case
None.
A Snapshot status notification allows the subscriber, typically the creator of the Snapshot, to be notified when the Snapshot is ready, or in case of any problems or updates. Implementations shall exhibit the following behaviour:
This operation allows purging selected Snapshots.
A Context Consumer can purge Snapshots within an NGSI-LD system as shown in Figure 5.16.7.2‑1.
Figure 5.16.7.2‑1: Purge Snapshots use case
None.