# NGSI-LD

NGSI-LD es un modelo de información y API para editar, consultar y subscribirse a información de contexto. Está destinado a facilitar el intercambio abierto y el intercambio de información estructurada entre diferentes partes interesadas. Se utiliza en diferentes ámbitos de aplicación como Ciudades Inteligentes, Industria Inteligente, Agricultura Inteligente, y más generalmente para el Internet de Cosas, Sistemas Cyber-Físicos, Sistemas de sistemas y Gemelos Digitales.
NGSI-LD ha sido estandarizado por el ETSI (Instituto de Estandarización de Telecomunicaciones europeo) a través del Context Information Management Industry Specification Group, siguiendo una solicitud de la Comisión Europea. Su adopción y posterior desarrollo se detallan en el "Plan renovable para la estandarización de las TIC" de la UE. NGSI-LD se basa en un corpus de investigación de décadas de antigüedad en marcos de gestión de contexto y modelado de contexto. El acrónimo NGSI significa "Interfaces de Servicio de Nueva Generación", un conjunto de especificaciones emitidas originalmente por OMA que incluían interfaces de contexto. Estos fueron adoptados y desarrollados como NGSIv2 por la European Future Internet Public-Private-Partnership (PPP), que generó la comunidad de código abierto FIWARE.
El modelo de información NGSI-LD representa Información de Contexto como entidades que tienes propiedades y se relacionan con otras entidades. Se deriva de grafos de propiedades, con la semántica definida formalmente sobre la base de RDF y el marco de la web semántica. Se puede serializar usando JSON-LD. Cada entidad y relación recibe una referencia IRI única como identificador, lo que hace que los datos correspondientes se puedan exportar como conjuntos de datos de Datos enlazados. El sufijo -LD denota esta afiliación al universo de Dato Enlazados.

## Diseño
### Modelo de información

El modelo de información NGSI-LD se puede considerar como la primera especificación formal por parte de una organización de estandarización del modelo gráfico de la propiedad, que se desarrolla desde la década de 2000 como un modelo común denominador informal para graph databases.
Los conceptos de clave son:
* Un grafo de propiedades es un multigrafo dirigido, formado por nodos (vértices) conectados por enlaces dirigidos, donde tanto los nodos como los arcos pueden tener múltiples propiedades opcionales adjuntas (es decir, atributos)
* Las propiedades (similares a los atributos en los modelos de objetos) tienen la forma de pares clave-valor arbitrarios. Las claves son cadenas de caracteres y los valores son tipos de datos arbitrarios. A diferencia de los grafos RDF, las propiedades no son arcos del grafo.
* Las relaciones son arcos (aristas dirigidas) del grafo, que siempre tienen un identificador, un nodo inicial y un nodo final
El meta-modelo NGSI-LD formalmente define estos conceptos fundacionales (Entidades, Relaciones, Propiedades) en la base de RDF/RDFS/OWL, y parcialmente en la base de JSON-LD.
* Una Entidad NGSI-LD es el representante informativo de algo (un referente) que se supone que existe en el mundo real, fuera de la plataforma computacional que utiliza NGSI-LD. Este referente no tiene por qué ser algo estrictamente físico (podría ser una entidad legal o administrativa), ni autocontenido (puede ser una construcción distribuida a nivel de sistema). Se supone que cualquier instancia de una entidad de este tipo está identificada de forma única por un IRI, y caracterizada por referencia a uno o más tipos de entidad NGSI-LD. En el lenguaje del gráfico de propiedades, es un nodo.
* Una propiedad NGSI-LD es una instancia que asocia una característica, un valor NGSI-LD, a una entidad NGSI-LD, a una relación NGSI-LD o a otra propiedad NGSI-LD. Las propiedades de propiedades están explícitamente permitidas y se fomentan, por ejemplo, para expresar la precisión de un valor medido concreto.
* Una relación NGSI-LD es un vínculo dirigido entre un sujeto (punto de partida), que puede ser una entidad NGSI-LD, una propiedad NGSI-LD u otra relación NGSI-LD, y un objeto (punto final), que es una entidad NGSI-LD. Una relación NGSI-LD de una propiedad a una entidad puede utilizarse, por ejemplo, para expresar que la propiedad fue medida por esa entidad (Procedencia de la medición).
* Un valor NGSI-LD es un valor JSON (es decir, una cadena, un número, verdadero o falso, un objeto, una matriz), o un valor tipificado JSON-LD (es decir, una cadena como forma léxica del valor junto con un tipo, definido por un tipo base XSD o, más generalmente, un IRI), o un valor estructurado JSON-LD (es decir, un conjunto, una lista o una cadena etiquetada en un idioma).
* Un tipo NGSI-LD es una clase OWL que es una subclase de las clases Entidad NGSI-LD, Relación NGSI-LD, Propiedad NGSI-LD o Valor NGSI-LD definidas en el metamodelo NGSI-LD. NGSI-LD predefine un pequeño número de tipos, pero por lo demás está abierto a cualquier tipo definido por los usuarios.
Complementando este meta-modelo, la especificación del modelo de información NGSI-LD también proporciona una Ontology transversal aquello define clave construye relacionado a espacial, temporal o sistema-características de composición de entidades.

### Arquitectura

La especificación NGSI-LD consiste en un modelo de información y una API. La API proporciona funcionalidades para apoyar los roles arquitectónicos descritos a continuación.
* Consumidor de contexto: Un consumidor de contexto consume entidades NGSI-LD de un agente de contexto (o posiblemente directamente de una fuente de contexto) utilizando las funcionalidades de consumo de información de contexto de la API de NGSI-LD. Puede recuperar una entidad NGSI-LD específica o consultar las entidades NGSI-LD pertinentes mediante solicitudes sincrónicas. También puede suscribirse a las entidades NGSI-LD pertinentes y recibir notificaciones asíncronas cuando se produzcan cambios en las entidades NGSI-LD solicitadas.
* Productor de contexto: Un Productor de Contexto crea, actualiza y elimina Entidades NGSI-LD, Propiedades NGSI-LD y Relaciones NGSI-LD en el Broker de Contexto utilizando las funcionalidades de Provisión de Información de Contexto de la API NGSI-LD.
* Fuente de contexto: Una Fuente de Contexto hace que las Entidades NGSI-LD estén disponibles a través de las funcionalidades de Consumo de Información de Contexto de la API NGSI-LD. Para que la información sea detectable para un agente de contexto, registra el tipo de información de contexto que puede proporcionar con un servidor de registro utilizando la funcionalidad de registro de fuentes de contexto de la API de NGSI-LD.
* Bróker de Contexto: Un Bróker de Contexto actúa como punto de acceso principal a la información de contexto para los Consumidores de Contexto. La información de la entidad NGSI-LD puede ser almacenada por el propio agente de contexto, si ha sido proporcionada por un productor de contexto utilizando las funcionalidades de suministro de información de contexto de la API NGSI-LD, o el agente puede solicitarla a las fuentes de contexto utilizando las funcionalidades de consumo de información de contexto de la API NGSI-LD. El Corredor de Contexto agrega toda la información de la Entidad NGSI-LD relacionada con una solicitud y devuelve el resultado agregado al Consumidor de Contexto. En el caso de una suscripción, envía notificaciones siempre que haya cambios relevantes, potencialmente como resultado de la recepción de notificaciones de Fuentes de Contexto. Para encontrar Fuentes de Contexto que puedan tener Entidades NGSI-LD relevantes para una solicitud del Consumidor de Contexto, el Corredor de Contexto utiliza la funcionalidad de Descubrimiento de Fuentes de Contexto de la API NGSI-LD implementada por el Servidor de Registro.
* Servidor de Registro: El Servidor de Registro almacena los Registros de Fuentes de Contexto proporcionados por las Fuentes de Contexto utilizando las funcionalidades de Registro de Fuentes de Contexto de la API NGSI-LD. Los registros de fuentes de contexto contienen información sobre el tipo de información de contexto que puede proporcionar una fuente de contexto, pero no los valores reales. El tipo de información de contexto puede proporcionarse en diferentes niveles de granularidad que van desde información muy detallada, por ejemplo, ciertas propiedades o relaciones de una Entidad NGSI-LD específica, hasta cualquier información de una Entidad NGSI-LD específica, o hasta el nivel en que puede proporcionar Entidades NGSI-LD que tengan un determinado Tipo de Entidad, posiblemente para un área geográfica determinada. La funcionalidad de descubrimiento de fuentes de contexto de la API NGSI-LD permite al agente de contexto (o posiblemente a un consumidor de contexto) encontrar fuentes de contexto que puedan tener entidades NGSI-LD relevantes.
Los roles arquitectónicos permiten la implementación de diferentes arquitecturas de despliegue. En una arquitectura centralizada, existe un Context Broker central que almacena la información de contexto proporcionada por los Context Producers. En una arquitectura distribuida, toda la información de contexto puede ser almacenada por las Fuentes de Contexto. En una arquitectura federada, las Fuentes de Contexto pueden ser de nuevo Corredores de Contexto que ponen a disposición la información agregada de un nivel jerárquico inferior. Estas arquitecturas no son mutuamente excluyentes, es decir, un despliegue real puede combinarlas de diferentes formas.

### API

La API de gestión de la información de contexto de NGSI-LD permite a los usuarios proporcionar, consumir y suscribirse a la información de contexto en múltiples escenarios y con la participación de múltiples partes interesadas. Permite un acceso casi en tiempo real a la información procedente de muchas fuentes diferentes (no solo fuentes de datos del IoT), denominadas Fuentes de Contexto, así como la publicación de esa información a través de plataformas de publicación de datos interoperables.
Ofrece consultas geotemporales avanzadas e incluye mecanismos de suscripción, para que los consumidores de contenidos reciban una notificación cuando estén disponibles los contenidos que coincidan con algunas restricciones.
La API está diseñada para ser agnóstica a la arquitectura (central, distribuida, federada o combinaciones de ellas), de modo que las aplicaciones que producen y consumen información no tengan que adaptarse a las especificidades del sistema que distribuye/intercambia información de contexto para ellas.
Las operaciones de la API comprenden:
* Operaciones de Información de Contexto, relacionadas con la Provisión (creación de entidades NGSI-LD y actualización de sus atributos), el Consumo (consulta de entidades NGSI-LD) y la Suscripción (suscripción a información específica, bajo restricciones especificadas, con el fin de ser notificado cuando aparezcan entidades coincidentes, portadoras de la información especificada).
* Las operaciones de Fuentes de Contexto, relacionadas con el Registro (hacer que una nueva fuente de información de contexto esté disponible en el sistema distribuido general, registrándola) y el Descubrimiento (consultar al sistema sobre qué fuentes de contexto se han registrado, que ofrecen información de un tipo especificado).

## Usos

NGSI-LD fue iniciada por los socios del programa FIWARE, y es utilizada principalmente por la comunidad de código abierto de FIWARE, con el apoyo de la Fundación FIWARE, así como por una diversa gama de otros proyectos y usuarios, como los que se indican a continuación:
* El Connecting Europe Facility recomienda el uso del bróker de contexto FIWARE con NGSI-LD.
* La Organización de Ciudades Inteligentes Abiertas y Ágiles hace referencia a la especificación NGSI-LD como el primero de sus Mecanismos Mínimos de Interoperabilidad.
* El proyecto Living-in.eu recomienda el uso de NGSI-LD en su declaración conjunta y sus compromisos técnicos. La declaración ha sido respaldada y firmada por 86 ciudades y administraciones públicas de la UE, y cuenta con el apoyo de muchas más empresas y organizaciones.
* La "Arquitectura del Marco de Datos del IoT" de la GSMA se basa en NGSI-LD
* El proyecto Fed4IoT de la UE, en el que se utiliza como formato de datos neutral para traducir entre varias representaciones de datos de IoT
* Thing'in Archivado el 21 de junio de 2021 en Wayback Machine., plataforma de gemelos digitales basada en grafos de Orange utiliza NGSI-LD como modelo de información principal
* El Bureau of Indian Standards adopta NGSI-LD como estándar para las ciudades indias

## Implementaciones en Proyectos de software de código abierto

* Orion-LD de la Fundación FIWARE
* Scorpio de NEC
* Stellio de EGM
* Cassiopeia de Geonet

## Historia

NGSI-LD es el resultado de una evolución de las Interfaces de Contexto que comenzó como parte del conjunto de "Interfaces de Servicio de Próxima Generación" (NGSI) publicado por la Open Mobile Alliance (OMA) en 2012, que es también el origen del acrónimo NGSI. El conjunto NGSI incluía NGSI-9 como interfaz de descubrimiento de entidades de contexto y NGSI-10 como interfaz de información de contexto. El estándar NGSI de la OMA y sus evoluciones intermedias se basaban en un modelo clásico de entidad-atributo-valor y una representación basada en XML. Las Interfaces de Contexto NGSI fueron adaptadas por el proyecto FI-WARE, que desarrolló la plataforma para la Asociación Público-Privada (APP) europea de la Internet del Futuro. Las interfaces de contexto NGSI de la OMA obtuvieron un enlace HTTP con una representación JSON, denominada NGSIv1, que incluía tanto NGSI-9 como NGSI-10. En el transcurso de FI-PPP las interfaces evolucionaron hasta llegar a NGSIv2, que se convirtió en la interfaz clave de la plataforma FIWARE. Tras el final de la FI-PPP en 2016, la plataforma FIWARE se convirtió en el núcleo de la Comunidad de Código Abierto FIWARE gestionada por la FIWARE Fundación. En 2017, se creó el Grupo de Especificación de la Industria del ETSI sobre la Gestión de Información Contextual transversal (ETSI ISG CIM) para evolucionar la Interfaz de Información Contextual, lo que dio lugar a la creación de NGSI-LD. Las limitaciones del modelo de información original condujeron a la especificación de un modelo más amplio que deriva de los gráficos de propiedades, incluyendo explícitamente las relaciones entre entidades, a la par que las propias entidades.