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.
Tareas
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
- 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
minItemsouniqueItems, 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 deelementSchema.
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
{
"@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
{
"@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
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
}