

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 機能スキーマドキュメントでの型定義の構築と使用
<a name="type-definitions"></a>

スキーマ内のすべての要素は、型定義に解決されます。これらの型定義は*、プリミティブ型定義* (ブール値、文字列、数値など) または*名前空間型定義* (便宜上、プリミティブ型定義から構築された型定義) のいずれかです。

カスタムスキーマを定義する場合、プリミティブ定義と名前空間タイプ定義の両方を使用できます。

**Contents**
+ [プリミティブ型の定義](#primitive-type-definitions)
  + [ブール値](#boolean-types)
  + [整数タイプのサポート](#integers-support)
  + [数字](#numbers)
  + [文字列](#strings)
  + [Null](#nulls)
  + [配列](#arrays)
  + [オブジェクト](#objects)
+ [名前空間型の定義](#namespaced-type-definitions)
  + [`matter` タイプ](#matter-types)
  + [`aws` タイプ](#aws-types)
    + [ビットマップタイプ定義](#bitmap-type-definition)
    + [列挙型の定義](#enum-type-definition)

## プリミティブ型の定義
<a name="primitive-type-definitions"></a>

プリミティブ型定義は、マネージド統合で定義されたすべての型定義の構成要素です。カスタム型定義を含むすべての名前空間定義は、 `$ref`キーワードまたは `type`キーワードを使用してプリミティブ型定義に解決されます。

すべてのプリミティブ型は `nullable`キーワードを使用して null にでき、 `type`キーワードを使用してすべてのプリミティブ型を識別できます。

### ブール値
<a name="boolean-types"></a>

ブール型はデフォルト値をサポートします。

サンプル定義:

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

### 整数タイプのサポート
<a name="integers-support"></a>



整数タイプは以下をサポートします。
+ `default`値
+ `maximum`値
+ `minimum`値
+ `exclusiveMaximum`値
+ `exclusiveMinimum`値
+ `multipleOf`値

`x` が検証対象の値である場合、次の条件が満たされている必要があります。
+ `x` ≥ `minimum`
+ `x` > `exclusiveMinimum`
+ `x` < `exclusiveMaximum`

**注記**  
小数部がゼロの数値は整数と見なされますが、浮動小数点数は拒否されます。  

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

`minimum` と の両方、`exclusiveMinimum`または `maximum`と の両方を指定できますが`exclusiveMaximum`、両方を同時に使用することはお勧めしません。

サンプル定義:

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

代替定義:

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

### 数字
<a name="numbers"></a>

整数や浮動小数点数など、任意の数値型に数値型を使用します。

数値タイプは以下をサポートします。
+ `default`値
+ `maximum`値
+ `minimum`値
+ `exclusiveMaximum`値
+ `exclusiveMinimum`値
+ `multipleOf` 値。複数の は浮動小数点数にすることができます。

`x` が検証対象の値である場合、次の条件が満たされている必要があります。
+ `x` ≥ `minimum`
+ `x` > `exclusiveMinimum`
+ `x` < `exclusiveMaximum`

`minimum` と の両方、`exclusiveMinimum`または `maximum`と の両方を指定できますが`exclusiveMaximum`、両方を同時に使用することはお勧めしません。

サンプル定義:

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

代替定義:

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

### 文字列
<a name="strings"></a>

文字列タイプは以下をサポートします。
+ `default`値
+ `maxLength` および `minLength`値を含む長さ制約 (負以外の数値である必要があります)
+ `pattern` 正規表現の値

正規表現を定義すると、式が文字列内の任意の場所と一致する場合、文字列は有効です。たとえば、正規表現は、文字列「p」だけでなく、「apple」などの p を含む任意の文字列`p`に一致します。明確にするために、特に理由がない限り、正規表現を `^...$` ( など`^p$`) で囲むことをお勧めします。

サンプル定義:

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

### Null
<a name="nulls"></a>

Null 型は 1 つの値のみを受け入れます。 `null`

サンプル定義:

```
{ "type": "null" }
```

### 配列
<a name="arrays"></a>

配列タイプは以下をサポートします。
+ `default` — デフォルト値として使用されるリスト。
+ `items` — すべての配列要素に適用される JSON 型定義。
+ 長さの制約 (負以外の数値である必要があります)
  + `minItems`
  + `maxItems`
+ `pattern` 正規表現の値
+ `uniqueItems` — 配列内の要素を一意にする必要があるかどうかを示すブール値
+ `prefixItems` — 各項目がドキュメントの配列の各インデックスに対応するスキーマである配列。つまり、最初の要素が入力配列の最初の要素を検証し、2 番目の要素が入力配列の 2 番目の要素を検証する配列などです。

サンプル定義:

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

配列検証の例:

```
//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.
```

タプル検証を使用した代替定義:

```
{
    "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
```

### オブジェクト
<a name="objects"></a>

オブジェクトタイプは以下をサポートします。
+ プロパティの制約
  + `properties` — `properties`キーワードを使用して、オブジェクトのプロパティ (キーと値のペア) を定義します。の値は オブジェクト`properties`で、各キーはプロパティの名前、各値はそのプロパティの検証に使用されるスキーマです。`properties` キーワード内のプロパティ名のいずれにも一致しないプロパティは、このキーワードによって無視されます。
  + `required` — デフォルトでは、 `properties`キーワードで定義されたプロパティは必要ありません。ただし、 `required`キーワードを使用して必要なプロパティのリストを指定できます。`required` キーワードは、0 個以上の文字列の配列を取ります。これらの文字列はそれぞれ一意である必要があります。
  + `propertyNames` — このキーワードにより、プロパティ名の RegEx パターンを制御できます。たとえば、オブジェクトのすべてのプロパティに、特定の規則に従って名前を付けるように強制できます。
  + `patternProperties` — 正規表現をスキーマにマッピングします。プロパティ名が指定された正規表現と一致する場合、プロパティ値は対応するスキーマに対して検証する必要があります。たとえば、 を使用して、特定の種類のプロパティ名を指定して、値が特定のスキーマと一致するように`patternProperties`指定します。
  + `additionalProperties` — このキーワードは、追加のプロパティの処理方法を制御します。追加のプロパティは、プロパティキーワードに名前がリストされていないプロパティ、または の正規表現のいずれかに一致するプロパティです`patternProperties`。デフォルトでは、追加のプロパティが許可されます。このフィールドを に設定する`false`と、追加のプロパティは許可されません。
  + `unevaluatedProperties` — このキーワードは、サブスキーマで宣言されたプロパティを認識できる点`additionalProperties`を除いて、 に似ています。 は、スキーマの処理時に正常に検証されたプロパティを収集し、それらをプロパティの許可されたリストとして使用することで`unevaluatedProperties`機能します。これにより、条件付きでプロパティを追加するなど、より複雑な操作を実行できます。詳細については、以下の例を参照してください。
+ `anyOf` — このキーワードの値は空でない配列である必要があります。配列の各項目は、有効な JSON スキーマである必要があります。インスタンスは、このキーワードの値で定義された*少なくとも* 1 つのスキーマに対して正常に検証された場合、このキーワードに対して正常に検証されます。
+ `oneOf` — このキーワードの値は空でない配列である必要があります。配列の各項目は、有効な JSON スキーマである必要があります。インスタンスは、このキーワードの値で定義された 1 つのスキーマ*に対して*正常に検証された場合、このキーワードに対して正常に検証されます。

必須の例:

```
{
  "type": "object",
  "required": ["test"]
}

// Schema Compliant
{
  "test": 4
}

// NOT Schema Compliant
{}
```

PropertyNames の例:

```
{
  "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 の例:

```
{
  "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 の例:

```
{
  "type": "object",
  "properties": {
    "test": {
        "type": "string"
    }
  },
  "additionalProperties": false
}

// Schema Compliant
{
  "test": "value"
}
OR
{}

// NOT Schema Compliant
{
    "notAllowed": false
}
```

UnevaluatedProperties の例:

```
{
  "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 の例:

```
{
  "anyOf": [
    { "type": "string", "maxLength": 5 },
    { "type": "number", "minimum": 0 }
  ]
}

// Schema Compliant
"short"
12

// NOT Schema Compliant
"too long"
-5
```

OneOf の例:

```
{
  "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.
```

## 名前空間型の定義
<a name="namespaced-type-definitions"></a>

名前空間型定義は、プリミティブ型から構築された型です。これらのタイプは、 `{{namespace}}.{{typename}}.` マネージド統合が `aws` および `matter`名前空間の下に事前定義されたタイプを提供する形式に従う必要があります。予約および名前空間以外のカスタムタイプには、任意の`aws``matter`名前空間を使用できます。

使用可能な名前空間型の定義を見つけるには、`Type`フィルターを に設定して [ListSchemaVersions](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_ListSchemaVersions.html) API を使用します`definition`。

### `matter` タイプ
<a name="matter-types"></a>

フィルターを に設定`matter`し、`Namespace`フィルターを `Type` に設定して [ListSchemaVersions](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_ListSchemaVersions.html) API を使用して`matter`、名前空間でデータ型を検索します`definition`。

### `aws` タイプ
<a name="aws-types"></a>

フィルターを に設定`aws`し、`Namespace`フィルターを `Type` に設定して、[ListSchemaVersions](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_ListSchemaVersions.html) API を使用して`aws`名前空間でデータ型を検索します`definition`。

#### ビットマップタイプ定義
<a name="bitmap-type-definition"></a>

ビットマップには 2 つの必須プロパティがあります。
+ `type` は オブジェクトである必要があります
+ `properties` は、各ビット定義を含むオブジェクトである必要があります。各ビットは、 プロパティ`extrinsicId`と を持つオブジェクトです`value`。各ビットの値は、最小値が 0、最大値が 1 以上の整数である必要があります。

サンプルビットマップ定義:

```
{
    "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
}
```

#### 列挙型の定義
<a name="enum-type-definition"></a>

列挙型には 3 つのプロパティが必要です。
+ `type` は オブジェクトである必要があります
+ `enum` は、少なくとも 1 つの項目を持つ一意の文字列の配列である必要があります
+ `extrinsicIdMap` は、列挙値であるプロパティを持つオブジェクトです。各プロパティの値は、列挙値に対応する外部識別子である必要があります。

列挙型定義の例:

```
{
    "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"
```