This clause defines data structures and operations of the NGSI-LD API. No specific binding is assumed. Clause 6 maps these operations and data types to the HTTP REST binding.
Implementations shall support the data types defined by the clauses below. For each member defined by each data type (including nested ones) a term shall be added to the Core @context, as mandated by clause 4.5.
None of the members described admit a null value directly, as when a JSON-LD processor encounters null, the associated entry or value is always removed when expanding the JSON-LD document.
However, in the context of a partial update or merge operation (see clauses 5.5.8 and 5.5.12), an NGSI-LD Null shall be used to indicate the removal of a target member. Thus, for representing deleted elements in notifications and in the temporal evolution, the URI "urn:ngsi-ld:null" is used as a Property value or Relationship object and the JSON object {"@none": "urn:ngsi-ld:null"} for the languageMap of a LanguageProperty, respectively. In all other cases, implementations shall raise an error of type BadRequestData if an NGSI-LD Null value is encountered.
As null cannot be used as a value in JSON-LD, there is still the possibility of using a JSON null literal {"@type": "@json", "@value": null} instead. JSON literals are not to be expanded in JSON-LD and thus the respective element is not removed during JSON-LD expansion.
Non-normative JSON Schema [i.11] definitions of the referred data types are also available at [i.13].
The use of URI in the context of the present document also includes the use of International Resource Identifiers (IRIs) as defined in IETF RFC 3987 [23], which extends the use of characters to Unicode characters [22] beyond the ASCII character set, enabling the support of languages other than English.
The JSON-LD representation of NGSI-LD Entity, Property, Relationship, Context Source Registration and Subscription can include the common members described by Table 5.2.2‑1.
Those members are read-only, and shall be automatically generated by NGSI-LD implementations. They shall not be provided by Context Producers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
In query or retrieve operations implementations shall only generate common members (Table 5.2.2‑1) when the Context Consumer explicitly asks for their inclusion. Clause 6.3.11 defines the mechanism offered by the HTTP binding for such purpose.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
createdAt
|
string
|
DateTime (clause
4.6.3)
|
0..1
|
Entity creation timestamp. See clause
4.8
|
modifiedAt
|
string
|
DateTime (clause
4.6.3)
|
0..1
|
Entity last modification 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) |
When encoding NGSI-LD Entities, Context Source Registrations, Subscriptions and Notifications, as pure JSON-LD (MIME type "application/ld+json"), @context @context (as described in clause 4.4) shall be included as a special member of the corresponding JSON-LD Object. Table 5.2.3‑1 gives a precise definition of this special member.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
@context
|
URI, JSON Object, or JSON Array
|
See [2], section 5.1.
|
0..1
|
JSON-LD @context.
|
This type represents the data needed to define an NGSI-LD Entity as mandated by clause 4.5.1.
The supported JSON members shall follow the requirements provided in Table 5.2.4‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Entity ID.
|
type
|
String or String[]
|
1
|
Entity Type(s). Both short hand string(s) (type name) or URI(s) are
allowed
|
|
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
|
scope
|
String or String[]
|
See clause
4.18
|
0..1
|
Scope
|
location
|
GeoProperty
|
See datatype definition in clause
5.2.7
|
0..1
|
Default geospatial Property of an entity. See clause
4.7
|
observationSpace
|
GeoProperty
|
See datatype definition in clause
5.2.7
|
0..1
|
See clause
4.7
|
operationSpace
|
GeoProperty
|
See datatype definition in clause
5.2.7
|
0..1
|
See clause
4.7
|
<Property name>
|
Property or Property[] (see note 1)
|
See datatype definitions in clauses 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 name>
|
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).
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "Property"
|
1
|
Node type.
|
value
|
Any JSON value as defined by IETF RFC 8259 [6]
|
See NGSI-LD Value definition in clause
3.1
|
1
|
Property Value.
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property values
|
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
|
observedAt
|
String
|
DateTime (clause
4.6.3)
|
0..1
|
Timestamp. See clause
4.8
|
unitCode
|
String
|
As mandated by [15]
|
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 name>
|
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 name>
|
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.
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
|
Any JSON value as defined by IETF RFC 8259 [6]
|
Only used in Notifications, if the showChanges option is
explicitly requested
|
0..1
|
Previous Property Value
|
This type represents the data needed to define a Relationship as mandated by clause 4.5.3.
The supported JSON members shall follow the requirements provided in Table 5.2.6‑1 below. The datatype definition defines all the required attributes for the normalized representation. In the concise representation, the Attribute type member can be omitted as type="Relationship" can be inferred from the presence of the object member.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "Relationship"
|
1
|
Node type
|
object
|
String or String[]
|
Valid URI or an Array of Valid URIs
|
1
|
Relationship's target object
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of target relationship objects
|
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
|
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 name>
|
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 name>
|
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.
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.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "GeoProperty"
|
1
|
Node type
|
value
|
JSON Object
|
As mandated by clause
4.7
|
1
|
Geolocation encoded as GeoJSON [8]
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property values
|
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
|
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 name>
|
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 | JsonPropertiesof 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 | ListPropertiesof the GeoProperty | |
<Relationship name>
|
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 | ListRelationshipsof the GeoProperty | |
NOTE 1:
For
each
Property
(or
subclass
of
Property
)
identified
by
the
same
Property
name,
there
can
be
one
or
more
instances
separated
by
datasetId.
NOTE 2:
For
each
Relationship
(or
subclass
of
Relationship
)
identified
by
the
same
Relationship
name,
there
can
be
one
or
more
instances
separated
by
datasetId.
|
The following output only members (defined by Table 5.2.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.
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
|
DateTime (clause
4.6.3)
|
0..1
|
System generated last modification timestamp. See clause
4.8.
|
previousValue
|
Any JSON value as defined by IETF RFC 8259 [6]
|
Only used in Notifications, if the
showChanges option is explicitly requested
|
0..1
|
Previous GeoProperty Value.
|
This type represents what Entities, Entity Types or group of Entity IDs (as a regular expression pattern mandated by IEEE 1003.2™ [11]) can be provided (by Context Sources).
The JSON members shall follow the indications provided in Table 5.2.8‑1. id takes precedence over idPattern.
Notice that Cardinality of type being 1 implies that it is not possible to register what Entities can be provided by a Context Source just by their id or idPattern (i.e. without specifying their type).
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
0..1
|
Entity identifier.
|
idPattern
|
String
|
Regular expression as per IEEE 1003.2™ [11]
|
0..1
|
A regular expression which denotes a pattern that shall be matched by
the provided or subscribed Entities.
|
type
|
String or String[]
|
Fully Qualified Name of an Entity Type or the Entity Type name as a
short-hand string. See clause
4.6.2
|
1
|
Entity Type (or JSON array, in case of Entities with multiple Entity
Types).
|
This type represents the data needed to register a new Context Source.
The supported JSON members shall follow the indications provided in Table 5.2.9‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI.
Unique registration identifier. (JSON-LD @id).
|
0..1
|
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.
|
registrationName
|
String
|
Non-empty string
|
0..1
|
A name given to this Context Source
Registration
|
contextSourceAlias
|
String
|
Non-empty string. Pseudonym field as defined in IETF RFC 7230 [27]
|
0..1
|
A previously retrieved unique id for a registered Context Source which is used to identify
loops.
In the multi-tenancy use case (see clause
4.14), this id shall be used to identify a specific
Tenant within a registered Context Source.
|
description
|
String
|
Non-empty string
|
0..1
|
A description of this Context Source
Registration.
|
information
|
RegistrationInfo[]
|
See data type definition in clause
5.2.10. Empty array (0 length) is not allowed
|
1
|
Describes the Entities, Properties and Relationships for which the Context Source may be able to provide
information.
|
datasetId
|
String[]
|
Valid URIs,"@none"
for including the default Attribute instances.
|
0..1
|
Specifies the datasetIds of Attributes that the Context Source can provide, defined as per
clause
4.5.5.
|
tenant
|
String
|
0..1
|
Identifies the Tenant that has to be
specified in all requests to the Context
Source that are related to the information registered in this
Context Source Registration. If not
present, the default Tenant is
assumed. Should only be present in systems supporting multi-tenancy.
|
|
observationInterval
|
TimeInterval
|
See data type definition in clause
5.2.11
|
0..1
|
If present, the Context Source can be
queried for Temporal Entity Representations. (If latest Entity
information is also provided, a separate Context Registration is needed
for this purpose). The observationInterval specifies the time
interval for which the Context Source
can provide Entity information as specified by the observedAt
Temporal Property. A temporal query based on the observedAt
Temporal Property, which is the default, is matched against the
observationInterval for overlap.
|
managementInterval
|
TimeInterval
|
See data type definition in clause
5.2.11
|
0..1
|
If present, the Context Source can be
queried for Temporal Entity Representations. (If latest Entity
information is also provided, a separate Context Registration is needed
for this purpose). The managementInterval specifies the time
interval for which the Context Source
can provide Entity information as specified by the createdAt,
modifiedAt and deletedAt Temporal Properties. A temporal
query based on the createdAt, modifiedAt or
deletedAt Temporal Property is matched against the
managementInterval for overlap.
|
location
|
GeoJSON Geometry as mandated by clause
4.7
|
0..1
|
Location for which the Context
Source may be able to provide information.
|
|
observationSpace
|
GeoJSON Geometry as mandated by clause
4.7
|
0..1
|
Geographic location that includes the observation spaces of all entities
as specified by their respective observationSpace
GeoProperty for which the Context
Source may be able to provide information.
|
|
operationSpace
|
GeoJSON Geometry as mandated by clause
4.7
|
0..1
|
Geographic location that includes the operation spaces of all entities
as specified by their respective operationSpace
GeoProperty for which the Context
Source may be able to provide information.
|
|
expiresAt
|
String
|
DateTime (clause
4.6.3)
|
0..1
|
Provides an expiration date. When passed the Context Source Registration will become
invalid and the Context Source might
no longer be available.
|
endpoint
|
String
|
It shall be a dereferenceable URI
|
1
|
Endpoint expressed as dereferenceable URI through which the Context Source exposes its NGSI-LD
interface.
|
contextSourceInfo
|
KeyValuePair[]
|
0..1
|
Generic {key, value} array to convey optional information to provide
when contacting the registered Context
Source.
|
|
scope
|
String or
String[]
|
Scope(s)
|
0..1
|
Scopes (see clause
4.18) for which the Context
Source has Entities.
|
mode
|
String
|
It shall be one of:
"inclusive", "exclusive", "redirect" or "auxiliary"
The mode is assumed to be "inclusive" if
not explicitly defined
|
0..1
|
The definition of the mode of distributed operation (see clause
4.3.6) supported by the registered Context Source.
|
operations
|
String[]
|
Entries are limited to the named API operations and named operation
groups (see clause
4.20)
|
0..1
|
The definition limited subset of API operations supported by the
registered Context Source.
If undefined, the default set of operations is "federationOps" (see clause
4.20).
|
refreshRate
|
String
|
String representing a duration in ISO 8601 format [17]
|
0..1
|
An indication of the likely period of time to elapse between updates at
this registered endpoint.
Brokers may optionally use this information to help implement caching.
|
management
|
Registration
Management
Info
|
See data type definition in clause
5.2.34
|
0..1
|
Holds additional optional registration management information that can
be used to limit unnecessary distributed operation requests.
|
<CSource Property name>
|
Any JSON value as defined by IETF RFC 8259 [6]
|
0..N
|
Each Context Source Property pertains
to a characteristic of the Context
Source the Context Source
Registration describes.
|
The members (defined by Table 5.2.9-2) of the CSourceRegistration data structure are also defined. They are read-only and shall be automatically generated by NGSI-LD implementations. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
status
|
String
|
Allowed values:
"ok" "failed" |
0..1
|
Read-only., Status of the Registration. It shall be "ok" if the last attempt to perform a
distributed operation succeeded. It shall be "failed" if the last attempt to perform a
distributed operation failed.
|
timesSent
|
Number
|
0 or greater value
|
0..1
|
Number of times that the
registration triggered a distributed operation, including failed
attempts.
|
timesFailed
|
Number
|
0 or greater value
|
0..1
|
Number of times that the
registration triggered a distributed operation request that
failed.
|
lastSuccess
|
String
|
DateTime(clause 4.6.3)
|
0..1
|
Timestamp corresponding to the
instant when the last successfully distributed operation was sent.
Created on first successful operation.
|
lastFailure |
String
|
DateTime(clause 4.6.3)
|
0..1
|
Timestamp corresponding to the instant when the last distributed operation resulting in a failure (for instance, in the HTTP binding, an HTTP response code other than 2xx) was returned. |
The supported JSON members shall follow the requirements provided in Table 5.2.10‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
entities
|
EntityInfo[]
|
See data type definition in clause
5.2.8. Empty array (0 length) is not allowed. Restrictions in clause
4.3.6 apply as well
|
0..1
|
Describes the entities for which the CSource may be able to provide
information.
|
propertyNames
|
String[]
|
Property names as short hand strings or URIs. Empty array is not
allowed. Restrictions in clause
4.3.6 apply as well
|
0..1
|
Describes the Properties that the CSource may be able to provide.
|
relationshipNames
|
String[]
|
Relationship names as short hand strings or URIs. Empty array is not
allowed. Restrictions in clause
4.3.6 apply as well
|
0..1
|
Describes the Relationships that the CSource may be able to provide.
|
At least one element of RegistrationInfo shall be present.
The supported JSON members shall follow the requirements provided in Table 5.2.11‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
startAt
|
String
|
DateTime (clause
4.6.3)
|
1
|
Describes the start of the time interval
|
endAt
|
String
|
DateTime (clause
4.6.3)
|
0..1
|
Describes the end of the time interval. If not present the interval is
open
|
This datatype represents a Context Subscription.
The supported JSON members shall follow the requirements provided in Table 5.2.12‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
|||
---|---|---|---|---|---|---|---|
id
|
String
|
Valid URI
|
0..1
|
Subscription identifier (JSON-LD @id). 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.
|
|||
subscriptionName
|
String
|
0..1
|
A (short) name given to this Subscription.
|
||||
description
|
String
|
0..1
|
Subscription description.
|
||||
entities
|
EntitySelector[]
|
See data type definition in clause
5.2.33. Empty array (0 length) is not allowed.
Mandatory if timeInterval is present, unless the execution of the
request is limited to local scope (see clause
5.5.13)
|
0..1
|
Entities subscribed.
|
|||
watchedAttributes
|
String[]
|
Attribute name as short hand strings or URIs. Empty array (0 length) is
not allowed.
if timeInterval is present it shall not appear (0 cardinality)
|
0..1
|
Watched Attributes (Properties or Relationships). If not defined it
means any Attribute.
|
|||
localOnly
|
Boolean
|
0..1
|
If localOnly=true then the subscription only pertains to the
Entities stored locally.
|
||||
notificationTrigger
|
String[]
|
Valid notification triggers are "entityCreated", "entityUpdated", "entityDeleted", "attributeCreated", "attributeUpdated", "attributeDeleted"
|
0..1
|
The notification triggers listed indicate what kind of changes shall
trigger a notification. If not present, the default is the combination
"attributeCreated" and "attributeUpdated". "entityUpdated" is equivalent to the
combination "attributeCreated", "attributeUpdated" and "attributeDeleted"
|
|||
timeInterval
|
Number
|
Greater than 0
if watchedAttributes is present it shall not appear (0
cardinality)
|
0..1
|
Indicates that a notification shall be delivered periodically regardless
of attribute changes. Actually, when the time interval (in seconds)
specified in this value field is reached.
|
|||
q
|
String
|
A valid query string as per clause
4.9
|
0..1
|
Query that shall be met by subscribed entities in order to trigger the
notification.
|
|||
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.
|
|||
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.
|
|||
geoQ
|
GeoQuery
|
See data type definition in clause 5.2.13
|
0..1
|
Geoquery that shall be met by subscribed entities in order to trigger
the notification.
|
|||
csf
|
String
|
A valid query string as per clause
4.9
|
0..1
|
Context source filter that shall be met by Context Source Registrations describing
Context Sources to be used for Entity
Subscriptions.
|
|||
isActive
|
Boolean
|
true by default
|
0..1
|
Allows clients to temporarily pause the subscription by making it
inactive. true indicates that the Subscription is under
operation. false indicates that the subscription is paused, and
notifications shall not be delivered.
|
|||
notification
|
NotificationParams
|
See data type definition in clause
5.2.14
|
1
|
Notification details.
|
|||
expiresAt
|
String
|
DateTime (see clause
4.6.3)
|
0..1
|
Expiration date for the subscription.
|
|||
throttling
|
Number
|
Greater than 0. Fractional values are allowed. If timeInterval is
present it shall not appear (0 cardinality)
|
0..1
|
Minimal period of time in seconds which shall elapse between two
consecutive notifications.
|
|||
temporalQ
|
TemporalQuery
|
See data type definition in clause
5.2.21
|
0..1
|
Temporal Query to be used only in
Context Registration Subscriptions for matching Context Source Registrations of Context Sources providing temporal
information.
|
|||
scopeQ
|
String
|
See clause
4.19
|
0..1
|
Scope query.
|
|||
lang
|
String
|
A natural language filter in the form of a IETF RFC 5646 [28] language code
|
0..1
|
Language filter to be applied to the query (clause
4.15).
|
|||
datasetId
|
String[]
|
Valid URIs,"@none"
for including the default Attribute instances.
|
0..1
|
Specifies the datasetIds of the Attribute instances to be selected for
each matched Attribute as per clause
4.5.5.
|
|||
jsonldContext
|
String
|
Dereferenceable URI
|
The dereferenceable URI of the JSON-LD @context to be used when
sending a notification resulting from the subscription. If not provided,
the @context used for the subscription shall be used as a
default.
|
||||
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.
|
At least one of (a) entities or (b) watchedAttributes shall be present, unless the member localOnly is set to true, in which case the execution of the request is limited to local scope (see clause 5.5.13).
The members (defined by Table 5.2.12-2) of the Subscription data structure are also defined. They are read-only and shall be automatically generated by NGSI-LD implementations. They shall not be provided by Context Subscribers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
status
|
String
|
Allowed values:
"active" "paused" "expired" |
0..1
|
Read-only. Provided by the system when querying the details of a
subscription
|
This datatype represents a geoquery used for Subscriptions.
The supported JSON members shall follow the requirements provided in Table 5.2.13‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
geometry
|
String
|
A valid GeoJSON [8]
geometry type excepting GeometryCollection
|
1
|
Type of the reference geometry.
|
coordinates
|
JSON Array or String
|
A JSON Array coherent with the geometry type as per IETF RFC 7946
[8]
|
1
|
Coordinates of the reference geometry. For the sake of JSON-LD
compatibility It can be encoded as a string as described in clause
4.7.1.
|
georel
|
String
|
A valid geo-relationship as defined by clause
4.10
|
1
|
Geo-relationship ("near", "within", etc.).
|
geoproperty
|
String
|
Attribute name as short hand string or URI
|
0..1
|
Specifies the GeoProperty to which the GeoQuery is to be applied. If not
present, the default GeoProperty is location.
|
This datatype represents the parameters that allow to convey the details of a notification.
The supported JSON members shall follow the requirements provided in Table 5.2.14.1‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
attributes
|
String[]
|
Attribute name as short hand strings or URIs. Empty array (0 length) is
not allowed
|
0..1
|
A synonym for a combination of the pick andq parameter.
Deprecated
Attribute names to be included in the notification payload body. If
undefined it will mean all Attributes.
|
sysAttrs
|
Boolean
|
false by default
|
0..1
|
If true, the system generated attributes createdAt and
modifiedAt and the system attribute expiresAt are included
in the response payload body, in the case of a deletion also
deletedAt.
|
format
|
String
|
It shall be one of: "normalized", "concise", "simplified" (or its synonym "keyValues")
|
0..1
|
Conveys the representation format of the entities delivered at
notification time. By default, it will be in the normalized format.
|
pick
|
String[]
|
Entity member ("id", "type", "scope"
or a projected Attribute name as a valid attribute projection language
string as per clause
4.21). Empty array (0 length) is not allowed
|
0..1
|
When defined, every Entity within the payload body is reduced down to
only contain the specified Entity members.
|
omit
|
String[]
|
Entity member ("id", "type", "scope"
or a projected Attribute name) as a valid attribute projection
language string as per clause
4.21. Empty array (0 length) is not allowed
|
0..1
|
When defined, the specified Entity members are removed from each Entity
within the payload.
|
showChanges
|
Boolean
|
false by default
|
0..1
|
If true the previous value (previousValue) of
Properties or languageMap (previousLanguageMap) of
Language Properties or object (previousObject) of
Relationships is provided in addition to the current one. This requires
that it exists, i.e. in case of modifications and deletions, but not in
the case of creations.
showChanges cannot be true in case format is "keyValues".
|
join
|
String
|
It shall be one of: "flat", "inline", "@none"
|
0..1
|
String representing the type of Linked
Entity retrieval to apply.
By default, it will be "@none".
|
joinLevel
|
Number
|
Positive Integer
|
0..1
|
Depth of Linked Entity retrieval to
apply. Default is 1. Only applicable if join parameter is "flat", or "inline".
|
endpoint
|
Endpoint
|
See data type definition in clause 5.2.15
|
1
|
Notification endpoint details.
|
The following output only members (defined by Table 5.2.14.2-1) of the NotificationParams data structure are also defined. They are read-only and shall be automatically generated by NGSI-LD implementations. They shall not be provided by Context Subscribers. In the event that they are provided (in update or create operations) NGSI-LD implementations shall ignore them.
In query or retrieve operations involving Subscriptions, implementations shall generate them as part of their representation.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
timesSent
|
Number
|
Greater than 0
|
0..1
|
Number of times that the notification has been sent. Provided by the
system when querying the details of a subscription
|
timesFailed
|
Number
|
Greater than 0
|
0..1
|
Number of times an unsuccessful response (or timeout) has been received
when delivering the notification. Provided by the system when querying
the details of a subscription
|
lastNotification
|
String
|
DateTime (clause
4.6.3)
|
0..1
|
Timestamp corresponding to the instant when the last notification has
been sent. Provided by the system when querying the details of a
subscription
|
lastFailure
|
String
|
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
|
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
|
This datatype represents the parameters that are required in order to define an endpoint for notifications. This can include, in addition the endpoint's URI, a generic{key, value} array, named receiverInfo, which contains, in a generalized form, whatever extra information the Context Broker shall convey to the receiver in order for the Context Broker to successfully communicate with receiver (e.g. Authorization material), or for the receiver to correctly interpret the received content (e.g. the Link URL to fetch an @context). Additionally, it can include another generic{key, value} array, named notifierInfo, which contains the configuration that the Context Broker needs to know in order to correctly set up the communication channel towards the receiver (e.g. MQTT-Version, MQTT-QoS, in case of MQTT binding, as defined in clause 7.2).
The supported JSON members shall follow the indications provided in Table 5.2.15‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
uri
|
String
|
Dereferenceable URI
|
1
|
URI which conveys the endpoint which will receive the notification.
|
accept
|
String
|
MIME type. It shall be one of:
"application/json" "application/ld+json" "application/geo+json" |
0..1
|
Intended to convey the MIME type of the notification payload body (JSON,
or JSON-LD, or GeoJSON). If not present, default is "application/json".
|
timeout
|
Number
|
Greater than 0
|
0..1
|
Maximum period of time in
milliseconds which may elapse before a notification is assumed to have
failed. The NGSI-LD system can override this value. This only applies if
the binding protocol always returns a response.
|
cooldown
|
Number
|
Greater than 0
|
0..1
|
Once a failure has
occurred, minimum period of time in milliseconds which shall elapse
before attempting to make a subsequent notification to the same endpoint
after failure. If requests are received before the cooldown period has expired, no notification is sent. |
receiverInfo
|
KeyValuePair[]
|
0..1
|
Generic {key, value} array to convey optional information to the
receiver.
|
|
notifierInfo
|
KeyValuePair[]
|
0..1
|
Generic {key, value} array to set up the communication channel.
|
This datatype represents the result of a batch operation.
The supported JSON members shall follow the indications provided in Table 5.2.16‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
success
|
String[]
|
Array of valid URIs
|
1
|
Array of Entity IDs corresponding to the Entities that were successfully
treated by the concerned operation. Empty Array if no Entity was
successfully treated.
|
errors
|
BatchEntityError[]
|
1
|
One array item per Entity in error. Empty Array if no errors happened.
|
This datatype represents an error raised (associated to a particular Entity) during the execution of a batch or distributed operation.
The supported JSON members shall follow the indications provided in Table 5.2.17‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
entityId
|
String
|
Valid URI
|
1
|
Entity ID corresponding to the Entity in error
|
registrationId
|
String
|
Valid URI
|
0..1
|
Registration Id corresponding to a failed distributed operation
(optional)
|
error
|
ProblemDetails (see IETF RFC 7807 [10])
|
1
|
One instance per Entity in error
|
This datatype represents the result of Attribute update (append or update) operations in the NGSI-LD API regardless of whether local or distributed.
The supported JSON members shall follow the indications provided in Table 5.2.18‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
updated
|
String[]
|
1
|
List of Attributes (represented by their name) that were appended or
updated.
|
|
notUpdated
|
NotUpdatedDetails[]
|
See clause
5.2.19
|
1
|
List which contains the Attributes (represented by their name) that were
not updated, together with the reason for not being updated.
|
This datatype represents additional information provided by an implementation when an Attribute update did not happen. See also clause 5.2.18.
The supported JSON members shall follow the indications provided in Table 5.2.19‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
attributeName
|
String
|
1
|
Attribute name
|
|
reason
|
String
|
1
|
Reason for not having changed such Attribute
|
|
registrationId
|
String
|
Valid URI
|
0..1
|
Registration Id corresponding to a failed distributed operation
(optional)
|
This datatype represents the Temporal Evolution of an Entity.
This is the same datatype as mandated by clause 5.2.4 with the only deviation that the representation of Properties and Relationships shall be the temporal one (arrays of (Property or Relationship) instances represented by JSON-LD objects) as defined in clauses 4.5.7 and 4.5.8. Alternatively it is possible to specify the EntityTemporal by using the "Simplified temporal representation of an Entity", as defined in clause 4.5.9.
This datatype represents a temporal query.
The supported JSON members shall follow the requirements provided in Table 5.2.21‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
timerel
|
String
|
Allowed values: "before", "after" and "between"
|
1
|
Represents the temporal relationship as defined by clause
4.11
|
timeAt
|
String representing the timeAt parameter as defined by clause
4.11
|
It shall be a DateTime
|
1
|
|
endTimeAt
|
String representing the endTimeAt parameter as defined by clause
4.11
|
It shall be a DateTime. Cardinality shall be 1 if timerel
is equal to "between"
|
0..1
|
|
timeproperty
|
String representing a Temporal Property name
|
Allowed values: "observedAt", "createdAt", "modifiedAt" and "deletedAt". If not specified, the default is
"observedAt". (See clause
4.8)
|
0..1
|
This datatype represents the optional information that is required when contacting an endpoint for notifications.
The supported members shall follow the indications provided in Table 5.2.22‑1. They are intended to represent a key/value pair.
Example optional information includes additional HTTP Headers such as:
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
key
|
String
|
Binding-dependent
|
1
|
The key of the key/value pair
|
value
|
String
|
Binding-dependent
|
1
|
The value of the key/value pair
|
This datatype represents the information that is required in order to convey a query when a "Query Entities" operation or a "Query Temporal Evolution of Entities" operation is to be performed (as per clauses 5.7.2 and 5.7.4, respectively).
The supported JSON members shall follow the requirements provided in Table 5.2.23‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
|
---|---|---|---|---|---|
type
|
String
|
It shall be equal to "Query"
|
1
|
JSON-LD @type
|
|
entities
|
EntitySelector[]
|
See data type definition in clause
5.2.33. Empty array (0 length) is not allowed
|
0..1
|
Entity IDs, id pattern and Entity types that shall be matched by
Entities in order to be retrieved.
|
|
attrs
|
String[]
|
Attribute name as short hand strings or URIs.
Empty array (0 length) is not allowed
|
0..1
|
A synonym for a combination of the pick andq parameters.
Deprecated
List of Attributes that shall be matched by Entities in order to be
retrieved. If not present all Attributes will be retrieved.
|
|
pick
|
String[]
|
Entity member ("id", "type", "scope" or a
projected Attribute name) as a valid attribute projection language
string as per clause
4.21. Empty array (0 length) is not allowed
|
0..1
|
When defined, every Entity within the payload body is reduced down to
only contain the specified Entity members.
|
|
omit
|
String[]
|
Entity member ("id", "type", "scope" or a
projected Attribute name) as a valid attribute projection language
string as per clause
4.21. Empty array (0 length) is not allowed
|
0..1
|
When defined, the specified Entity members are removed from each Entity
within the payload.
|
|
q
|
String
|
A valid query string as per clause
4.9
|
0..1
|
Query that shall be matched by Entities in order to be retrieved.
|
|
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.
|
|
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.
|
|
geoQ
|
GeoQuery
|
See data type definition in clause 5.2.13
|
0..1
|
Geoquery that shall be matched by Entities in order be retrieved.
|
|
csf
|
String
|
A valid query string as per clause
4.9
|
0..1
|
Context source filter that shall be matched by Context Source Registrations describing
Context Sources to be used for
retrieving Entities.
|
|
temporalQ
|
TemporalQuery
|
See data type definition in clause
5.2.21
|
0..1
|
Temporal Query to be present only for "Query Temporal Evolution of Entities" operation
(clause
5.7.4).
|
|
scopeQ
|
String
|
See clause
4.19
|
0..1
|
Scope query.
|
|
lang
|
String
|
A natural language filter in the form of a IETF RFC 5646 [28] language code
|
0..1
|
Language filter to be applied to the query (clause
4.15).
|
|
containedBy
|
String[]
|
Comma separated list of URIs. Empty array (0 length) is not allowed
|
0..1
|
List of entity ids which have previously been encountered whilst
retrieving the Entity Graph.
Only applicable if joinLevel is present.
Only applicable for the "Query Entities" operation (clause
5.7.2).
|
|
datasetId
|
String[]
|
Valid URIs,"@none"
for including the default Attribute instances.
|
0..1
|
Specifies the datasetIds of the Attribute instances to be selected for
each matched Attribute as per clause
4.5.5.
|
|
entityMap
|
Boolean
|
0..1
|
If true, the location of the EntityMap used in the operation is returned in the response. [{[--TAL--]}] [{[--TAL--]}] | ||
entityMapLifetime
|
String
|
String representing a duration in ISO 8601 format [17]
|
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.
|
|
splitEntities
|
Boolean
|
default decided by implementation; it should be configurable. The
parameter does not apply in case the parameter local 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.
|
This type represents the data needed to define the entity type list representation as mandated by clause 4.5.10.
The supported JSON members shall follow the requirements provided in Table 5.2.24‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
URI that is unique within the system scope. Identifier for the entity
type list
|
type
|
String
|
It shall be equal to "EntityTypeList"
|
1
|
JSON-LD @type
|
typeList
|
String[]
|
1
|
List containing the entity type names
|
This type represents the data needed to define the elements of the detailed entity type list representation as mandated by clause 4.5.11.
The supported JSON members shall follow the requirements provided in Table 5.2.25‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Fully Qualified Name (FQN) of the entity type being described
|
type
|
String
|
It shall be equal to "EntityType"
|
1
|
JSON-LD @type
|
typeName
|
String
|
1
|
Name of the entity type, short name if contained in @context
|
|
attributeNamenames
|
String[]
|
1
|
List containing the names of attributes that instances of the entity
type can have
|
This type represents the data needed to define the detailed entity type information representation as mandated by clause 4.5.12.
The supported JSON members shall follow the requirements provided in Table 5.2.26‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Fully Qualified Name (FQN) of the entity type being described
|
type
|
String
|
It shall be equal to "EntityTypeInfo"
|
1
|
JSON-LD @type
|
typeName
|
String
|
1
|
Name of the entity type, short name if contained in @context
|
|
entityCount
|
Number
|
Unsigned integer
|
1
|
Number of entity instances of this entity type
|
attributeDetails
|
Attribute[]
|
See data type definition in clause
5.2.28. Attribute with only the elements "id", "type",
"attributeName" and "attributeTypes"
|
1
|
List of attributes that entity instances with the specified entity type
can have
|
This type represents the data needed to define the attribute list representation as mandated by clause 4.5.13.
The supported JSON members shall follow the requirements provided in Table 5.2.27‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
URI that is unique within the system scope. Identifier for the attribute
list
|
type
|
String
|
It shall be equal to "AttributeList"
|
1
|
JSON-LD @type
|
attributeList
|
String[]
|
1
|
List containing the attribute names
|
This type represents the data needed to define the attribute information needed as:
The supported JSON members shall follow the requirements provided in Table 5.2.28‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Full URI of attribute name
|
type
|
String
|
It shall be equal to "Attribute"
|
1
|
JSON-LD @type
|
attributeName
|
String
|
1
|
Name of the attribute, short name if contained in @context
|
|
attributeCount
|
Number
|
Unsigned integer
|
0..1
|
Number of attribute instances with this attribute name
|
attributeTypes
|
String[]
|
0..1
|
List of attribute types (e.g. Property, Relationship,
GeoProperty) for which entity instances exist, which contain an
attribute with this name
|
|
typeNames
|
String[]
|
0..1
|
List of entity type names for which entity instances exist containing
attributes that have the respective name
|
This data type represents a spatially bounded Entity in GeoJSON format, as mandated by IETF RFC 7946 [8]. The supported JSON members shall follow the requirements provided in Table 5.2.29‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Entity ID
|
type
|
String
|
It shall be equal to "Feature"
|
1
|
GeoJSON Type
|
geometry
|
GeoJSON Object
|
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
|
See [2], section 5.1.
|
0..1
|
JSON-LD @context. This field is only present if requested in the
payload by the HTTP Prefer Header (IETF RFC 7240 [26])
|
This data type represents a list of spatially bounded Entities in GeoJSON format, as mandated by IETF RFC 7946 [8]. The supported JSON members shall follow the requirements provided in Table 5.2.30‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "FeatureCollection"
|
1
|
GeoJSON Type
|
features
|
Feature[]
|
See data type definition
|
1..N
|
In the case that no matches are found, features will be an empty
array
|
@context
|
URI, JSON Object, or JSON Array
|
See [2], section 5.1.
|
0..1
|
JSON-LD @context. This field is only present if requested in the
payload by the HTTP Prefer Header (IETF RFC 7240 [26])
|
This data type represents the type and the associated attributes (Properties and Relationships) of an Entity in GeoJSON format.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String or String[]
|
Entity Type
|
1
|
Entity Type (or JSON array, in case of Entities with multiple Entity
Types). Both short hand string (type name) or URI are allowed.
|
<Property name>
|
Property or Property[], 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 name>
|
Relationship or Relationship[], see note 2.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.
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
|
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
|
The native JSON-LD @type for the languageMap attribute.It
shall align with the RDF datatype [33].
|
<Property name>
|
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 name>
|
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:
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.
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.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String or String[]
|
Valid URI(s)
|
0..1
|
Entity identifier(s).
|
idPattern
|
String
|
Regular expression as per IEEE 1003.2™ [11]
|
0..1
|
A regular expression which denotes a pattern that shall be matched by
the provided or subscribed Entities.
|
type
|
String
|
A valid type selection string as per clause
4.17. To indicate a request for all Entities (with implied local
scope), "*" is
also allowed as a value.
|
1
|
Selector of Entity Type(s); If type is specified as "*", implying local scope, local scope shall not be explicitly set to be false (clause 5.5.13) for the execution of the corresponding operation. |
This type represents the data to alter the default behaviour of a Context Broker when making a distributed operation request to a registered Context Source. The supported JSON members shall follow the indications provided in Table 5.2.34‑1. Brokers may override these recommendations.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
localOnly
|
Boolean
|
0..1
|
If localOnly=true then distributed operations associated to this
Context Source Registration will act
only on data held directly by the registered Context
Source itself (see clause
4.3.6.4).
|
|
cacheDuration
|
String
|
String representing a duration in ISO 8601 [17] format
|
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 cacheDurationlatency period has not been reached, a cached value for the entity or its attributes shall be returned where available. |
timeout
|
Number
|
Greater than 0
|
0..1
|
Maximum period of time in milliseconds which may elapse before a
forwarded request is assumed to have failed.
|
cooldown
|
Number
|
Greater than 0
|
0..1
|
Minimum period of time in milliseconds which shall elapse before attempting to make a subsequent forwarded request to the same endpoint after failure. If requests are received before the cooldown period has expired, a timeout error response for the registration is automatically returned. |
This type represents the data needed to define a VocabProperty as mandated by clause 4.5.20. In case of concise representation, the type can be omitted (see clause 4.5.20.3).
The supported JSON members shall follow the requirements provided in Table 5.2.35‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to "VocabProperty"
|
1
|
Node type.
|
vocab
|
String or string[]
|
1
|
String Values which shall be type coerced to URIs based on the supplied
@context.
|
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property values.
|
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
|
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 name>
|
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 name>
|
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.
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.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
type
|
String
|
It shall be equal to"ListProperty"
|
1
|
Node type.
|
valueList
|
An array of JSON values as defined by IETF RFC 8259 [6]
|
See NGSI-LD Value definition in clause
3.1
|
1
|
Ordered array of Property Values.
|
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
|
observedAt
|
String
|
DateTime (clause
4.6.3)
|
0..1
|
Timestamp. See clause
4.8.
|
datasetId
|
String
|
Valid URI
|
0..1
|
It allows identifying a set or group of property list values.
|
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 name>
|
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 name>
|
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.
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
|
An array of JSON values as defined by IETF RFC 8259 [6]
|
See NGSI-LD Value definition in clause
3.1
|
1
|
Ordered array of previous Property Values.
|
This type represents the data needed to define a ListRelationship as mandated by clause 4.5.22. 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.
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
|
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 name>
|
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 name>
|
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.
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.
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
|
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 name>
|
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 JSONPropertry.
|
|
ListProperty
or ListProperty[] (see note 1)
|
See datatype definition in clause
5.2.36
|
0..N
|
ListProperties of the JsonProperty.
|
|
<Relationship name>
|
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.
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
|
|
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.
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 ContextConsumers. In the event that they are provided in update operations NGSI-LD implementations shall ignore them.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
entityMap
|
JSON
|
A set of key-value pairs whose keys shall be strings representing Entity
ids and whose values shall be an array holding every CSourceRegistration
id which is relevant to the ongoing Context Information Consumption
request (see clause
4.21).
The key "@none" shall be used to refer to
an Entity that is held locally
|
1
|
System generated mapping of Entities to CSourceRegistrations.
|
linkedMaps
|
JSON
|
A set of key-value pairs whose keys shall be strings representing
CSourceRegistration ids which are relevant to the ongoing Context
Information request and whose values shall represent the associated
EntityMap id used by the ContextSource.
|
1
|
System generated mapping of Context CSourceRegistrations to a URI
indicating which EntityMaps was used by the Context Source.
|
This type represents the data uniquely identifying a Context Source, and if the Context Source supports multi-tenancy (see clause 4.14) uniquely identifying a Tenant within that Context Source.
The supported JSON members shall follow the requirements provided in Table 5.2.40‑1.
Name
|
Data Type
|
Restriction
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Context Source ID.
|
type
|
String
|
It shall be equal to "ContextSourceIdentity"
|
1
|
Node type.
|
contextSourceExtras
|
JSON
|
0..1
|
Instance specific information relevant to the configuration of the Context Source itself in raw unexpandable
JSON which shall not be interpreted as JSON-LD using the supplied
@context.
|
|
contextSourceUptime
|
String
|
String representing a duration in ISO 8601 [17] format
|
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.
|
contextSourceAlias
|
String
|
Non-empty string. Pseudonym field as defined in IETF RFC 7230 [27]
|
1
|
A unique id for a Context Source
which can be used to identify loops.
In the multi-tenancy use case (see clause
4.14), this id shall be identify a specific Tenant within a registered Context Source.
|
This datatype represents the parameters that allow building a notification to be sent to a subscriber. How to build this notification is detailed in clause 5.8.6.
The supported JSON members shall follow the indications provided in Table 5.3.1‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
Notification identifier (JSON-LD @id). It shall be automatically
generated by the implementation.
|
type
|
String
|
It shall be equal to "Notification"
|
1
|
JSON-LD @type.
|
subscriptionId
|
String
|
Valid URI
|
1
|
Identifier of the subscription that originated the notification.
|
notifiedAt
|
String
|
DateTime (clause
4.6.3)
|
1
|
Timestamp corresponding to the instant when the notification was
generated by the system.
|
data
|
NGSI-LD Entity[] or FeatureCollection
|
1
|
The content of the notification as NGSI-LD Entities.
See clause 5.2.4.
If the notification has been triggered from a Subscription that has the
notification.
endpoint.accept field set to application/geo+json then data is returned as a
FeatureCollection. In this case, if the
notification.endpoint.receiverInfo contains the key "Prefer" and it is set to the value "body=json", then the FeatureCollection
will not contain an @context field.
If endpoint.accept is not set or holds another value then
Entity[] is returned.
|
This datatype represents the parameters that allow building a Context Source Notification to be sent to a subscriber. How to build this notification is detailed in clause 5.11.7.
The supported JSON members shall follow the indications provided in Table 5.3.2‑1.
Name
|
Data Type
|
Restrictions
|
Cardinality
|
Description
|
---|---|---|---|---|
id
|
String
|
Valid URI
|
1
|
CSource notification identifier (JSON-LD @id).
|
type
|
String
|
It shall be equal to "ContextSourceNotification"
|
1
|
JSON-LD @type.
|
subscriptionId
|
String
|
Valid URI
|
1
|
Identifier of the subscription that originated the notification.
|
notifiedAt
|
String
|
DateTime (see clause
4.6.3)
|
1
|
Timestamp corresponding to the instant when the notification was
generated by the system.
|
data
|
CSource
Registration[]
|
1
|
The content of the notification as NGSI-LD CSourceRegistrations. See clause
5.2.9.
|
|
triggerReason
|
String
|
TriggerReasonEnumeration (see clause
5.3.3)
|
1
|
Indicates whether the CSources in the CSourceRegistration(s) in data are
newly matching (initial notification or creation), have been updated
(but still match) or do not match any longer.
|
The enumeration can take one of the following values:
When updating NGSI-LD elements (Entities, Attributes, Context Source Registrations or Subscriptions) it is necessary to have a means of describing a set of modifications to their content.
An NGSI-LD Fragment is a JSON Merge Patch document [16] and [i.10] which describes changes to be made to a target JSON-LD document using a syntax that closely mimics the document being modified.
An NGSI-LD Fragment is a JSON-LD Object which shall include the following members:
{"id": "urn:ngsi-ld:Subscription:MySubscription","type": "Subscription","endpoint": {"uri": "http://example.org/newNotificationEndPoint"}}
{"id": "urn:ngsi-ld:TemperatureSensor:001","type": "TemperatureSensor","batteryLevel": {"type": "Property","value": 7,"observedAt": "2022-03-14T12:51:02.000Z","providedBy": "urn:ngsi-ld:null"},"uncharged" : {"type": "Property","value": "urn:ngsi-ld:null"}}
This clause defines common behaviours for the API operations.
When comparing URIs, implementations shall follow the recommendations of IETF RFC 3986 [5], section 6.
Table 5.5.2‑1 details a list of error types defined by NGSI-LD. The particular conditions under which error type shall be raised are defined when describing each operation supported by the API.
Error Type
|
Description
|
---|---|
https://uri.etsi.org/ngsi-ld/errors/InvalidRequest
|
The request associated to the operation is syntactically invalid or
includes wrong content
|
https://uri.etsi.org/ngsi-ld/errors/BadRequestData
|
The request includes input data which does not meet the requirements of
the operation
|
https://uri.etsi.org/ngsi-ld/errors/AlreadyExists
|
The referred element already exists
|
https://uri.etsi.org/ngsi-ld/errors/OperationNotSupported
|
The operation is not supported
|
https://uri.etsi.org/ngsi-ld/errors/ResourceNotFound
|
The referred resource has not been found
|
https://uri.etsi.org/ngsi-ld/errors/InternalError
|
There has been an error during the operation execution
|
https://uri.etsi.org/ngsi-ld/errors/TooComplexQuery
|
The query associated to the operation is too complex and cannot be
resolved
|
https://uri.etsi.org/ngsi-ld/errors/TooManyResults
|
The query associated to the operation is producing so many results that
can exhaust client or server resources. It should be made more
restrictive
|
https://uri.etsi.org/ngsi-ld/errors/LdContextNotAvailable
|
A remote JSON-LD @context referenced in a request cannot be retrieved by
the NGSI-LD Broker and expansion or compaction cannot be performed
|
https://uri.etsi.org/ngsi-ld/errors/NoMultiTenantSupport
|
The NGSI-LD API implementation does not support multiple tenants
|
https://uri.etsi.org/ngsi-ld/errors/NonexistentTenant
|
The addressed tenant does not exist
|
When reporting errors back to clients, NGSI-LD implementations shall generate a JSON object in accordance with IETF RFC 7807 [10], section 3.1, including, at least the following terms:
Even though IETF RFC 7807 [10] defines a specific MIME type for error payloads, NGSI-LD implementations shall use the standard JSON MIME type ("application/json") when reporting errors, so that old clients or existing tools are not broken.
{"type": "https://uri.etsi.org/ngsi-ld/errors/ResourceNotFound","title": "Resource not found.","detail": "urn:ngsi-ld:Device:widget001 was not found","status": 404,"instance": "urn:ngsi-ld:Device:widget001"}
All the operations that take a JSON-LD document as input shall process such JSON-LD document as follows:
If the input provided by an API client does not include any @context, then the implementation shall at minimum assign the Core @context to such an input. In addition, the Context Broker implementation may allow configuring a default user @context (with default terms), to be used when no user @context is provided. The Core @context shall always take precedence.
When executing an operation if an unexpected error happens and the operation cannot be completed, implementations shall raise an error of type InternalError. This includes, as well, situations such as database timeouts, etc.
If the NGSI-LD endpoint is not capable of executing the requested operation, an error of type OperationNotSupported shall be raised. This may happen in a distributed architecture where a Context Broker might not be able to store Entities (only to forward queries to Context Sources), and as a result, certain operations such as "Create Entity" might not be supported.
When a query operation is so complex that cannot be resolved by an NGSI-LD system, implementations shall raise an error of type TooComplexQuery.
When a query operation is producing so many results that can potentially exhaust client or server resources, or it can be just impractical to be managed, implementations shall raise an error of type TooManyResults. The threshold conditions used as criteria to raise such error is up to each implementation.
When a remote JSON-LD @context referenced by an incoming request is not available, implementations shall raise an error of type LdContextNotAvailable. If the remote JSON-LD @context is invalid, implementations shall raise an error of type BadRequestData.
NGSI-LD API operations allow clients to use short-hand strings as non-qualified names, particularly for Property, Relationship or Type names and VocabProperty values. For instance, an API client can refer to the term "Vehicle" as a non-qualified type name. When executing API update-related operations, NGSI-LD systems shall expand terms to URIs, in order to obtain and store Fully Qualified Names. Likewise, when executing query-related operations, NGSI-LD systems shall compact URIs (Fully Qualified Names) to short terms in order to provide short-hand strings to context consumers.
The term to URI expansion or compaction shall be performed using a @context as described by the JSON-LD specification [2] (section 5.1), and in clause 4.4. In the absence of a user @context, the term expansion or compaction shall be performed according to clause 5.5.5.
For the avoidance of doubt, the @context used to perform compaction or expansion of terms shall be the one provided by each API call (or the default @context in its absence), and not any other @context which might have been supplied previously. For instance, when performing "Query Entity" operations (clause 5.7.2), the @context used to perform URI expansion and compaction shall be the one provided by the request.
In case of HTTP binding via GET (clause 6.4.3.2) of the "Query Entity" operation, this means using the JSON-LD Link Header as described by the JSON-LD specification [2], section 6.2. In case of HTTP binding via POST (clause 6.23.3.1), of the "Query Entity" operation, this means giving the @context either via Link Header or within the payload body, depending on the Content-Type Header being "application/json" or "application/ld+json", respectively.
It is important to warn users that updating a @context could lead to behaviour that might be perceived as inconsistent. If, for instance, a fully qualified name that qualified a given short-hand name is changed, from that moment onwards, the short-hand name is referencing a different Attribute. This will effectively change the results of queries that use the given short name, possibly not giving back anymore the expected set of results.
Moreover, this user @context shall not:
Parts of user @context that are not following the two points above should result in an error of type BadRequestData, because JSON-LD Scoped Contexts and nested embedded @context could be used to modify terms defined in the Core @context or to reshape NGSI-LD Elements during the expansion of terms.
As the Core @context is protected and cannot be overridden, when performing term to URI expansion or compaction, implementations shall always consider the Core @context as having absolute precedence, regardless of the position of the Core @context in the @context array of elements. Nonetheless, NGSI-LD data providers may use appropriate term prefixing to ensure that a proper term to URI expansion or compaction is performed.
At compaction time, in the event that no matching term is found in the current @context, implementations shall render Fully Qualified Names.
The Partial Update Patch procedure modifies an existing NGSI-LD element by overwriting the data at the Attribute level, replacing it with the data provided in the NGSI-LD Fragment.
When updating NGSI-LD elements (Entities, Context Source Registrations or Context Subscriptions) using NGSI-LD Fragments, implementations shall determine the exact set of changes being requested by comparing the content of the provided Fragment (patch) against the current content (a JSON-LD object) of the target element.
With respect to update operations, implementations shall perform an algorithm equivalent to the one described below (adapted from IETF RFC 7396 [16]), in order to observe the name to URI expansion rules and the JSON-LD null processing):
{"temperature": {"type": "Property","value": 25,"unitCode": "CEL""observedAt": "2022-03-14T01:59:26.535Z"}}
{"type": "Property","value": 100,"observedAt": "2022-03-14T13:00:00.000Z"}
When resolving NGSI-LD Query operations, NGSI-LD Systems shall exhibit the behaviour described by the present clause:
While iterating over a set of pages, there might be changes in the target result set, due to additions or removals of NGSI-LD Elements occurring in between. Implementations may detect those situations and may warn NGSI-LD Clients appropriately. 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 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):
The API provides a binding-specific mechanism to limit the execution of operations to a local scope, i.e. to only execute it based on information available in the Context Source or Context Broker directly targeted by the request. This enables limiting cascading distributed operations (clause 4.3.6.4) and, in some cases, also enables broader local operations, e.g. pertaining to all entities, which would be too expensive in the distributed case.
The localOnly member in the Subscription (clause 5.5.12) requests that the subscription only matches Entities stored locally.
The localOnly member in the RegistrationManagementInfo (clause 5.2.34) of a Context Source Registration request that, when contacting the registered 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 are not required and thus do not need to be requested.
The following operations may occur as part of a distributed transactional request:
In the case that a client wishes to indicate to a Context Broker that a request is part of a unitary sequence of requests, the Context Broker shall create and cache an EntityMap for future use and 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.
This operation allows creating a new NGSI-LD Entity.
A Context Producer can create an Entity within an NGSI-LD system as shown in Figure 5.6.1.2‑1.
A JSON-LD document representing an NGSI-LD Entity as mandated by clause 5.2.4.
Implementations shall exhibit the following behaviour:
None.
This operation allows modifying an existing NGSI-LD Entity by updating already existing Attributes (Properties or Relationships) and by appending non-existing ones.
A Context Producer can update Attributes within an NGSI-LD system as shown in Figure 5.6.2.2‑1.
This operation allows modifying an NGSI-LD Entity by adding new attributes (Properties or Relationships).
A Context Producer can append new Attributes to an existing Entity within an NGSI-LD system as shown in Figure 5.6.3.2‑1.
The following behaviour shall be exhibited by compliant implementations:
- If overwrite is allowed, then the existing Attribute with the specified datasetId in the target Entity shall be replaced by the new one supplied.- If overwrite is not allowed, the existing Attribute with the specified datasetId in the target Entity shall be left untouched.
- If overwrite is allowed, then the existing default Attribute in the target Entity shall be replaced by the new one supplied.- If overwrite is not allowed the existing default Attribute in the target Entity shall be left untouched.
This operation allows performing a partial update on an NGSI-LD Entity's Attribute (Property or Relationship). A partial update only changes the elements provided in an Entity Fragment, leaving the rest as they are. This operation supports the deletion of sub-Attributes but not the deletion of the whole Attribute itself.
A Context Producer can carry out a partial Attribute update of an Entity within an NGSI-LD System as shown in Figure 5.6.4.2‑1.
None.
This operation allows deleting an NGSI-LD Attribute (Property or Relationship). The Attribute itself and all its children shall be deleted.
A Context Producer can delete a specific Attribute within an NGSI-LD system as shown in Figure 5.6.5.2‑1.
None.
This operation allows deleting an NGSI-LD Entity.
A Context Producer can completely delete an Entity within an NGSI-LD system as shown in Figure 5.6.6.2‑1.
None.
This operation allows creating a batch of NGSI-LD Entities.
A Context Producer can create a batch of NGSI-LD Entities within an NGSI-LD system as shown in Figure 5.6.7.2‑1.
Implementations shall exhibit the following behaviour:
This operation allows creating a batch of NGSI-LD Entities, updating each of them if they already existed. In some database jargon this kind of operation is known as "upsert".
A Context Producer can create or update a batch of Entities within an NGSI-LD system as shown in Figure 5.6.8.2‑1.
Implementations shall exhibit the following behaviour:
- If the Replace Entity operation (clause 5.6.18) is supported by CSR and the value of the update mode flag is Replace or the flag is not set, forward a Replace Entity request for Entity EN.- Otherwise, if the Update Attributes operation (clause 5.6.2) is supported by CSR and the value of the update mode flag is Update, forward an Update Attributes request for Entity EN.- Otherwise add an OperationNotSupported Error for Entity EN related to CSR to E.
This operation allows updating a batch of NGSI-LD Entities.
A Context Producer can update a batch of Entities within an NGSI-LD system as shown in Figure 5.6.9.2‑1.
Implementations shall exhibit the following behaviour:
- Merge any successful result(s) for Entity EN updated with S.- Merge any error result(s) for Entity EN updated with E.
This operation allows deleting a batch of NGSI-LD Entities.
A Context Producer can delete a batch of Entities within an NGSI-LD system as shown in Figure 5.6.10.2‑1.
Implementations shall exhibit the following behaviour:
This operation allows creating or updating (by adding new Attribute instances) the Temporal Evolution of an Entity.
A Context Producer can create the Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.11.2‑1.
Similarly, if the Entity already exists then an Update scenario will be in place.
A JSON-LD document representing the Temporal Evolution of an Entity as mandated by clause 5.2.20.
Implementations shall exhibit the following behaviour:
None.
This operation allows modifying the Temporal Evolution of an Entity by adding new Attribute instances.
A Context Producer can add new Attributes or Attribute instances to an existing Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.12.2‑1.
The following behaviour shall be exhibited by compliant implementations:
None.
This operation allows deleting an Attribute (Property or Relationship) of the Temporal Evolution of an Entity. The Attribute itself and all its child NGSI-LD elements shall be deleted.
A Context Producer can delete a specific Attribute of the Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.13.2‑1.
None.
This operation allows modifying a specific Attribute (Property or Relationship) instance, identified by its instanceId, of the Temporal Evolution of an Entity.
This operation enables the correction of wrong information that could have been previously added to the Temporal Evolution of an Entity.
A Context Producer can modify a specific Attribute instance, identified by a given instanceId, of the Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.14.2‑1.
None.
This operation allows deleting one Attribute instance (Property or Relationship), identified by its instanceId, of the Temporal Evolution of an Entity. The Attribute itself and all its child elements shall be deleted. This operation enables the removal of individual Attribute instances that could have been previously added to the Temporal Evolution of an Entity.
A Context Producer can delete an Attribute instance, identified by a given instanceId, of the Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.15.2‑1.
None.
This operation allows deleting the Temporal Evolution of an Entity.
A Context Producer can completely delete the Temporal Evolution of an Entity within an NGSI-LD system as shown in Figure 5.6.16.2‑1.
None.
This operation allows modification of an existing NGSI-LD Entity aligning to the JSON Merge Patch processing rules defined in IETF RFC 7396 [16] by adding new Attributes (Properties or Relationships) or modifying or deleting existing Attributes associated with an existing Entity.
A Context Producer can perform a merge on an Entity within an NGSI-LD system as shown in Figure 5.6.17.2‑1.
The following behaviour shall be exhibited by compliant implementations:
This operation allows the modification of an existing NGSI-LD Entity by replacing all of the Attributes (Properties or Relationships).
A Context Producer can replace an entire Entity within an NGSI-LD system as shown in Figure 5.6.18.2‑1.
None.
This operation allows the replacement of a single Attribute (Property or Relationship) within an NGSI-LD Entity.
A Context Producer can carry out a replacement of an Attribute within an Entity within an NGSI-LD System as shown in Figure 5.6.19.2‑1.
None.
This operation allows modification of a batch of NGSI-LD Entities according to the JSON Merge Patch processing rules defined in IETF RFC 7396 [16] by adding new attributes (Properties or Relationships) or modifying or deleting existing attributes associated with an existing Entity.
A Context Producer can merge a batch of Entities within an NGSI-LD system as shown in Figure 5.6.20.2‑1.
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.
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.
a) selector of Entity Types;b) list of Attribute names, including at least one non-system Attribute;c) NGSI-LD Query, including at least one non-system Attribute;d) NGSI-LD GeoQuery;e) local scope (see clause 5.5.13).
[{[--B2plus--]}] id is equal to any of the id(s) passed as a parameter; [{[--B2plus--]}]
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.
A JSON-LD object representing the target Entity as mandated by clause 5.2.4 or a GeoJSON Feature as mandated by clause 5.2.29.
If a restrictive list of Entity member names is present, every Entity within the payload body is reduced down to only contain the defined Entity members.
If an exclusionary list of Entity member names is present, the defined Entity members listed are removed from each Entity within the payload.
If any of the returned Attributes corresponds to a VocabProperty, the returned value shall be compacted according to the supplied @context.
If a language filter is specified and any of the returned Attributes corresponds to a LanguageProperty, the LanguageProperty in question shall be converted into a Property. The value of this Property shall correspond to the value of the string or strings from the matching key-value pair of the languageMap where the key matches the language filter. A non-reified subproperty lang shall be included in the response indicating the chosen language.
If no match can be made for a LanguageProperty then a single language shall be chosen, up to the implementation.
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, the data 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.
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.
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 in the process of obtaining the query result it is necessary to issue a Context Source discovery operation, the same Context Source filter input parameter (if present) shall be propagated.
A JSON-LD array representing the matching entities as defined by clause 5.2.4 or in the case of GeoJSON requests a FeatureCollection as mandated by clause 5.2.30. For each matching Entity, only the Attributes specified by the Attribute list parameter shall be included. If such parameter is not present, then all Attributes shall be included.
If a restrictive list of Entity member names is present, every Entity within the payload body is reduced down to only contain the defined Entity members.
If an exclusionary list of Entity member names is present, the defined Entity members listed are removed from each Entity within the payload.
If any of the returned Attributes corresponds to a VocabProperty, the returned value shall be compacted according to the supplied @context.
If a language filter is specified and any of the returned Attributes corresponds to a LanguageProperty, the LanguageProperty in question shall be converted into a Property. The value of this Property shall correspond to the value of the string or strings from matching key-value pair of the languageMap where the key matches the language filter. A non-reified subproperty lang shall be included in the response indicating the chosen language.
If no match can be made for a LanguageProperty, then the default identified by the JSON-LD "@none" shall be chosen if present, otherwise the choice of a single language is up to the implementation.
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.
A suggested lifetime for the EntityMap, if EntityMap is to be created (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.
A JSON-LD object representing the Temporal Evolution of the target Entity as mandated by clause 5.2.20.
If a restrictive list of Entity member names is present, every Entity within the payload body is reduced down to only contain the defined Entity members.
If an exclusionary list of Entity member names is present, the defined Entity members listed are removed from each Entity within the payload.
This operation allows querying the Temporal Evolution of Entities present in an NGSI-LD system. It is similar to the operation defined by clause 5.7.2 (Query Entities) with the addition of a temporal query.
A Context Consumer can retrieve the Temporal Evolution of a set of Entities which matches a specific query from an NGSI-LD system as shown in Figure 5.7.4.2‑1.
A suggested lifetime for the EntityMap, if EntityMap is to be created (optional).
A flag indicating whether split Entities are to be expected, i.e. Entities whose information is distributed across different Context Sources (optional).
If id(s) is provided, keep in S only those Entities whose id is equivalent to any of the id(s) passed as a parameter.
If an id pattern is provided, keep in S only those Entities whose id matches the id pattern.
If a selector of Entity Types is provided, keep in S only those Entities whose Entity Type names match the selector of Entity Types.
From S, select only those Entities any of whose Attribute instances (corresponding to the Attributes specified by the query or all if none are specified) match the temporal restrictions imposed by the temporal query (as mandated by clause 4.11); i.e. if the time series, for all the concerned Attributes of an Entity, does not include data corresponding to the temporal query interval, then such Entity shall be removed from S, thus it shall not appear in the final result set. Let S4 be this new subset.
If id(s) is provided, keep in S only those Entities whose id is equivalent to any of the id(s) passed as a parameter.
If an id pattern is provided, keep in S only those Entities whose id matches the id pattern.
If a selector of Entity Types is provided, keep in S only those Entities whose Entity Type names match the selector of Entity Types.
From S, select only those Entities any of whose Attribute instances (corresponding to the Attributes specified by the query or all if none are specified) match the temporal restrictions imposed by the temporal query (as mandated by clause 4.11); i.e. if the time series, for all the concerned Attributes of an Entity, does not include data corresponding to the temporal query interval, then such Entity shall be removed from S, thus it shall not appear in the final result set. Let S1 be this new subset.
If a values filter query is provided, from S1, select those Entities whose Attribute instances (during the interval defined by the temporal query) meet the matching conditions specified by the query (as mandated by clause 4.9); i.e. the values filter query shall be checked against all the Attribute instances resulting from the initial filtering performed by the temporal query. Let S2 be this new subset.
If no values filter query is provided, then S2 is equal to S1.
If geoquery is present, from S2, select those Entities whose GeoProperty instances meet the geospatial restrictions imposed by the geoquery (as mandated by clause 4.10); those geospatial restrictions shall be checked against the GeoProperty instances that are within the interval defined by the temporal query. Let S3 be this new subset.
If no geoquery is provided, then S3 is equal to S2.
If the Scope query is present, from S3, select those Entities whose Entity Scope instances match the Scope query (as mandated by clause 4.19, for an example see annex C, clause C.5.16). Let S4 be the new subset.
If no Scope query is provided, then S4 is equal to S3.
If the resource cannot be found, or the data has expired, a new EntityMap shall be created.
If the data has not expired, only the retrieved EntityMap shall be used to determine which Context Source Registrations match the Entity ID.
If split entities flag is explicitly set to true or, if not explicitly set, the default setting of the deployment allows split entities, the filters (filter conditions specified by the query, geospatial restrictions imposed by the geoquery, Scope query, Attributes) shall be removed before forwarding the request. These filters then have to be applied after the Entity information from different Context Sources and local information, if there is any, has been aggregated.
If a values filter query is provided, from S4, select those Entities whose Attribute instances (during the interval defined by the temporal query) meet the matching conditions specified by the query (as mandated by clause 4.9); i.e. the values filter query shall be checked against all the Attribute instances resulting from the initial filtering performed by the temporal query. Let S5 be this new subset.
If no values filter query is provided, then S5 is equal to S4.
If geoquery is present, from S5, select those Entities whose GeoProperty instances meet the geospatial restrictions imposed by the geoquery (as mandated by clause 4.10); those geospatial restrictions shall be checked against the GeoProperty instances that are within the interval defined by the temporal query. Let S6 be this new subset.
If no geoquery is provided, then S6 is equal to S5.
If the Scope query is present, from S6, select those Entities whose Entity Scope instances match the Scope query (as mandated by clause 4.19, for an example see annex C, clause C.5.16). Let S7 be the new subset.
If no Scope query is provided, then S7 is equal to S6.
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 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.
A JSON-LD object representing the list of available entity types, as mandated by clause 5.2.24.
This operation allows retrieving a list with a detailed representation of NGSI-LD entity types for which entity instances exist within the NGSI-LD system. The detailed representation includes the type name (as short name if available in the provided @context) and the attribute names that existing instances of this entity type have.
A Context Consumer can retrieve a list with a detailed representation of NGSI-LD entity types from the system as shown in Figure 5.7.6.2‑1.
A list of JSON-LD objects representing the details of available entity types as mandated by clause 5.2.25.
This operation allows retrieving detailed entity type information about a specified NGSI-LD entity type for which entity instances exist within the NGSI-LD system. The detailed representation includes the type name (as short name if available in the provided @context), the count of available entity instances and details about attributes that existing instances of this entity type have, including their name (as short name if available in the provided @context) and a list of types the attribute can have (e.g. Property, Relationship or GeoProperty).
A Context Consumer can retrieve a detailed representation of a specified NGSI-LD entity type from the system as shown in Figure 5.7.7.2‑1.
A JSON-LD object representing the details of the specified entity type as mandated by clause 5.2.26.
This operation allows retrieving a list of NGSI-LD attributes that belong to entity instances existing within the NGSI-LD system.
A Context Consumer can retrieve a list of NGSI-LD attributes from the system as shown in Figure 5.7.8.2‑1.
A JSON-LD object representing the list of available attributes as mandated by clause 5.2.27.
This operation allows retrieving a list with a detailed representation of NGSI-LD attributes that belong to entity instances existing within the NGSI-LD system. The detailed representation includes the attribute name (as short name if available in the provided @context) and the type names for which entity instances exist that have the respective attribute.
A context consumer can retrieve a list with a detailed representation of NGSI-LD attributes from the system as shown in Figure 5.7.9.2‑1.
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.
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.
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.
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.
One subscription identifier (id) of type string, representing a URI. Implementations shall ensure that subscription identifiers are unique within an NGSI-LD system.
This operation allows updating an existing subscription.
A Context Subscriber can update an existing subscription within an NGSI-LD system as shown in Figure 5.8.2.2‑1.
None.
This operation allows retrieving an existing subscription.
A Context Subscriber can retrieve a specific subscription from an NGSI-LD system as shown in Figure 5.8.3.2‑1.
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.
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.
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:
As described in clause 5.2.9, Context Source Registrations have a similar structure as Entities and are generally handled in the same way. However, there are some aspects that are specific to Registrations, in particular with respect to the handling of required properties. Thus, the operation descriptions for Registrations reference the respective operations for Entities and in addition specify any deviations and additions that are necessary for handling Context Source Registrations.
Context Source Registrations either contain information about Context Sources providing the latest information or about Context Sources providing temporal information, but not both. Context Sources that can provide both thus have to use two separate Context Source Registrations. If no temporal query is present, only Context Source Registrations for Context Sources providing latest information are returned, i.e. those which do not specify time intervals used for temporal queries. If a temporal query is present in a request for Context Source Registrations, only those Context Source Registrations that have a matching time interval are returned.
This operation allows registering a context source within an NGSI-LD system.
A Context Provider can register one or more context sources within an NGSI-LD system as shown in Figure 5.9.2.2‑1.
A data structure conforming to the CSourceRegistration data type as mandated by clause 5.2.9.
Implementations shall generally exhibit the behaviour described in clause 5.6.1.4, but instead of any type of entities only Context Source Registrations can be provided. Deviating from clause 5.6.1.4, implementations shall exhibit the following behaviour:
One registration identifier (id) of type string, representing a URI. Implementations shall ensure that registration identifiers are unique within an NGSI-LD system.
This operation allows updating a Context Source Registration in an NGSI-LD system.
A Context Provider can update a Context Source Registration in an NGSI-LD system as shown in Figure 5.9.3.2‑1.
None.
This operation allows deleting a Context Source Registration from an NGSI-LD system.
A context provider can delete a context source registration from an NGSI-LD system as shown in Figure 5.9.4.2‑1.
Registration identifier (URI) of the context source registration to be deleted (target registration).
None.
This operation allows retrieving a specific context source registration from an NGSI-LD system.
A context consumer or a context provider can retrieve a specific context source registration from an NGSI-LD system as shown in Figure 5.10.1.2‑1.
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 .
If no temporal query is present, only Context Source Registrations for Context Sources providing latest information, i.e. without specified time intervals, are considered. If a temporal query is present only Context Source Registrations with matching time intervals, i.e. observationInterval or managementInterval, are considered.
A Context Consumer can discover context source registrations that may be able to provide (part of) the context information specified in the query from an NGSI-LD system as shown in Figure 5.10.2.2‑1.
It is not possible to retrieve a set of context source registrations related to entities by only specifying desired Entity identifiers, without further specifying restrictions on the entities' types or attributes, either explicitly, via lists of Entity types or of Attribute names, or implicitly, within an NGSI-LD query or geoquery.
A JSON-LD array of matching Context Source Registrations as defined by clause 5.2.9. Instead of the original Context Source Registration which may contain a lot of irrelevant information, implementations should return filtered Context Source Registrations, which only contain context source registration information relevant for the query, in particular only matching RegistrationInfo elements.
Context Source Registration Subscriptions in general work like context information subscriptions; however, instead of resulting in notifications with context information, the notifications contain Context Source Registrations describing Context Sources that can potentially provide the requested context information. If no temporal query is present, only Context Source Registrations for Context Sources providing latest information, i.e. without such time intervals, are considered. If a temporal query is present only Context Source Registrations with matching time intervals, i.e. observationInterval or managementInterval, are considered.
This operation allows creating a new Context Source Registration Subscription.
A Context Source Subscriber can subscribe to a new Context Source Registration as shown in Figure 5.11.2.2‑1.
One subscription identifier (id) of type string, representing a URI. Implementations shall ensure that subscription identifiers are unique within an NGSI-LD system.
This operation allows updating an existing Context Source Registration Subscription.
A context source subscriber can update a Context Source Registration Subscription as shown in Figure 5.11.3.2‑1.
None.
This operation allows retrieving an existing Context Source Registration Subscription.
A Context Source subscriber can retrieve a specific Context Source Registration Subscription as shown in Figure 5.11.4.2‑1.
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.
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.
None.
A Context Source Notification is a message that allows a subscriber to be aware of the changes in the set of Context Source Registrations describing Context Sources that can potentially provide the requested context information. Implementations shall exhibit the behaviour described in clause 5.8.6 with the following exceptions:
When querying Context Source Registrations as described in clause 5.10.2 and subscribing to Context Source Registrations as described in clause 5.11.2, the Entities and/or Attributes specified in the request have to be matched against the set of Context Source Registrations, extracting the matching ones. This clause describes this matching.
The relevant specification information in the query for Context Source Registrations are the selector of Entity Types (if present), the list of Entity identifiers (if present), the id pattern (if present) and the list of Attribute names (if present). In the case of subscriptions to Context Source Registrations, it is the Entities as specified in the array of type EntitySelector in the Subscription, the watchedAttributes element of the Subscription and the attributes specified as part of the NotificationParams element of the Subscription. If the attributes in the NotificationParams element are empty or not present, the matching is done as if no attribute identifiers have been specified, otherwise the combination of the watchedAttributes and the attributes in the NotificationParams element are used as the specified attribute identifiers for the matching.
Even though the way relevant Entities are specified differs in queries and subscriptions, they consist of the same information, so for the purpose of this clause, the specification of Entity Types or Attributes refers to the relevant elements for matching, i.e. Entity Types, Entity identifiers, id pattern and Attribute names. A specification of Entity Types or Attributes shall contain at least one of:
A specification of Entity Types or Attributes matches a Context Source Registration if at least one of the RegistrationInfo elements in the information element matches. An Entity specification matches a RegistrationInfo if the following conditions hold:
An Entity specification consisting of selector of Entity Types, Entity identifiers and id pattern matches an EntityInfo element of the RegistrationInfo if the type selector matches the entity types in the EntityInfo element and one of the following conditions holds:
Attribute names match the combination of Properties and Relationships if one of the following conditions hold:
If the request that triggered the matching includes a datasetId parameter and the CSourceRegistration to be matched contains a datasetId element, the CSourceRegistration should only be considered matching, if both have at least one value in common. If only one of them specifies a datasetId, it is considered a match.
In the case of distributed operations (see clause 4.3.6.4), where a listing of all previously encountered Context Sources is supplied with the request, no registration shall match if the CSourceRegistration contextSourceAlias can be found within the listing of previously encountered Context Sources.
Note that distributed queries (see clause 4.3.6.7), can be supplied with an EntityMap (see clause 4.5.25) which lists all Entity ids successfully matched during a previous request. If the location of an EntityMap is passed into a subsequent request, the retrieved EntityMap shall be used in preference to the matching algorithm described above, provided that the EntityMap is valid and has not expired.
Context Brokers optionally (see clause 4.3.5) offer the capability to store and serve @contexts to clients. The stored @contexts may be managed by clients directly, via the APIs specified in clause 5.13. Clients can store custom user @contexts at the Context Broker, effectively using the Context Broker as a @context server.
Moreover, in order to optimize performance, brokers may automatically store and use the stored copies of common @contexts as a local cache, downloading them just once, thus avoiding fetching them over and over again at each NGSI-LD request. In order for the broker to understand if a needed @context is already in the local storage or not, the broker uses the URL, where the @context is originally hosted, as an identifier for it in the local storage. Consequently, the broker has no ability to cache @contexts that arrive to it as embedded parts within the NGSI-LD documents, since they are not uniquely (and implicitly) identified by any URL; Context Brokers only cache @contexts that are referred to by means of explicit URLs (either in the HTTP Link header or as URLs in the payload body). Thus, the recommended best-practice, in order to exploit caching, is that clients do not embed their user @contexts into their NGSI-LD documents; instead clients should explicitly host their user @contexts at their premises, or use the broker's capability to host user @contexts on their behalf.
When an external @context is stored, either explicitly upon a client's request or implicitly downloaded for caching purposes, the Context Broker generates a unique local @context identifier. The original @context's URL, if any, is stored alongside the generated local id. The local id is then used for subsequent managing operations on the specific @context, that are specified in clauses 5.13.2 to 5.13.5. Moreover, the broker tags the entry with the current timestamp, (createdAt) so that, subsequently, clients can check the timestamp before deciding whether to force a refresh of the stored copy of the @context. This is primarily intended as a means for clients to well-behave, thus avoiding triggering continuous refresh of a stored @context on the broker, for fear that it is not at the latest version.
Stored @contexts are flagged as one of three kinds: "Cached", "Hosted", "ImplicitlyCreated":
With this operation, a client can ask the broker to store the full content of a specific @context, by giving it to the broker.
A client can add an @context to be stored within an NGSI-LD system as shown in Figure 5.13.2.2‑1.
A JSON object that has a top-level field named @context, i.e. a JSON object representing a JSON-LD "local context". As specified in the JSON-LD specification [2], all extra information located outside of the @context subtree in the referenced object shall be discarded.
A new entry is created in the local storage and a locally unique identifier is generated for it. The JSON object representing the client-supplied @context and the current UTC time are stored alongside the locally unique identifier. That identifier shall be given back as a result in the output data. The entry is flagged as being of kind "Hosted".
The behaviour described in clause 5.5.4 about JSON and JSON-LD validation shall be applied in case of invalid @context.
The locally unique identifier that identifies the @context in the broker's internal storage.
With this operation a client can obtain a list of URLs that represent all of the @contexts stored in the local context store of the broker. Each URL can be used to download the corresponding @context, and, in case the @context's kind is "Cached", it shall be the original URL the broker downloaded the @context from.
In case a details flag is set to true, the client obtains a list of JSON objects, each representing information (metadata) about an @context currently stored by the broker. Each JSON object contains information about the @context's original URL (if any), its local identifier in the broker's storage, its kind ("Cached", "Hosted" and "ImplicitlyCreated"), its creation timestamp, its expiry date, and additional optional information.
A client can list all @contexts stored within an NGSI-LD system as shown in Figure 5.13.3.2‑1.
The broker shall provide a URL or JSON object for each @context currently stored in the internal broker's storage, that match the filter. If no filter is specified, all kinds are included.
A list of URLs, or a list of resulting JSON objects containing the following fields:
With this operation a client can obtain the full content of a specific @context (only for @contexts of kind "Hosted" or "ImplicitlyCreated"), which is currently stored in the broker's internal storage, or its metadata (for all kinds of stored @contexts).
A client can request the broker to serve a specific @context stored within the NGSI-LD system as shown in Figure 5.13.4.2‑1.
The full content of the indicated @context (or its metadata as specified in clause 5.13.3.5), or ResourceNotFound/OperationNotSupported errors.
With this operation, a client supplies a local identifier to the broker, indicating a stored @context, that the broker shall remove from its storage. For @contexts of kind "Cached" this can also be the original URL the broker downloaded the @context from. If the entry in the local storage that corresponds to the identifier is itself an array of @contexts, this operation will not delete the children, i.e. the @contexts in the array, but just the entry.
A client can request the broker to delete (and optionally reload) a specific @context stored within the NGSI-LD system as shown in Figure 5.13.5.2‑1.
None.
With this operation a client can obtain a cached EntityMap which is currently stored in the broker's internal storage, or memory.
A client can request the broker to retrieve a specific EntityMap within the NGSI-LD system as shown in Figure 5.14.1.2‑1.
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.
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.
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.
A suggested expiry time for the EntityMap (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.
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.
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.
A suggested expiry time for the EntityMap (optional).
A flag indicating whether split Entities are to be expected, i.e. Entities whose information is distributed across different Context Sources (optional).
For each matching Context Source Registration, the request is forwarded for remote querying by matching endpoints. The result of each remote query is an EntityMap. The mapping between the Context Source Registration and the EntityMap Id is added to the linkedMaps element of the local EntityMap and for the Entity ids included in the returned Entity Maps a mapping to the Context Source Registration is added to the entityMap element of the local EntityMap.
With this operation, a client can obtain Context Source identity information which uniquely defines the Context Source itself. In the multi-tenancy use case (see clause 4.14), a client can obtain identify information about a specific Tenant within a Context Source.
A client can request the broker to retrieve identity information about a specific Context Source within the NGSI-LD system as shown in Figure 5.15.1.2‑1.
None.
A JSON-LD object representing the identity of the Context Source as mandated by clause 5.2.40.