Datagrama de Datos

Normalización de mensajes. El datagrama VEPROT

Todo dato almacenado en el sistema MobilityLabs se encuentra en formato JSON, por lo tanto, para almacenar nuevas colecciones es necesario enviar mensajes en el mismo formato.

Para enviar mensajes de datos hacia MobiityLabs es necesario utilizar el Servidor de Colas, sistema que permite la inserción de nuevos datos y los clasifica dentro del sistema de Bases de Datos.

El diagrama del  flujo de intercambio de mensajes es el siguiente:

 

ESQUEMA COMUNICACIONES

Acceso a las colecciones de MobilityLabs

Para tener acceso a las colecciones de datos de MobilityLabs debes poseer permisos de acceso en cualquiera de los modos válidos. Estos permisos pasan, por obtener unas credenciales, para ello, únicamente hay que solicitar acceso a través del formulario http://opendata.emtmadrid.es/Formulario, un proceso automático se encargará de enviarte un mail indicándote la información del registro y un link de confirmación. Una vez realizado, el sistema te enviará un par de datos (idCliente y passKey).

Una vez realizado este proceso, ya tendrás acceso a las colecciones públicas de MobilityLabs, que puedes consultarlas en este link, bien en modo observador, a través de Reactive Box o bien en modo de datos históricos

Sí, además, tienes planteado insertar tus propias colecciones de datos o incluso, añadir datos a alguna colección de otros proveedores que esté en modo compartido, puedes tramitar el acceso a esta colección a través de este portal, en Tu participación->Solicitar Acceso a Colección

 

El formato del datagrama VEPROT

Aunque existen múltiples combinaciones dentro del datagrama VEPROT, es necesario cumplir unas reglas de formato específicas que permitan que un mensaje sea validado por el sistema y, finalmente, pase a formar parte de las colecciones de MobilityLabs. Una vez que el dato es validado y aceptado, queda disponible para ser utilizado a través de los mecanismos de observación de Reactive Box o de los Servicios Web de Colecciones Históricas.

Valores requeridos para la inserción, modificación y eliminación de datos de colecciones:

El Encabezado general

Expresa la intención de introducir un datagrama en el mensaje para llevar a cabo una acción utilizando el Servidor de Datagramas. Su definición es “target”: “datagramServer”

La Sección de datos

Contiene arrays con la definición de cada sección de datos (documento) para el servidor de datagramas. Se define como: “vep_data”: []

La Sección de Capas

Contiene la definición de la Colección (ítem del array de la Sección de datos) que contiene la información de la colección (layer) con la que se desea trabajar. Su definición es “layerData”:{}

Contiene los siguientes elementos relevantes:

_id (Obligatorio). Valor único del elemento: Es el atributo identificado como valor clave. Cada elemento con este identificador se trata como una unidad individualizada dentro de la colección de Tiempo Real y como un subatributo clave dentro de la colección de históricos. Cada vez que a un documento de la colección se le realiza un cambio, el sistema automáticamente almacena la versión anterior en el histórico, de tal manera que todos los elementos están accesibles.

System (Obligatorio). Valor fijo “LAYERS”.

Subsystem (Obligatorio). Valor fijo PUTDATA.

Function (Obligatorio). Puede contener los siguientes tipos de valor.

  • INSERT: Construye la colección de datos en caso de no existir y a continuación inserta el documento en la colección con la clave (_id). Si el documento definido con ese _id ya existiera, ignorará la inserción. Si consigue insertar, construye un Item paralelo con clave ObjectId en la colección de Histórico, el valor de _id lo almacenará en el elemento “keyid”.
  • REPLACE: Construye la colección de datos en caso de no existir. Si el documento definido con ese _id no existiera lo creará, en el caso de que exista reemplazará su valor por el nuevo Item definido con ese _id. Construye un Item paralelo con clave ObjectId en la colección de Histórico, el valor de _id lo almacenará en el elemento “keyid”.
  • DELETE: Elimina el valor actual de la colección definido con ese _id en caso de existir. Si la operación finaliza con éxito, almacenará el ítem con la operación de borrado en la colección de Histórico.
  • DROP: Elimina el valor definido con ese _id en caso de existir de la colección, además, elimina todos los ítems con keyid igual a _id de la colección de histórico. El valor del _id específico puede sustituirse por un asterisco (*), si lo que se desea es eliminar el contenido de una colección completa. También es posible incluir un criterio de filtro de eliminación con el argumento “criteria” en el objeto “layer”.

Layer (Obligatorio): Estructura que define la colección con la que se desea trabajar. El usuario que accede deberá tener permisos para realizar las acciones descritas anteriormente sobre la colección. Contiene los siguientes ítems.

Owner: Define el usuario que realiza la operación y, como tal, se registra como constructor del documento.

Type: Define el modo de compartir una colección, puede contener los siguientes tipos:

Public: Define que el ítem de esta colección es abierto y compartido para cualquier usuario que tenga acceso a la colección. El resto de los usuarios pueden leer el ítem pero no pueden modificarlo.

Shared: Define que el ítem de esta colección es abierto y compartido para cualquier usuario que tenga acceso a la colección y que otros usuarios con privilegios de escritura sobre la colección pueden tomar propiedad del ítem, esto es, actualizar o eliminar el ítem.

Private: Define que el ítem de esta colección está restringido al uso exclusivo del usuario que ha construido el dato.

Name: Nombre de la colección sobre la que se desea actuar. El usuario debe tener privilegios sobre esta colección. Las colecciones se componen de dos partes diferenciadas. La primera se representa en mayúsculas y hace referencia al grupo o familia de la colección. Se recomienda no utilizar nombres de más de 12 caracteres. La segunda parte se representa en minúsculas y contiene de una o dos palabras que referencian el tipo de dato de la colección, para cada palabra se recomienda un máximo de ocho caracteres, en el caso de que haya dos palabras éstas deben estar separadas por un punto.

Geometry (Opcional): La estructura geometry es opcional y sirve para definir el dato en un emplazamiento geográfico. La propiedad Geometry permite al sistema de representación proyectar el dato automáticamente sobre un mapa utilizando el sitio web http://rbmobility.emtmadrid.es:3333 . Todos los formatos utilizados en esta estructura deben estar en formato GEOJSON (http://geojson.org/)

Shape (Obligatorio si se incluye un objeto Geometry). Contiene la definición del aspecto con el que aparecerá en el mapa el ítem. Se pueden definir atributos de tipo marker (ver http://fontawesome.io/ ).

State (Obligatorio si se incluye un objeto Geometry). Contiene la información que aparecerá en la viñeta al pulsar o pasar el ratón encima del elemento del mapa. Puede utilizarse código HTML.

Instant (Obligatorio): Valor del instante del dato. String representando una hora en formato YYYY-MM-DD HH:mm:ss:nnnnnn.

 

Además de estos datos, pueden enviarse cuantos elementos o atributos se deseen en el documento hasta completar la información que el usuario desee introducir en la colección.

 

Ejemplo de Datagrama.