Scenario: aggiunta della convalida dello schema JSON a un modello gemello digitale

Utilizza un'estensione di convalida Oracle DTDL personalizzata per applicare le regole di convalida dei dati dello schema JSON ai payload dei dispositivi nel modello digital twin.

Se si fa riferimento all'estensione di convalida nel modello gemello digitale mediante l'aggiunta dell'identificativo modello gemello digitale (DTMI): dtmi:com:oracle:dtdl:extension:validation;1 e l'aggiunta dei metadati di convalida @type alle proprietà, alla telemetria o agli elementi di comando nel modello gemello digitale, è possibile applicare regole e vincoli di convalida a intervalli di valori, pattern regex, enumerazioni, campi obbligatori o logica condizionale. Queste regole di convalida vengono applicate in fase di esecuzione, in modo che i dati validi inclusi e passati alle applicazioni vengano normalizzati.

Per un elenco completo delle regole delle proprietà di convalida supportate, vedere Riferimento estensione convalida DTMI.

Prima di iniziare

Assicurarsi di disporre delle autorizzazioni necessarie e che l'interfaccia CLI OCI sia configurata. Per ulteriori informazioni, vedere Prerequisiti, Dettagli dei criteri per la piattaforma Internet of Things (IoT) e Uso di un file JSON per input complessi.

Comprendere gli snippet di codice in questo scenario

Gli snippet di codice riportati di seguito sono esempi di un modello gemello digitale basato su DTDL v3 e mostrano come utilizzare l'estensione di convalida Oracle personalizzata.

Passo 1: Definire l'estensione di convalida nel @context del modello Digital Twin

Il contesto del modello digital twin richiesto che indica il modello digital twin utilizza le specifiche DTDL v3: dtmi:dtdl:context;3

Per definire l'estensione di convalida, quando si crea un modello digital twin o si aggiorna un modello digital twin, l'estensione di convalida viene aggiunta al valore URI DTMI in @context. Il modello digital twin legge questi blocchi di convalida per applicare le regole di convalida ai dati dei dispositivi in entrata. I dati che non superano una regola di convalida vengono rifiutati. I dati normalizzati e rifiutati si trovano nello schema di database IoT.

{
  "@context": [
    "dtmi:dtdl:context;3",
    "dtmi:com:oracle:dtdl:extension:validation;1"
  ],
  ...
  }

Passo 2: Aggiungere una proprietà validation agli elementi in un modello gemello digitale

Nei modelli digital twin, utilizzare JSON Schema Validation Specifications per aggiungere proprietà di convalida ai dati inclusi di convalida.
  • Per le proprietà primitive, ad esempio stringhe o numeri interi, i vincoli di convalida vengono aggiunti come proprietà di pari livello accanto al campo dello schema all'interno della proprietà o della definizione di telemetria.
  • Per gli array, le convalide si applicano all'array stesso, ad esempio minItems o uniqueItems, definito come pari livello dello schema di array, mentre i vincoli che si applicano a ciascun elemento, ad esempio gli intervalli di valori o i pattern di stringa, vengono posizionati all'interno dello schema di array, come proprietà di pari livello a elementSchema.

Utilizzare i seguenti frammenti di codice come esempi per i modelli gemelli digitali. Per un elenco completo delle proprietà e delle regole di convalida supportate, vedere Riferimento estensione convalida DTM.

Digital Twin Model Snippet: Telemetria con convalida numerica

Questo frammenti di codice da un modello digital twin mostra come applicare pressioni valide da un sensore compreso tra 950.0 e 1050.0 e deve essere un multiplo di 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 del modello del gemello digitale: convalida del modello della stringa

In questo esempio viene convalidato che il numero di serie segue un pattern di stringa specifico. In questo esempio, il pattern stringa è un'espressione regolare che i valori dei numeri di serie in entrata devono corrispondere. Il valore del numero di serie deve iniziare con "SN-", seguito da 4 a 8 lettere maiuscole (A-Z) o cifre (0-9) e nient'altro è consentito prima o dopo:

"pattern": "^SN-[A-Z0-9]{4,8}$"
{
  "@type": ["Property", "Validated"]
  "name": "serialNumber",
  "schema": "string",
  "pattern": "^SN-[A-Z0-9]{4,8}$"
  }

Snippet modello gemello digitale: convalida array con vincoli elemento

Convalida che i codici di allarme siano un array di numeri interi compreso tra 100 e 900. L'array deve avere almeno 1, non più di 5 elementi e tutti gli elementi devono essere univoci.
{
  "@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 a doppia precisione con convalida esplicita

In questo esempio il valore deve essere un numero intero doppio e deve essere compreso tra -50,0 e 150,0.
{
  "@type": ["Telemetry", "Validated"]
  "name": "temperature_double",
  "schema": "double",
  "minimum": -50.0,
  "maximum": 150.0
}

Snippet modello gemello digitale: telemetria a singola precisione con convalida esplicita

In questo esempio viene convalidato che il valore deve essere float e che il valore deve essere compreso nell'intervallo specificato tra -50.0 e 150.0.
{
  "@type": ["Telemetry", "Validated"]
  "name": "temperature_float",
  "schema": "float",
  "minimum": -50.0,
  "maximum": 150.0
}

Snippet modello Digital Twin: telemetria con convalida di tipo, intervallo e passo

Questo esempio convalida il valore double, un numero intero compreso tra 0 e 360 gradi e con incrementi di 0.1.

{
  "@type": ["Telemetry", "Validated"]
  "name": "angle",
  "schema": "double",
  "minimum": 0.0,
  "maximum": 360.0,
  "multipleOf": 0.1
}