Esquema JSON para imponer contenidos de matriz

Hola a todos y gracias de antemano.

Estoy intentando crear un esquema JSON para imponer una matriz que contenga un objeto A y B y objetos N C, donde A y B son objetos C y N es un número entero inclusive entre 0 e infinito.

Para eso

[A, B] [A, B, C1] [A, B, C1, .., CN]

Son todosválido, aunque :

[A] [A, C1] [A, C1, .., CN]

Sonno es válido.

Para dejar en claro, A y B deben estar presentes. Los objetos C son opcionales, aunque puede tener tantos como desee.

Esquemas de objeto C:


{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "C Object",

  "type": "object",
  "required": ["id", "name"],

  "properties": {
    "id": {
      "type": "integer"
    },
    "name": {
      "type": "string"
    }
  },
  "additionalProperties": false
}

Por lo tanto, un objeto C es cualquier objeto JSON válido que contiene solo las propiedades "id" y "name", donde "id" es un entero y "name" es una cadena.

Esquemas de objetos A y B:


{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "A Object",

  "type": "object",
  "required": ["id", "name"],

  "properties": {
    "id": {
      "type": "integer"
    },
    "name": {
      "type": "string",
      "enum": ["A"]
    }
  },
  "additionalProperties": false
}

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "B Object",

  "type": "object",
  "required": ["id", "name"],

  "properties": {
    "id": {
      "type": "integer"
    },
    "name": {
      "type": "string",
      "enum": ["B"]
    }
  },
  "additionalProperties": false
}

Los objetos A y B difieren de los objetos C en que allí se aplica el valor de nombre. El valor del nombre de un objeto A debe ser un valor contenido en la enumeración del campo, donde la enumeración contiene un solo valor.

Mi esquema más completo hasta la fecha es:


{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "To Date Solution",
  "description": "So far this is the most complete attempt at enforcing values to be contained within a JSON structure using JSON schemas.",

  "type": "array"
  "items": {
    "allOf": [
      {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "title": "C Object",

        "type": "object",
        "required": ["id", "name"],

        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    ]
  }
}

Esto obliga a que todos los objetos contenidos dentro sean del tipo C, que son A y B, aunque no estoy seguro de cómo imponer que al menos una única instancia de A y B esté contenida dentro de mi matriz.

Respuestas a la pregunta(2)

Su respuesta a la pregunta