Scénario : Ajouter une validation de schéma JSON à un modèle de jumeau numérique

Utilisez une extension personnalisée de validation Oracle DTDL pour appliquer des règles de validation des données de schéma JSON aux données utiles de l'appareil dans votre modèle de jumeau numérique.

Si vous référencez l'extension de validation dans votre modèle jumeau numérique à l'aide de l'ajout de l'identificateur de modèle jumeau numérique (DTMI) : dtmi:com:oracle:dtdl:extension:validation;1 et de l'ajout des 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 jumeau numérique, vous pouvez appliquer des règles et des contraintes de validation aux intervalles de valeurs, aux modèles d'expression rationnelle, 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 ingéré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, voir Informations de référence sur l'extension de validationDTMI.

Avant de commencer

Assurez-vous que vous disposez des autorisations requises et que votre interface de ligne de commande OCI est configurée. Pour plus d'informations, voir Préalables, Informations détaillées sur les politiques pour la plate-forme Internet of Things (IoT) et Utilisation d'un fichier JSON pour une entrée complexe.

Comprendre les extraits de code dans ce scénario

Les extraits de code ci-dessous sont des exemples tirés d'un modèle jumeau numérique basé sur DTDL v3 et montrant comment utiliser l'extension de validation Oracle personnalisée.

Étape 1 : Définir l'extension de validation dans @context du modèle de jumeau numérique

Le contexte de modèle de jumeau numérique requis indiquant que 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 jumeau numérique ou mettez à jour un modèle 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"
  ],
  ...
  }

Étape 2 : Ajouter une propriété validation aux éléments d'un modèle de jumeau numérique

Dans les modèles jumeaux numériques, utilisez les spécifications de validation de schéma JSON pour ajouter des propriétés de validation aux données ingérées.
  • 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 à côté 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, par exemple minItems ou uniqueItems, et sont définies en tant que membres apparentés du schéma de tableau, tandis que les contraintes qui s'appliquent à chaque élément, telles que les intervalles de valeurs ou les modèles de chaîne, sont placées dans le schéma de tableau, en tant que propriétés apparentées à elementSchema.

Utilisez les extraits de code suivants comme exemples pour vos modèles jumeaux numériques. Pour obtenir la liste complète des propriétés et des règles de validation prises en charge, voir Informations de référence sur l'extension de validationDTMI.

Extrait de modèle de jumeau numérique : Télémétrie avec validation de numéro

Cet extrait de code d'un modèle à jumeau numérique montre comment valider les pressions d'un capteur comprises 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
  ]
  }

Extrait de code de modèle jumeau numérique : Validation de modèle de chaîne

Cet exemple valide le numéro de série suivant un modèle de chaîne spécifique. Dans cet exemple, le modèle de chaîne est une expression rationnelle 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 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}$"
  }

Extrait de code de modèle jumeau numérique : Validation de tableau avec contraintes d'élément

Valide que les codes d'alarme doivent être un tableau d'entiers compris entre 100 et 900. Le tableau doit comporter au moins 1, pas plus de 5 éléments et tous les éléments doivent être uniques.
{
  "@type": ["Property", "Validated"]
  "name": "alarmCodes",
  "schema": {
    "@type": "Array",
    "elementSchema": "integer",
      "minimum": 100,
      "maximum": 900
  },
  "minItems": 1,
  "maxItems": 5,
  "uniqueItems": true
}

Extrait de modèle jumeau numérique : Télémétrie à double précision avec validation explicite

Cet exemple valide la valeur doit être un nombre entier double et doit être compris entre -50,0 et 150,0.
{
  "@type": ["Telemetry", "Validated"]
  "name": "temperature_double",
  "schema": "double",
  "minimum": -50.0,
  "maximum": 150.0
}

Extrait de modèle jumeau numérique : Télémétrie à une seule précision avec validation explicite

Cet exemple valide la valeur doit être float et la valeur doit se trouver dans l'intervalle spécifié entre -50.0 et 150.0.
{
  "@type": ["Telemetry", "Validated"]
  "name": "temperature_float",
  "schema": "float",
  "minimum": -50.0,
  "maximum": 150.0
}

Extrait de modèle jumeau numérique : Télémétrie avec validation de type, de plage et d'étape

Cet exemple valide la valeur est un double, un nombre entier et 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
}