Altova XMLSpy 2024 Professional Edition 

Los objetos se delimitan con llaves y asignan una clave a un valor, por ejemplo: "MiClave": Valor. La clave debe ser siempre una cadena de texto y, por tanto, debe ir entre comillas. El valor puede ser cualquier tipo de datos JSON. Cada par clave:valor se conoce como propiedad del objeto (imagen siguiente).

 

Aquí puede ver un objeto con instancias que tiene tres propiedades:

 

{

"emailtype": "home",

"emailaddress": "contact01.home@altova.com",

"citycode": 22

}

 

El esquema para este objeto sería más o menos este:

 

JSONObject01

 

Debe tener en cuenta estos aspectos:

 

Cada propiedad debe estar presente en la instancia. Si es así, la propiedad tiene un borde sólido. Si una propiedad es opcional, el borde es una línea discontinua. Puede definir si la propiedad es obligatoria u opcional con los comandos del menú contextual de la propiedad o desde el ayudante de entrada Detalles.

El orden en que deben aparecer las propiedades en la instancia no se puede definir en el esquema. Esto significa que el orden en el que se definen las propiedades en el esquema es totalmente irrelevante.

El símbolo con un cuadrado azul entre llaves significa que se trata de una propiedad (en lugar de una propiedad de patrón o comodín de propiedad, que tienen otros símbolos).

El tipo de una propiedad se puede editar haciendo doble clic en el tipo en el diagrama de la Vista de diseño y seleccionando una opción en la lista desplegable. También puede seleccionar el tipo en el ayudante de entrada Detalles.

El valor de restricción de la propiedad emailaddress se define en el ayudante de entrada Restricciones.

 

Propiedades, propiedades de patrón, comodines de propiedad y esquemas de nombre de propiedad

Un objeto puede tener propiedades, propiedades de patrón, comodines de propiedad y esquemas de nombre de propiedad (nuevos en el draft-07). Estos elementos se añaden al objeto desde los menús contextuales (i) del objeto, (ii) del recuadro amarillo de la propiedad (haciendo clic con el botón derecho en el título del recuadro) y (iii) de cada propiedad. Ya hemos descrito los aspectos más importantes de las propiedades. Ahora vamos a describir las propiedades de patrón y los comodines de propiedad.

 

Propiedad de patrón

Una propiedad de patrón (imagen siguiente) define el nombre de la propiedad con una expresión regular. En la imagen siguiente, por ejemplo, la expresión regular indica que la propiedad (i) debe tener un nombre que empiece con un guión bajo y (ii) debe tener como valor un booleano. Las propiedades de patrón no necesitan restricciones y puede añadir tantas propiedades de patrón como quiera. Observe que el símbolo de las propiedades de patrón es {^\$}.

 

JSONObjectPatternProp01

 

Comodín de propiedad

Un comodín de propiedad (imagen siguiente) especifica que además de las propiedades del conjunto de propiedades del objeto pueden darse además un número concreto de propiedades. El comodín puede definir el tipo que deben tener estas propiedades. Por ejemplo, en la imagen siguiente, el comodín de propiedad define que las propiedades pueden tener cualquier nombre pero deben tener valores numéricos. Por cada objeto solo puede haber un comodín de propiedad. Sin embargo, si el comodín tiene el tipo Cualquiera, entonces podrá definir restricciones para cada tipo en el ayudante de entrada Restricciones. Observe que el símbolo de los comodines de propiedad es {*}.

 

JSONObjectPropertyWildcard

 

A partir del borrador draft-2019-09 los comodines de propiedad tienen una palabra nueva, unevaluatedProperties, que se procesa solamente si falta la palabra clave additionalProperties. Los valores de estas dos palabras clave se producen seleccionando los valores apropiados para las entradas Especificado, Se aplica a y Tipo en el ayudante de entradas Detalles (imagen siguiente).

JSONSchemaWildcardDetails

En la tabla siguiente puede ver qué efectos tienen las palabras clave unevaluatedProperties y additionalProperties (y viceversa, es decir, el efecto que la palabra clave tiene en los valores del ayudante de entrada del editor). La configuración de la imagen anterior, por ejemplo, sería unevaluatedProperties=true.

 

addtionalProperties

unevaluatedProperties

 

Especificado

Se aplica a

Tipo

--

--

<=>

false

Todos

Libre

true

omitido

<=>

true

Todos

Libre

false

omitido

<=>

--

--

--

Schema

omitido

<=>

true

Todos

Tipo de esquema

--

true

<=>

true

Sin evaluar

Libre

--

false

<=>

true

Sin evaluar

Prohibido

--

Schema

<=>

true

Sin evaluar

Libre

 

Tenga en cuenta que:

 

Si addtionalProperties y unevaluatedProperties están presentes, unevaluatedProperties se omite.

Especificado=false solo funciona con Alcance=Todos y Tipo=Libre.

 

Esquema de nombre de propiedad

Un esquema de nombre de propiedad (imagen siguiente) limita los nombres de las propiedades de ese un objeto en cuestión. (Esta opción es nueva en draft-07). Por ejemplo, en la imagen siguiente podemos ver que los nombres de las propiedades deben ser cadenas de texto. También podemos indicar otras limitaciones para esta propiedad con el ayudante de entrada Restricciones: por ejemplo, que el nombre de la propiedad esté dentro de cierta longitud de caracteres o que siga un patrón en concreto.

 

JSONObjectPropertyNamesSchema

 

Nota:no se puede configurar un mínimo ni un máximo de repeticiones para las propiedades de patrón ni para los comodines de propiedad. Consulte el párrafo siguiente para obtener más información.

 

Cómo se validan las propiedades

Cuando en una instancia se encuentra una propiedad, la aplicación la valida de esta manera:

 

1.Se compara el nombre que tiene la propiedad en el esquema con todas las propiedades con nombre del objeto.

2.Si no hay coincidencias, el nombre se compara con todas las propiedades de patrón del conjunto de propiedades del objeto.

3.Si sigue sin haber coincidencias, entonces se invoca el comodín (si lo hay).

4.Si aún así no hay coincidencias, se emite un error de validación. Si el nombre coincide con una propiedad o una propiedad de patrón (o si existe un comodín), entonces se compara el valor con el valor de la definición de propiedad correspondiente.

5.Si el valor de instancia coincide con el tipo y las restricciones de la definición de propiedad correspondiente, entonces se considera que la propiedad es válida. De lo contrario, la propiedad no es válida.

 

Ejemplo

En el ejemplo de la imagen se define un objeto que:

 

debe tener tres propiedades llamadas emailtype, emailaddress y citycode  

puede tener una propiedad o más cuyo nombre empiece con un guión bajo y cuyo valor sea un booleano (consulte la propiedad de patrón de la imagen)

puede tener una propiedad adicional o más cuyo nombre y valor puede ser cualquiera

JSONObjectExample

 

© 2017-2023 Altova GmbH