SlideShare a Scribd company logo
0
NGSI-LD Introduction
Jason Fox
Senior Technical Evangelist
FIWARE Foundation
Useful links
What is JSON-LD:
https://www.youtube.com/watch?v=vioCbTo3C-4
JSON-LD Core Markup:
https://www.youtube.com/watch?v=UmvWk_TQ30A
Compaction and Expansion:
https://www.youtube.com/watch?v=Tm3fD89dqRE
JSON-LD Playground & examples
https://json-ld.org/playground/
1
Linked Context Data: NGSI v2 to NGSI-LD
From: https://fiware-datamodels.readthedocs.io/en/latest/ngsi-ld_faq/index.html
▪ NGSI-LD is an evolution of the FIWARE NGSI v2 information model, and has been updated/improved to
support linked data (entity relationships), property graphs and semantics (exploiting the capabilities
offered by JSON-LD). This work has been conducted under the ETSI ISG Context Information
Management initiative.
▪ Creating proper machine-readable Linked Data is fundamental to NGSI-LD.
▪ NGSI-LD Payloads are valid JSON-LD
2
{
"@context": [
"https://fiware.github.io/data-models/context.jsonld",
"https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld"
],
"id": "http://dbpedia.org/resource/John_Lennon",
"type": "Person",
"name": {"type": "Property", "value": "John Lennon"},
"born": {"type": "Property", "value": "1940-10-09"},
"spouse": {"type": "Relationship", "object": "http://dbpedia.org/resource/Cynthia_Lennon" }
}
What is Core @context?
"ngsi-ld": "https://uri.etsi.org/ngsi-ld/",
"geojson": "https://purl.org/geojson/vocab#",
"id": "@id",
"type": "@type",
"Date": "ngsi-ld:Date",
"DateTime": "ngsi-ld:DateTime",
"Feature": "geojson:Feature",
"FeatureCollection": "geojson:FeatureCollection",
"GeometryCollection": "geojson:GeometryCollection",
"LineString": "geojson:LineString",
"MultiLineString": "geojson:MultiLineString",
"MultiPoint": "geojson:MultiPoint",
"MultiPolygon": "geojson:MultiPolygon",
"Point": "geojson:Point",
"Polygon": "geojson:Polygon",
"GeoProperty": "ngsi-ld:GeoProperty",
"Property": "ngsi-ld:Property",
"Relationship": "ngsi-ld:Relationship",
"ContextSourceNotification":"ngsi-ld:ContextSourceNotification",
"ContextSourceRegistration":"ngsi-ld:ContextSourceRegistration",
"Notification": "ngsi-ld:Notification",
"Subscription": "ngsi-ld:Subscription",
… etc
3
"coordinates": {
"@container": "@list",
"@id": "geojson:coordinates"
},
"temporalQ": "ngsi-ld:temporalQ",
"throttling": "ngsi-ld:throttling",
"observedAt": {
"@id": "ngsi-ld:observedAt",
"@type": "DateTime"
},
"timeInterval": "ngsi-ld:timeInterval",
"unitCode": "ngsi-ld:unitCode",
"value": "ngsi-ld:hasValue",
"values": {
"@id": "ngsi-ld:hasValues",
"@container": "@list"
},
… etc
"@vocab": "https://uri.etsi.org/ngsi-ld/default-
context/"
NGSI-LD: Evolution not Revolution
NGSI v2
▪ Well defined REST API for context data
using JSON payloads.
GET, POST and other HTTP verbs do
the things you expect
▪ CRUD operations -
/v2/entities endpoint
▪ Augment your context data -
/v2/registrations endpoint
▪ Push context data to other services -
/v2/subscriptions endpoint
4
NGSI-LD
▪ Well defined REST API for context data
using JSON and JSON-LD payloads.
GET, POST and other HTTP verbs do the
things you expect
▪ CRUD operations - /ngsi-
ld/v1/entities endpoint
▪ Augment your context data - /ngsi-
ld/v1/registrations endpoint
▪ Push context data to other services - /ngsi-
ld/v1/subscriptions endpoint
5
Demo: NGSI-LD - Properties
NGSI-LD Properties: Creating an Entity
NGSI v2
6
NGSI-LD
curl -iX POST 'http://localhost:1026/v2/entities' 
-H 'Content-Type: application/json' 
-d '{
"type": "Store", "id": "store001",
"category": { "type": "Array", "value": ["commercial"]},
"address": { "type": "PostalAddress", "value": {
"streetAddress": "Bornholmer Straße 65",
"addressRegion": "Berlin",
"addressLocality": "Prenzlauer Berg",
"postalCode": "10439"
},
"metadata": {
"verified": { "type": "Boolean","value": true}
}
},
"location": {"type": "geo:json",
"value": {"type": "Point", "coordinates": [13.3986, 52.5547]}
},
"name": {"type": "Text", "value": "Bösebrücke Einkauf"}
}'
curl -iX POST http://localhost:1026/ngsi-ld/v1/entities 
-H 'Content-Type: application/ld+json' 
-d '{
"type": "Building", "id": "urn:ngsi-ld:Building:store001",
"category": { "type": "Property", "value": ["commercial"]},
"address": { "type": "Property"," value": {
"streetAddress": "Bornholmer Straße 65",
"addressRegion": "Berlin",
"addressLocality": "Prenzlauer Berg",
"postalCode": "10439"
},
"verified": { "type": "Property", "value": true }
},
"location": { "type": "GeoProperty",
"value": { "type": "Point", "coordinates": [13.3986, 52.5547]}
},
"name": { "type": "Property", "value": "Bösebrücke Einkauf" },
"@context": [
"https://fiware.github.io/data-models/context.jsonld",
"https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld"
]
}'
NGSI-LD Properties: Data Model
NGSI v2
▪ Entities
▪ Attributes
▪ MetaData
7
NGSI-LD
▪ Entities
▪ Properties
▪ Relationships
▪ Values
plus …
plus …
etc...
The NGSI LD data model is more
complex; the definitions of use are
more rigid which lead to a
navigable knowledge graph.
▪ Properties of Properties
▪ Properties of Relationships
▪ Relationships of Properties
▪ Relationships of Relationships
. ▪ Properties of Properties of Properties
▪ Relationships of Properties of Properties
▪ Properties of Properties of Relationships
▪ Relationships of Properties of Relationships
▪ Properties of Relationships of Properties
▪ Relationships of Relationships of Properties
▪ Properties of Relationships of Relationships
▪ Relationships of Relationships of Relationships
NGSI-LD Properties: Data Model
8
The Entity Example Notes
Has an id urn:ngsi-ld:Building:store001 URI/URN. id must be unique.
Has a type. https://uri.fiware.org/ns/
data-models#Building
● Fully qualified URI of a well defined data model
● Short-hand strings for types, mapped to fully qualified URIs through the JSON-LD
@context.
Has a series of properties name, address, category etc. This can be expanded into http://schema.org/address, which is
known as a fully qualified name (FQN).
Has a series of
properties-of-properties
a verified field for the address This is the equivalent of NGSI v2 metadata
Has a series of relationships managedBy The object corresponds to the URI/URN of another data entity.
Equivalent of NGSI v2 refXXX
Has a series of
properties-of-relationships
managedBy.since Holds additional information about a relationship.
This is the equivalent of metadata about a refXXX property
Has a series of
relationships-of-relationships
managedBy.subordinateTo holds the URI/URN of another relationship.
NGSI-LD Properties: Reading Entity Data as JSON-LD
NGSI-LD
▪ Response is just a JSON payload plus an @context
▪ @context can be passed either in the Link header
or the payload body:
▪ Accept: application/ld+json to include
the @context as a JSON attribute
▪ Accept: application/json returns plain old
JSON objects - @context is passed as a Link header
9
curl -G -X GET 
'http://localhost:1026/ngsi-ld/v1/entities' 
-H 'Link: <https://fiware.github.io/data-models/context.jsonld>;
rel="http://www.w3.org/ns/json-ld#context";
type="application/ld+json"' 
-H 'Accept: application/ld+json' 
-d 'type=Building' 
-d 'options=keyValues'
[
{
"@context": "https://fiware.github.io/data-models/context.jsonld",
"id": "urn:ngsi-ld:Building:store001", "type": "Building",
"address": {
"streetAddress": "Bornholmer Straße 65",
"addressRegion": "Berlin",
"addressLocality": "Prenzlauer Berg",
"postalCode": "10439"
},
"name": "Bösebrücke Einkauf",
"category": “commercial",
"location": {
"type": "Point", "coordinates": [13.3986, 52.5547]
}
}
]
NGSI-LD Properties: What to call a location?
▪ place ?
▪ locatedAt ?
▪ geocoordinate ?
▪ geocoordinates ?
10
With NGSI-LD core @context a location is always https://uri.etsi.org/ngsi-ld/location
Thereafter, with JSON-LD you may map your preferred short name if necessary
NGSI-LD core @context
"@context": {
"ngsi-ld": "https://uri.etsi.org/ngsi-ld/",
"geojson": "https://purl.org/geojson/vocab#",
"id": "@id",
"type": "@type",
"value": "ngsi-ld:hasValue",
... etc.
"GeoProperty": "ngsi-ld:GeoProperty",
"Point": "geojson:Point",
"coordinates": {
"@container": "@list",
"@id": "geojson:coordinates"
},
"location": "https://uri.etsi.org/ngsi-ld/location",
... etc.
}
▪ ubicación ?
▪ standort ?
▪ 置き場所 ?
▪ location ✓
"location": {
"type": "GeoProperty",
"value": {
"type": "Point",
"coordinates": [13.3986, 52.5547]}
}
}
NGSI-LD Relationships: Traversing Edge Nodes
From: https://www.w3.org/TR/json-ld/#dfn-graph
A JSON-LD document serializes a dataset which is a collection of graphs
A graph is a labeled directed graph, i.e., a set of nodes connected by edges.
In NGSI-LD:
▪ Node = NGSI Entity
▪ Edge = A relationship attribute linking two NGSI Entities
Therefore NGSI Linked Data relies on three separate definitions:
1. A definition that a particular attribute within an NGSI entity really represents a link
2. A machine readable definition of that link in the Data Model (i.e. the @context)
3. A machine readable definition of the set of all types of links available (the @graph)
11
Creating proper machine-readable Linked Data is fundamental to NGSI-LD.
NGSI-LD Relationships: 1. Creating Entities
Relationship Links within an NGSI Entity are formally defined using:
"type": "Relationship" OR "@type": "https://uri.etsi.org/ngsi-ld/Relationship"
The attribute of the linked entity is an object rather than a value
12
curl -X POST 
http://localhost:1026/ngsi-ld/v1/entities/urn:ngsi-ld:Shelf:unit001/attrs 
-H 'Content-Type: application/ld+json' 
-H 'fiware-servicepath: /' 
-d '{
"stocks": { "type": "Relationship","object": "urn:ngsi-ld:Product:001"},
"numberOfItems": {"type": "Property","value": 50},
"locatedIn" : {
"type": "Relationship", "object": "urn:ngsi-ld:Building:store001",
"requestedBy": {"type": "Relationship","object": "urn:ngsi-ld:Person:bob-the-manager"},
"installedBy": {"type": "Relationship","object": "urn:ngsi-ld:Person:employee001"},
"statusOfWork": {"type": "Property","value": "completed"}
},
"@context": "https://fiware.github.io/tutorials.Step-by-Step/tutorials-context.jsonld"
}'
NGSI-LD Relationships: 2. Machine Readable Data Models
Relationship links within the @context are formally defined using: "@type": "@id"
13
FIWARE Data Models @context
"@context": {
"tutorial": "https://fiware.github.io/tutorials.Step-by-Step/schema/",
"Product": "tutorial:Product",
"Shelf": "tutorial:Shelf",
...etc
"installedBy": {
"@id": "tutorial:installedBy",
"@type": "@id"
},
"requestedBy": {
"@id": "tutorial:requestedBy",
"@type": "@id"
},
...etc
NGSI-LD Relationships: 3. Machine Readable Links
14
FIWARE Data Models @graph
"@graph": [
{
"@id": "tutorial:Product",
"@type": "rdfs:Class",
"rdfs:comment": [
{"@language": "en", "@value": "Product is sold in a Store."},
{"@language": "ja", "@value": "製品はストアで販売されている物"}],
"rdfs:label": [{"@language": "en", "@value": "Product"}, {"@language": "ja", "@value": "製品"}],
"rdfs:subClassOf": {"@id": "http://schema.org/Thing"}
},
… etc
{
"@id": "tutorial:requestedBy",
"@type": "https://uri.etsi.org/ngsi-ld/Relationship",
"schema:domainIncludes": [{"@id": "tutorial:Shelf"}, {"@id": "tutorial:StockOrder"}],
"schema:rangeIncludes": [{"@id": "schema:Person"}],
"rdfs:comment": [
{"@language": "en","@value": "Object requested by person."},
{"@language": "ja","@value": "人が要求したオブジェクト"}],
"rdfs:label": [{"@language": "en", "@value": "requested by"},{"@language": "ja", "@value": "要求者"}]
},
]
15
Demo: NGSI-LD - Relationships
Sample Key-Values Payload
NGSI-LD Subscriptions: Creating a Subscription
16
NGSI-LD
{
"id": "urn:ngsi-ld:Notification:60812d06f2ebd727e1c425a8",
"type": "Notification",
"subscriptionId": "urn:ngsi-
ld:Subscription:60812c7bf2ebd727e1c425a4",
"notifiedAt": "2021-04-22T08:00:06.741Z",
"data": [
{
"id": "urn:ngsi-ld:Shelf:unit001",
"type": "Shelf",
"locatedIn": "urn:ngsi-ld:Building:store001",
"numberOfItems": 8,
"stocks": "urn:ngsi-ld:Product:001"
}
]
}
curl -L -X POST 'http://localhost:1026/ngsi-ld/v1/subscriptions/' 
-H 'Content-Type: application/ld+json' 
--data-raw '{
"description": "Notify me of low stock in Store 001",
"type": "Subscription",
"entities": [{"type": "Shelf"}],
"watchedAttributes": ["numberOfItems"],
"q": "numberOfItems<10;locatedIn==urn:ngsi-ld:Building:store001",
"notification": {
"attributes": [ "numberOfItems", "stocks","locatedIn"],
"format": "keyValues",
"endpoint": {
"uri": "http://tutorial:3000/subscription/low-stock-store001",
"accept": "application/json"
}
},
"@context": "https://fiware.github.io/tutorials.Step-by-Step/tutorials-
context.jsonld"
}'
NGSI-LD Registrations: Creating a Registration
NGSI LD
17
curl -L -X POST 'http://localhost:1026/ngsi-ld/v1/csourceRegistrations/' 
-H 'Content-Type: application/json' 
-H 'Link: <https://fiware.github.io/tutorials.Step-by-Step/tutorials-context.jsonld>;
rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"' 
--data-raw ' {
"type": "ContextSourceRegistration",
"information": [
{
"entities": [
{
"type": "Building",
"id": "urn:ngsi-ld:Building:store001"
}
],
"properties": [
"tweets"
]
}
],
"endpoint": "http://context-provider:3000/static/tweets"
}'
Note that properties is defined in the
1.1.1 NGSI-LD core context
In 1.3.1, it is due to be replaced with two
separate attributes - propertyNames
and relationshipNames - this change
has been made in order to offer full
GeoJSON-LD support.
Your context broker may or may not
support the updated core context
18
Demo: NGSI-LD - Subscriptions and Registrations
19
Context Data as Linked Data - How does it help?
Rich Text Snippets
Standard schema.org/Product data model
marked up as JSON-LD on the web. Interpreted by
third parties. Search Engine can display product
rating on screen. System “knows” if a product is out
of stock.
NGSI-LD Supermarket Tutorial
Third party ARV could “know” when a shelf needs filling and
retrieve goods from the warehouse
No need to reprogram for new customers if data follows the
fiware.org/ns/data-models, or the JSON-LD can be
converted to do so.
Thank you!
http://fiware.org
Follow @FIWARE on Twitter

More Related Content

PDF
Session 5 - NGSI-LD Advanced Operations | Train the Trainers Program
PDF
FIWARE Global Summit - NGSI-LD – an Evolution from NGSIv2
PDF
FIWARE Training: NGSI-LD Advanced Operations
PDF
Nestjs MasterClass Slides
PPTX
SHACL: Shaping the Big Ball of Data Mud
PDF
Clean backends with NestJs
PDF
Solid NodeJS with TypeScript, Jest & NestJS
PDF
FIWARE Training: JSON-LD and NGSI-LD
Session 5 - NGSI-LD Advanced Operations | Train the Trainers Program
FIWARE Global Summit - NGSI-LD – an Evolution from NGSIv2
FIWARE Training: NGSI-LD Advanced Operations
Nestjs MasterClass Slides
SHACL: Shaping the Big Ball of Data Mud
Clean backends with NestJs
Solid NodeJS with TypeScript, Jest & NestJS
FIWARE Training: JSON-LD and NGSI-LD

What's hot (20)

PDF
Data Modeling with NGSI, NGSI-LD
PDF
i4Trust IAM Components
PDF
FIWARE Training: Identity Management and Access Control
PDF
JSON-LD: JSON for the Social Web
PPTX
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
PDF
MongoDB Schema Design (Event: An Evening with MongoDB Houston 3/11/15)
PDF
FIWARE Wednesday Webinars - Introduction to NGSI-LD
PDF
Introducing DataFrames in Spark for Large Scale Data Science
PDF
FIWARE Global Summit - NGSI-LD: Modelling, Linking and Utilizing Context Info...
PDF
Découverte de Elastic search
PDF
Session 2 - NGSI-LD primer & Smart Data Models | Train the Trainers Program
PDF
Actuation, Federation and Interoperability of Context Brokers
PPT
Introduction To RDF and RDFS
PDF
JSON-LD and SHACL for Knowledge Graphs
PDF
FIWARE Training: IoT and Legacy
KEY
JSON-LD and MongoDB
PDF
Neo4J 사용
PDF
Data persistency (draco, cygnus, sth comet, quantum leap)
PDF
FIWARE Training: JSON-LD and NGSI-LD
PDF
Introduction to Spring's Dependency Injection
Data Modeling with NGSI, NGSI-LD
i4Trust IAM Components
FIWARE Training: Identity Management and Access Control
JSON-LD: JSON for the Social Web
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
MongoDB Schema Design (Event: An Evening with MongoDB Houston 3/11/15)
FIWARE Wednesday Webinars - Introduction to NGSI-LD
Introducing DataFrames in Spark for Large Scale Data Science
FIWARE Global Summit - NGSI-LD: Modelling, Linking and Utilizing Context Info...
Découverte de Elastic search
Session 2 - NGSI-LD primer & Smart Data Models | Train the Trainers Program
Actuation, Federation and Interoperability of Context Brokers
Introduction To RDF and RDFS
JSON-LD and SHACL for Knowledge Graphs
FIWARE Training: IoT and Legacy
JSON-LD and MongoDB
Neo4J 사용
Data persistency (draco, cygnus, sth comet, quantum leap)
FIWARE Training: JSON-LD and NGSI-LD
Introduction to Spring's Dependency Injection
Ad

Similar to NGSI-LD Introduction (20)

PDF
FIWARE Training: NGSI-LD Introduction
PDF
FIWARE Global Summit - Hands-On NGSI-LD
PDF
JSON-LD and NGSI-LD
PDF
FIWARE Global Summit - FIWARE Context Information Management
PDF
FIWARE Global Summit - NGSI-LD - NGSI with Linked Data
PPTX
FIWARE Wednesday Webinars - How to Design DataModels
PDF
NGSI-LD IoT Agents
PDF
NGSI-LD Advanced Operations
PDF
Core Context Management
PPTX
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
PPTX
Orion Context Broker NGSI-v2 Overview for Developers That Already Know Ngsi-v...
PPTX
Orion Context Broker NGSI-v2 Overview for Developers That Already Know Ngsi-v...
PPTX
Orion Context Broker NGSIv2 Overview for Developers That Already Know NGSIv1 ...
PPTX
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
PPTX
Orion Context Broker NGSIv2 Overview for Developers That Already Know NGSIv1 ...
PPTX
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
PPTX
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
PPTX
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
PPTX
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
PDF
Seongmyung_Jeong_Presentation.pdf
FIWARE Training: NGSI-LD Introduction
FIWARE Global Summit - Hands-On NGSI-LD
JSON-LD and NGSI-LD
FIWARE Global Summit - FIWARE Context Information Management
FIWARE Global Summit - NGSI-LD - NGSI with Linked Data
FIWARE Wednesday Webinars - How to Design DataModels
NGSI-LD IoT Agents
NGSI-LD Advanced Operations
Core Context Management
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know Ngsi-v...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know Ngsi-v...
Orion Context Broker NGSIv2 Overview for Developers That Already Know NGSIv1 ...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
Orion Context Broker NGSIv2 Overview for Developers That Already Know NGSIv1 ...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
Orion Context Broker NGSI-v2 Overview for Developers That Already Know NGSI-v...
Seongmyung_Jeong_Presentation.pdf
Ad

More from FIWARE (20)

PPTX
Behm_Herne_NeMo_akt.pptx
PDF
Katharina Hogrebe Herne Digital Days.pdf
PPTX
Christoph Mertens_IDSA_Introduction to Data Spaces.pptx
PPTX
Behm_Herne_NeMo.pptx
PPTX
Evangelists + iHubs Promo Slides.pptx
PPTX
Lukas Künzel Smart City Operating System.pptx
PPTX
Pierre Golz Der Transformationsprozess im Konzern Stadt.pptx
PPTX
Dennis Wendland_The i4Trust Collaboration Programme.pptx
PPTX
Ulrich Ahle_FIWARE.pptx
PPTX
Aleksandar Vrglevski _FIWARE DACH_OSIH.pptx
PDF
Water Quality - Lukas Kuenzel.pdf
PPTX
Cameron Brooks_FGS23_FIWARE Summit_Keynote_Cameron.pptx
PPTX
FiWareSummit.msGIS-Data-to-Value.2023.06.12.pptx
PPTX
Boris Otto_FGS2023_Opening- EU Innovations from Data_PUB_V1_BOt.pptx
PPTX
Bjoern de Vidts_FGS23_Opening_athumi - bjord de vidts - personal data spaces....
PDF
Abdulrahman Ibrahim_FGS23 Opening - Abdulrahman Ibrahim.pdf
PDF
FGS2023_Opening_Red Hat Keynote Andrea Battaglia.pdf
PPTX
HTAG_Skalierung_Plattform_lokal_final_versand.pptx
PPTX
WE_LoRaWAN _ IoT.pptx
PPTX
EU Opp_Clara Pezuela - German chapter.pptx
Behm_Herne_NeMo_akt.pptx
Katharina Hogrebe Herne Digital Days.pdf
Christoph Mertens_IDSA_Introduction to Data Spaces.pptx
Behm_Herne_NeMo.pptx
Evangelists + iHubs Promo Slides.pptx
Lukas Künzel Smart City Operating System.pptx
Pierre Golz Der Transformationsprozess im Konzern Stadt.pptx
Dennis Wendland_The i4Trust Collaboration Programme.pptx
Ulrich Ahle_FIWARE.pptx
Aleksandar Vrglevski _FIWARE DACH_OSIH.pptx
Water Quality - Lukas Kuenzel.pdf
Cameron Brooks_FGS23_FIWARE Summit_Keynote_Cameron.pptx
FiWareSummit.msGIS-Data-to-Value.2023.06.12.pptx
Boris Otto_FGS2023_Opening- EU Innovations from Data_PUB_V1_BOt.pptx
Bjoern de Vidts_FGS23_Opening_athumi - bjord de vidts - personal data spaces....
Abdulrahman Ibrahim_FGS23 Opening - Abdulrahman Ibrahim.pdf
FGS2023_Opening_Red Hat Keynote Andrea Battaglia.pdf
HTAG_Skalierung_Plattform_lokal_final_versand.pptx
WE_LoRaWAN _ IoT.pptx
EU Opp_Clara Pezuela - German chapter.pptx

Recently uploaded (20)

PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Encapsulation theory and applications.pdf
PPTX
Cloud computing and distributed systems.
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
Spectroscopy.pptx food analysis technology
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
KodekX | Application Modernization Development
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Electronic commerce courselecture one. Pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Mobile App Security Testing_ A Comprehensive Guide.pdf
Programs and apps: productivity, graphics, security and other tools
Encapsulation theory and applications.pdf
Cloud computing and distributed systems.
Unlocking AI with Model Context Protocol (MCP)
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Spectroscopy.pptx food analysis technology
Dropbox Q2 2025 Financial Results & Investor Presentation
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
MYSQL Presentation for SQL database connectivity
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
KodekX | Application Modernization Development
MIND Revenue Release Quarter 2 2025 Press Release
Electronic commerce courselecture one. Pdf
Per capita expenditure prediction using model stacking based on satellite ima...
The AUB Centre for AI in Media Proposal.docx
NewMind AI Weekly Chronicles - August'25 Week I
Encapsulation_ Review paper, used for researhc scholars
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

NGSI-LD Introduction

  • 1. 0 NGSI-LD Introduction Jason Fox Senior Technical Evangelist FIWARE Foundation
  • 2. Useful links What is JSON-LD: https://www.youtube.com/watch?v=vioCbTo3C-4 JSON-LD Core Markup: https://www.youtube.com/watch?v=UmvWk_TQ30A Compaction and Expansion: https://www.youtube.com/watch?v=Tm3fD89dqRE JSON-LD Playground & examples https://json-ld.org/playground/ 1
  • 3. Linked Context Data: NGSI v2 to NGSI-LD From: https://fiware-datamodels.readthedocs.io/en/latest/ngsi-ld_faq/index.html ▪ NGSI-LD is an evolution of the FIWARE NGSI v2 information model, and has been updated/improved to support linked data (entity relationships), property graphs and semantics (exploiting the capabilities offered by JSON-LD). This work has been conducted under the ETSI ISG Context Information Management initiative. ▪ Creating proper machine-readable Linked Data is fundamental to NGSI-LD. ▪ NGSI-LD Payloads are valid JSON-LD 2 { "@context": [ "https://fiware.github.io/data-models/context.jsonld", "https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld" ], "id": "http://dbpedia.org/resource/John_Lennon", "type": "Person", "name": {"type": "Property", "value": "John Lennon"}, "born": {"type": "Property", "value": "1940-10-09"}, "spouse": {"type": "Relationship", "object": "http://dbpedia.org/resource/Cynthia_Lennon" } }
  • 4. What is Core @context? "ngsi-ld": "https://uri.etsi.org/ngsi-ld/", "geojson": "https://purl.org/geojson/vocab#", "id": "@id", "type": "@type", "Date": "ngsi-ld:Date", "DateTime": "ngsi-ld:DateTime", "Feature": "geojson:Feature", "FeatureCollection": "geojson:FeatureCollection", "GeometryCollection": "geojson:GeometryCollection", "LineString": "geojson:LineString", "MultiLineString": "geojson:MultiLineString", "MultiPoint": "geojson:MultiPoint", "MultiPolygon": "geojson:MultiPolygon", "Point": "geojson:Point", "Polygon": "geojson:Polygon", "GeoProperty": "ngsi-ld:GeoProperty", "Property": "ngsi-ld:Property", "Relationship": "ngsi-ld:Relationship", "ContextSourceNotification":"ngsi-ld:ContextSourceNotification", "ContextSourceRegistration":"ngsi-ld:ContextSourceRegistration", "Notification": "ngsi-ld:Notification", "Subscription": "ngsi-ld:Subscription", … etc 3 "coordinates": { "@container": "@list", "@id": "geojson:coordinates" }, "temporalQ": "ngsi-ld:temporalQ", "throttling": "ngsi-ld:throttling", "observedAt": { "@id": "ngsi-ld:observedAt", "@type": "DateTime" }, "timeInterval": "ngsi-ld:timeInterval", "unitCode": "ngsi-ld:unitCode", "value": "ngsi-ld:hasValue", "values": { "@id": "ngsi-ld:hasValues", "@container": "@list" }, … etc "@vocab": "https://uri.etsi.org/ngsi-ld/default- context/"
  • 5. NGSI-LD: Evolution not Revolution NGSI v2 ▪ Well defined REST API for context data using JSON payloads. GET, POST and other HTTP verbs do the things you expect ▪ CRUD operations - /v2/entities endpoint ▪ Augment your context data - /v2/registrations endpoint ▪ Push context data to other services - /v2/subscriptions endpoint 4 NGSI-LD ▪ Well defined REST API for context data using JSON and JSON-LD payloads. GET, POST and other HTTP verbs do the things you expect ▪ CRUD operations - /ngsi- ld/v1/entities endpoint ▪ Augment your context data - /ngsi- ld/v1/registrations endpoint ▪ Push context data to other services - /ngsi- ld/v1/subscriptions endpoint
  • 6. 5 Demo: NGSI-LD - Properties
  • 7. NGSI-LD Properties: Creating an Entity NGSI v2 6 NGSI-LD curl -iX POST 'http://localhost:1026/v2/entities' -H 'Content-Type: application/json' -d '{ "type": "Store", "id": "store001", "category": { "type": "Array", "value": ["commercial"]}, "address": { "type": "PostalAddress", "value": { "streetAddress": "Bornholmer Straße 65", "addressRegion": "Berlin", "addressLocality": "Prenzlauer Berg", "postalCode": "10439" }, "metadata": { "verified": { "type": "Boolean","value": true} } }, "location": {"type": "geo:json", "value": {"type": "Point", "coordinates": [13.3986, 52.5547]} }, "name": {"type": "Text", "value": "Bösebrücke Einkauf"} }' curl -iX POST http://localhost:1026/ngsi-ld/v1/entities -H 'Content-Type: application/ld+json' -d '{ "type": "Building", "id": "urn:ngsi-ld:Building:store001", "category": { "type": "Property", "value": ["commercial"]}, "address": { "type": "Property"," value": { "streetAddress": "Bornholmer Straße 65", "addressRegion": "Berlin", "addressLocality": "Prenzlauer Berg", "postalCode": "10439" }, "verified": { "type": "Property", "value": true } }, "location": { "type": "GeoProperty", "value": { "type": "Point", "coordinates": [13.3986, 52.5547]} }, "name": { "type": "Property", "value": "Bösebrücke Einkauf" }, "@context": [ "https://fiware.github.io/data-models/context.jsonld", "https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld" ] }'
  • 8. NGSI-LD Properties: Data Model NGSI v2 ▪ Entities ▪ Attributes ▪ MetaData 7 NGSI-LD ▪ Entities ▪ Properties ▪ Relationships ▪ Values plus … plus … etc... The NGSI LD data model is more complex; the definitions of use are more rigid which lead to a navigable knowledge graph. ▪ Properties of Properties ▪ Properties of Relationships ▪ Relationships of Properties ▪ Relationships of Relationships . ▪ Properties of Properties of Properties ▪ Relationships of Properties of Properties ▪ Properties of Properties of Relationships ▪ Relationships of Properties of Relationships ▪ Properties of Relationships of Properties ▪ Relationships of Relationships of Properties ▪ Properties of Relationships of Relationships ▪ Relationships of Relationships of Relationships
  • 9. NGSI-LD Properties: Data Model 8 The Entity Example Notes Has an id urn:ngsi-ld:Building:store001 URI/URN. id must be unique. Has a type. https://uri.fiware.org/ns/ data-models#Building ● Fully qualified URI of a well defined data model ● Short-hand strings for types, mapped to fully qualified URIs through the JSON-LD @context. Has a series of properties name, address, category etc. This can be expanded into http://schema.org/address, which is known as a fully qualified name (FQN). Has a series of properties-of-properties a verified field for the address This is the equivalent of NGSI v2 metadata Has a series of relationships managedBy The object corresponds to the URI/URN of another data entity. Equivalent of NGSI v2 refXXX Has a series of properties-of-relationships managedBy.since Holds additional information about a relationship. This is the equivalent of metadata about a refXXX property Has a series of relationships-of-relationships managedBy.subordinateTo holds the URI/URN of another relationship.
  • 10. NGSI-LD Properties: Reading Entity Data as JSON-LD NGSI-LD ▪ Response is just a JSON payload plus an @context ▪ @context can be passed either in the Link header or the payload body: ▪ Accept: application/ld+json to include the @context as a JSON attribute ▪ Accept: application/json returns plain old JSON objects - @context is passed as a Link header 9 curl -G -X GET 'http://localhost:1026/ngsi-ld/v1/entities' -H 'Link: <https://fiware.github.io/data-models/context.jsonld>; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"' -H 'Accept: application/ld+json' -d 'type=Building' -d 'options=keyValues' [ { "@context": "https://fiware.github.io/data-models/context.jsonld", "id": "urn:ngsi-ld:Building:store001", "type": "Building", "address": { "streetAddress": "Bornholmer Straße 65", "addressRegion": "Berlin", "addressLocality": "Prenzlauer Berg", "postalCode": "10439" }, "name": "Bösebrücke Einkauf", "category": “commercial", "location": { "type": "Point", "coordinates": [13.3986, 52.5547] } } ]
  • 11. NGSI-LD Properties: What to call a location? ▪ place ? ▪ locatedAt ? ▪ geocoordinate ? ▪ geocoordinates ? 10 With NGSI-LD core @context a location is always https://uri.etsi.org/ngsi-ld/location Thereafter, with JSON-LD you may map your preferred short name if necessary NGSI-LD core @context "@context": { "ngsi-ld": "https://uri.etsi.org/ngsi-ld/", "geojson": "https://purl.org/geojson/vocab#", "id": "@id", "type": "@type", "value": "ngsi-ld:hasValue", ... etc. "GeoProperty": "ngsi-ld:GeoProperty", "Point": "geojson:Point", "coordinates": { "@container": "@list", "@id": "geojson:coordinates" }, "location": "https://uri.etsi.org/ngsi-ld/location", ... etc. } ▪ ubicación ? ▪ standort ? ▪ 置き場所 ? ▪ location ✓ "location": { "type": "GeoProperty", "value": { "type": "Point", "coordinates": [13.3986, 52.5547]} } }
  • 12. NGSI-LD Relationships: Traversing Edge Nodes From: https://www.w3.org/TR/json-ld/#dfn-graph A JSON-LD document serializes a dataset which is a collection of graphs A graph is a labeled directed graph, i.e., a set of nodes connected by edges. In NGSI-LD: ▪ Node = NGSI Entity ▪ Edge = A relationship attribute linking two NGSI Entities Therefore NGSI Linked Data relies on three separate definitions: 1. A definition that a particular attribute within an NGSI entity really represents a link 2. A machine readable definition of that link in the Data Model (i.e. the @context) 3. A machine readable definition of the set of all types of links available (the @graph) 11 Creating proper machine-readable Linked Data is fundamental to NGSI-LD.
  • 13. NGSI-LD Relationships: 1. Creating Entities Relationship Links within an NGSI Entity are formally defined using: "type": "Relationship" OR "@type": "https://uri.etsi.org/ngsi-ld/Relationship" The attribute of the linked entity is an object rather than a value 12 curl -X POST http://localhost:1026/ngsi-ld/v1/entities/urn:ngsi-ld:Shelf:unit001/attrs -H 'Content-Type: application/ld+json' -H 'fiware-servicepath: /' -d '{ "stocks": { "type": "Relationship","object": "urn:ngsi-ld:Product:001"}, "numberOfItems": {"type": "Property","value": 50}, "locatedIn" : { "type": "Relationship", "object": "urn:ngsi-ld:Building:store001", "requestedBy": {"type": "Relationship","object": "urn:ngsi-ld:Person:bob-the-manager"}, "installedBy": {"type": "Relationship","object": "urn:ngsi-ld:Person:employee001"}, "statusOfWork": {"type": "Property","value": "completed"} }, "@context": "https://fiware.github.io/tutorials.Step-by-Step/tutorials-context.jsonld" }'
  • 14. NGSI-LD Relationships: 2. Machine Readable Data Models Relationship links within the @context are formally defined using: "@type": "@id" 13 FIWARE Data Models @context "@context": { "tutorial": "https://fiware.github.io/tutorials.Step-by-Step/schema/", "Product": "tutorial:Product", "Shelf": "tutorial:Shelf", ...etc "installedBy": { "@id": "tutorial:installedBy", "@type": "@id" }, "requestedBy": { "@id": "tutorial:requestedBy", "@type": "@id" }, ...etc
  • 15. NGSI-LD Relationships: 3. Machine Readable Links 14 FIWARE Data Models @graph "@graph": [ { "@id": "tutorial:Product", "@type": "rdfs:Class", "rdfs:comment": [ {"@language": "en", "@value": "Product is sold in a Store."}, {"@language": "ja", "@value": "製品はストアで販売されている物"}], "rdfs:label": [{"@language": "en", "@value": "Product"}, {"@language": "ja", "@value": "製品"}], "rdfs:subClassOf": {"@id": "http://schema.org/Thing"} }, … etc { "@id": "tutorial:requestedBy", "@type": "https://uri.etsi.org/ngsi-ld/Relationship", "schema:domainIncludes": [{"@id": "tutorial:Shelf"}, {"@id": "tutorial:StockOrder"}], "schema:rangeIncludes": [{"@id": "schema:Person"}], "rdfs:comment": [ {"@language": "en","@value": "Object requested by person."}, {"@language": "ja","@value": "人が要求したオブジェクト"}], "rdfs:label": [{"@language": "en", "@value": "requested by"},{"@language": "ja", "@value": "要求者"}] }, ]
  • 16. 15 Demo: NGSI-LD - Relationships
  • 17. Sample Key-Values Payload NGSI-LD Subscriptions: Creating a Subscription 16 NGSI-LD { "id": "urn:ngsi-ld:Notification:60812d06f2ebd727e1c425a8", "type": "Notification", "subscriptionId": "urn:ngsi- ld:Subscription:60812c7bf2ebd727e1c425a4", "notifiedAt": "2021-04-22T08:00:06.741Z", "data": [ { "id": "urn:ngsi-ld:Shelf:unit001", "type": "Shelf", "locatedIn": "urn:ngsi-ld:Building:store001", "numberOfItems": 8, "stocks": "urn:ngsi-ld:Product:001" } ] } curl -L -X POST 'http://localhost:1026/ngsi-ld/v1/subscriptions/' -H 'Content-Type: application/ld+json' --data-raw '{ "description": "Notify me of low stock in Store 001", "type": "Subscription", "entities": [{"type": "Shelf"}], "watchedAttributes": ["numberOfItems"], "q": "numberOfItems<10;locatedIn==urn:ngsi-ld:Building:store001", "notification": { "attributes": [ "numberOfItems", "stocks","locatedIn"], "format": "keyValues", "endpoint": { "uri": "http://tutorial:3000/subscription/low-stock-store001", "accept": "application/json" } }, "@context": "https://fiware.github.io/tutorials.Step-by-Step/tutorials- context.jsonld" }'
  • 18. NGSI-LD Registrations: Creating a Registration NGSI LD 17 curl -L -X POST 'http://localhost:1026/ngsi-ld/v1/csourceRegistrations/' -H 'Content-Type: application/json' -H 'Link: <https://fiware.github.io/tutorials.Step-by-Step/tutorials-context.jsonld>; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"' --data-raw ' { "type": "ContextSourceRegistration", "information": [ { "entities": [ { "type": "Building", "id": "urn:ngsi-ld:Building:store001" } ], "properties": [ "tweets" ] } ], "endpoint": "http://context-provider:3000/static/tweets" }' Note that properties is defined in the 1.1.1 NGSI-LD core context In 1.3.1, it is due to be replaced with two separate attributes - propertyNames and relationshipNames - this change has been made in order to offer full GeoJSON-LD support. Your context broker may or may not support the updated core context
  • 19. 18 Demo: NGSI-LD - Subscriptions and Registrations
  • 20. 19 Context Data as Linked Data - How does it help? Rich Text Snippets Standard schema.org/Product data model marked up as JSON-LD on the web. Interpreted by third parties. Search Engine can display product rating on screen. System “knows” if a product is out of stock. NGSI-LD Supermarket Tutorial Third party ARV could “know” when a shelf needs filling and retrieve goods from the warehouse No need to reprogram for new customers if data follows the fiware.org/ns/data-models, or the JSON-LD can be converted to do so.