Cenário: Adicionar Validação de Esquema JSON a um Modelo Digital Twin
Use uma extensão de validação personalizada do Oracle DTDL para aplicar regras de validação de dados do esquema JSON aos payloads do dispositivo em seu modelo de gêmeo digital.
Se você fizer referência à extensão de validação em seu modelo de gêmeo digital usando anexando o Digital Twin Model Identifier (DTMI): dtmi:com:oracle:dtdl:extension:validation;1 e adicionando metadados de validação @type às propriedades, à telemetria ou aos elementos de comando em seu modelo de gêmeo digital, poderá aplicar regras de validação e restrições a intervalos de valores, padrões regex, enumerações, campos obrigatórios ou lógica condicional. Essas regras de validação são aplicadas no runtime, para dados válidos que são ingeridos e transmitidos aos aplicativos são normalizados.
Para obter uma lista completa das regras de propriedades de validação suportadas, consulte Referência de Extensão de Validação DTMI.
Antes de começar
Verifique se você tem as permissões necessárias e se a CLI do OCI está configurada. Para obter mais informações, consulte Pré-requisitos, Detalhes da Política da Plataforma Internet of Things (IoT) e Usando um Arquivo JSON para Entrada Complexa.
Tarefas
Entender os trechos de código neste cenário
Os trechos de código abaixo são exemplos de um modelo gêmeo digital baseado em DTDL v3 e demonstra como usar a extensão de validação personalizada da Oracle.
Etapa 1: Definir a Extensão de Validação no @context do Modelo Digital Twin
O contexto do modelo de gêmeo digital obrigatório que indica o modelo de gêmeo digital usa especificações DTDL v3: dtmi:dtdl:context;3
Para definir a extensão de validação, ao criar um modelo de gêmeo digital ou atualizar um modelo de gêmeo digital, anexe a extensão de validação ao valor do URI DTMI no @context. O modelo de gêmeo digital lê esses blocos de validação para impor regras de validação aos dados do dispositivo de entrada. Todos os dados que falharem em uma regra de validação serão rejeitados. Os dados normalizados e rejeitados estão no esquema de banco de dadosIoT.
{
"@context": [
"dtmi:dtdl:context;3",
"dtmi:com:oracle:dtdl:extension:validation;1"
],
...
}
Etapa 2: Adicionar uma Propriedade validation aos Elementos em um Modelo Digital Twin
- Para propriedades primitivas, como strings ou inteiros, as restrições de validação são adicionadas como propriedades irmãs ao lado do campo de esquema dentro da definição de propriedade ou telemetria.
- Para matrizes, as validações se aplicam ao próprio array, como
minItemsouuniqueItems, e são definidas como irmãos do esquema de array, enquanto as restrições que se aplicam a cada elemento, como intervalos de valores ou padrões de string, são colocadas dentro do esquema de array, como propriedades irmãs paraelementSchema.
Use os trechos de código a seguir como exemplos para seus modelos de gêmeos digitais. Para obter uma lista completa de propriedades e regras de validação suportadas, consulte Referência de Extensão de Validação DTMI.
Snippet de Modelo Digital Twin: Telemetria com Validação de Número
Este trecho de código de um modelo de gêmeo digital mostra como validar as pressões de um sensor entre 950.0 e 1050.0, inclusive, e deve ser um 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
]
}Snippet de Modelo Digital Twin: Validação de Padrão de String
Este exemplo valida o número de série que segue um padrão de string específico. Neste exemplo, o padrão de string é uma expressão regular que os valores de número de série de entrada devem corresponder. O valor do número de série deve começar com "SN-", seguido por 4 a 8 letras maiúsculas (A-Z) ou dígitos (0-9) e nada mais é permitido antes ou depois:
"pattern": "^SN-[A-Z0-9]{4,8}$"{
"@type": ["Property", "Validated"]
"name": "serialNumber",
"schema": "string",
"pattern": "^SN-[A-Z0-9]{4,8}$"
}Snippet de Modelo Digital Twin: Validação de Array com Restrições de Elemento
{
"@type": ["Property", "Validated"]
"name": "alarmCodes",
"schema": {
"@type": "Array",
"elementSchema": "integer",
"minimum": 100,
"maximum": 900
},
"minItems": 1,
"maxItems": 5,
"uniqueItems": true
}Digital Twin Model Snippet: Telemetria de Dupla Precisão com Validação Explícita
{
"@type": ["Telemetry", "Validated"]
"name": "temperature_double",
"schema": "double",
"minimum": -50.0,
"maximum": 150.0
}Digital Twin Model Snippet: Telemetria de Precisão Única com Validação Explícita
float e o valor deve estar no intervalo especificado entre -50.0 e 150.0.{
"@type": ["Telemetry", "Validated"]
"name": "temperature_float",
"schema": "float",
"minimum": -50.0,
"maximum": 150.0
}Snippet de Modelo Digital Twin: Telemetria com Validação de Tipo, Faixa e Etapa
Este exemplo valida o valor é um double, um número inteiro e entre 0 e 360 graus e em incrementos de 0.1.
{
"@type": ["Telemetry", "Validated"]
"name": "angle",
"schema": "double",
"minimum": 0.0,
"maximum": 360.0,
"multipleOf": 0.1
}