Membangun dan menggunakan definisi tipe dalam dokumen skema kemampuan - Integrasi terkelola untuk AWS IoT Device Management

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membangun dan menggunakan definisi tipe dalam dokumen skema kemampuan

Semua elemen dalam skema memutuskan untuk mengetik definisi. Definisi tipe ini adalah definisi tipe primitif (seperti boolean, string, angka) atau definisi tipe namespaced (definisi tipe yang dibangun dari definisi tipe primitif untuk kenyamanan).

Saat Anda mendefinisikan skema khusus, Anda dapat menggunakan definisi primitif dan definisi tipe namespace.

Definisi tipe primitif

Definisi tipe primitif adalah blok bangunan untuk semua definisi tipe yang didefinisikan dalam integrasi terkelola. Semua definisi namespace, termasuk definisi tipe kustom, diselesaikan ke definisi tipe primitif baik melalui $ref kata kunci atau kata kunci. type

Semua tipe primitif dapat dibatalkan dengan menggunakan nullable kata kunci, dan Anda dapat mengidentifikasi semua tipe primitif dengan menggunakan kata kunci. type

Boolean

Jenis Boolean mendukung nilai default.

Definisi sampel:

{ "type" : "boolean", "default" : "false", "nullable" : true }

Dukungan tipe integer

Jenis integer mendukung hal berikut:

  • Nilai default

  • Nilai maximum

  • Nilai minimum

  • Nilai exclusiveMaximum

  • Nilai exclusiveMinimum

  • Nilai multipleOf

Jika nilai yang x divalidasi, berikut ini harus benar:

  • xminimum

  • x > exclusiveMinimum

  • x < exclusiveMaximum

catatan

Angka dengan bagian pecahan nol dianggap bilangan bulat, tetapi angka floating point ditolak.

1.0 // Schema-Compliant 3.1415926 // NOT Schema-Compliant

Meskipun Anda dapat menentukan keduanya minimum dan exclusiveMinimum atau keduanya maximum danexclusiveMaximum, kami tidak menyarankan untuk menggunakan keduanya secara bersamaan.

Contoh definisi:

{ "type" : "integer", "default" : 2, "nullable" : true, "maximum" : 10, "minimum" : 0, "multipleOf": 2 }

Definisi alternatif:

{ "type" : "integer", "default" : 2, "nullable" : true, "exclusiveMaximum" : 11, "exclusiveMinimum" : -1, "multipleOf": 2 }

Nomor

Gunakan jenis angka untuk jenis numerik apa pun, termasuk bilangan bulat dan angka floating point.

Jenis nomor mendukung hal berikut:

  • Nilai default

  • Nilai maximum

  • Nilai minimum

  • Nilai exclusiveMaximum

  • Nilai exclusiveMinimum

  • multipleOfnilai. Kelipatannya bisa menjadi nomor floating point.

Jika nilai yang x divalidasi, berikut ini harus benar:

  • xminimum

  • x > exclusiveMinimum

  • x < exclusiveMaximum

Meskipun Anda dapat menentukan keduanya minimum dan exclusiveMinimum atau keduanya maximum danexclusiveMaximum, kami tidak menyarankan untuk menggunakan keduanya secara bersamaan.

Contoh definisi:

{ "type" : "number", "default" : 0.4, "nullable" : true, "maximum" : 10.2, "minimum" : 0.2, "multipleOf": 0.2 }

Definisi alternatif:

{ "type" : "number", "default" : 0.4, "nullable" : true, "exclusiveMaximum" : 10.2, "exclusiveMinimum" : 0.2, "multipleOf": 0.2 }

String

Jenis string mendukung hal berikut:

  • Nilai default

  • kendala panjang (harus angka non-negatif) termasuk dan nilai maxLength minLength

  • patternnilai untuk ekspresi reguler

Saat Anda mendefinisikan ekspresi reguler, string valid jika ekspresi cocok di mana saja di dalam string. Misalnya, ekspresi reguler p cocok dengan string apa pun yang mengandung p, seperti “apple”, bukan hanya string “p”. Untuk kejelasan, kami sarankan mengelilingi ekspresi reguler dengan ^...$ (misalnya,^p$), kecuali Anda memiliki alasan khusus untuk tidak melakukannya.

Definisi sampel:

{ "type" : "string", "default" : "defaultString", "nullable" : true, "maxLength": 10, "minLength": 1, "pattern" : "^([0-9a-fA-F]{2})+$" }

Nulls

Tipe nol hanya menerima satu nilai:null.

Definisi sampel:

{ "type": "null" }

Array

Jenis array mendukung hal berikut:

  • default— daftar yang akan digunakan sebagai nilai default.

  • items— Definisi tipe JSON dikenakan pada semua elemen array.

  • Kendala panjang (harus berupa angka non-negatif)

    • minItems

    • maxItems

  • patternnilai untuk Regex

  • uniqueItems— boolean yang menunjukkan jika elemen dalam array harus unik

  • prefixItems— sebuah array di mana setiap item adalah skema yang sesuai dengan setiap indeks dari array dokumen. Artinya, array di mana elemen pertama memvalidasi elemen pertama dari array input, elemen kedua memvalidasi elemen kedua dari array input, dan seterusnya.

Definisi sampel:

{ "type": "array", "default": ["1", "2"], "items" : { "type": "string", "pattern": "^([a-zA-Z0-9_ -/]+)$" }, "minItems" : 1, "maxItems": 4, "uniqueItems" : true, }

Contoh validasi array:

//Examples: ["1", "2", "3", "4"] // Schema-Compliant [] // NOT Schema-Compliant: minItems=1 ["1", "1"] // NOT Schema-Compliant: uniqueItems=true ["{"] // NOT Schema-Compliant: Does not match the RegEx pattern.

Definisi alternatif menggunakan validasi Tuple:

{ "type": "array", "prefixItems": [ { "type": "number" }, { "type": "string" }, { "enum": ["Street", "Avenue", "Boulevard"] }, { "enum": ["NW", "NE", "SW", "SE"] } ] } //Examples: [1600, "Pennsylvania", "Avenue", "NW"] // Schema-Compliant // And, by default, it's also okay to add additional items to end: [1600, "Pennsylvania", "Avenue", "NW", "Washington"] // Schema-Compliant

Objek

Jenis objek mendukung hal berikut:

  • Kendala properti

    • properties— Tentukan properti (pasangan kunci-nilai) dari suatu objek dengan menggunakan kata kunci. properties Nilai properties adalah objek, di mana setiap kunci adalah nama properti dan setiap nilai adalah skema yang digunakan untuk memvalidasi properti itu. Properti apa pun yang tidak cocok dengan nama properti dalam properties kata kunci diabaikan oleh kata kunci ini.

    • required— Secara default, properti yang ditentukan oleh properties kata kunci tidak diperlukan. Namun, Anda dapat memberikan daftar properti yang diperlukan menggunakan required kata kunci. requiredKata kunci mengambil array nol atau lebih string. Masing-masing string ini harus unik.

    • propertyNames— Kata kunci ini memungkinkan kontrol atas RegEx pola untuk nama properti. Misalnya, Anda mungkin ingin menegakkan bahwa semua properti objek memiliki nama mengikuti konvensi tertentu.

    • patternProperties— Ini memetakan ekspresi reguler ke skema. Jika nama properti cocok dengan ekspresi reguler yang diberikan, nilai properti harus memvalidasi terhadap skema yang sesuai. Misalnya, gunakan patternProperties untuk menentukan bahwa nilai harus cocok dengan skema tertentu, mengingat jenis nama properti tertentu.

    • additionalPropertiesKata kunci ini mengontrol bagaimana properti tambahan ditangani. Properti tambahan adalah properti yang namanya tidak tercantum dalam kata kunci properti atau yang cocok dengan ekspresi reguler mana punpatternProperties. Secara default, properti tambahan diperbolehkan. Menyetel bidang ini false berarti tidak ada properti tambahan yang diizinkan.

    • unevaluatedProperties— Kata kunci ini mirip dengan additionalProperties kecuali bahwa ia dapat mengenali properti yang dideklarasikan dalam subskema. unevaluatedPropertiesbekerja dengan mengumpulkan properti apa pun yang berhasil divalidasi saat memproses skema dan menggunakannya sebagai daftar properti yang diizinkan. Ini memungkinkan Anda melakukan hal-hal yang lebih kompleks seperti menambahkan properti secara kondisional. Lihat contoh di bawah ini untuk lebih jelasnya.

  • anyOf— Nilai kata kunci ini HARUS berupa array yang tidak kosong. Setiap item dari array HARUS menjadi Skema JSON yang valid. Sebuah instance berhasil memvalidasi terhadap kata kunci ini jika berhasil memvalidasi terhadap setidaknya satu skema yang ditentukan oleh nilai kata kunci ini.

  • oneOf— Nilai kata kunci ini HARUS berupa array yang tidak kosong. Setiap item dari array HARUS menjadi Skema JSON yang valid. Sebuah instance berhasil memvalidasi terhadap kata kunci ini jika berhasil memvalidasi dengan tepat satu skema yang ditentukan oleh nilai kata kunci ini.

Contoh yang diperlukan:

{ "type": "object", "required": ["test"] } // Schema Compliant { "test": 4 } // NOT Schema Compliant {}

PropertyNames contoh:

{ "type": "object", "propertyNames": { "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" } } // Schema Compliant { "_a_valid_property_name_001": "value" } // NOT Schema Compliant { "001 invalid": "value" }

PatternProperties contoh:

{ "type": "object", "patternProperties": { "^S_": { "type": "string" }, "^I_": { "type": "integer" } } } // Schema Compliant { "S_25": "This is a string" } { "I_0": 42 } // NOT Schema Compliant { "S_0": 42 } // Value must be a string { "I_42": "This is a string" } // Value must be an integer

AdditionalProperties contoh:

{ "type": "object", "properties": { "test": { "type": "string" } }, "additionalProperties": false } // Schema Compliant { "test": "value" } OR {} // NOT Schema Compliant { "notAllowed": false }

UnevaluatedProperties contoh:

{ "type": "object", "properties": { "standard_field": { "type": "string" } }, "patternProperties": { "^@": { "type": "integer" } // Allows properties starting with '@' }, "unevaluatedProperties": false // No other properties allowed } // Schema Compliant { "standard_field": "some value", "@id": 123, "@timestamp": 1678886400 } // This passes because "standard_field" is evaluated by properties, // "@id" and "@timestamp" are evaluated by patternProperties, // and no other properties remain unevaluated. // NOT Schema Compliant { "standard_field": "some value", "another_field": "unallowed" } // This fails because "another_field" is unevaluated and doesn't match // the @ pattern, leading to a violation of unevaluatedProperties: false

AnyOf contoh:

{ "anyOf": [ { "type": "string", "maxLength": 5 }, { "type": "number", "minimum": 0 } ] } // Schema Compliant "short" 12 // NOT Schema Compliant "too long" -5

OneOf contoh:

{ "oneOf": [ { "type": "number", "multipleOf": 5 }, { "type": "number", "multipleOf": 3 } ] } // Schema Compliant 10 9 // NOT Schema compliant 2 // Not a multiple of either 5 or 3 15 // Multiple of both 5 and 3 is rejected.

Definisi tipe namespaced

Definisi tipe namespaced adalah tipe yang dibangun dari tipe primitif. Tipe ini harus mengikuti format Integrasi namespace.typename. terkelola menyediakan tipe yang telah ditentukan di bawah aws dan matter ruang nama. Anda dapat menggunakan namespace apa pun untuk jenis kustom kecuali ruang nama yang dicadangkan aws danmatter.

Untuk menemukan definisi tipe namespace yang tersedia, gunakan ListSchemaVersionsAPI dengan Type filter disetel ke. definition

Jenis matter

Temukan tipe data di bawah matter namespace menggunakan ListSchemaVersionsAPI dengan Namespace filter disetel ke matter dan filter disetel keType. definition

Jenis aws

Temukan tipe data di bawah aws namespace menggunakan ListSchemaVersionsAPI dengan Namespace filter disetel ke aws dan filter disetel keType. definition

Definisi jenis bitmap

Bitmap memiliki dua properti yang diperlukan:

  • typeharus menjadi objek

  • propertiesharus berupa objek yang berisi setiap definisi bit. Setiap bit adalah objek dengan properti extrinsicId danvalue. Nilai setiap bit harus berupa bilangan bulat dengan nilai minimum 0 dan nilai maksimum minimal 1.

Contoh definisi bitmap:

{ "title" : "Sample Bitmap Type", "description" : "Type definition for SampleBitmap.", "$ref" : "/schema-versions/definition/aws.bitmap@1.0 ", "type" : "object", "additionalProperties" : false, "properties" : { "Bit1" : { "extrinsicId" : "0x0000", "value" : { "type" : "integer", "maximum" : 1, "minimum" : 0 } }, "Bit2" : { "extrinsicId" : "0x0001", "value" : { "type" : "integer", "maximum" : 1, "minimum" : 0 } } } } // Schema Compliant { "Bit1": 1, "Bit1": 0 } // NOT Schema Compliant { "Bit1": -1, "Bit1": 0 }

Definisi tipe enum

Enum membutuhkan tiga properti:

  • typeharus menjadi objek

  • enumharus berupa array string unik, dengan minimal satu item

  • extrinsicIdMapadalah objek dengan properti yang merupakan nilai enum. Nilai masing-masing properti harus menjadi pengidentifikasi ekstrinsik yang sesuai dengan nilai enum.

Contoh definisi enum:

{ "title" : "SampleEnum Type", "description" : "Type definition for SampleEnum.", "$ref" : "/schema-versions/definition/aws.enum@1.0", "type" : "string", "enum" : [ "EnumValue0", "EnumValue1", "EnumValue2" ], "extrinsicIdMap" : { "EnumValue0" : "0", "EnumValue1" : "1", "EnumValue2" : "2" } } // Schema Compliant "EnumValue0" "EnumValue1" "EnumValue2" // NOT Schema Compliant "NotAnEnumValue"