Escenario: Agregar validación de esquema JSON a un modelo gemelo digital

Utilice una extensión de validación de DTDL de Oracle personalizada para aplicar reglas de validación de datos de esquema JSON a las cargas útiles del dispositivo en su modelo de gemelo digital.

Si hace referencia a la extensión de validación en el modelo gemelo digital mediante la adición del identificador de modelo gemelo digital (DTMI): dtmi:com:oracle:dtdl:extension:validation;1 y la adición de metadatos de validación @type a las propiedades, la telemetría o los elementos de comando en el modelo gemelo digital, puede aplicar reglas y restricciones de validación a rangos de valores, patrones de expresión regular, enumeraciones, campos necesarios o lógica condicional. Estas reglas de validación se aplican en tiempo de ejecución, a los datos válidos que se ingieren y transfieren a las aplicaciones se normaliza.

Para obtener una lista completa de las reglas de propiedades de validación admitidas, consulte DTMI Validation Extension Reference.

Antes de empezar

Asegúrese de que tiene los permisos necesarios y de que la CLI de OCI está configurada. Para obtener más información, consulte Requisitos, Detalles de política para la plataforma Internet of Things (IoT) y Uso de un archivo JSON para una entrada compleja.

Describir los fragmentos de código en este escenario

Los siguientes fragmentos de código son ejemplos de un modelo gemelo digital basado en DTDL v3 y muestran cómo utilizar la extensión de validación personalizada de Oracle.

Paso 1: Definir la extensión de validación en el @context del modelo gemelo digital

El contexto de modelo gemelo digital necesario que indica que el modelo gemelo digital utiliza las especificaciones de DTDL v3: dtmi:dtdl:context;3

Para definir la extensión de validación, al crear un modelo gemelo digital o al actualizar un modelo gemelo digital, agregue la extensión de validación al valor de URI de DTMI en @context. El modelo gemelo digital lee estos bloques de validación para aplicar reglas de validación a los datos de dispositivos entrantes. Los datos que no superen una regla de validación se rechazan. Los datos normalizados y rechazados están en el esquema de base de datos IoT.

{
  "@context": [
    "dtmi:dtdl:context;3",
    "dtmi:com:oracle:dtdl:extension:validation;1"
  ],
  ...
  }

Paso 2: Agregar una propiedad validation a los elementos de un modelo gemelo digital

En los modelos gemelos digitales, utilice Especificaciones de validación de esquema JSON para agregar propiedades de validación a los datos de validación ingeridos.
  • Para las propiedades primitivas, como cadenas o enteros, las restricciones de validación se agregan como propiedades hermanas junto al campo de esquema dentro de la propiedad o la definición de telemetría.
  • Para las matrices, las validaciones se aplican a la matriz en sí, como minItems o uniqueItems, y se definen como hermanos del esquema de matriz, mientras que las restricciones que se aplican a cada elemento, como rangos de valores o patrones de cadena, se colocan dentro del esquema de matriz, como propiedades hermanas de elementSchema.

Utilice los siguientes fragmentos de código como ejemplos para sus modelos gemelos digitales. Para obtener una lista completa de las reglas y propiedades de validación admitidas, consulte DTMI Validation Extension Reference.

Fragmento de modelo gemelo digital: telemetría con validación de número

Este fragmento de código de un modelo gemelo digital muestra cómo realizar presiones válidas desde un sensor entre 950.0 y 1050.0 inclusive, y debe ser un múltiplo de 0.1.

{
  "@context": [
    "dtmi:dtdl:context;3",
    "dtmi:com:oracle:dtdl:extension:validation;1"
  ],
  "@id": "dtmi:com:example:Sensor;1",
  "@type": "Interface",
  "displayName": "Example Sensor",
  "contents": [
    {
      "@type": ["Telemetry", "Validated"],
      "name": "pressure",
      "schema": "double",
      "displayName": "Pressure",
      "minimum": 950.0,
      "maximum": 1050.0,
      "multipleOf": 0.1
  ]
  }

Fragmento de modelo gemelo digital: validación de patrón de cadena

En este ejemplo, se valida que el número de serie sigue un patrón de cadena específico. En este ejemplo, el patrón de cadena es una expresión regular que los valores de número de serie entrantes deben coincidir. El valor del número de serie debe empezar por "SN-", seguido de 4 a 8 letras mayúsculas (A-Z) o dígitos (0-9) y no se permite nada más antes o después de:

"pattern": "^SN-[A-Z0-9]{4,8}$"
{
  "@type": ["Property", "Validated"]
  "name": "serialNumber",
  "schema": "string",
  "pattern": "^SN-[A-Z0-9]{4,8}$"
  }

Fragmento de modelo gemelo digital: validación de matriz con restricciones de elementos

Valida que los códigos de alarma deben ser una matriz de enteros que esté entre 100 y 900. La matriz debe tener al menos 1, no más de 5 elementos y todos los elementos deben ser únicos.
{
  "@type": ["Property", "Validated"]
  "name": "alarmCodes",
  "schema": {
    "@type": "Array",
    "elementSchema": "integer",
      "minimum": 100,
      "maximum": 900
  },
  "minItems": 1,
  "maxItems": 5,
  "uniqueItems": true
}

Fragmento de modelo gemelo digital: telemetría de doble precisión con validación explícita

En este ejemplo, se valida que el valor debe ser un número entero doble y debe estar incluido entre -50,0 y 150,0.
{
  "@type": ["Telemetry", "Validated"]
  "name": "temperature_double",
  "schema": "double",
  "minimum": -50.0,
  "maximum": 150.0
}

Fragmento de modelo gemelo digital: telemetría de una sola precisión con validación explícita

Este ejemplo valida que el valor debe ser float y que el valor debe estar en el rango especificado entre -50.0 y 150.0.
{
  "@type": ["Telemetry", "Validated"]
  "name": "temperature_float",
  "schema": "float",
  "minimum": -50.0,
  "maximum": 150.0
}

Fragmento de modelo gemelo digital: telemetría con validación de tipo, rango y paso

En este ejemplo, se valida que el valor es un double, un número entero y está entre 0 y 360 grados y en incrementos de 0.1.

{
  "@type": ["Telemetry", "Validated"]
  "name": "angle",
  "schema": "double",
  "minimum": 0.0,
  "maximum": 360.0,
  "multipleOf": 0.1
}