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.

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

Dans les modèles de jumeaux numériques, utilisez les spécifications de validation de schéma JSON pour ajouter des propriétés de validation aux données incluses de validation.
  • 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 minItems ou uniqueItems, 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

Valide que les codes d'alarme doivent être un tableau d'entiers compris entre 100 et 900. Le tableau doit contenir au moins 1 élément, 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 de jumeau numérique : télémétrie à double précision avec validation explicite

Cet exemple valide que la valeur doit être un nombre entier double et doit être comprise entre -50,0 et 150,0.
{
  "@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

Cet exemple valide la valeur doit être 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
}