Saltar al contenido

¿Cuál es la diferencia entre “anyof” y “oneof” en el esquema z?

Nuestros investigadores estrellas agotaron sus provisiones de café, investigando diariamente por la respuesta, hasta que Linda encontró la respuesta en Bitbucket así que ahora la comparte aquí.

Solución:

Si observa la documentación del esquema JSON, dice:

5.5.4. cualquiera de

5.5.4.1. Valores válidos

El valor de esta palabra clave DEBE ser un array. Este array DEBE tener al menos un elemento.

elementos de la array DEBEN ser objetos. Cada objeto DEBE ser un esquema JSON válido.

5.5.4.2. Condiciones para una validación exitosa

Una instancia se valida con éxito con esta palabra clave si se valida con éxito con al menos un esquema definida por el valor de esta palabra clave.

5.5.5. uno de

5.5.5.1. Valores válidos

El valor de esta palabra clave DEBE ser un array. Este array DEBE tener al menos un elemento.

elementos de la array DEBEN ser objetos. Cada objeto DEBE ser un esquema JSON válido.

5.5.5.2. Condiciones para una validación exitosa

Una instancia se valida con éxito con esta palabra clave si se valida con éxito con exactamente un esquema definida por el valor de esta palabra clave.

Tenga en cuenta mi énfasis en lo anterior. anyOf significa que el artículo debe validarse contra al menos uno (pero posiblemente más de uno) de los esquemas. oneOf significa que debe validar contra solo uno de los esquemas.

Llegué tarde en la búsqueda, pero según tengo entendido, el uso de esta palabra clave depende del tipo de objeto/padre en sí. por ejemplo, si está tratando de definir el tipo para una sola propiedad del objeto o el elemento de un array. tome el siguiente ejemplo:


    "title": "Sample JSON Schema",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "definitions": 
        "propObjectType1" : 
            "name": "string",
            "age": "number"
        ,
        "propObjectType2" : 
            "name": "string",
            "dob": 
                "type": "string",
                "pattern": "\d\d/\d\d/\d\d\d\d"
            
        
    ,
    "properties": 
        "prop1": 
            "type": "string",
            "maxLength": 64
        ,
        "prop2": 
            "anyOf": [
                
                    "$ref": "#/definitions/propObjectType1"
                ,
                
                    "$ref": "#/definitions/propObjectType2"
                
            ] 
        ,
        "prop3": 
            "oneOf": [
                
                    "$ref": "#/definitions/propObjectType1"
                ,
                
                    "$ref": "#/definitions/propObjectType2"
                
            ] 
        ,
        "prop4Array": 
            "type": "array",
            "items": 
                "oneOf": [
                    
                        "$ref": "#/definitions/propObjectType1"
                    ,
                    
                        "$ref": "#/definitions/propObjectType2"
                    
                ] 
                   
        ,
        "prop5Array": 
            "type": "array",
            "items": 
                "anyOf": [
                    
                        "$ref": "#/definitions/propObjectType1"
                    ,
                    
                        "$ref": "#/definitions/propObjectType2"
                    
                ] 
                   
        
    

Entonces, en la definición anterior, prop2 y prop3 son iguales (puede usar indistintamente anyOf o oneOf) y puedes definir con qué te sientes cómodo. pero, en caso de array:

  1. cuando usas anyOf para el tipo de artículos, los elementos pueden ser de cualquier tipo y el array puede contener el mixed artículos. Significa que puede tener un artículo de tipo 1 y otro artículo de tipo 2.
  2. cuando usas oneOf para el tipo de artículos, los elementos pueden ser de cualquier tipo y el array puede contener sólo un tipo de elementos. Significa que todos los artículos deben ser del mismo tipo (ya sea tipo 1 o tipo 2).

Te mostramos reseñas y calificaciones

Si te ha sido de provecho nuestro artículo, sería de mucha ayuda si lo compartes con el resto entusiastas de la programación y nos ayudes a dar difusión a nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *