Creación y uso de definiciones de tipos en los documentos de esquemas de capacidades - Integraciones gestionadas para AWS IoT Device Management

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Creación y uso de definiciones de tipos en los documentos de esquemas de capacidades

Todos los elementos de los esquemas se resuelven en definiciones de tipos. Estas definiciones de tipos son definiciones de tipos primitivas (como booleanos, cadenas o números) o definiciones de tipos con espacios de nombres (definiciones de tipos creadas a partir de definiciones de tipos primitivas para mayor comodidad).

Al definir un esquema personalizado, puede utilizar tanto definiciones primitivas como definiciones de tipos de espacios de nombres.

Definiciones de tipos primitivos

Las definiciones de tipos primitivas son los componentes básicos de todas las definiciones de tipos definidas en las integraciones gestionadas. Todas las definiciones de espacios de nombres, incluidas las definiciones de tipos personalizadas, se resuelven en una definición de tipo primitiva mediante la $ref palabra clave o la palabra clave. type

Todos los tipos primitivos son anulables con la nullable palabra clave, y usted puede identificar todos los tipos primitivos con la palabra clave. type

Booleanos

Los tipos booleanos admiten valores predeterminados.

Ejemplo de definición:

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

Soporte de tipo entero

Los tipos enteros admiten lo siguiente:

  • Valores default

  • Valores maximum

  • Valores minimum

  • Valores exclusiveMaximum

  • Valores exclusiveMinimum

  • Valores multipleOf

Si x es el valor que se está validando, debe cumplirse lo siguiente:

  • xminimum

  • x > exclusiveMinimum

  • x < exclusiveMaximum

nota

Los números con una parte fraccionaria cero se consideran enteros, pero se rechazan los números de coma flotante.

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

Si bien puede especificar ambos minimum exclusiveMinimum o ambos maximum yexclusiveMaximum, no recomendamos usar ambos simultáneamente.

Ejemplos de definiciones:

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

Definición alternativa:

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

Números

Utilice el tipo de número para cualquier tipo numérico, incluidos los números enteros y los números de punto flotante.

Los tipos de números admiten lo siguiente:

  • Valores default

  • Valores maximum

  • Valores minimum

  • Valores exclusiveMaximum

  • Valores exclusiveMinimum

  • multipleOfvalores. El múltiplo puede ser un número de punto flotante.

Si x es el valor que se está validando, debe cumplirse lo siguiente:

  • xminimum

  • x > exclusiveMinimum

  • x < exclusiveMaximum

Si bien puede especificar ambos minimum exclusiveMinimum o ambos maximum yexclusiveMaximum, no recomendamos usar ambos simultáneamente.

Ejemplos de definiciones:

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

Definición alternativa:

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

Cadenas

Los tipos de cadenas admiten lo siguiente:

  • Valores default

  • restricciones de longitud (deben ser números no negativos), incluidos los valores maxLength y minLength

  • patternvalores para expresiones regulares

Al definir expresiones regulares, la cadena es válida si la expresión coincide con cualquier punto de la cadena. Por ejemplo, la expresión regular p coincide con cualquier cadena que contenga una p, como «manzana», no solo con la cadena «p». Para mayor claridad, te recomendamos que coloques las expresiones regulares entre ^...$ (por ejemplo,^p$), a menos que tengas un motivo específico para no hacerlo.

Ejemplo de definición:

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

Nulos

Los tipos nulos aceptan solo un valor:null.

Ejemplo de definición:

{ "type": "null" }

Matrices

Los tipos de matrices admiten lo siguiente:

  • default— una lista que se utilizará como valor por defecto.

  • items— Definición de tipo JSON impuesta a todos los elementos de la matriz.

  • Restricciones de longitud (debe ser un número no negativo)

    • minItems

    • maxItems

  • patternvalores para Regex

  • uniqueItems— un booleano que indica si los elementos de la matriz deben ser únicos

  • prefixItems— una matriz en la que cada elemento es un esquema que corresponde a cada índice de la matriz del documento. Es decir, una matriz en la que el primer elemento valida el primer elemento de la matriz de entrada, el segundo elemento valida el segundo elemento de la matriz de entrada, etc.

Ejemplo de definición:

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

Ejemplos de validación de matrices:

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

Definición alternativa mediante la validación de tuplas:

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

Objects

Los tipos de objetos admiten lo siguiente:

  • Restricciones de propiedad

    • properties— Defina las propiedades (pares clave-valor) de un objeto mediante la properties palabra clave. El valor de properties es un objeto, donde cada clave es el nombre de una propiedad y cada valor es un esquema utilizado para validar esa propiedad. Esta properties palabra clave ignora cualquier propiedad que no coincida con ninguno de los nombres de propiedad de la palabra clave.

    • required— De forma predeterminada, las propiedades definidas por la properties palabra clave no son obligatorias. Sin embargo, puede proporcionar una lista de las propiedades obligatorias mediante la required palabra clave. La required palabra clave toma una matriz de cero o más cadenas. Cada una de estas cadenas debe ser única.

    • propertyNames— Esta palabra clave permite controlar el RegEx patrón de los nombres de las propiedades. Por ejemplo, puede que desee exigir que todas las propiedades de un objeto tengan nombres que sigan una convención específica.

    • patternProperties— Esto asigna las expresiones regulares a los esquemas. Si el nombre de una propiedad coincide con la expresión regular dada, el valor de la propiedad debe validarse con el esquema correspondiente. Por ejemplo, se utiliza patternProperties para especificar que un valor debe coincidir con un esquema concreto, dado un tipo concreto de nombre de propiedad.

    • additionalProperties— Esta palabra clave controla cómo se gestionan las propiedades adicionales. Las propiedades adicionales son propiedades cuyos nombres no aparecen en la palabra clave properties o que coinciden con alguna de las expresiones regulares que contienepatternProperties. De forma predeterminada, se permiten propiedades adicionales. Si se establece este campo en, false significa que no se permiten propiedades adicionales.

    • unevaluatedProperties— Esta palabra clave es similar, additionalProperties excepto en que puede reconocer las propiedades declaradas en los subesquemas. unevaluatedPropertiesfunciona recopilando todas las propiedades que se hayan validado correctamente al procesar los esquemas y utilizarlas como lista de propiedades permitidas. Esto le permite hacer cosas más complejas, como añadir propiedades de forma condicional. Consulte el ejemplo siguiente para obtener más información.

  • anyOf— El valor de esta palabra clave DEBE ser una matriz no vacía. Cada elemento de la matriz DEBE ser un esquema JSON válido. Una instancia se valida correctamente con esta palabra clave si se valida correctamente con al menos un esquema definido por el valor de esta palabra clave.

  • oneOf— El valor de esta palabra clave DEBE ser una matriz no vacía. Cada elemento de la matriz DEBE ser un esquema JSON válido. Una instancia se valida correctamente con esta palabra clave si se valida correctamente con exactamente un esquema definido por el valor de esta palabra clave.

Ejemplo de obligatorio:

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

PropertyNames ejemplo:

{ "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 ejemplo:

{ "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 ejemplo:

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

UnevaluatedProperties ejemplo:

{ "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 ejemplo:

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

OneOf ejemplo:

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

Definiciones de tipos de espacios de nombres

Las definiciones de tipos de espacios de nombres son tipos creados a partir de tipos primitivos. Estos tipos deben seguir el formato que namespace.typename. Managed Integrations proporciona tipos predefinidos en los aws espacios de nombres y. matter Puede usar cualquier espacio de nombres para los tipos personalizados, excepto los espacios de nombres reservados y los espacios de nombres. aws matter

Para encontrar las definiciones de tipos de espacios de nombres disponibles, usa la ListSchemaVersionsAPI con el filtro configurado en. Type definition

Tipos de matter

Busque los tipos de datos en el espacio de matter nombres mediante la ListSchemaVersionsAPI con el Namespace filtro establecido en matter y el Type filtro establecido en. definition

Tipos de aws

Busque los tipos de datos en el espacio de aws nombres mediante la ListSchemaVersionsAPI con el Namespace filtro establecido en aws y el Type filtro establecido en. definition

Definición del tipo de mapa de bits

Los mapas de bits tienen dos propiedades obligatorias:

  • typedebe ser un objeto

  • propertiesdebe ser un objeto que contenga la definición de cada bit. Cada bit es un objeto con propiedades extrinsicId yvalue. El valor de cada bit debe ser un número entero con un valor mínimo de 0 y un valor máximo de al menos 1.

Ejemplo de definición de mapa de bits:

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

Definición de tipo de enumeración

Las enumeraciones requieren tres propiedades:

  • typedebe ser un objeto

  • enumdebe ser una matriz de cadenas únicas, con un mínimo de un elemento

  • extrinsicIdMapes un objeto con propiedades que son los valores de enumeración. El valor de cada una de las propiedades debe ser el identificador extrínseco que corresponde al valor de enumeración.

Ejemplo de definición de enumeración:

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