Scénario : ajout d'une validation de schéma JSON à un modèle de jumeau numérique
Utilisez une extension de validation DTDL Oracle personnalisée pour appliquer des règles de validation de données de schéma JSON aux charges utiles d'appareil dans votre modèle de jumeau numérique.
Si vous référencez l'extension de validation dans votre modèle de jumeau numérique en ajoutant l'identificateur de modèle de jumeau numérique (DTMI) : dtmi:com:oracle:dtdl:extension:validation;1 et en ajoutant les métadonnées de validation @type aux propriétés, à la télémétrie ou aux éléments de commande de votre modèle de jumeau numérique, vous pouvez appliquer des règles et des contraintes de validation aux plages de valeurs, aux modèles d'expression régulière, aux énumérations, aux champs requis ou à la logique conditionnelle. Ces règles de validation sont appliquées lors de l'exécution. Les données valides assimilées et transmises aux applications sont normalisées.
Pour obtenir la liste complète des règles de propriétés de validation prises en charge, reportez-vous à Référence d'extension de validation DTMI.
Avant de débuter
Assurez-vous que vous disposez des droits d'accès requis et que l'interface de ligne de commande OCI est configurée. Pour plus d'informations, reportez-vous à Prérequis, à Détails de stratégie pour la plate-forme Internet of Things (IoT) et à Utilisation d'un fichier JSON pour les entrées complexes.
Tâches
Comprendre les fragments de code dans ce scénario
Les fragments de code ci-dessous sont des exemples d'un modèle jumeau numérique basé sur DTDL v3 et montre comment utiliser l'extension de validation Oracle personnalisée.
Etape 1 : définition de l'extension de validation dans le fichier @context du modèle de jumeau numérique
Le contexte de modèle de jumeau numérique requis indiquant le modèle de jumeau numérique utilise les spécifications DTDL v3 : dtmi:dtdl:context;3
Pour définir l'extension de validation, lorsque vous créez un modèle de jumeau numérique ou mettez à jour un modèle de jumeau numérique, ajoutez l'extension de validation à la valeur d'URI DTMI dans @context. Le modèle de jumeau numérique lit ces blocs de validation pour appliquer des règles de validation aux données d'appareil entrantes. Toute donnée qui échoue à une règle de validation est rejetée. Les données normalisées et rejetées se trouvent dans le schéma de base de données IoT.
{
"@context": [
"dtmi:dtdl:context;3",
"dtmi:com:oracle:dtdl:extension:validation;1"
],
...
}
Etape 2 : ajout d'une propriété validation aux éléments d'un modèle de jumeau numérique
- Pour les propriétés primitives telles que les chaînes ou les entiers, les contraintes de validation sont ajoutées en tant que propriétés apparentées en regard du champ de schéma dans la définition de propriété ou de télémétrie.
- Pour les tableaux, les validations s'appliquent au tableau lui-même, tel que
minItemsouuniqueItems, et sont définies en tant que semblables du schéma de tableau, tandis que les contraintes qui s'appliquent à chaque élément, telles que les plages de valeurs ou les modèles de chaîne, sont placées dans le schéma de tableau, en tant que propriétés semblables àelementSchema.
Utilisez les fragments de code suivants comme exemples pour vos modèles jumeaux numériques. Pour obtenir la liste complète des règles et propriétés de validation prises en charge, reportez-vous à Référence DTMI Validation Extension.
Snippet du modèle de jumeau numérique : télémétrie avec validation de numéro
Ce fragment de code d'un modèle de jumeau numérique montre comment valider les pressions d'un capteur compris entre 950,0 et 1050,0 inclus, et doit être un multiple 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 du modèle de jumeau numérique : Validation du modèle de chaîne
Cet exemple vérifie que le numéro de série suit un modèle de chaîne spécifique. Dans cet exemple, le modèle de chaîne est une expression régulière que les valeurs de numéro de série entrantes doivent correspondre. La valeur du numéro de série doit commencer par "SN-", suivie de 4 à 8 lettres majuscules (A-Z) ou de chiffres (0-9) et rien d'autre n'est autorisé avant ou après :
"pattern": "^SN-[A-Z0-9]{4,8}$"{
"@type": ["Property", "Validated"]
"name": "serialNumber",
"schema": "string",
"pattern": "^SN-[A-Z0-9]{4,8}$"
}Snippet du modèle de jumeau numérique : validation de tableau avec contraintes d'élément
{
"@type": ["Property", "Validated"]
"name": "alarmCodes",
"schema": {
"@type": "Array",
"elementSchema": "integer",
"minimum": 100,
"maximum": 900
},
"minItems": 1,
"maxItems": 5,
"uniqueItems": true
}Extrait de modèle de jumeau numérique : télémétrie à double précision avec validation explicite
{
"@type": ["Telemetry", "Validated"]
"name": "temperature_double",
"schema": "double",
"minimum": -50.0,
"maximum": 150.0
}Extrait de modèle de jumeau numérique : télémétrie à précision unique avec validation explicite
float et la valeur doit se trouver dans la plage indiquée entre -50.0 et 150.0.{
"@type": ["Telemetry", "Validated"]
"name": "temperature_float",
"schema": "float",
"minimum": -50.0,
"maximum": 150.0
}Snippet du modèle de jumeau numérique : télémétrie avec validation de type, de plage et d'étape
Cet exemple valide que la valeur est double, un nombre entier compris entre 0 et 360 degrés et par incréments de 0.1.
{
"@type": ["Telemetry", "Validated"]
"name": "angle",
"schema": "double",
"minimum": 0.0,
"maximum": 360.0,
"multipleOf": 0.1
}